diff --git a/Assets/Bathroom/Mirror.fbx b/Assets/Bathroom/Mirror.fbx
deleted file mode 100644
index 296d1b73..00000000
--- a/Assets/Bathroom/Mirror.fbx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ae7e83189f22856fc1d5530bacb9e371073ad5d42837269567c7b75744fc5dc
-size 26144
diff --git a/Assets/Bathroom/Mirror_Low.fbx b/Assets/Bathroom/Mirror_Low.fbx
new file mode 100644
index 00000000..55b18d67
--- /dev/null
+++ b/Assets/Bathroom/Mirror_Low.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2c5ac907b03cc7f6e3e5359ead84106581b92138b7b5049957efc327f95ecdcd
+size 39520
diff --git a/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_BaseColor.tga b/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_BaseColor.tga
new file mode 100644
index 00000000..22f5e097
--- /dev/null
+++ b/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_BaseColor.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f777efb718afeefa8a00cba0cbbf654199389db5f2185e361512e2f886752e57
+size 12582956
diff --git a/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_Normal.tga b/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_Normal.tga
new file mode 100644
index 00000000..4e997111
--- /dev/null
+++ b/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_Normal.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46a4a372ccc5b518fdd0b6d609cab44f8a70bfa7a0f5985651b36f61c033cee1
+size 12582956
diff --git a/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_OcclusionRoughnessMetallic.tga b/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_OcclusionRoughnessMetallic.tga
new file mode 100644
index 00000000..a3ab0045
--- /dev/null
+++ b/Assets/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_OcclusionRoughnessMetallic.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2f6fcb2343ef18fd49a52c8328a638761a5ddfb9065098da4c6a4dca4b51e42c
+size 12582956
diff --git a/Assets/Bathroom/SM_Toilet.fbx b/Assets/Bathroom/SM_Toilet.fbx
deleted file mode 100644
index a9dc483b..00000000
--- a/Assets/Bathroom/SM_Toilet.fbx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0a69fdd9b76453426a20e406f1e5cb2361eace74c4f9f9ed27644252f8ae8600
-size 219584
diff --git a/Assets/Bathroom/Shower_Export.fbx b/Assets/Bathroom/Shower_Export.fbx
deleted file mode 100644
index 080af4e7..00000000
--- a/Assets/Bathroom/Shower_Export.fbx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ced75f4d00b18c33e56aaed43a1b18911c6367c9f1d106827c7fc82b321f147e
-size 87904
diff --git a/Assets/Bathroom/Shower_Low.fbx b/Assets/Bathroom/Shower_Low.fbx
new file mode 100644
index 00000000..6eaa766c
--- /dev/null
+++ b/Assets/Bathroom/Shower_Low.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aad1d94b8a5c4c5b8faec549a46e2a6f85d35b36f5fcf2e3d0b5793b8a1c348e
+size 88800
diff --git a/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_BaseColor.tga b/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_BaseColor.tga
new file mode 100644
index 00000000..33851c90
--- /dev/null
+++ b/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_BaseColor.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9b873dce09fa7cdc750558965b45fbee9842a901b5650f01f60e1bf89aa48c0
+size 3145772
diff --git a/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_Normal.tga b/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_Normal.tga
new file mode 100644
index 00000000..6e30a354
--- /dev/null
+++ b/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_Normal.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:03882fd0a6fd4c8fc127908e7bb94ab993c0165384c56bb967d9d82260d9b88f
+size 3145772
diff --git a/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_OcclusionRoughnessMetallic.tga b/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_OcclusionRoughnessMetallic.tga
new file mode 100644
index 00000000..11ef1c2e
--- /dev/null
+++ b/Assets/Bathroom/Shower_Texture/Shower_Low_standardSurface5_OcclusionRoughnessMetallic.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:27a19e4619ae577f83c2b0f89a0aecaa2aaf6814b0fce441dcd2736b2482eb62
+size 3145772
diff --git a/Assets/Bathroom/Sink_Export.fbx b/Assets/Bathroom/Sink_Export.fbx
deleted file mode 100644
index 508bda17..00000000
--- a/Assets/Bathroom/Sink_Export.fbx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:519863d2f09c704b853a3ad7ccc570d4e0d98d2174cac75abc85da24ab56ffae
-size 49136
diff --git a/Assets/Bathroom/Sink_Low.fbx b/Assets/Bathroom/Sink_Low.fbx
new file mode 100644
index 00000000..9ef1f016
--- /dev/null
+++ b/Assets/Bathroom/Sink_Low.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8bbbf50851f47113599c4b5a09d14974f96e6c0f57243c85e77917b87aa59e01
+size 60720
diff --git a/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_BaseColor.tga b/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_BaseColor.tga
new file mode 100644
index 00000000..bc973cdb
--- /dev/null
+++ b/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_BaseColor.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:66a774c1cad9d092de817f31a2b3955a6478bca152f8506940034b60facc59d0
+size 12582956
diff --git a/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_Normal.tga b/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_Normal.tga
new file mode 100644
index 00000000..29437b0a
--- /dev/null
+++ b/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_Normal.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78afd4c568c690b0d133133c97d23386c73331f111ac5ffc747b5ff026631abc
+size 12582956
diff --git a/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_OcclusionRoughnessMetallic.tga b/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_OcclusionRoughnessMetallic.tga
new file mode 100644
index 00000000..0c5537cb
--- /dev/null
+++ b/Assets/Bathroom/Sink_Texture/Sink_Low_lambert1_OcclusionRoughnessMetallic.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be513bfe6a9b9b08a0a34a5232879fa5c1f03d8e235d877bc77fc0b4c2c7f4ca
+size 12582956
diff --git a/Assets/Bathroom/Tap_Export.fbx b/Assets/Bathroom/Tap_Export.fbx
deleted file mode 100644
index 65c4831f..00000000
--- a/Assets/Bathroom/Tap_Export.fbx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e1c3f1fcdc7a7f674a7b31cad7c030e791b89ec6e39c190ecd9afc338a1d8146
-size 31616
diff --git a/Assets/Bathroom/Tap_Low.fbx b/Assets/Bathroom/Tap_Low.fbx
new file mode 100644
index 00000000..5898aa6f
--- /dev/null
+++ b/Assets/Bathroom/Tap_Low.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5310b4f29ba2cdea86c63dc5fd89f0b60422983eb03a7ec63b0e6c4bcbc681f
+size 33888
diff --git a/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_BaseColor.tga b/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_BaseColor.tga
new file mode 100644
index 00000000..b5121923
--- /dev/null
+++ b/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_BaseColor.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:761abb042818da226b4155f8679784921f4d11a9c0167a1bfa748f7f594d7506
+size 786476
diff --git a/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_Normal.tga b/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_Normal.tga
new file mode 100644
index 00000000..6aeb5c73
--- /dev/null
+++ b/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_Normal.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87155330cc1272ad12fba099f97e39afcc3a269e5e031ca1912a1459bfe60e3a
+size 786476
diff --git a/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_OcclusionRoughnessMetallic.tga b/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_OcclusionRoughnessMetallic.tga
new file mode 100644
index 00000000..2db3dbe2
--- /dev/null
+++ b/Assets/Bathroom/Tap_Texture/Tap_Low_lambert1_OcclusionRoughnessMetallic.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf330887004a027bff89ce668d4e4a941f3551e19c4ad528238055c29e4e166a
+size 786476
diff --git a/Assets/Bathroom/Toilet_Low.fbx b/Assets/Bathroom/Toilet_Low.fbx
new file mode 100644
index 00000000..50020fe0
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Low.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72213fff78e765dc648357876d2465570797d6db2e7312f99123c6ff32e83022
+size 174192
diff --git a/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_BaseColor.tga b/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_BaseColor.tga
new file mode 100644
index 00000000..b7c57c0a
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_BaseColor.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31a2702bb8705701eb548fd795559b7824ae35af407cbca5c74b1225c41af932
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_Normal.tga b/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_Normal.tga
new file mode 100644
index 00000000..0d1f4617
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_Normal.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d437568028b64e4a9307b9685fb0c71b4416d06819df5462fe2573571a327844
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_OcclusionRoughnessMetallic.tga b/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_OcclusionRoughnessMetallic.tga
new file mode 100644
index 00000000..2afe8016
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_OcclusionRoughnessMetallic.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a5cc17789393c4638dc501a408d6c170222756c02e94da89188cdcf923a8cc7
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_BaseColor.tga b/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_BaseColor.tga
new file mode 100644
index 00000000..acde7791
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_BaseColor.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eeaa7f71d9f315f925a7b3d18b71829448c458e1e9381ff3771005fa571ad678
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_Normal.tga b/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_Normal.tga
new file mode 100644
index 00000000..92befb7a
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_Normal.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea8762201981053fe83671780654fa00ed69699203f344cf9cf0d499ffc29110
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_OcclusionRoughnessMetallic.tga b/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_OcclusionRoughnessMetallic.tga
new file mode 100644
index 00000000..3e325072
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_OcclusionRoughnessMetallic.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81498ba6c9a0edc51da1ea012cf01dfb6a2e306cea273298bea8a545d2ea4846
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_BaseColor.tga b/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_BaseColor.tga
new file mode 100644
index 00000000..f1c33dcc
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_BaseColor.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6fdc1c153874191cd11e62e9bc7501eee2b1bc2d15a0aa06fecd3a3c31e2bb36
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_Normal.tga b/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_Normal.tga
new file mode 100644
index 00000000..c1d24bc7
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_Normal.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41647aaef747bd6b724f95dfb8d1475eda43e172754971022a59041814e8b658
+size 3145772
diff --git a/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_OcclusionRoughnessMetallic.tga b/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_OcclusionRoughnessMetallic.tga
new file mode 100644
index 00000000..10056e4b
--- /dev/null
+++ b/Assets/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_OcclusionRoughnessMetallic.tga
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8eb3e8464aadb013d54cd8f405f057c888b8cf84e42228a884d8506c732d7ba
+size 3145772
diff --git a/Assets/Materials/Concrete/Plane_lambert1_BaseColor.png b/Assets/Materials/Concrete/Plane_lambert1_BaseColor.png
new file mode 100644
index 00000000..175e19a1
--- /dev/null
+++ b/Assets/Materials/Concrete/Plane_lambert1_BaseColor.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc09a1bdb8ffbfc033b66c10f81d5e8871dc264f11a32abe646072934729af29
+size 3171816
diff --git a/Assets/Materials/Concrete/Plane_lambert1_Normal.png b/Assets/Materials/Concrete/Plane_lambert1_Normal.png
new file mode 100644
index 00000000..c9f0b81e
--- /dev/null
+++ b/Assets/Materials/Concrete/Plane_lambert1_Normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da1e6f0f33250eee0da1f1c794618df38c1abdada57406f9ac10945daf9086dd
+size 8179024
diff --git a/Assets/Materials/Concrete/Plane_lambert1_OcclusionRoughnessMetallic.png b/Assets/Materials/Concrete/Plane_lambert1_OcclusionRoughnessMetallic.png
new file mode 100644
index 00000000..9e89f5cd
--- /dev/null
+++ b/Assets/Materials/Concrete/Plane_lambert1_OcclusionRoughnessMetallic.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:371785799e43d76f48899ef5b50d846523b35234477e179356a3d8401a2c3119
+size 16901
diff --git a/Assets/Pistol/SM_Handgun_Untextured.fbx b/Assets/Pistol/SM_Handgun_Untextured.fbx
new file mode 100644
index 00000000..a10ba56f
--- /dev/null
+++ b/Assets/Pistol/SM_Handgun_Untextured.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9533245388b85aae89d826acdde97036b572a215f8f1956f32d01fcbc911c4d3
+size 195792
diff --git a/Assets/living room/sofa_02.fbx b/Assets/living room/sofa_02.fbx
new file mode 100644
index 00000000..8b053d68
--- /dev/null
+++ b/Assets/living room/sofa_02.fbx
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c6d7d17e2230df9c48e705d7b0b464c649cc9f4f4b0d4ded7a270b2c1ede43ea
+size 90208
diff --git a/Assets/living room/textures/sofa_02_standardSurface1_BaseColor.png b/Assets/living room/textures/sofa_02_standardSurface1_BaseColor.png
new file mode 100644
index 00000000..27bdbfa2
--- /dev/null
+++ b/Assets/living room/textures/sofa_02_standardSurface1_BaseColor.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49e4044f22e0e5aba1357e35cd14b6666d611823ab6f513dd85b9f069daaaed4
+size 426869
diff --git a/Assets/living room/textures/sofa_02_standardSurface1_Height.png b/Assets/living room/textures/sofa_02_standardSurface1_Height.png
new file mode 100644
index 00000000..0cce4178
--- /dev/null
+++ b/Assets/living room/textures/sofa_02_standardSurface1_Height.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3fd7275cd843168965db31b598795f69d08215bbb623a0548c2262e7f8b4a290
+size 66799
diff --git a/Assets/living room/textures/sofa_02_standardSurface1_Metallic.png b/Assets/living room/textures/sofa_02_standardSurface1_Metallic.png
new file mode 100644
index 00000000..b118da0f
--- /dev/null
+++ b/Assets/living room/textures/sofa_02_standardSurface1_Metallic.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:440acb2cd8223b3197a08cd98ed56371d8d1a6625bec8a741fb0899b1bb175e3
+size 5316
diff --git a/Assets/living room/textures/sofa_02_standardSurface1_Normal.png b/Assets/living room/textures/sofa_02_standardSurface1_Normal.png
new file mode 100644
index 00000000..ff19573c
--- /dev/null
+++ b/Assets/living room/textures/sofa_02_standardSurface1_Normal.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:66b6a9188ceb443672efab03f13cdda13e45408b63d9461dd2e7de9384a01c2c
+size 818776
diff --git a/Assets/living room/textures/sofa_02_standardSurface1_Roughness.png b/Assets/living room/textures/sofa_02_standardSurface1_Roughness.png
new file mode 100644
index 00000000..c177bfe6
--- /dev/null
+++ b/Assets/living room/textures/sofa_02_standardSurface1_Roughness.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb440cd941266ae67427c68926c36847c5f6b578b4ff170063ea2012f6262735
+size 426035
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/.gitignore b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/.gitignore
deleted file mode 100644
index 95cd3c44..00000000
--- a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/.idea.EndlessVendetta.iml
-/contentModel.xml
-/modules.xml
-/projectSettingsUpdater.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/discord-ij.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/discord-ij.xml
deleted file mode 100644
index b2c4e3f1..00000000
--- a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/discord-ij.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/encodings.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/encodings.xml
deleted file mode 100644
index df87cf95..00000000
--- a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/indexLayout.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/indexLayout.xml
deleted file mode 100644
index 7b08163c..00000000
--- a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/indexLayout.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/vcs.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/vcs.xml
deleted file mode 100644
index 6c0b8635..00000000
--- a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/.gitignore b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/.gitignore
deleted file mode 100644
index f4076847..00000000
--- a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Rider ignored files
-/projectSettingsUpdater.xml
-/contentModel.xml
-/.idea.EndlessVendetta.iml
-/modules.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/misc.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/misc.xml
similarity index 100%
rename from EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/misc.xml
rename to EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/misc.xml
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/projectSettingsUpdater.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/projectSettingsUpdater.xml
new file mode 100644
index 00000000..4bb9f4d2
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/projectSettingsUpdater.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/workspace.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/workspace.xml
new file mode 100644
index 00000000..18b2937a
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/workspace.xml
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EndlessVendetta/Config/DefaultEngine.ini b/EndlessVendetta/Config/DefaultEngine.ini
index a3178012..43b2de20 100644
--- a/EndlessVendetta/Config/DefaultEngine.ini
+++ b/EndlessVendetta/Config/DefaultEngine.ini
@@ -36,6 +36,7 @@
+Profiles=(Name="Vehicle",CollisionEnabled=QueryAndPhysics,bCanModify=False,ObjectTypeName="Vehicle",CustomResponses=,HelpMessage="Vehicle object that blocks Vehicle, WorldStatic, and WorldDynamic. All other channels will be set to default.")
+Profiles=(Name="UI",CollisionEnabled=QueryOnly,bCanModify=False,ObjectTypeName="WorldDynamic",CustomResponses=((Channel="WorldStatic",Response=ECR_Overlap),(Channel="Pawn",Response=ECR_Overlap),(Channel="Visibility"),(Channel="WorldDynamic",Response=ECR_Overlap),(Channel="Camera",Response=ECR_Overlap),(Channel="PhysicsBody",Response=ECR_Overlap),(Channel="Vehicle",Response=ECR_Overlap),(Channel="Destructible",Response=ECR_Overlap)),HelpMessage="WorldStatic object that overlaps all actors by default. All new custom channels will use its own default response. ")
+Profiles=(Name="Projectile",CollisionEnabled=QueryOnly,bCanModify=True,ObjectTypeName="Projectile",CustomResponses=,HelpMessage="Preset for projectiles")
++Profiles=(Name="Vault",CollisionEnabled=QueryOnly,bCanModify=True,ObjectTypeName="Pawn",CustomResponses=((Channel="Visibility",Response=ECR_Ignore),(Channel="Camera",Response=ECR_Ignore)),HelpMessage="Needs description")
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False,Name="Projectile")
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False,Name="Waypoint")
+EditProfiles=(Name="Trigger",CustomResponses=((Channel="Projectile",Response=ECR_Ignore)))
@@ -59,7 +60,7 @@
+CollisionChannelRedirects=(OldName="PawnMovement",NewName="Pawn")
[/Script/EngineSettings.GameMapsSettings]
-EditorStartupMap=/Game/Levels/TrainingFacility.TrainingFacility
+EditorStartupMap=/Game/Levels/ControlTutorialLevel.ControlTutorialLevel
LocalMapOptions=
TransitionMap=None
bUseSplitscreen=True
@@ -67,8 +68,8 @@ TwoPlayerSplitscreenLayout=Horizontal
ThreePlayerSplitscreenLayout=FavorTop
FourPlayerSplitscreenLayout=Grid
bOffsetPlayerGamepadIds=False
-GameInstanceClass=/Script/Engine.GameInstance
-GameDefaultMap=/Game/Levels/TrainingFacility.TrainingFacility
+GameInstanceClass=/Script/EndlessVendetta.EVGameInstance
+GameDefaultMap=/Game/Levels/ControlTutorialLevel.ControlTutorialLevel
ServerDefaultMap=/Engine/Maps/Entry.Entry
GlobalDefaultGameMode=/Script/EndlessVendetta.EndlessVendettaGameMode
GlobalDefaultServerGameMode=None
@@ -128,6 +129,7 @@ AppliedDefaultGraphicsPerformance=Maximum
+ActiveClassRedirects=(OldClassName="TP_FirstPersonProjectile",NewClassName="EndlessVendettaProjectile")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonGameMode",NewClassName="EndlessVendettaGameMode")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonCharacter",NewClassName="EndlessVendettaCharacter")
+AssetManagerClassName=/Script/VaultIt.VIAssetManager
[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings]
bEnablePlugin=True
diff --git a/EndlessVendetta/Config/DefaultGame.ini b/EndlessVendetta/Config/DefaultGame.ini
index 90035037..224486bc 100644
--- a/EndlessVendetta/Config/DefaultGame.ini
+++ b/EndlessVendetta/Config/DefaultGame.ini
@@ -99,8 +99,8 @@ bSkipMovies=False
-IniSectionDenylist=StorageServers
+IniSectionDenylist=HordeStorageServers
+IniSectionDenylist=StorageServers
-+MapsToCook=(FilePath="/Game/Levels/TrainingFacility")
-+MapsToCook=(FilePath="/Game/Levels/NewMiamiTemp")
++MapsToCook=(FilePath="/Game/Levels/ControlTutorialLevel")
++MapsToCook=(FilePath="/Game/Levels/Apartment_hit")
+DirectoriesToAlwaysCook=(Path="/Interchange/Functions")
+DirectoriesToAlwaysCook=(Path="/Interchange/gltf")
+DirectoriesToAlwaysCook=(Path="/Interchange/Materials")
diff --git a/EndlessVendetta/Config/DefaultGameplayTags.ini b/EndlessVendetta/Config/DefaultGameplayTags.ini
new file mode 100644
index 00000000..283178ec
--- /dev/null
+++ b/EndlessVendetta/Config/DefaultGameplayTags.ini
@@ -0,0 +1,16 @@
+[/Script/GameplayTags.GameplayTagsSettings]
+ImportTagsFromConfig=True
+WarnOnInvalidTags=True
+ClearInvalidTags=False
+AllowEditorTagUnloading=True
+AllowGameTagUnloading=False
+FastReplication=True
+InvalidTagCharacters="\"\',"
++CommonlyReplicatedTags=State.Vaulting
++CommonlyReplicatedTags=State.VaultingRemoval
+NumBitsForContainerSize=6
+NetIndexFirstBitSegment=16
++GameplayTagList=(Tag="Ability.Vault",DevComment="")
++GameplayTagList=(Tag="State.Vaulting",DevComment="")
++GameplayTagList=(Tag="State.VaultingRemoval",DevComment="")
+
diff --git a/EndlessVendetta/Content/Assets/Blockout/Cube.uasset b/EndlessVendetta/Content/Assets/Blockout/Cube.uasset
new file mode 100644
index 00000000..5a45f55a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Blockout/Cube.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:abadc5f19a415cbe69d23c9c121b404230ac0afcf30542203b84dfabebe5125b
+size 16872
diff --git a/EndlessVendetta/Content/Assets/Blockout/Daily_Bugle.uasset b/EndlessVendetta/Content/Assets/Blockout/Daily_Bugle.uasset
new file mode 100644
index 00000000..1b4b41d6
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Blockout/Daily_Bugle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26b80ad8e3faf37570aef2f6d5b69c91324b349286f9e71695f999094216466f
+size 19585
diff --git a/EndlessVendetta/Content/Assets/Blockout/Landing_Zone.uasset b/EndlessVendetta/Content/Assets/Blockout/Landing_Zone.uasset
new file mode 100644
index 00000000..4f04b467
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Blockout/Landing_Zone.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:61373cc78af21766ade63675c739b5a6997b6ee73dafd4d4154cffd4ef1d76b9
+size 19111
diff --git a/EndlessVendetta/Content/Assets/Blockout/M_LandingZone.uasset b/EndlessVendetta/Content/Assets/Blockout/M_LandingZone.uasset
new file mode 100644
index 00000000..6fc8624c
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Blockout/M_LandingZone.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c74133915cc5203ad72743513356148f93a18ae3ce68ed89930c6f468c130bcf
+size 8718
diff --git a/EndlessVendetta/Content/Assets/Blockout/Wave_Survival.uasset b/EndlessVendetta/Content/Assets/Blockout/Wave_Survival.uasset
new file mode 100644
index 00000000..c3c62731
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Blockout/Wave_Survival.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7826dbbeb0108c7e7f2a6e3f3ee0ff4e586bc449b112be3eda46f56c4d4a04f0
+size 41505
diff --git a/EndlessVendetta/Content/Assets/Materials/Concrete/M_Concrete.uasset b/EndlessVendetta/Content/Assets/Materials/Concrete/M_Concrete.uasset
new file mode 100644
index 00000000..38614144
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Materials/Concrete/M_Concrete.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3621e119616cf6d43438fb6492e0a2fde1d954ccf2dc7fa1b20dfd168da8a930
+size 12525
diff --git a/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_BaseColor.uasset
new file mode 100644
index 00000000..0ee34238
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f815cf35acfef41837c166cae666f4628f04a67424f0eb0faed4e90638ef5ad6
+size 3484502
diff --git a/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_Normal.uasset b/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_Normal.uasset
new file mode 100644
index 00000000..3f387da7
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e956b9755a5fe7380b0c1e11630b3debe81c9e18603668dcb38149854043ac8b
+size 9277469
diff --git a/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..684673fb
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Materials/Concrete/Plane_lambert1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f0979e6162d4aaa230769655ce94053bf5efcead444b367215ec8bd39aea003
+size 56553
diff --git a/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/Estrada.uasset b/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/Estrada.uasset
new file mode 100644
index 00000000..2929262e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/Estrada.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c9794cb03a44ac766d7bae136dc27c81adc338365923603fd769b8f891bc6ce
+size 8300
diff --git a/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/M_Road02.uasset b/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/M_Road02.uasset
new file mode 100644
index 00000000..135b5535
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/M_Road02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:06de8549581c7ae4b57349088bbf40dbf815ccabe09ccf0ea3d8d54a17f824b4
+size 14519
diff --git a/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/Road_Spline_Model_Temp.uasset b/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/Road_Spline_Model_Temp.uasset
new file mode 100644
index 00000000..3c332f64
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/OpenWorld/BeachfrontArea/Road_Spline_Model_Temp.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e19034ca9618fe95e5e7d630923e35c3f3f68214968e87b1fa41de135cd984e5
+size 18337
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Button.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Button.uasset
deleted file mode 100644
index 65a7207b..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Button.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:21a66bc4ecba6a447e9ce09d811521d7bd090c6c2f654b75b8b3ce98f0ace7e0
-size 8183
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror.uasset
deleted file mode 100644
index e9323d78..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:001039603d515a2275590ca7e9f5c8b5d04f151911df52be5952e524e62a768c
-size 23113
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Low.uasset
new file mode 100644
index 00000000..ad079c5a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a863efa623a69dcb572b5d017b8f0df331ddbcb5bb4c578ae41ff58603c9e9e
+size 28581
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Bathroom_Mirror.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Bathroom_Mirror.uasset
new file mode 100644
index 00000000..45f4213e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Bathroom_Mirror.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fde4502ac704c1003547612e52045ad9ab2ce8260887bed47177fdc153c5591
+size 14299
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_BaseColor.uasset
new file mode 100644
index 00000000..f8b480fb
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45e1470a65cf4a6f13222f7f5391d18dbb24106314ae124d36aafca067845d67
+size 531245
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_Normal.uasset
new file mode 100644
index 00000000..79f67dc2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:19e6ab42feba86d222e9f7a2531c2bf520a141019691cc1e22eb1d1505aa69a7
+size 1025485
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..78ebee2b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Mirror_Texture/Mirror_Low_standardSurface2_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0eae4dff1b836324215ac0419dc54888d3243abc16493c13cefd72e5103bf59e
+size 1413975
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Button_Low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Button_Low.uasset
deleted file mode 100644
index 1064ebab..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Button_Low.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:015c7e340108697b530b6c765281df940528f55231bc0c9ba6932757830840ef
-size 21560
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Toilet_Low1.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Toilet_Low1.uasset
deleted file mode 100644
index 4c78149b..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Toilet_Low1.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e144ca56ad2e65433ce9ddf54594b6cafd8fd709848703eb84c4194d281886cc
-size 164255
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Seat.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Seat.uasset
deleted file mode 100644
index d9f1dbfc..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Seat.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cbe4fbd5b7cd1d3aa2d593172f4aea9b24eb55b8b8dc4ad50b7851c79ead648f
-size 8160
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Export.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Export.uasset
deleted file mode 100644
index 8af25233..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Export.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:21116a8d95beb64c1308b3cdfe44b942b47c7a351442fb1d4ef590f355cdf4f7
-size 95535
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Low.uasset
new file mode 100644
index 00000000..85a17329
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e325c304180dc82d5131706fba9de14d7413cf30d3f66d9b45aaadc479c1124d
+size 98261
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_BaseColor.uasset
new file mode 100644
index 00000000..541f6cc5
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d2e5fff2679aa8c349704e7e374afbde3f354e89bc61a56c270dcc65abc42d2
+size 425788
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_Normal.uasset
new file mode 100644
index 00000000..8525921c
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9f5632a0b3d9efe2a1404b7f0b4c4144fac3907665117b914a9437332fb0d00
+size 261782
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..ff517391
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Low_standardSurface5_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:314ad9acbb145467693d419830d6d22f71f92c2d6ea50f2d0f5ba741fc34ffbe
+size 602629
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Texture.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Texture.uasset
new file mode 100644
index 00000000..e8a2d440
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Shower_Texture/Shower_Texture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:171ed4cf5cae49ad8bf59cef8a50b62d9c4db3b264b46ef498e973a7238780ee
+size 14989
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Export.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Export.uasset
deleted file mode 100644
index b7285322..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Export.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d836513a7bbec906d9f4ce2f8518e2862b74d75fc5bc738b6b495015f935364f
-size 51749
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Low.uasset
new file mode 100644
index 00000000..f4743f75
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d1c4a921b3c4127ef074ee79716fbe30d45f9fb6d20ba678968f109e97a751b
+size 65377
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_BaseColor.uasset
new file mode 100644
index 00000000..e9270ca8
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6cb2d4caa9829937896b6191bab14072c394b73adf3de0d456478afede821eb9
+size 2501224
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_Normal.uasset
new file mode 100644
index 00000000..5f64acf2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:574fabbdd85249c3f9dac58c8fd41c7f989c70faae3dbbe86f3b6c08feeb44cf
+size 2402624
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..09527428
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Low_lambert1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52af0538eadd0113eba2c9fab74b0d8e84e90af6c30d0de33773b7a5bd58f0f8
+size 2240615
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Texture.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Texture.uasset
new file mode 100644
index 00000000..d44ff32b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Sink_Texture/Sink_Texture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6eb0b468952a82ef3628f1977f7b964f48ee2ade332d868b1fa73d8a2859cfb2
+size 12870
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Export.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Export.uasset
deleted file mode 100644
index 5095cc21..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Export.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bf58f7020f4d029056da97041cc4d29089edbea2e6dc81e4669aa030df1fafff
-size 29568
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Low.uasset
new file mode 100644
index 00000000..f81b5a4d
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb501c8343fade738e116462ad9cb113a7eb30e9099dd46648c697065358d25f
+size 31932
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_BaseColor.uasset
new file mode 100644
index 00000000..9426e05e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8fe37c17e74d4f43ff6cc07ca196b799e8e6df399a0718279c41da83c1327ef7
+size 212866
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_Normal.uasset
new file mode 100644
index 00000000..a509727b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea302b4cfaa8b6c492709c0ae0e96ebd02e031e5cd0551f1b19a46358f19c0f7
+size 140015
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..208fce59
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Low_lambert1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:463da5fc969d78a648b5eb0612e538e3b3d69b9e005872d1bba5eb489f7124b2
+size 207803
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Texture.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Texture.uasset
new file mode 100644
index 00000000..a35a036e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Tap_Texture/Tap_Texture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3486d36bcd9731f28772837b88aa13537f760069151de0a81a14bc7887e84172
+size 13649
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet.uasset
deleted file mode 100644
index 450f5337..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c6735eac8475d462e5540b52e84f2bf5993f868d34525d1ed0455d5af8d86154
-size 8177
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Low.uasset
new file mode 100644
index 00000000..b66ed649
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f16f5fb989d6fc73dfca2f8a65464d5a4b7e028ff10430d053ca781b144b39de
+size 171920
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Button_Texture.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Button_Texture.uasset
new file mode 100644
index 00000000..ab036160
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Button_Texture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ee3ed7346dc0090485dee2888b9078a5b2f021ed66284e370e5a587e6ff96a0
+size 12408
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_BaseColor.uasset
new file mode 100644
index 00000000..515e2c88
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:343a6b719ccd7baf22afc2b4a8fad06b1fff8403d869f0bc0cda637d2e398ac1
+size 75965
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_Normal.uasset
new file mode 100644
index 00000000..62a317db
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5cb41dd6ceb2b98d37a2ff9fe18becf9ae65d9042d9d5eea2ae658c155a9870
+size 150969
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..f5a81227
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Button/Toilet_Low_2_Button1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04a849494629e588cd894aa113e383a7ead642ecadbbf0ea06d238596a24382a
+size 184067
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_BaseColor.uasset
new file mode 100644
index 00000000..561a59ff
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:371774b03550912b46a7b70e6d90b4376c4a12b7ea8e6763614bb77ad0a060e6
+size 57207
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_Normal.uasset
new file mode 100644
index 00000000..8e97e993
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b631ecb7a902352410a593a9c9be31f05e49b8bd43e8608f8d1cbe90da4d12e8
+size 210563
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..f3e383ce
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Low_2_Seat_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7d66e7d75effddd3e325fb49350b14173a52fc22269e171f970bbbf59e7b38b
+size 178678
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Seat_Texture.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Seat_Texture.uasset
new file mode 100644
index 00000000..89eadda8
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Seat/Toilet_Seat_Texture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ff7a998ec5e4d4e3bea2c37b49bf59c2f61733636fa2dc5f6db4ebad07078bb
+size 11719
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_BaseColor.uasset
new file mode 100644
index 00000000..5dd8fcb8
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f8a2b514587d4c196493e257ad6cb053050fa0a8d0046e894773283f09af643
+size 440955
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_Normal.uasset
new file mode 100644
index 00000000..031381da
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84b8c08abd425be57e799d27ce26b9e21ef91afe00dc913764312649f7e21e04
+size 887778
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..594a9530
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Low_2_Toilet2_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:744e5ff54312eeba6143d97480f1380bcb916525ac6e2b4fa71047f78bf31090
+size 804209
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Texture.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Texture.uasset
new file mode 100644
index 00000000..4cce17a0
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/Toilet_Texture/Toilet/Toilet_Texture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f51082b53052fb8a8c83571952b09ef7f34ec5a3856349a2592a88ddbc21f342
+size 12511
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/lambert1.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/lambert1.uasset
deleted file mode 100644
index 70be0713..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/lambert1.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f4fafb2910aac47042d14ea8dbdaf2759df3830baf77441b2a80d49500116ea3
-size 8186
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/standardSurface5.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/standardSurface5.uasset
deleted file mode 100644
index 4522d479..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/standardSurface5.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:03a02b4e3c5314371b631d2f9cd2a07b510649c74f81b030fce72f4d2cda5cf8
-size 8233
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/BookShelf.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/BookShelf.uasset
new file mode 100644
index 00000000..83a62bf4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/BookShelf.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba965741c1ee958e98877c613b898d42533f718f17fe9514f998fc25d2e06f4d
+size 189413
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/BookShelfEdge.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/BookShelfEdge.uasset
new file mode 100644
index 00000000..88a16413
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/BookShelfEdge.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff346a3dadd98ec200a2a6bf5bc12ddc18fa7f186552a4586ede02c6003485b1
+size 18411
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_BaseColor.uasset
new file mode 100644
index 00000000..1d48a146
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68ca22d0a2d61c7b8fa205eeddb4e7a748b496d8fce6ecb248c1bb2b35f6198d
+size 135925
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_Normal.uasset
new file mode 100644
index 00000000..edd174e8
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd4d4fc1cb07f395c1faf89c3ea6d91515e2b5dfb7cd143002fa2d8f39836488
+size 267929
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..e8e95d58
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/Coffee_01/Panel_Coffee_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a08630ef74f9ea2d337f3c41ff3f650bc7305e21a0da5767a2476194528e3391
+size 35456
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/M_MASTER_Stellar02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/M_MASTER_Stellar02.uasset
new file mode 100644
index 00000000..4fe0ea82
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/M_MASTER_Stellar02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6198cd861d4e3d81acea5a40a4190bc3da5c21128f0da5f4b4b84c8bb8613fad
+size 13529
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/M_Stellar02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/M_Stellar02.uasset
new file mode 100644
index 00000000..2652059c
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/M_Stellar02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d4eb600b985692f1dc3a794c828e4a3826a94c60a10883c2070831482823d8a4
+size 1302
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_BaseColor.uasset
new file mode 100644
index 00000000..b489af65
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:13094f0329c1305a69cd84e7758faa06c8d0f44466e3513985e4cd4e16f52d9d
+size 967354
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_Normal.uasset
new file mode 100644
index 00000000..338a0eec
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ded77df683ce90eae912abd7a9ea44ca62b4d3a6bd39eb31a9b460dd525adf07
+size 837037
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..b06f3a5f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/StellarPoster02/Panel_Stellar02_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d89d151fcffde66901b4127a461cbacfdf4c6569275bd0318b1e75af2f9ff59f
+size 478230
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/m_Coffee.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/m_Coffee.uasset
new file mode 100644
index 00000000..a8e75e81
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Decals/m_Coffee.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5e509fc202ab33530f5c82056e9f3ca4c340621f9062a74188aeb23128680bb3
+size 9378
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/M_Fridge.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/M_Fridge.uasset
new file mode 100644
index 00000000..55214c9f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/M_Fridge.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c62bd96bdaa2a4b3cfe87e9bc079626eaad5c2acfb3c0fb2a16ed6c44965402
+size 13892
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/SM_Fridge.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/SM_Fridge.uasset
new file mode 100644
index 00000000..e9ec4be2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/SM_Fridge.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:936e9e8674259eacb0d088a4bc6559a60b56531a567784ba3a27d44d2a5a0f17
+size 90867
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_C.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_C.uasset
new file mode 100644
index 00000000..b1370bb1
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e5ec4e971addfe6eab428bee4909cb967e0d4956d927780c35b729c4b445e89
+size 1101857
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_N.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_N.uasset
new file mode 100644
index 00000000..7cae2034
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51ea4bdf4de6e785c147a9f7a984220699874c2129c10e100aa9d24c795a069b
+size 1463315
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_ORM.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_ORM.uasset
new file mode 100644
index 00000000..9201dc05
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge1K_ORM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3154de3b1873d144f201827047ced1b96e60c56752d7514065d5a3161e4ed448
+size 723314
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_C.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_C.uasset
new file mode 100644
index 00000000..71a5571b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a252a98e695e5d21ad66fe3e7b12929f3975e071cce93b094928b784f8af5242
+size 4015664
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_N.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_N.uasset
new file mode 100644
index 00000000..614719ba
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec8a6bbd42eaa9daaf367ba075937ee98a5cbfd96991cdc88459e15ecc99c3a1
+size 7156956
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_ORM.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_ORM.uasset
new file mode 100644
index 00000000..186c163f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Fridge_Asset/T_Fridge2K_ORM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b48e15aacc61a1bc5c1d1cf26ddedafad93f8acff1d18e6b6250f9000e404265
+size 2575594
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Counter.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Counter.uasset
new file mode 100644
index 00000000..f0c332b7
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Counter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24f63c60295d078953eaa822c375436fb978800dd7576ce406fd9cdb8bfc1904
+size 12503
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Cupboard44.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Cupboard44.uasset
new file mode 100644
index 00000000..dba51d8b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Cupboard44.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d75d7f58eaaa3139542ea023298952336d47b7d289c4a1d4df7a277a9b0d59b
+size 12108
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Draws.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Draws.uasset
new file mode 100644
index 00000000..71af3be2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Materials/Draws.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c10aa4e0e28b965a473b12257c3d05cabe38f4d8e0c0b57e833cadbac436b1b9
+size 11244
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw10.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw10.uasset
new file mode 100644
index 00000000..e457e334
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw10.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3aab4e2c124c065c107f1d479135c1964bb3324f05859af28b7416e355c4ab8b
+size 23408
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw11.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw11.uasset
new file mode 100644
index 00000000..ab0e8554
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw11.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f6812663d4239b50bf96b82c53b5a55cdb9eb4343cbb0d35d5112dfd0266eff
+size 25307
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw12.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw12.uasset
new file mode 100644
index 00000000..63806cc4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw12.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09a7aabb3249f1a13057856f8d55a46af696c9b201998b0ac44426f7e3b58f03
+size 23424
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw13.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw13.uasset
new file mode 100644
index 00000000..14d439eb
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw13.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6903800fd2346e65315c1e8f090f61c34472a5ee9d863de1a389a5e55dcdf018
+size 23408
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw8.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw8.uasset
new file mode 100644
index 00000000..d82551cd
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c54f7a8c836b0a3a1ac57f1b2cebef322715f40736c9b6224c06fff4b271db8
+size 25213
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw9.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw9.uasset
new file mode 100644
index 00000000..6237eb8d
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_Draw9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:938ee6cc774260992579bbeaf347d33344d71e8b39a93c16f454b9936ef07456
+size 23415
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_polySurface42.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_polySurface42.uasset
new file mode 100644
index 00000000..9db261bf
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Counter0_polySurface42.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b62abf33a60d12c91f83317fbdd790a636a819afccceac8cae197d468a4415ac
+size 37260
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Kitchen_Cupboard.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Kitchen_Cupboard.uasset
new file mode 100644
index 00000000..ba21da31
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Objects/Kitchen_Cupboard.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7876264e736333983358bb5aae334da3f68dfadd8832b54b700727a3575c66f2
+size 37644
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_BaseColor.uasset
new file mode 100644
index 00000000..865e234a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5bfff18452a39ba63db4b01afbc2b33c0d44722e9b114b9dc828123c2e8df6ec
+size 58803
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_Normal.uasset
new file mode 100644
index 00000000..119cd77f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:366f23858ed8734f7b25c2aca0a6d5d0e466b620b43c9b7f9cf3fb0a75b95024
+size 56392
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..a047b840
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/Cupboard/KitchenCountertHphinge_Cupboard44_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:629e5efeb88d8eaee8189ebd23faeacf6f89c480105325a80c8138ea6143edc1
+size 2289612
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_BaseColor.uasset
new file mode 100644
index 00000000..7da80ac8
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d075fe2db6e17df0d2b9dccd7abc5ba580b32c8555b61409f0c4e30604914aa5
+size 56018
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_Normal.uasset
new file mode 100644
index 00000000..cd9a3edf
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a218d3f843b125a04f0fca34ff86e955410ed1c9cd379c193b4f9fb42fa3ff6e
+size 56269
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..9daeb33f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Counter_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4cfb806d85bf71f9ad189cbbbafd84a09a2d0eb43fbffe66c8311a579a22ad2a
+size 1120009
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_BaseColor.uasset
new file mode 100644
index 00000000..486f9905
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac856640a2d1f461f8d16f55777903898e6911603d6c695e27f9ef1d601fb8aa
+size 70517
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_Normal.uasset
new file mode 100644
index 00000000..5acba488
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81a0a71cfa07a775bf1f289934294a3c39d5f02c6a9b416e0849ffcdd971008b
+size 285007
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..66f032db
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Kitchen/Textures/KTCounter/KitchenCounterTestHp_Draws_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9228b702872e99df26f7be3e8fcbdc79219fa45113c12621df2e7e802336602a
+size 370641
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/ceiling_light_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/ceiling_light_01.uasset
new file mode 100644
index 00000000..0506a89b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/ceiling_light_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3117a60d19860cdb60eeeb60d403efa22df38ce019f73e03529e7d624699fa7a
+size 78010
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/ceiling_light_02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/ceiling_light_02.uasset
new file mode 100644
index 00000000..1cb3d241
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/ceiling_light_02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:392520a9eebae33d417548e07fc190114d21cd683b019066ca1e336ee0a6df52
+size 60091
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lamp_01_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lamp_01_low.uasset
new file mode 100644
index 00000000..7df9171c
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lamp_01_low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9d02d05ffbaf682148cf700bdb3a76fdcb7f475591bc5058fdbbcd1cc5494d59
+size 147882
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_Normal.uasset
new file mode 100644
index 00000000..0b3f3acf
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e847c0e9d15bcc93a83e786b80161893b7497f1cfcbf2af58232a0411a4c5b5
+size 24442
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..5bb8ace9
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9b2df81a0aa60e9e8ec6c03d63943072666d06ebd5c87088eb55a4e0b2c9859f
+size 772612
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_bl_BaseColor.uasset
new file mode 100644
index 00000000..8c5c61a2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_bl_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4012c4b85b8572b3def21baab1bfe90e17f90669540c3882ebbd247dd9ede826
+size 490602
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_blue.uasset
new file mode 100644
index 00000000..d88d0e44
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_blue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7fb5b834919b1ea99c3a6dd55b5fdd4636cb8b9cda2cc87ce9515f7d444537d6
+size 13171
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_or_BaseColor.uasset
new file mode 100644
index 00000000..4f7a9275
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_or_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:403489d13a5958c355b63791f80a0f57283664e7ac79d6e5eee23b3e6c37005f
+size 319236
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_orange.uasset
new file mode 100644
index 00000000..84999819
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cde8bb58484bf00bef981723a665f7fb7569bf83aa9ef23e6379b176e56cda18
+size 13399
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_ye_BaseColor.uasset
new file mode 100644
index 00000000..d815177f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_ye_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9138eaa4b4d7c007c6b3e99ae9ef4bce85b834c8f6a7fd93a245fc7a37ccb7a8
+size 439654
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_yellow.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_yellow.uasset
new file mode 100644
index 00000000..7a8aaa6a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_01/ceiling_light_01_yellow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07815a353edcf04de0b9c01638556f1b9a0086365379bb18b76668c2bd2a95e6
+size 13367
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_blue.uasset
new file mode 100644
index 00000000..3862e4e7
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_blue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40668b5978d7ffa68732467a8eb639e10ce4d97270d7112025cfcaf0b0acce1e
+size 12412
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_Normal.uasset
new file mode 100644
index 00000000..d9d2815a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:593a320e7ed1e77e9977d05137d429320522f7946ecbe75b3ca5c9ac2781e2d5
+size 25329
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..94f5cc95
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e8005ad8bfb356d8d62ea33a2e459eca67cdf5b6d8a0c8b7ee5519cc133a2991
+size 634692
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_bl_BaseColor.uasset
new file mode 100644
index 00000000..4e564eb9
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_bl_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:70672c85e39c669d86fd0fbff96c80ca2f1b195361dd0d443a360c128acf08a2
+size 360218
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_or_BaseColor.uasset
new file mode 100644
index 00000000..6e1340f8
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_or_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7848525194d2247bfee552c667e33f01e5d3605c75de87e96ef29a602879062c
+size 260714
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_ye_BaseColor.uasset
new file mode 100644
index 00000000..3135bb4d
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_ye_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e44538951d0d84b551de236a4aa8ec9dd23338b92219fdd987b5a02aea49221d
+size 334862
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_orange.uasset
new file mode 100644
index 00000000..ec8aeb24
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5b9d488ee5e362f100a4924afe17b6dbb3039e3112b5bd482df71f3302052f0
+size 13002
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_yellow.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_yellow.uasset
new file mode 100644
index 00000000..3f2cd254
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/ceiling_light_02/ceiling_light_02_yellow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0cc8b9529b9aa025c5f4d6f224d0c1edb3e0145d4f54ecec56e66292fb00788c
+size 12641
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_Emissive.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_Emissive.uasset
new file mode 100644
index 00000000..dc79f856
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_Emissive.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3913a43467627a98c811e8c3108ffbd8a6e839475fa0a896f49c941a87f6f115
+size 28483
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_Normal.uasset
new file mode 100644
index 00000000..2db8c55d
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02cec8e50cb57ab3a478107690167c5698a84725ab2cb7f6e7699c39a34e85a5
+size 206425
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..f14e523b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44ab48cb6979785f0fff8d71da7f888ed5ff38b28b91c35c4fee6b33734db5e7
+size 3964155
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_blue.uasset
new file mode 100644
index 00000000..9517aa66
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_blue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3db264a7b130a06244e3a49dca892177315d1b2a81865ce235fa5f5e194e696e
+size 15634
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_low_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_low_bl_BaseColor.uasset
new file mode 100644
index 00000000..fc62315f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_low_bl_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5728209723a21bbba1a54e5a41d8c23ce618fe0aac1ce0cddd145d47525d13b6
+size 1860602
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_or_BaseColor.uasset
new file mode 100644
index 00000000..6500d20f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_or_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0888e45d3e8421caaa9df6c284a734a857aff6818c0bbfa61a5a7e3d25367ef7
+size 1269599
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_orange.uasset
new file mode 100644
index 00000000..9efbb421
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2cd8537e7847fd4d90c25bb80185800768df99fdd1e036062edec07d18514fba
+size 14921
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_ye_BaseColor.uasset
new file mode 100644
index 00000000..74ae5a4e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/lamp_01/lamp_01_ye_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c686c4dece8a78f77de4ee3c8a9b68e6b75e37f96a3684f9991d727b655529b
+size 1684033
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_Emissive.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_Emissive.uasset
new file mode 100644
index 00000000..2b9b7fca
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_Emissive.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a09f8a1ff1b413587952d77fa4744c0638db4fb68b31e4a8f0943bc852e743cc
+size 20957
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_Normal.uasset
new file mode 100644
index 00000000..cf62e122
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5695560f371563e1261fc9ea1e290cae3b6122a2310289e7820f64cf85351274
+size 77832
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..fd0da200
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a586fdbc7d02484f4f227d839793468a6f0452ac323901f756d00800f8d63b67
+size 839528
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_bl_BaseColor.uasset
new file mode 100644
index 00000000..b53a7146
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_bl_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be60146474dbcb6329bc1512a5568bfca18d8b119e52b3b0b2b3a32a9bc11295
+size 424749
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_blue.uasset
new file mode 100644
index 00000000..a04369a2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_blue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f13251ee58a0c560a1fa10f1a90bb575c5b34b3a51dc9c341659863237da433f
+size 13750
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_or_BaseColor.uasset
new file mode 100644
index 00000000..27530ad7
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_or_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6e3c024ff9ec976346f6aaace67c612bad7cabd1011d2d5a148f7194086c27e
+size 376433
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_orange.uasset
new file mode 100644
index 00000000..bef62466
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e40d5c789007ac42573bfd211db39cddabaaca3e8841f96f16616f3ee54eb34
+size 13822
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_ye_BaseColor.uasset
new file mode 100644
index 00000000..ee5d907e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_01/wall_light_01_ye_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86c65c9943e9516b873a1e891c150188af1aca509797d2fa281ae6410797b8eb
+size 340193
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_blue.uasset
new file mode 100644
index 00000000..75410896
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_blue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6493fd486675eaf939e92cc643adcccd43433cf79382654407521393359c8a2e
+size 11984
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_bl_BaseColor.uasset
new file mode 100644
index 00000000..c07ee180
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_bl_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6631017813aabde0df3be8d403b5ef847bb4a7d504d6a305e3c17706564eb14a
+size 531476
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_BaseColor.uasset
new file mode 100644
index 00000000..20058714
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b253507c44eb366ccbdbd902af898e278d1158ae70c08580fcce77d1e686899b
+size 337820
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_Normal.uasset
new file mode 100644
index 00000000..5c3bbb86
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39d30cf5a7557ec087ab63c8a4459957718b266a159e54e20cad06bbdb979c21
+size 45291
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..350d2ec8
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_or_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0151ffbb441f049966b20b80bce47e5a4c7471ed322aca529c55cb67344a5f2e
+size 879078
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_ye_BaseColor.uasset
new file mode 100644
index 00000000..b24688bf
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_low_ye_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:578a3be15fc6bf2c326bd7348eb3b84af52560e955b52ad36515a8575c5d72f4
+size 481570
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_orange.uasset
new file mode 100644
index 00000000..7475f490
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/lights_textures/wall_light_02/wall_light_02_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97c052964b723e73a17f033341dc0c3538d7f04d149f24532a7f56b13643989f
+size 12568
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/wall_light_01_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/wall_light_01_low.uasset
new file mode 100644
index 00000000..02addb69
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/wall_light_01_low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:06c5f4dbbb22b429c0e4bcfb6d1976dda708b52bad6b2c0730a641977514f559
+size 67488
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/wall_light_02_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/wall_light_02_low.uasset
new file mode 100644
index 00000000..2fb5b10e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Lights/wall_light_02_low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68383e971bc10bd9c93e4757f087fbfcf8d70d8df64b0dd862549418636d8931
+size 39196
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/cabinet_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/cabinet_01.uasset
new file mode 100644
index 00000000..b6cce583
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/cabinet_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f6e56e70ff51912e1673f663f0bd245e5da115dad2763394f467336948d1abd1
+size 60831
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/chair_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/chair_01.uasset
new file mode 100644
index 00000000..4ff6d4c2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/chair_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36ef1189d59ca6ee882b77ff146bddd2dc862fdd1581ce074f3899eaee970bb2
+size 62470
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/coffee_table_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/coffee_table_01.uasset
new file mode 100644
index 00000000..57738c93
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/coffee_table_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71444ff30884325e3ea561e53be19f1a9a3d44e5e850ee17ee1fa27216a3328e
+size 44985
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/fireplace_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/fireplace_01.uasset
new file mode 100644
index 00000000..b6443cff
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/fireplace_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1256831111d8a5e0597b87c1e1181c2d44fa40a042975e47853c0484aa3de795
+size 55273
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/side_table_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/side_table_01.uasset
new file mode 100644
index 00000000..1a450dfd
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/side_table_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe25fef5b1ba90e71c67841f7f58e97b18b7333657f4af3e69803ab96234d2d0
+size 35635
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/sofa_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/sofa_01.uasset
new file mode 100644
index 00000000..364d6674
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/sofa_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55c098d7f099f5b15dbe8beb93ae7d57d4e134fa20b2fcfc7384c5ae1a019545
+size 61188
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/sofa_02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/sofa_02.uasset
new file mode 100644
index 00000000..2f59daab
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Livingrom/sofa_02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6fa08749168b3369eff79f9f8eb378bc64a8309ce225ba3d71f6c94b3c422d2
+size 97515
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailing.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailing.uasset
new file mode 100644
index 00000000..570c4090
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailing.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a7ad8cdca5b405b8684664639be8ddffa4d82db49315236ac703079fd024a2e
+size 31554
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailingParkour.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailingParkour.uasset
new file mode 100644
index 00000000..d4d15552
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailingParkour.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47c99fc1f5165ebb6b31a182410f8a2c504f282c22316a754bd416067bd7f53c
+size 23017
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailingRange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailingRange.uasset
new file mode 100644
index 00000000..72361ecc
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/BP_TempRailingRange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a82b20c35d0666ab043f00fae23406f2dff8e82df14b4fe8d1baf239b5c744cb
+size 31656
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/SM_Doorway.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/SM_Doorway.uasset
index 5834f011..a72025d6 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/SM_Doorway.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/SM_Doorway.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3907faff211de099949e9d8dfb0cf414dd85ad373e34a16d7e8acd7a54359463
-size 18380
+oid sha256:75fc4932b03d044a9a1154e2e3ea175758919157f295788c8042e85d16aafc57
+size 18506
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/TEST_DOORFRAME.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/TEST_DOORFRAME.uasset
new file mode 100644
index 00000000..8f8ddfb1
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/TEST_DOORFRAME.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e37cc0a3838491407dd13313b70434b46911725f804b6d436e4d22fc68792de5
+size 16759
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall01.uasset
new file mode 100644
index 00000000..b2f2db25
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1aa02d47bb9f54d06d45251a1f2f585d4ea497260a2f36f3cedeb5343f4d6c0f
+size 20394
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__0_9m_.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__0_9m_.uasset
new file mode 100644
index 00000000..a347a776
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__0_9m_.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:308bb0f7ab87a243f33c9b601cd134dccb65f2753d2b1f47262d962803609f82
+size 19642
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__1_15m_.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__1_15m_.uasset
new file mode 100644
index 00000000..aa592e99
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__1_15m_.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6190de9ec81813e7c69bc10497f7d4475110000108f041905ef6e9a329bf2706
+size 19891
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__2_3m_.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__2_3m_.uasset
new file mode 100644
index 00000000..05d03245
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ModularPieces/Wall__2_3m_.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:adb6fd6ba3e2056660a9eac2fce1ea39f06eb08b17cb362249c79046daa87b12
+size 20232
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Chamber_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Chamber_low.uasset
new file mode 100644
index 00000000..a9ee8cd0
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Chamber_low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:27f9c8e85be6e938082c033cbaf2cb8cda78644634c80fb85d26a92cf18b6e58
+size 56234
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Clock01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Clock01.uasset
new file mode 100644
index 00000000..d6e072e4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Clock01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8678c279e2dbe297f8d3ad574c4566e0a175e07a69b7498424c0b48765aac198
+size 41779
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Cup01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Cup01.uasset
new file mode 100644
index 00000000..1aca9ff1
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Cup01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4232a2eacbd565d66cdaef30cc6819f0244cd8331a817f64b1b50309f743b37
+size 22324
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Gameboy01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Gameboy01.uasset
new file mode 100644
index 00000000..7bf335bc
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Gameboy01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47e1b4635f873d06a49825e8c2c6fffd3a4c9e14fac84e3297fe67f0508bfbe3
+size 21920
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_MakeupStand01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_MakeupStand01.uasset
new file mode 100644
index 00000000..99514d15
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_MakeupStand01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e0ca91eb0e445dcbbed4f7602892c18b5320e171a1bb63c1e17711b09367e3a
+size 23143
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Mirror01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Mirror01.uasset
new file mode 100644
index 00000000..b99f1639
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Mirror01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f819d3c52f59d71fa0e5f626c864bf169f7f679fb20cbcb641b2e97a629c23b7
+size 21055
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Mug01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Mug01.uasset
new file mode 100644
index 00000000..f20261be
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Mug01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fea936d20ebefaf5a20f323428a386b998d0ce23edd038b139e922a420009cae
+size 23260
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Radio.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Radio.uasset
new file mode 100644
index 00000000..487a096a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_Radio.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d14a0507f5ab759f464944c10b46b1fc8cb60d5d99f868c08e091b3af1126cd
+size 45897
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_lavalamp.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_lavalamp.uasset
new file mode 100644
index 00000000..09d641b0
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Props/Sm_lavalamp.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aeeb0a429bfa7b4e9933b3e635d5617342e3ed2a401a30ed755bfff90d7aab32
+size 30994
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_BedroomTable01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_BedroomTable01.uasset
index 9cc609bd..76ac468c 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_BedroomTable01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_BedroomTable01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fb4b35d13daaf96654280107217d7ccd9c697345f3ff522d1f34d1f393328c3e
-size 23951
+oid sha256:655f1b011f43fb54348b860d92c8bab2621329966861b3dcc7aeca024dcecf04
+size 29154
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Cup01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Cup01.uasset
new file mode 100644
index 00000000..859faf20
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Cup01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f99918424650e745198ec58fdfdbaf57afa0449e92cd1acdcb0ffec79eaf38f
+size 1501
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Gameboy01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Gameboy01.uasset
new file mode 100644
index 00000000..db4ae789
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Gameboy01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b1f462a9ea2f980c4b311ab44ed66caf4730bd0f7d71335da685c0bfd1e36d8
+size 1533
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_MakeupStand01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_MakeupStand01.uasset
index 6b21e107..fa03abae 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_MakeupStand01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_MakeupStand01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5afa0174329af627e053233b068f18e7ad683b8ffc7a5dba0b15865dd8953202
-size 23372
+oid sha256:8b4d6be426ae54314bf1da950df381fd4b81111192bf68a0fd13c9ca4a15f331
+size 1565
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Mirror01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Mirror01.uasset
index 617c41ff..ddf44bd9 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Mirror01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Mirror01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:0bfe3a07bfbef889dedee9f242cda571838bf981439f65cdcbafea7ee130e926
-size 21428
+oid sha256:815665b200e71bd80ca66915673d615966b025fb012dd14bc03bf5112772983a
+size 1525
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Mug01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Mug01.uasset
new file mode 100644
index 00000000..a27c2074
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Mug01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c559308e2046174bbd11abcf3418f990c2ad8642d923c4c76ec65ec864d26f46
+size 1501
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Table02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Table02.uasset
new file mode 100644
index 00000000..cecc33b4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Table02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:105f08327e3561a453818b9e59b2ed3ab5a4e5373cf20dffe9035275fd95fbff
+size 22665
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_lavalamp.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_lavalamp.uasset
index b28ba802..789a0604 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_lavalamp.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_lavalamp.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d53715c1bbca735ce34e3d0ee7fb7f8303137975c7d6b791e6b4bb633b772bbe
-size 30011
+oid sha256:e82c0fabc7297d82be30e31fb3ef7dcfd50368d5e3bf61537ade77a54056fa4e
+size 1525
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/Light_emissive.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/Light_emissive.uasset
new file mode 100644
index 00000000..c749699a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/Light_emissive.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:92fc74ebe2921339c57113554d03d25eed3d6ef3e1c2004640d41264e54d9f92
+size 7816
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/Metal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/Metal.uasset
new file mode 100644
index 00000000..d10075e6
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/Metal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46d09ddfdb8ac5b852297ff80dfd2441a605ce7ef780245498be8a5fc82e9f79
+size 6910
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/SM_striplight_polySurface1.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/SM_striplight_polySurface1.uasset
new file mode 100644
index 00000000..dfa79cb3
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/SM_striplight_polySurface1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:672c5575e8afb1edece4f14100c5a28fe954034cb571cb000c75da7bcb407e1d
+size 19739
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/SM_striplight_polySurface2.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/SM_striplight_polySurface2.uasset
new file mode 100644
index 00000000..059ea643
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/StripLight/SM_striplight_polySurface2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a85f7120ae276210be92ecf6e6cdec4b1df8da9d6b8cfee29831f715fbae5fd3
+size 23091
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/B_BookShelf.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/B_BookShelf.uasset
new file mode 100644
index 00000000..2cc5f1a0
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/B_BookShelf.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e1833b6faf97d493964d91ac9d83cb9a628c539bfb6288868dbf9e1e1480fc3
+size 13096
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_BaseColor.uasset
new file mode 100644
index 00000000..43badf7b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef018f15e910d6258f377efd17cefbdd0380d46e5191cd4d225e2fe40edd87c1
+size 698522
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_Normal.uasset
new file mode 100644
index 00000000..19122bb6
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c17c34c27a1efce4f4f667c6fade83d82c34f2d61281f0f1c605f15c182e139
+size 2223760
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..d09afe1a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Books/Bookshelf_low_Books_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2815ea671f6f09df5a3af4034e301e0825572b451433f76480d268acff157b9
+size 418255
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/M_Books.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/M_Books.uasset
new file mode 100644
index 00000000..19d15e5e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/M_Books.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a4740cda303fc78a754cc9bc1688037377ef97bd09ca793c87cf245609f2b9c
+size 13837
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_BaseColor.uasset
new file mode 100644
index 00000000..756d3a8e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04f147251cf6742b6f993c992db299baf10c39029b22ab69436a5654bdb3d9be
+size 1150297
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_Normal.uasset
new file mode 100644
index 00000000..bedd4199
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3427fed8a7158b40feedfe1cc30f02a8819b351a96104a2fa6f6ec3c9380eb16
+size 1960904
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..9dc85a63
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf/Shelves/Bookshelf_low_Shelves_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95d0ad96c060f30082c115f9cf55dd8329dea541655d51690b53f1405ea7af30
+size 789121
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_BaseColor.uasset
new file mode 100644
index 00000000..17431183
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4588f94d48767cce3c7b4719f9e7d6a80a20bce91f4248f0df7d738182528e65
+size 1314990
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_Normal.uasset
new file mode 100644
index 00000000..a9bfdf97
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d649c8b607c1491930a40aa0e550bd09cebff80cde49bd970f0262bda5a8b1bd
+size 1986748
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..b66ee3c1
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/BookShelfEdge_BookShelfEdge_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2256ae34a011f5372b89ba0abbd4fe7d9a5ae9dc5b4d6c871024154ba6fb8acf
+size 605960
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/M_BooksShelfEdge.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/M_BooksShelfEdge.uasset
new file mode 100644
index 00000000..1868b332
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/BookShelf_Edge/M_BooksShelfEdge.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ded6c421983414e4b87a3bab28a0959b1e63d7c36df756c1714d0c2c74325aa3
+size 12395
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_BaseColor.uasset
new file mode 100644
index 00000000..93d43fcd
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:495d091ac5cacdc1fe69aadf69263f396e337d4009d6880712ca115413b24ff2
+size 466984
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_Normal.uasset
new file mode 100644
index 00000000..3efca0ac
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a85f08bf2b2d77a06e58d3718c50b0b45ee535d8c8c4339145459e6c50d9d28f
+size 1148336
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..eb66edfd
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/Clock01_low_Clock01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:244cb7b93408b1af067a536e1d4a738500fe3787863b5a76622647c8bc55e5bb
+size 456559
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/m_clock01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/m_clock01.uasset
new file mode 100644
index 00000000..f5ab0f00
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/CLOCK01/m_clock01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e09599451b476ee8164439a6e2e07b2e79fd140c310ffa657c953cbd3615cbc
+size 11502
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_BaseColor.uasset
new file mode 100644
index 00000000..c32220db
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c43c992ba10dec0b4863f6adf7ed942895da978ff22070bf0890521cbbdba4ad
+size 1064747
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_Normal.uasset
new file mode 100644
index 00000000..1115a760
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7eed62892bf7c01dc3c2dc49309f0340073f42452f846510c9d822246bac7034
+size 1624967
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..51e1765d
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Chamber/Chamber_low_Chamber_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34f9d7a818a797675599e80b50eb9608639471ad7afa7d308342a487791fdc85
+size 1149384
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_BaseColor.uasset
new file mode 100644
index 00000000..80307d22
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:37b3176bef56e7c733c3450eb3473a9c7602aabe98cd82253b5738eb093969f6
+size 570736
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_Normal.uasset
new file mode 100644
index 00000000..854b0532
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db626e9d3bb797d25939cf4a41a8de6038a7071eca6f0bfcf17754cbb107e0d7
+size 880117
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..f928516c
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Gameboy_mug_cup/Gameboy__Mug__Cup_Gameboy_Mug_cup_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f6c30b1f854e3391815951385973455255f8d11eea205ce3131a8ace668f592
+size 583540
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Carpet.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Carpet.uasset
index 75787860..8b5be544 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Carpet.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Carpet.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2975456aa4d76a453893d762a5defb1d9f7c2e0b63daafc21c80beb1b83aa00f
-size 11938
+oid sha256:47e8ede528285353be8463306c3f89d1104145128e11cbd23d7aa8b133d5a9bb
+size 13845
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Chamber.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Chamber.uasset
new file mode 100644
index 00000000..defab6e5
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Chamber.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:952227d32fa9cd1cf9ad103e1aa826124d3013074de2130df956c5a04e69d3a1
+size 14735
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Gameboy_MugCup01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Gameboy_MugCup01.uasset
new file mode 100644
index 00000000..0b818c1f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Gameboy_MugCup01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7df692f1e7f3f41df8bc472e7034604638d060fa552802d72fc4605a58ce173
+size 19693
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Rug.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Rug.uasset
new file mode 100644
index 00000000..46299ade
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Rug.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5290c672d5048aae57f6aeece6cdde1a220943e22d2c6dfeb2d9b2b6e5e64b7a
+size 10562
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Table02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Table02.uasset
new file mode 100644
index 00000000..51fbe2ad
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_Table02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:919288c600089c5b553d59bcf950517558962fa119ef25bb4ec3b6495ffd7bc3
+size 13819
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_WallPiece.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_WallPiece.uasset
new file mode 100644
index 00000000..f474a884
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/M_WallPiece.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f5b0cc314c81adfea85698a6b90eb31c70b223d2beb445012e8683832003a496
+size 15283
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/M_Radio.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/M_Radio.uasset
new file mode 100644
index 00000000..28afc60c
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/M_Radio.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b722ffae2a72f01f84108391913695b42df54aae98c4fc8c1661d335c8fa656
+size 13128
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_BaseColor.uasset
new file mode 100644
index 00000000..99e750ea
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51171fb8454f81ccc4b7165686c99af0f3dad8721b14ad87bedee9ec054ef23b
+size 1101817
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_Normal.uasset
new file mode 100644
index 00000000..b6a41f4a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0aa2b84ed57a41eb61dd6e210b3e42d98febadcee4b5b4ea8043d8784631e42
+size 1290350
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..c88ec45a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/TRadio/Radio_low_Radio_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc10cbbb89f3a7f2dbb00bb07edc51395f6db5f9dd2cc78fd4b93e9a8105e2a7
+size 496506
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_BaseColor.uasset
new file mode 100644
index 00000000..0c012176
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d95b0be8f950e95293474212e06ef9a4af41752171833671c59e3ce4fd33510
+size 685415
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_Normal.uasset
new file mode 100644
index 00000000..552551bd
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b42ecf4eb8e31746247b91089d8bd5342c04f51df40d75ea2179bc66ac1079ae
+size 1100139
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..2be43a95
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Table02/Table02_low_Table_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86de474dc8952efc3604663bddad46d5cfcce992b71a1e0b5f6dccca5cc156c5
+size 422545
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMR Eating An Apple.mp4 b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMR Eating An Apple.mp4
new file mode 100644
index 00000000..6af5e223
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMR Eating An Apple.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5879373c3457713f4485f49756687504c7094a2041666b1c37586404c2754162
+size 52850347
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMRApple.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMRApple.uasset
new file mode 100644
index 00000000..94c0aa16
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMRApple.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1febbd4cc61acf2402c430fd1a908b13e5031d3f1ea5436547fa3ca34ad346a1
+size 1532
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMRApple_Video.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMRApple_Video.uasset
new file mode 100644
index 00000000..9abd7da4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMRApple_Video.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bbff2b6f1e095751ce291513dc466c64d598b2fce9d75c50aefb315dc7c1349e
+size 8684
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMR_Eating_An_Apple.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMR_Eating_An_Apple.uasset
new file mode 100644
index 00000000..8b04c86a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/ASMR_Eating_An_Apple.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75df861e6ac64be05c10414223a071713b0a8dff1861e776a7600f88e18bd960
+size 1716
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_BaseColor.uasset
new file mode 100644
index 00000000..96d33655
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40641b0eab0bfadcc350129983217b25bef55d1e4a0dd4a97dcf938ea5d73ebd
+size 215272
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_Normal.uasset
new file mode 100644
index 00000000..db13f7b1
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5d4ca46ceb0c237689cf698a55f4a2b4bab8ba76a71d076ecfef794e1e66962
+size 755026
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..db90eae9
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Base/Tv_Tv_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7b12cc1aa2dcb6cd8b56a9cfff4b7f851ad622524ffa7bcb7c82642d505e6f9
+size 157471
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/M_Screen.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/M_Screen.uasset
new file mode 100644
index 00000000..7dbe452a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/M_Screen.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1c065df29e5a8421da2a9e7bf1d2ba973588710cc2077c0f21e2d21f9170bcd
+size 6928
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/M_TV.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/M_TV.uasset
new file mode 100644
index 00000000..88cfb515
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/M_TV.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb53f2b1ab45c1893bd4aafb4979e5748a88c96395d7a70a30587c16e7568931
+size 10805
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Sm_Tv.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Sm_Tv.uasset
new file mode 100644
index 00000000..078ec036
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Sm_Tv.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6ff213d1d4b4c55062c23b815a01b524ce82d2fa48c358b66ad8b2f77557720b
+size 26521
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Tv_Blueprint.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Tv_Blueprint.uasset
new file mode 100644
index 00000000..3b824cb6
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/Tv/Tv_Blueprint.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e1a1be8b9f7e929c822a46643d138079525714466e84a024d81ad67a93482dc
+size 41515
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_BaseColor.uasset
new file mode 100644
index 00000000..a0508453
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d12be7dc9ce711b99d91bd0f1730f990ba9353fa0e97184fa23177ccb56812a
+size 1445838
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_Normal.uasset
new file mode 100644
index 00000000..4810fe56
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2278d228e903faaff5ec38ce09837e27b55aa65bc01f2819f377021c58314c7
+size 1838829
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..a366a2ad
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/WallPiece/Wall01_WallPiece01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:782875d032bf8e91c3e6bb922afd8949f9167b4f6413cf09eb3f5280c98c5fe0
+size 269439
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01.uasset
new file mode 100644
index 00000000..84adc553
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9337175440c79d144cab5aa716e46a73753c56fcf50662348b0d134dc428b9c2
+size 16330
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_BaseColor.uasset
new file mode 100644
index 00000000..21f2bb96
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b52b704fbbead7e792718d44e980b2d848518a2047897e0f81293ddf9ac3719a
+size 1200345
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_Normal.uasset
new file mode 100644
index 00000000..dd0bb50a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05df83036e8f0bc79bbeaf3ef6632149bd787336320b16aa66644a6bef9acaa5
+size 1027726
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..df3b1426
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cabinets/cabinet_01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b011d6d9ecfdbddfd59966b89488d0f607c2ce5c2e6338fa1df4d82f1db8afc
+size 903914
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair.uasset
new file mode 100644
index 00000000..e3839fb9
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:807bdfacec387b49ae2057b87bead8e1df81ef6563b0c9568a8f81a9d73ca2ce
+size 14179
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_BaseColor.uasset
new file mode 100644
index 00000000..0e34a416
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:19179cc93aa033f3817236a9474b266d3b3ac61c0f9bfd466dd45ff1e1118fda
+size 955549
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Height.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Height.uasset
new file mode 100644
index 00000000..63b9baf6
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Height.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3efbc68ca11e7f71345f49f292b4be25c762745f69b1d450385c134aed9fa6ad
+size 95332
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Metallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Metallic.uasset
new file mode 100644
index 00000000..1bce9832
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Metallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1722704bfbe7daa9be4209ee71f780f1ddd4457d8fdbf277d77723039295f708
+size 15896
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Normal.uasset
new file mode 100644
index 00000000..ee9f009b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd9e213811eb11eb686e0ffc0300fe948fa33321ef458c1ea6e31cdd564e3f2e
+size 1227990
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..a3d88ae3
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:43be7bcbae684211ea16541799d8c076b576d29496256f66012b710fe52a819e
+size 880020
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Roughness.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Roughness.uasset
new file mode 100644
index 00000000..e5dada8c
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/chair_01/chair_01_standardSurface1_Roughness.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a957ef5c4642cbe2202fe8b9e70fcce21535b3c0ec6cca39d2720c29c027e3b
+size 480556
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_Normal.uasset
index a8c31fc8..4e79cc55 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_Normal.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_Normal.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c10b9f86e16a3271402354758b7c586a74b7d27fef876b2f473ec1d4b0748ba7
-size 228938
+oid sha256:719b27b7603d437867fe351a801ea10f39180025c666e94c4c2259ab69b38a93
+size 229033
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_OcclusionRoughnessMetallic.uasset
index 1b46de5e..7e5fdc94 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_OcclusionRoughnessMetallic.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_OcclusionRoughnessMetallic.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2e5669124c974f86164fed97e23899d6a0d5a4027769cb2a5755a3e33db196b2
-size 902570
+oid sha256:1101e047bfdc15d166a6ba845ffd7eca4c4886c4e5552b3e0ea7295ffd565896
+size 902665
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_bl_BaseColor.uasset
index 249e845f..8d3162b2 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_bl_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_bl_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1371ae63de97001c2e16656568431ddd162f27425aec5e5b94770638d196e023
-size 420399
+oid sha256:6b1f1e70cea138811d4df2eb2d51a8f988823649dfdb778cce52103bd0522e46
+size 987235
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_or_BaseColor.uasset
index 27697906..c2fcf62b 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_or_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_or_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c497327859c855dfd92ce62670b38feb0b0cbd9765703cbf8c68d093be00d497
-size 275649
+oid sha256:fcfa7ca52e82f3a5bc191ec77c6e4d0e78cec98ffde43a7f9f2de4ce8cc4a8c4
+size 912329
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_re_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_re_BaseColor.uasset
index 167b179d..414d06c6 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_re_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_re_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:343f40112e405d298126fb9f1fd2502816df2477ad5a447b4850c5bb287db98a
-size 269806
+oid sha256:7c3491a01fe2e49ae5fa47410b5752ffb3f8dd277a39f54ef1075506754d2a8f
+size 889480
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_ye_BaseColor.uasset
index a5693c00..68e9ddea 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_ye_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_01_ye_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5a10dd298dd4a04c6ede2964a374102a64dd5a0a6f1b13125d380d0b29fd45df
-size 360699
+oid sha256:c30c2c7e6bc40dedb60ccf522c1c2c6eb5fc69eb219b5d229ddbbb3dc2e6d141
+size 921623
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_bl.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_bl.uasset
index 6273a3cb..dadef7fc 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_bl.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_bl.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:52dbe3c5496c3949c59d0a5b7e8ae816e5571d3a09b423affbd03006b4f14888
-size 12703
+oid sha256:e876e73343bd57250499efa633a2fd09a928f59a2ac67b8a2b89acd87e764433
+size 29879
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_or.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_or.uasset
index 774cc791..bf3b6165 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_or.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_or.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:acabfb217eec8f624b0f8fcceecd67e744139a19eb1e8de7a1155b7feed908c4
-size 13332
+oid sha256:9950fa18add866f20b8b620f5b79bf594d504c96072333076ca537c9a67826d7
+size 26898
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_re.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_re.uasset
index 3473b382..4e8973c3 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_re.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_re.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7c70ed20905afd7e4d88af08b0f900cda21dc677196659f4084fa3ceb2652e87
-size 12631
+oid sha256:d0db2020b803379c4e13d855be85568e517050045b6786996a67eaf40e7b118f
+size 20276
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_ye.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_ye.uasset
index 9baf2a19..450bd1b3 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_ye.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/cofffee_table/coffee_table_ye.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5978b6b41a701149e7f543cf3afd9cfce4f8b51c7a0adee5b6a970599736977e
-size 13035
+oid sha256:afc8a5f2140e6955be3a7db237c0d860aae61134b92afde89f284820e22ac5ae
+size 28392
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace.uasset
new file mode 100644
index 00000000..703db0ba
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55a43b825eae14cb745c317a9417396f9a243b81218331ef2e2ebd8e81d0098f
+size 15954
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_BaseColor.uasset
new file mode 100644
index 00000000..3324cfc5
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:08de7319607675fdb3c8a0a38ef72ccec41f04854d4f3e8049b8427b7aa80d85
+size 1175411
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_Normal.uasset
new file mode 100644
index 00000000..78c9d8a2
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2ff287194d962b06ca1b6dd6526e64a2f21f437a99567390057b59509b439085
+size 850845
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..977cd672
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/fireplace/fireplace_01_standardSurface1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2cdf55c6560344348f03d2df2cdf5625b019e6203698302d05feb5f619164a96
+size 784700
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_Normal.uasset
deleted file mode 100644
index f318d826..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_Normal.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:429d2d6720b138b18e91e3e0b98fae178eba61f3a849b6d677156279df903a34
-size 24701
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_OcclusionRoughnessMetallic.uasset
deleted file mode 100644
index 8a0d6615..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_OcclusionRoughnessMetallic.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ce18080fd9d2ae180f7687bb049b10d24684fbc8f7ff15c2e4504395a6469966
-size 771806
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_bl.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_bl.uasset
deleted file mode 100644
index b8f312a3..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_bl.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:734b580190a80587f02e9c08293d780f4d84fe88a2340882f07c187c4b094452
-size 13306
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_bl_BaseColor.uasset
deleted file mode 100644
index 9665ee9f..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_bl_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:000890209ac45baf9c8907fcbc6d7bda4e8f13d098c0bcefbedf4b135af0d0d1
-size 489710
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_or_BaseColor.uasset
deleted file mode 100644
index a5752009..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_or_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5b57aed79381056a83a04be4943f8ddaa145efcd8c2ba0b65af80018bb33ba09
-size 319235
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_ye_BaseColor.uasset
deleted file mode 100644
index bcfbac27..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_01/ceiling_light_01_ye_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c9221fae79f4d791c06d0634b07d4dd07eb9a1d9cea6965898fee94d461507e5
-size 439341
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_Normal.uasset
deleted file mode 100644
index f9632bd2..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_Normal.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:034a9ded34ef6bbafdbee6c9f5471d371d94e7dac47dc55ca3dd74bce83b7c11
-size 25132
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_OcclusionRoughnessMetallic.uasset
deleted file mode 100644
index 29a682f1..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_OcclusionRoughnessMetallic.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3547eb77f96fe2cbe6a5e7fd9fc6b2649e2e7207e79379545c170bb3b7103458
-size 632437
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_bl.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_bl.uasset
deleted file mode 100644
index 9f8aa372..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_bl.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e89bc1b30e17686d83eee433fb3168422bd04a5bf62608002619aa6fbe4df37d
-size 13304
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_bl_BaseColor.uasset
deleted file mode 100644
index 1b7bd960..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_bl_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:972c49e4eb41ea8e4dc1046b6013b077c1b8ca75ca2d7b616afd0efddf10afec
-size 357608
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_or_BaseColor.uasset
deleted file mode 100644
index be1bdc90..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_or_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:48a6e22d4a14a598f7fa92385fd7e8124baf13dbe73f1ab0b86f12767d5b0c0a
-size 259603
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_ye_BaseColor.uasset
deleted file mode 100644
index d9877e0a..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/lights_textures/ceiling_light_02/ceiling_light_02_high_ceiling_light_02_ye_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c95a1f15ec56fee2345158e5c61fed4570ca805284d3b22d7533022e1af0d0ab
-size 333312
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_bl_BaseColor.uasset
index c2561273..25d310ab 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_bl_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_bl_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e8583d328264d7c78f1146082f73fb129d50cab83d8751047bedaca4907a4646
-size 25693
+oid sha256:4c7b2efb9b15b365392fd47f73b20d15c04736bda64c0a2e389d0c1f147f02e9
+size 447510
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_or_BaseColor.uasset
index 51c26c17..2e52ef2b 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_or_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_or_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:43f225606f833d9fe420a1a07c1398dcc30e35f5c8d75e7686bd14e2f5ce261a
-size 25543
+oid sha256:a637db7ec5da78209c5e8d5505bc590d4b16e339f2e082cf0efb5d4237aaedec
+size 431055
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_re_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_re_BaseColor.uasset
index fe6b700e..287ff3b1 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_re_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_re_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9ff96c775ed664d03b9d10a6c42d7bf4ce486e135e3b91377f7824c828479d31
-size 25333
+oid sha256:2b2f79a1da220ff82d9ad77954ffa4f1655a39e2aa63e2b306789cdea72e9990
+size 453356
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_ye_BaseColor.uasset
index 35a3c755..10be84c7 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_ye_BaseColor.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_01_ye_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:758dd6c26bae69fa1208ed4724b5995cd5d525cc204455e82c0c3d0a11e91d58
-size 25825
+oid sha256:29d678d8fc5c8003b462573d15b9bd7fe81e64f257b1c6e08d7a4a0c7c778bf6
+size 430576
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_bl.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_bl.uasset
index 79a98393..5bc18734 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_bl.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_bl.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3260108887796881f73d51d52851ec990b81321f8935cb5b4e6f8a59cbb03a6c
-size 12575
+oid sha256:d27c3a6de06d8e22ddc0456d5a2b89f79eece1e16b031e99be1e0b74f8566075
+size 25217
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_or.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_or.uasset
index 5c50c655..0bbe1a86 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_or.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_or.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:82cf22909de9a9679ad12f2c7cea5e05854f590169b6261609158cfbd6bf155f
-size 13180
+oid sha256:0d9981a15f1ac69438ae56f4cb12fc79d66d8188b82bb956462e33324429aea4
+size 23238
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_re.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_re.uasset
index 53a2adb2..26969dd3 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_re.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_re.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b2249ef872cd4cbcb1c630eea8685cfe6cc872adf61066196d89f81783c586ec
-size 12606
+oid sha256:f388f5e08fc180559ee4301fc8f620fdce3ce91ecb0c8e88a97bf3393ae60a04
+size 18603
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_ye.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_ye.uasset
index fca57326..588e6f42 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_ye.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/side_table/side_table_ye.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:48301fc82561986d2f9275eb48d71a38841eac36d67e4ef0059c13fc1e25e3da
-size 13078
+oid sha256:bee15307e1072d93ec3623c3d717372276721c90e3276a53ebecb77de9a4ccb1
+size 24225
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01.uasset
new file mode 100644
index 00000000..715b2c66
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5ecd15be120a65c99c471dee0b8bf0cfcdc4121dc2fbe2aa51e1f2b507b3902
+size 13232
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_BaseColor.uasset
new file mode 100644
index 00000000..87b532a9
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1ea4408e8ef932d37becd46a444e0daeb013bf1c8908c4945b7c00a7f8839b8
+size 1016457
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_Normal.uasset
new file mode 100644
index 00000000..02af894e
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3850eb06f19ace58c345b84d729455a8a2a6214588d031cfd07990d08961f3cf
+size 1103133
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..5c468db9
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_01/sofa_01_standardSurface1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f71fee4a129e3e9def973e56e55a64cca4c75d1f7727f31de6e378af1aea9cc4
+size 975693
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02.uasset
new file mode 100644
index 00000000..e3245bf4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59e5de77ae561c21c524ec182345337034b0be8f13303b037249dc97757398ba
+size 18596
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_BaseColor.uasset
new file mode 100644
index 00000000..d9fd3544
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_BaseColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44e386dd5adebf4bbfa65d18750f030fc24cdda0244875d0e1f89418263c5a61
+size 535226
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Height.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Height.uasset
new file mode 100644
index 00000000..92306d72
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Height.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:262439a1ebad9354ac7dd866eb423e04c9e30d9e92657774842afd7c920bbd10
+size 85794
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Metallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Metallic.uasset
new file mode 100644
index 00000000..e1dcba45
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Metallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ea17322a871dbad301c14c0aacd84690cc4d6404da0835b2b01daf2bfa6a58a
+size 16346
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Normal.uasset
new file mode 100644
index 00000000..7bb03b65
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4409b3829f4710f3bb414e89aa14161c83679ede660e40a09423a3d7a1246da6
+size 987220
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_OcclusionRoughnessMetallic.uasset
new file mode 100644
index 00000000..9cc7ef67
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0ea1b070f1d6602c610fcbe2a4a1d820e73653eb9e4c028f82a880589cadf17
+size 876204
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Roughness.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Roughness.uasset
new file mode 100644
index 00000000..5301b398
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Textures/sofa_02/sofa_02_standardSurface1_Roughness.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f705455cba4e63f2c812195d03953b9a68dcf3270031dad6bd368e708e87114e
+size 437785
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Tv.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Tv.uasset
new file mode 100644
index 00000000..f9ea97ea
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Tv.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:997db270a6ec0927d758022281d4c52f9e8c684704b5379e175931295e4e15e0
+size 1488
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Wall01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Wall01.uasset
new file mode 100644
index 00000000..680bffb0
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Wall01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32d3f9bc7d08bb353d343e346b0b820befaae64348de9f158db8e7e3423aeb6f
+size 1501
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/WallPiece01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/WallPiece01.uasset
index 55292670..c89aa366 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/WallPiece01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/WallPiece01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:864fcbad8865636b1216607ff2d053d2c09e416f2e3e29fdb8e2bb3ca20bbdde
-size 21435
+oid sha256:20bb39999b16a68875550be9a14dd87b1cb0f40cfe28b158d2941ecddd4b052c
+size 1533
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/WallPiece02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/WallPiece02.uasset
new file mode 100644
index 00000000..256343ad
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/WallPiece02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0fd001f12480f8c09fbd9ffc26bfa10e7563893ddf321cc24b4c306af45a19fb
+size 21556
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/cabinet_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/cabinet_01.uasset
index a3525de5..105e2531 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/cabinet_01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/cabinet_01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:820e72d9f2fed2053f879cb41b24c82ddad92ebcdd01050f03d57618e070360a
-size 59434
+oid sha256:fe41309e17584cae2f3def4577034da59afd0107e74e1dc57b75fafa2a83d94a
+size 1525
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_01.uasset
deleted file mode 100644
index 312d3df1..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_01.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cf173d21265f5bcb7acf080241e4a0b54d3e09dc66d269158aaca1e9c74b1e55
-size 78319
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_02.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_02.uasset
index 131c8fd3..882cc14b 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_02.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_02.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d9d4e019da7d00128cde856d843ae897f2b736df10062104a1ac5affb9ed9514
-size 60674
+oid sha256:8ef28f4cc76699a62689dd0e4a89f35895193be7e0ef425cbf58c6a659cee633
+size 1567
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/chair_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/chair_01.uasset
index 3a3cc7a9..a9b3bb5d 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/chair_01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/chair_01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:594df1e5ec2f0e2ab4b4305ce5be559bea9a6a06a64dbc10ba62fd89c14a7980
-size 61837
+oid sha256:026c7ee13d4e4221636b0493a0fd6a16b6cbeb412d0d38a79dd1b8748a443bd2
+size 1509
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/coffee_table_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/coffee_table_01.uasset
index 91ed7468..95124661 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/coffee_table_01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/coffee_table_01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9ffece26975819cb1213cc4354fad8eb5a9522bbef114669a84733e89468f94c
-size 44931
+oid sha256:5a28b5a80b0e99b2afe710365913f1f6ca48a65d03d1f0d13cdca5f2a19cddf0
+size 1565
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/fireplace_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/fireplace_01.uasset
index c365fe79..e3e6d07a 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/fireplace_01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/fireplace_01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b0cf4644e77a958e4c68bf465e4b79e63847b528e0685ad8ad4f7ec2a3f160cc
-size 54568
+oid sha256:672d50281736ca867935690e1390a30f5d7627c266b4b631609cf45f386623e8
+size 1541
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lamp_01_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lamp_01_low.uasset
index 73cd72fc..8363609c 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lamp_01_low.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lamp_01_low.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:653ee052d66a21a30c5bb07760842ea64b9fbbe411002d66f0e547ef6541ee51
-size 147847
+oid sha256:6af0d68a88bceb3380f37d45acc926701e1f3aca15af3e3b3f53eb248c701690
+size 1527
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_blue.uasset
deleted file mode 100644
index 3971eb7b..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_blue.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a340b0710c3491413ede759c74a6eb1e096d9a92668f0a324af7b22df6ee083c
-size 13273
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_orange.uasset
deleted file mode 100644
index 83901062..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_orange.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fcb7769f8f17923a7a1bb56d62cc86ce26ac888078fcd70ada002ce403636a80
-size 13517
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_yellow.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_yellow.uasset
deleted file mode 100644
index 60ec8b55..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_yellow.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bf37460c8ea118e71f6010c2761c6433d72a3eb7e5469ef37d8df79a943ab77a
-size 13480
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_blue.uasset
deleted file mode 100644
index 8602e81d..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_blue.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e36839d81622d1df393f93229947755678d6b00bca85f61413b226d4a67608d5
-size 13271
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_orange.uasset
deleted file mode 100644
index 2cfa2ea7..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_orange.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:40b5fa893ba058fba4bbbcc55af1a80f72af0bc6f24bcaa118634848fd3e08fc
-size 9255
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_yellow.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_yellow.uasset
deleted file mode 100644
index ae5752d4..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_yellow.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c0f14795a76262831c4a6e45697de2d839aa6a26b99c41e6020562e05eac8613
-size 13464
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Emissive.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Emissive.uasset
deleted file mode 100644
index 87cad22b..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Emissive.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a8c33d5c9d4faf25e4b2c42ee51782e3cca8e4bae0e3b37344aaae6c3e2532f3
-size 27865
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Normal.uasset
deleted file mode 100644
index 7a389d79..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Normal.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ec48778424fceb2795765a93b5a347645ab55704b8def66500f6e8e23a220cfe
-size 206456
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_OcclusionRoughnessMetallic.uasset
deleted file mode 100644
index 10d0d518..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_OcclusionRoughnessMetallic.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:55d2835fab7f2525a1293b9c37524ffba6cca926ed92bad7bd30baf767d435b0
-size 3965798
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_blue.uasset
deleted file mode 100644
index bc1bc696..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_blue.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6516d30da58bb08071878b28054cf09838b4f8f5f9b36e950d2f274f6b41af68
-size 15600
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_low_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_low_bl_BaseColor.uasset
deleted file mode 100644
index 885a0e66..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_low_bl_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a6be3380da1b56806e98ac91f01cc4a7c576b89b746970099c9cdadc1f2e1d17
-size 1861852
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_or_BaseColor.uasset
deleted file mode 100644
index 80cefc50..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_or_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ddb7fd081c2c535d7b06fb488a33f4d8083211d0c2dbf70115d89f4c0093fa91
-size 1270405
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_orange.uasset
deleted file mode 100644
index 46516ec7..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_orange.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5e3fe2ce162a05c25b545b6ec3489b9c7088fdc176b9e6fd5520e717fea35837
-size 14553
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_ye_BaseColor.uasset
deleted file mode 100644
index 66fb8b40..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_ye_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:59368b98280d55149a694f7144f748dba589f8a7765dbebb94a9f4dc867b1221
-size 1684992
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_yellow.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_yellow.uasset
deleted file mode 100644
index 2282d53b..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_yellow.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5f37de4e1f827d2578183a64f6ac8201ac3e2f88844bef5d879be9ca9e3a01e4
-size 15398
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Emissive.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Emissive.uasset
deleted file mode 100644
index 9a6097b4..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Emissive.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:79a81bd33c3bd54a621941dab8c0984832cd7535bc60e670e12f167806ab958c
-size 20751
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Normal.uasset
deleted file mode 100644
index bd829f1d..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Normal.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:08cb828bbeaa73ff7a0a90fae89a794aa41ed03f2d9a63558e466fbdb214c1a8
-size 77899
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_OcclusionRoughnessMetallic.uasset
deleted file mode 100644
index 578589cb..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_OcclusionRoughnessMetallic.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1d35e09fca318e4cbc73eece98a1019af8ab0ebaef18b1a3e1d3e8fbd4044ab7
-size 840606
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_bl_BaseColor.uasset
deleted file mode 100644
index bcc4bfcc..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_bl_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b9006a19f0b26c2b21d080b816c4b584106341c033575e662fe090d3fcbb90be
-size 425580
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_blue.uasset
deleted file mode 100644
index 41f17095..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_blue.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:578a85ce211c651f36d776d9c564af7b3ea42022642d38394af5dcb9d2ffe049
-size 13708
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_or_BaseColor.uasset
deleted file mode 100644
index 97ecaa66..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_or_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2591268410d9633156da204c09d5e8cb7f12f25ac200bcf2c560ade4eb3ee627
-size 377028
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_orange.uasset
deleted file mode 100644
index 8f1586b6..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_orange.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3abc44476c766a3adcd1188a68c774fb4fbb31b0c03eada84db4568c7761edf1
-size 13425
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_ye_BaseColor.uasset
deleted file mode 100644
index 33c8ec13..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_ye_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8c9588e191b116aadf38c9f59225db2f147db21bc8f316ad7d97137b0768610c
-size 340667
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_yellow.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_yellow.uasset
deleted file mode 100644
index a83c116b..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_yellow.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3682c8b9ae1a991791fdb8addb6549610ad32175db305cb91064a09471c6c57e
-size 13669
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_blue.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_blue.uasset
deleted file mode 100644
index 494d99c3..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_blue.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3420e5bbea1b5b7a97b45df53ef537937c804a2880ea09d89111463152f39321
-size 11949
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_bl_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_bl_BaseColor.uasset
deleted file mode 100644
index c55beb4f..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_bl_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cd2d13dd7092d45db9c2d9da84fc11c6c0fb6d8120f02b7c916baa2caf274c78
-size 532922
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_BaseColor.uasset
deleted file mode 100644
index e80bc95b..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fb12a3eb29fca31b5bb537cfe0bd30e72e50239df3c96a6df5cfd5b4dbf112fc
-size 338277
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_Normal.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_Normal.uasset
deleted file mode 100644
index 31ad84d7..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_Normal.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:47ca5ac69bc65e98c3d9d386aaefa8fa204c6156b43608b396197196fe586e1e
-size 45351
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_OcclusionRoughnessMetallic.uasset
deleted file mode 100644
index 30d8b7cd..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_or_OcclusionRoughnessMetallic.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:af54f5d5b61ddd1108dbab3daa548bf1809cd061bc15c9ce16059edd7396b59d
-size 880770
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_ye_BaseColor.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_ye_BaseColor.uasset
deleted file mode 100644
index c75d6471..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_low_ye_BaseColor.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ee21eddb13a56e8d24cc8734f5719e82650a2bc1195f544a445ac7a8e862f77
-size 482368
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_orange.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_orange.uasset
deleted file mode 100644
index e44350f8..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_orange.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5e851b9132cf9ff85f9cbf814b90d8b61d4bda99f391dbcdef3149221fb1d5ef
-size 12406
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_yellow.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_yellow.uasset
deleted file mode 100644
index 6566b537..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_yellow.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5b50508c266304da631863c88ebcc1de70d3b4eb203d17177771cd131d2b2503
-size 12130
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/side_table_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/side_table_01.uasset
index d796d335..6d68cb65 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/side_table_01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/side_table_01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5b3f39566635fb9a16ade680e61565f1394cdd486306fff184e58b08f68a3953
-size 35569
+oid sha256:ad8f2eb7bcc104c6a769be43d0f70beb1f901d090991f01896b5ac954aef1516
+size 1549
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/sofa_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/sofa_01.uasset
index cbcb6fb4..af1bd0d7 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/sofa_01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/sofa_01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1b32d99ffd4a3dd42988e0153b894743bb78ab6f437f9f1b96849f4ce377191e
-size 61039
+oid sha256:cb7d66ddd40353418c5357e50d636486bccfd6af12c581b6cff4f38593a8f3c3
+size 1501
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_01_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_01_low.uasset
index b626c899..d9047374 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_01_low.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_01_low.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3ea23db589feffd0755395c58370215e3743692b84621cf8369317642e8f67c7
-size 67451
+oid sha256:22134a09ee61c55b3e6605bdbcf6c25dd9b4c8079cd472a08a35678a303a4214
+size 1575
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_02_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_02_low.uasset
index 8b22913a..6cb9d1eb 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_02_low.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_02_low.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:347ed2add1339ad754a3eba4dfd91a54c2198eae315718ae100bc93e67b0a0d3
-size 39154
+oid sha256:2cd110e59191aa6f8d860b2bfce226fad52adf7ffb20d4931920db9e09981662
+size 1575
diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset
index 4299270e..cbb194b6 100644
--- a/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset
+++ b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:fc51145854d6759b4f32c669b1cbed0c62e07401e1ed6d309c5ab7d4e1b7f01f
+oid sha256:168c4766d0d0686ae57a992b6b59db7ff0bf98e75547d37623910aa3d8c3649b
size 247653
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/BD_ControlsTutorial.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/BD_ControlsTutorial.uasset
new file mode 100644
index 00000000..0be75321
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/BD_ControlsTutorial.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40bd75983c7b88eeb6da42edb3385099060d4fe752549c93b78022ef04178432
+size 23414
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/BP_FakePC.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/BP_FakePC.uasset
new file mode 100644
index 00000000..58851687
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/BP_FakePC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:344ee11e0bef8351a5864ff640c6683b671b770618d874e7176520acf7ce28d4
+size 31613
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_ARTargets.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_ARTargets.uasset
new file mode 100644
index 00000000..2af01bdc
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_ARTargets.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d2fa8f3a9544a1a634ef263e4fbb972cd89d36e288969fd8ab0433b58d3217ed
+size 139421
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_BeginPlay.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_BeginPlay.uasset
new file mode 100644
index 00000000..1cbf22b6
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_BeginPlay.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aeaebe8f4e55dd6acef6fafb7f68b37daa8de601f6e7c49b731afcbbd8359737
+size 23701
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_CrouchTutorial.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_CrouchTutorial.uasset
new file mode 100644
index 00000000..6eb66527
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_CrouchTutorial.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5325ea111c8fb93bc1041dd9c0047c5e79a495b1d915692a93953e66f9928b7a
+size 32432
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_EnterApartment.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_EnterApartment.uasset
new file mode 100644
index 00000000..071fbb33
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_EnterApartment.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec504a6b730e8a130a953402743ccc6bc824ceb5a81c01faf75c4c09f3b4270e
+size 24494
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_EnterSpaceShip.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_EnterSpaceShip.uasset
new file mode 100644
index 00000000..0dacf6c4
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_EnterSpaceShip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed613e63504155e721996dea2f3180730a6b814cd3711ec6c49d2ed3f923cdf0
+size 30859
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_GoToParkourRoom.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_GoToParkourRoom.uasset
new file mode 100644
index 00000000..725a2f8d
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_GoToParkourRoom.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6240a080976c8265bb3f30dabffaa60e39342e4ad21a09e0c6e502b26db1bd9f
+size 79097
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_JumpAcross.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_JumpAcross.uasset
new file mode 100644
index 00000000..051f0897
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_JumpAcross.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4253efb3878b3746237d94284c111cbf6b7194174abacc443977b6c5c05376f2
+size 32263
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_LandAtTheLZ.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_LandAtTheLZ.uasset
new file mode 100644
index 00000000..08d2e523
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_LandAtTheLZ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c29582635bba8a022617ea4ab24a67129c83637a62708033c73e202e660c73a
+size 32480
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickAGun.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickAGun.uasset
new file mode 100644
index 00000000..e57df75c
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickAGun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bc46d8f06b67bb59c378a7fae31b43fdc3687f2564a982805a339d6cf7eb336
+size 101877
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpAR.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpAR.uasset
new file mode 100644
index 00000000..974afaa5
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpAR.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd1d85ab782abd0e077f12beb4112d4451c7c64d574fdac5286e919c833fd3ad
+size 112873
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpPistol.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpPistol.uasset
new file mode 100644
index 00000000..5f6bbddd
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpPistol.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b671686018ce92a788dd6081c763154a924b59d545598e4664e12fb8b7349785
+size 112610
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpShotgun.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpShotgun.uasset
new file mode 100644
index 00000000..e3a3f7b0
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpShotgun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:517c23d9b6fe1d1c153e85a8fba4c1395718150de1043538126813b8528f2b29
+size 112571
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpSniper.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpSniper.uasset
new file mode 100644
index 00000000..59489c9b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickUpSniper.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b40a020b449acdbe5936f8f50ca0392383ed9052fbc816bd801bc8f7891a116
+size 112615
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickupShipKeys.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickupShipKeys.uasset
new file mode 100644
index 00000000..4fe69927
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PickupShipKeys.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8acdf6bef392e519d56700c01d14c8baf5846ef88312e094fdd9ad43ec928b1d
+size 35556
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PistolTargets.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PistolTargets.uasset
new file mode 100644
index 00000000..1aa9c10a
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_PistolTargets.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5a5faea0ea4c17c09962caf04dbd847ae816e8393357f9d3aa3b98e58a536cd5
+size 138635
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_ShotgunTargets.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_ShotgunTargets.uasset
new file mode 100644
index 00000000..5310f2a3
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_ShotgunTargets.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9479dddf3a10d1d0d4c531c7a99b4b92c228fdba019413fae1dcc5b3ef3a611a
+size 139218
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SignPapers.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SignPapers.uasset
new file mode 100644
index 00000000..17653bdc
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SignPapers.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39f596602119a2d87afe4264d72d7c128a466d15e70edd392be378dad3c07c60
+size 41769
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SniperTargets.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SniperTargets.uasset
new file mode 100644
index 00000000..5b294b0d
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SniperTargets.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b8f05d26ba5ca90f8715c4b4f46a602ffecfe30b16dff0162e2109245b2f32d
+size 133796
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SprintAcross.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SprintAcross.uasset
new file mode 100644
index 00000000..3d7aa91c
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_SprintAcross.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:997d9aabef7ac6af506b7c5e0ae86773102ebe12751037356f93165a94a3b8aa
+size 32411
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_VaultOver.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_VaultOver.uasset
new file mode 100644
index 00000000..f4893bc5
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Checkpoints/CP_VaultOver.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c8afdedd67bcb947122e95349c550600f599cd77cc28d582f422bf7f97e547f
+size 32316
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset
new file mode 100644
index 00000000..34fc9e16
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/MB_Training.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e8460e234c4bb8d7571c60a13281283510f8e388120cbe9527f2bd6a3f0b4a0
+size 26318
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Misc/BP_PapersToSign.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Misc/BP_PapersToSign.uasset
new file mode 100644
index 00000000..d83dab3b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/Bounty/Misc/BP_PapersToSign.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:79eec3fb21c2ada496405f3c9a6f8f24c9306a55f5d52bdcf78dbe74bedc1006
+size 33726
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_CombatWorkbench.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_CombatWorkbench.uasset
new file mode 100644
index 00000000..61ff3b15
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_CombatWorkbench.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:62ee6facf2a63f60f1d057899ce4e80c5eb84389b939b2c146628fda8f895c43
+size 2783
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Seat_Low.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_DroppableWall.uasset
similarity index 81%
rename from EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Seat_Low.uasset
rename to EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_DroppableWall.uasset
index a3b1dc09..26886a65 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Bathroom/SM_Toilet_Seat_Low.uasset
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_DroppableWall.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:905cd7474a033deaf0af950c1bf3f98f15a40f8f0add6b1fac4d054440391bfb
-size 23961
+oid sha256:5b896386b8e32c99eca2998dcc443984ebf5a6ea28c54046bfe4f3027503f07d
+size 127945
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_GunRangeWall.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_GunRangeWall.uasset
new file mode 100644
index 00000000..6ed7f13a
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_GunRangeWall.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8dd926ea7e6924616ceada6e5ff50269b549da036d34ffb834f5a6f13e9e4baa
+size 2765
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_ParkourSprint.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_ParkourSprint.uasset
new file mode 100644
index 00000000..4b3b3a47
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_ParkourSprint.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dea9280b8c091095f5edefd98ee76c8a8a288163cb079c1e1ccbf4f21a53d198
+size 2792
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_ReconWorkbench.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_ReconWorkbench.uasset
new file mode 100644
index 00000000..5a55bff8
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/BP_ReconWorkbench.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0441dbf253174c2b1ea779f66c680ce130cdc801e0458f561558a44a9ae4c336
+size 2763
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_CombatWorkbench.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_CombatWorkbench.uasset
new file mode 100644
index 00000000..ac8bd1a3
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_CombatWorkbench.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bba29d903bd71cd8616cb0d7fac5d27b6f96532ca0f79a8ec153e2de884045c3
+size 22827
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_GadgetWall.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_GadgetWall.uasset
new file mode 100644
index 00000000..66bf5551
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_GadgetWall.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:370cad49c42aa8322993053abfa0955b5aeb9c6035392c82a01d7bf12c7e6e3f
+size 93912
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_ReconWorkbench.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_ReconWorkbench.uasset
new file mode 100644
index 00000000..4161fe1b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/GadgetRoom/BP_ReconWorkbench.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:589125c0e5dd3e531117df471dc16a549d3ef6f72ddd7ceed1b6832b9f75371a
+size 22912
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall1.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall1.uasset
new file mode 100644
index 00000000..e63ad1c3
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:007c41e02175f5148b70e70402ff985c1d343b0ce85f5b5845f82351aeb6c8b6
+size 105113
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall2.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall2.uasset
new file mode 100644
index 00000000..ad3cfd25
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2b24b7285a71d441bb8813d55db2341fe7e99b97fb25b33a84ca1e1c4a7bee0f
+size 111590
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall3.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall3.uasset
new file mode 100644
index 00000000..9905d716
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Parkour/BP_SprintWall3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed77e01ce92927b44b11dc1b5515bdac53fe8c0669c02884850972d491a74381
+size 110924
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/BP_NonShootableTarget.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/BP_NonShootableTarget.uasset
new file mode 100644
index 00000000..2f3a6471
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/BP_NonShootableTarget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9da4b09d534f6e2890b12d0dbaacba8204da954d9c88f454395070346a61c993
+size 63628
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/BP_Target.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/BP_Target.uasset
new file mode 100644
index 00000000..4e299b9e
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/BP_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e333e91573e1d36e39ad1e52eb0da38a11aefc23ed219427acfc9ffe3a3160f0
+size 99655
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/SM_Target.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/SM_Target.uasset
new file mode 100644
index 00000000..7bfa5233
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/SM_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0c6b1e7ba9d78c1752b96d90f652dbfda550b96d08d97db56f34cd274897422
+size 29601
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_C.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_C.uasset
new file mode 100644
index 00000000..43f68eda
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:de9b79bf2149eccf293bf88be50ba3450abd11fbe68e1b17913f4a5f57b46bb2
+size 1316815
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_N.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_N.uasset
new file mode 100644
index 00000000..7c6d7eb1
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2eb9d76d83ba5bfaedfb1ef45c5ade93fc2c0e8ecf555a9c32dea22d3fe28960
+size 1917805
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_ORM.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_ORM.uasset
new file mode 100644
index 00000000..e422457c
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/T_Target_ORM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52d4a658432ae5501d4aa4bc7355d43109d6032616614bbea13c8d2ebae10c27
+size 762390
diff --git a/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/standardSurface1.uasset b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/standardSurface1.uasset
new file mode 100644
index 00000000..f02b0cc5
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/ControlsTutorial/GunRangeMechanics/Target/standardSurface1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d04d6fd6e9dc14ff6f65a890367b8165bf8e9db049cd1cd7339f2e999dd8833
+size 8260
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ElimTutorialTarget.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ElimTutorialTarget.uasset
index 6f3dcce1..e35ad8ed 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ElimTutorialTarget.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ElimTutorialTarget.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:eafef3871610bf15d90d680c56e28c40ec4e54d5b735a02ae83706187362aed0
-size 144071
+oid sha256:e517fd38bf17f395edda2c998cbed260ac94e95ab348f7eb696232dffd112dc9
+size 143697
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/BP_CombatWorkbench.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/BP_CombatWorkbench.uasset
index faa2e306..2e888b3f 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/BP_CombatWorkbench.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/BP_CombatWorkbench.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f506b5b0ad3d818c7bb6bd8f82a1fb7c632e92eb3dfedf4ae0e49401b6a6f060
-size 23514
+oid sha256:7ca32d8fb46fc46a26048f0055e978a2581adb2139ee494329a1041da61bf936
+size 2760
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.uasset
index 1f6752b4..b4abdb12 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1aee6585c4133154fec11fcd690c3526714b66b588b9376faa7747e52abf4dea
-size 39732
+oid sha256:7c8b4bb3136c292666348a27c69ab73e1431c62985783fa66a12f622d002228f
+size 39827
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/BP_ReconWorkbench.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/BP_ReconWorkbench.uasset
index 20b5b980..4c9ab416 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/BP_ReconWorkbench.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/BP_ReconWorkbench.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2e7084fab6eb5149aef1ebd8b44303477718dd4b17e59faea6c7800ed62e0847
-size 23596
+oid sha256:db7428812684fd4a236a27ac272036dcb2c51411792f52a44c6c2880229efda7
+size 2738
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.uasset
index aaf6e2dd..ff594e93 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f0a7a523b9dc5a9fd685258cfe8bc60991d2b239148d8c017972673ba0746022
+oid sha256:d3222e9e86643dc447022502f2d9dc090dc6a5ceba6cb22140e5defb450ca494
size 520107
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.uasset
index 2d8edcfb..faa470af 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2b2eceefa723dc5a79b3448b1277eb03ad31fe713a73ae42884960402ea2429c
+oid sha256:0ee539ee295fde45825def6001d96e70a7355c910663339a71f9c8c07fcbd820
size 190143
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.uasset
index b4141b1a..a1b1fbdd 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:071579af66b333f7354cdc3ee309285fe452adc58f847709ffd2dc1b01f41c81
+oid sha256:a9f7052caaca78dbd170a68b849e9a498fb9d1c0167dfac5ec0d3d6e1a5f106a
size 199883
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.uasset
index 10871996..1ba1c568 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c6659b1d9be99fffeb3adbbc370e72134d7171ec8fced2fd201cb05ca37879a1
+oid sha256:599a90873cb758c9263040510ae22bc8c88f19e2541f495c0f8f26f8fe7bd58f
size 278003
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.uasset
index a1bc0b4a..8ccad9af 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e74bd8508b9be1aa54bbc732c981019da67048cc1ce66fb6ae73ed5291a89974
+oid sha256:70a02c53ec549db94daae705eadfcadf479712eab787bc99be7b0072dbbf189e
size 216041
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.uasset
index 9d046e2d..9043d5d4 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ca232afedbe4180964c5d88d58652e813ab13d21983d3180c8b3efe2db92ebd4
+oid sha256:ac65e38904a43f9572a5541d03d18fba8541cb04d0022c33d650a8e22e1c0e99
size 207080
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.uasset
index c2e466ef..8f9e9b0e 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:27db0081fd42181a7b3029147cd9b60241ca34d5344895b42fb55b3c3736a7fc
+oid sha256:66ced6f4829c1047301466482d34b1ab715a75f9786b4d67201c7e0dd1de2c27
size 265249
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.uasset
index 0ad00735..cbbab91d 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5bb79f197937f86b99e5a6b78bb4d2a9ae213001c6bb5af8c4fae53aaf267b6f
+oid sha256:3e9c1b089ca16b48abbbe8f8e3707d58359c31b1714b1cc09d0a6cd8ff761408
size 287298
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.uasset
index ecc7f33b..1ae804b0 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:56e3150d658610c8de5bb8ccf6d9c3ff6b36c0589e075a8ee7ad9d4bef669861
+oid sha256:67b866902ab14c076b998c503565fe47b9a286b804ba15dbffa941f777e75523
size 93869
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.uasset
index 2a91232e..942736aa 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:4d349b3119d1681d78deddd0ee588beea88885d6f22cf243cd62a3fe5ecc17c9
+oid sha256:314f8e68e722882c47507880a3a01d31e2cc3ae7b38499fac5aff1970f4063dc
size 222864
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.uasset
index d5945eb4..94cda5d1 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b95798ae92d9799996e45f036fc693a2677b1c109aa4ad47c9915c5468cc552e
+oid sha256:9443f0754a9150ccc2d576068d9477f8af0de722dd48c1674bb779c168cb3c52
size 349128
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.uasset
index ff886d39..1b733020 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cdd7ef44fa54e4d6fc107c80a5a1b9fbf7eaa388d499c159301ed2104925dc4d
+oid sha256:22920c78e8d4fce5e8201fd7f3677f71af46e9a2983a318ccd59b7953abe5041
size 514322
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.uasset
index 7fa3ddde..e08a1cea 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:daa532eeb32993dd1609b8c7dd4c1317a55e16041a8c7522202e79f3fa05b7c7
+oid sha256:df4909ec22cfb8bb33b96b9543d632d94f698aedad617b7155caccfa30f51620
size 279708
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.uasset
index b20f2df5..1e98746a 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:214afb1bf6af99da3b9a6cd363d54ebbeaf9e60e72969ef6ce67dc4d4e5f6143
+oid sha256:c6ae7b861db5537ec6da74a374df59ab9de83245d0f2edc89700e64192cbc0bb
size 264982
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.uasset
index 2785d428..37e99fbc 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9ecf3107ed78b41ad8a06501fc8822b97472e1bc17b51a3e38789e4abb212c30
+oid sha256:693e100e900d78d4f0b6b2b9e4aa94887f3f5ff61472e27d6637440ecd986906
size 201408
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.uasset
index 665bc512..47834a34 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d968ba779c0a08c5e29149afe3055046d287cc37dfe5946409ac83a062d0fc95
+oid sha256:bc5d4c874b276896a5c7e312baf31dec449ecf8335fe16c0f840cacdf4e54455
size 233871
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.uasset
index e0e5fc91..62348f3f 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:c50495df45378664166ad5468b3b2f6f1229d1abfc385ea148c5ef8c3e129f5c
+oid sha256:a405f2635dab582bc03bcd0d1755e748119069f1cd9bd1cf999368508b530091
size 243459
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.uasset
index 9cf119e2..007c07e5 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:08b93cdc713cad71806aa5c7ea8bab313b47c15b92a24d9180ae0efc6e040648
+oid sha256:839551287c132b8adf1f989383f7eeef22dc25d1ce0c3715a9aa8ac584d007b3
size 223835
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.uasset
index 160a480e..c4d6f37f 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a9d69f271f131e122068d8e9e01c015d8bde01335387e8747da96f6a9524a56a
+oid sha256:3af6b53040bbf9c6981c279d869765e118dc793358bc7b3e8cb3e85afadab01a
size 154151
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.uasset
index f50ed79a..3a9ad85e 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:de56af9d93500dd96005a6f362986c71431d04bb08cc95209d575302b059200c
+oid sha256:302ea1f05c0bb01b3857874440db2e9eebcae7bbe8f2900be6764d6b98080a6c
size 196683
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.uasset
index 1b6be2b3..ed717240 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d795b0936261bd5a166c0e22670071610b45c08f4751017b6ddb2a89a66ab747
+oid sha256:58142883f2158722839c0bb64738a269a1f960cdd82840857246e9738416f53b
size 230592
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.uasset
index 9fda58ed..871edbb6 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7c06f98e8fe37c5fdda89a159aa06651d1f86291cfa291a4d69fdba21cb5a14e
+oid sha256:2e56bd8e60a11b604e5b6037c7abf13a929bc8695e28afee55fe1afaeda2496e
size 234019
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.uasset
index abad250e..57dc1edd 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:75b42558116e853a22943f952546a557ff75e2cf8b4f8b0afa3c240187145618
+oid sha256:12f8fd87f96144c9f206f7faac11f2bc7b016fa9b2977d0b509802279cbe477f
size 224994
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.uasset
index d4260014..f5b1d62e 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:132738939e45cfe9982439bd1b391d363850cb7c803d405c9894683d7d591d75
+oid sha256:94cc5c50d6999063d3ae435b09ce77696c5d6aad8103ea084ec7e4d995e26b3c
size 251621
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.uasset
index 037ee9ee..068824b4 100644
--- a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.uasset
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2613e30fdd451c4c60be7acee8b6c0ca4ca11ac55b81c6a3649bc87e827b9e42
+oid sha256:b96eabdd3e093be39d5544ed2b3dfa40947e53a7f14ce0b9a20f381417e064be
size 148252
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.uasset
index 272cca49..38b6f5e2 100644
--- a/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.uasset
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d0aecd15ed5150cad733053745a0db554ffe01be74a9763eb0fb24f1a639b48f
+oid sha256:5338d603d1c815c109aa7a386ddda7b3eaeffc49c729d3c3bb39c8d01fed048c
size 211777
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/TextBackground.png b/EndlessVendetta/Content/BountySystem/Waypoint/TextBackground.png
deleted file mode 100644
index d5781e4c..00000000
--- a/EndlessVendetta/Content/BountySystem/Waypoint/TextBackground.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8d3cccd91fdbe7e0090f451048771e56d36dbe24c3cb716b63d99261f414f868
-size 2232177
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/TextBackground.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/TextBackground.uasset
deleted file mode 100644
index c80f44a0..00000000
--- a/EndlessVendetta/Content/BountySystem/Waypoint/TextBackground.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c06aa560dd0dffcca87ab60abe3a290e98e28c94ef52e58338c9e985c83d1ac0
-size 1854378
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/WBP_MiniWaypoint.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/WBP_MiniWaypoint.uasset
index cd79767a..8a6d4924 100644
--- a/EndlessVendetta/Content/BountySystem/Waypoint/WBP_MiniWaypoint.uasset
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/WBP_MiniWaypoint.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:432d04e87414a6a95285b4468bfe64d4631557cef349a37f6e60087e843f85d9
-size 48883
+oid sha256:09d390aed28cadeb787d80dd32b81bbf6067cc1616136ea99c308f8cea054777
+size 48240
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/WaypointArrow.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/WaypointArrow.uasset
index 9075ef38..77db169b 100644
--- a/EndlessVendetta/Content/BountySystem/Waypoint/WaypointArrow.uasset
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/WaypointArrow.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:2884feab6896eaaf2cdd9e4333c02587c758c7a64f64dd69a216e8e8b5690afe
-size 33714
+oid sha256:581ee1ef957a3b4e90433ecabc49b6afd731418013eb96e516f54876097f0ca4
+size 255
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/WaypointArrow_Spare.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/WaypointArrow_Spare.uasset
new file mode 100644
index 00000000..5615bcf8
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/WaypointArrow_Spare.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6b708b6b30eb850215814c477dde66f4a44cfcb6ab341740def05e06fa0789c3
+size 33744
diff --git a/EndlessVendetta/Content/BountySystem/testintesting.uasset b/EndlessVendetta/Content/BountySystem/testintesting.uasset
new file mode 100644
index 00000000..0c667c09
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/testintesting.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a52448bedde7fdbdaa6dd78db571d463666715dcf04c67bb55dedb81fe8d8488
+size 9233
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset
index 68f6e73f..9e824917 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b0a493fd95d8b0b43306329298c058cfa2f164ec071457bc575a8eafee95f1b1
-size 53936
+oid sha256:c99ec2b828cf671d0d33afa160e745375f0b82d79a8b49f2e9e74c0b68aedd7f
+size 76231
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
index af5ea1b4..2ef319e4 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:5e1e829f4770985384af4baf7f94ed5089f11e12ec69b2ec09fb5f193a1ab960
-size 124465
+oid sha256:c20c755e25ce7a0993636889cf8bf6196888a85f4428e15eb600c48cb357d5f4
+size 123751
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_CheckpointCompleted.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_CheckpointCompleted.uasset
index 0a4f058e..03d31d95 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_CheckpointCompleted.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_CheckpointCompleted.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:1a92359cc39feb0549f88beb0aa498c448b67afac995e88ffa2de837ad2024ec
-size 80434
+oid sha256:168eab234b2248149f8a77cd3fd4994d21343f6d49b6307a7a8f74cfdbcc670c
+size 129919
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Crosshair.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Crosshair.uasset
index 939e70d9..29ebde67 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Crosshair.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Crosshair.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:13ff21aa89e2ded711aff8ee6617abc2d565d222c39ce3878969fdfe44d5a81f
-size 75992
+oid sha256:8ac7733948c885fda46dd009dd75dfe5c79abf1262e9aadcf17c401bb8f64ecf
+size 93512
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Fade.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Fade.uasset
new file mode 100644
index 00000000..fafe56ed
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Fade.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c7e25f0c142b4aa1486a6b3b02c8fb0bb62cb2e9e78541b3d7045f1d899d5e6
+size 50956
diff --git a/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.uasset b/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.uasset
index 2c5487a6..ae91912a 100644
--- a/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.uasset
+++ b/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:70a1e8adb61b189a8a9551e3104fda9ef0734eb0bfbffedc540d6b18dde1cc17
-size 91110
+oid sha256:adaea7221b86e8f8d6854894d58754e2558b9f13ab7e168cd915790e11d95bb2
+size 91205
diff --git a/EndlessVendetta/Content/FirstPerson/GunMechanicWorld.uasset b/EndlessVendetta/Content/FirstPerson/GunMechanicWorld.uasset
index 5f3a461d..32365376 100644
--- a/EndlessVendetta/Content/FirstPerson/GunMechanicWorld.uasset
+++ b/EndlessVendetta/Content/FirstPerson/GunMechanicWorld.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:d6148c27e76119507665e2b58c6032c998ffa701c31a41b362657aae54b7bb7f
-size 19805
+oid sha256:7138e664b5b66500b02b934e658efb4472924cc85bcabe930aa0baaabe2d8d0a
+size 19641
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Sprint.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Sprint.uasset
new file mode 100644
index 00000000..1a2ea734
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Sprint.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e25b72a06c43ac63140b164e9ee5e2a8222f021ac5bd045149a27c2d8f073a1
+size 1360
diff --git a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset
index 6f199667..4764655f 100644
--- a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:750ab013f24a45539806fd40e9cd2a328ff31b40c5d3edcce0676fb3bf6935ee
-size 18664
+oid sha256:8576231cc54d32ecfa8c00c7570ec51bb9d741dabc85bc0b4ef684bbc8209d04
+size 19248
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset
deleted file mode 100644
index 44d21afa..00000000
--- a/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bd95413d072ec5535444d09946cfb0ec3f4f6392ff5712e60fa521c845b23cdc
-size 478510
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/NewFirstPerson_AnimBP.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/NewFirstPerson_AnimBP.uasset
new file mode 100644
index 00000000..d6588e8e
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/NewFirstPerson_AnimBP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:16c75ff1ae695d70ae4aa1d517049c8cb1c981d93a59ab470bc5534bccacd346
+size 964528
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Idle.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Idle.uasset
new file mode 100644
index 00000000..a3f08a73
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Idle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d334eee78aa725558edb1518a9e2620d862f8c43ceba81312fceeba711085fa
+size 259052
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Idle1.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Idle1.uasset
new file mode 100644
index 00000000..df1029f6
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Idle1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52486ff2de88b0e6109936b73f79bd59d90644a39dd65378d8c3bc11a80d2f01
+size 259057
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Jump_Loop.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Jump_Loop.uasset
new file mode 100644
index 00000000..08310084
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Jump_Loop.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0fe321a507df838f31eafe08591bfcd7d5009e66609562f53a13045898da1f64
+size 101190
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Jump_Start.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Jump_Start.uasset
new file mode 100644
index 00000000..092d64cf
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Jump_Start.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:608b8a9f90aa41997cd79da46542915001cd8a4c0eee8eb80cbcbc70b4540002
+size 82075
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Run.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Run.uasset
new file mode 100644
index 00000000..d4a12f28
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Run.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c65d1a77abf7d6e6742c8558d91d2195502c6eb3979cc9a05f3993a4e727a5a7
+size 92962
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Run1.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Run1.uasset
new file mode 100644
index 00000000..33d387fb
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Run1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e1139e6f375213d0db3163792c27e1de68b5fb844930da14e952c417010a0fd
+size 92967
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Walk.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Walk.uasset
new file mode 100644
index 00000000..78215f6f
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Walk.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd665c14e5863a05b6f91cd2e710069b2257a1d04c3677c89c9fe8187daabe8c
+size 125755
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Walk1.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Walk1.uasset
new file mode 100644
index 00000000..2286175a
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI_Walk1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:992806f25e4c891f055d071ded3e34acaa7c7ed52d805d680b008b55ba9b5795
+size 125760
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI__IdleRun_2D.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI__IdleRun_2D.uasset
new file mode 100644
index 00000000..c2356a12
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI__IdleRun_2D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c24f60d98f5d8c0f85246a77d15eacf25a17a265e3efaf125584ef94553e143
+size 8386
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/VI__Jump.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/VI__Jump.uasset
new file mode 100644
index 00000000..44c7c07d
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/VI__Jump.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f80ffd1fd0a97ecbc3d2e1f8bd26351977a4e7a95a7f0c7d8eb5641cec9b662
+size 60382
diff --git a/EndlessVendetta/Content/FirstPersonArms/Character/Mesh/SK_Mannequin_Arms_Skeleton.uasset b/EndlessVendetta/Content/FirstPersonArms/Character/Mesh/SK_Mannequin_Arms_Skeleton.uasset
index bccc6d9a..91e47258 100644
--- a/EndlessVendetta/Content/FirstPersonArms/Character/Mesh/SK_Mannequin_Arms_Skeleton.uasset
+++ b/EndlessVendetta/Content/FirstPersonArms/Character/Mesh/SK_Mannequin_Arms_Skeleton.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bba7ff2cd9205073c53bbf6989c00058bf9cd1efe18fe82e0d996a80e5af38c6
-size 19118
+oid sha256:f4e7da19e1c7c367caadb1bf513b3f7353b8ae90bf24428e0418487ec339670b
+size 22171
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_BothHands.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_BothHands.uasset
new file mode 100644
index 00000000..7ae70eba
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_BothHands.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98ac7e51a0fa063d2cec76b3a1af51094ca507c570ed67f2b848deb23c971f05
+size 180925
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_LeftHand.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_LeftHand.uasset
new file mode 100644
index 00000000..4e5f058f
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_LeftHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51b71e61eed57b4ea223a94dcdc564cb64292b10b008e07ec7bc7a01c6e53c52
+size 142031
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_RightHand.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_RightHand.uasset
new file mode 100644
index 00000000..d2aeb4ee
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/CR_MyVI_RightHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2764902041091cbc06c97111b28c6cd6fd6c189c5f17f13536bc700056d02d1b
+size 142049
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_100.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_100.uasset
new file mode 100644
index 00000000..87bf036d
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_100.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:88d65cc14478926f0d063711396e6bc40c787cabc22602b735c8ada8cc92c844
+size 82599
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_100_Montage.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_100_Montage.uasset
new file mode 100644
index 00000000..37c261fb
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_100_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24728201e5ecb497862123c4ef60ba553b00ebdd8ad35294f0255742c177a27d
+size 9368
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_150.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_150.uasset
new file mode 100644
index 00000000..91da4617
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_150.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67d328fea4981f2f31877fe63cfc8c180212aa505a866e65a7d9a97380830015
+size 88069
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_150_Montage.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_150_Montage.uasset
new file mode 100644
index 00000000..86d4ff87
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_150_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:61f7a74f491326853732777b292c2979b887661a6023e95e072906d3808d6126
+size 11766
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_200.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_200.uasset
new file mode 100644
index 00000000..3308e78e
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_200.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0fa2e31e6746c1d2ae9ad3fbeb765b499ede4f5a443226b922a7b373317dceda
+size 115343
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_200_Montage.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_200_Montage.uasset
new file mode 100644
index 00000000..38440b34
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_200_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be607e68c85ac5d93ce2363fdb7bab21ba42a6d8bf7cd7120565c04fde3a3d1b
+size 13319
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_250.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_250.uasset
new file mode 100644
index 00000000..28fd41f4
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_250.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:21d441bb2168f8914179a0b179e4f764acf13ecd71495fa4ab7e25dc6774ceec
+size 126234
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_250_Montage.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_250_Montage.uasset
new file mode 100644
index 00000000..99ba8ed2
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_250_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8e7aa4bcbdbf677720ce12db8c1b1184b406d47c329598ed05780798706ec74d
+size 13301
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_45.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_45.uasset
new file mode 100644
index 00000000..a2ddfe60
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_45.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd702f20cc02958c47b4ab40ab248fe54f0c868f6130596510243a0983288494
+size 82666
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_45_Montage.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_45_Montage.uasset
new file mode 100644
index 00000000..51e728a4
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_45_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a83dd3218602cee0308b17ddb50c45d5ec51c67730c6564b85f1e19d69eb0ccb
+size 9387
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_75.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_75.uasset
new file mode 100644
index 00000000..71300d31
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_75.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04976f9606a9d51a9ffeb3293367c70c5f96b71aed39fed7f6d0b54cd6d2edba
+size 82690
diff --git a/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_75_Montage.uasset b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_75_Montage.uasset
new file mode 100644
index 00000000..4ae4807d
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPersonArms/VaultIt/VaultItFP_Height_75_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a433342c94e6b05230b79bf98a8625e21cbca23893de7232ac8583cdcbddbc1
+size 9411
diff --git a/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.uasset b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.uasset
index 9f2d7e12..ba3ed1a5 100644
--- a/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.uasset
+++ b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f275cf27038f08969c74d019dc74731cd60776e4e9ce940a5ef083740934f7e8
-size 244041
+oid sha256:a151da322a0fb86ad4ca49184f7d9406b2dc44ce713d672304b481a163fac4be
+size 244136
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.uasset
index e8226353..66a38058 100644
--- a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.uasset
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:31f38b67634e9abe78242aac142e76eafee10d6101d5189f13a941b1a9bffb4d
-size 27381
+oid sha256:ddef0f62fc54b82fb916ec1d72aadea54db7a30675c2840aab4e49cab7e8f497
+size 27461
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.uasset
index 60b1fbff..494c5659 100644
--- a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.uasset
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:71d15ce6872f9185621eabe6eb24774f8014dfddbc4e89e6c6961f662d269445
+oid sha256:239a1f6347698d7deb03e9b31eb46e6a5795f89374211da1b11e4e32e9646a34
size 74727
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.uasset
index c4a60031..1f97ce5c 100644
--- a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.uasset
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:95440712c856cd34fe77906b6c4fc85647181e6d06277829c741e41167abae08
-size 20322
+oid sha256:1e9c054db8f8c8970f8c742006b70c29fa8cd9ba311b38499d737b30b0ea8876
+size 20417
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.uasset
index 8db47e99..254bc705 100644
--- a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.uasset
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:67d9f11bc227f55da0c8ed5642e838600c464ad28dd6ff960cf8d89e3e4d2156
+oid sha256:46e5c49441f486bd4607411e3bd01d9362ece2a0b8879e6340581bfe952e0d9b
size 45631
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.uasset
index 4e03bf1b..6359bbda 100644
--- a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.uasset
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9aa56bafa97642804de02c9e00f3a77e0794167d534174993b616e8761757153
+oid sha256:b611beeaa3e62299a47d60c02f26187efaa41a2cba59cf133ad32fb5df41de91
size 19863
diff --git a/EndlessVendetta/Content/Levels/Apartment_hit.umap b/EndlessVendetta/Content/Levels/Apartment_hit.umap
new file mode 100644
index 00000000..3699de65
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/Apartment_hit.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa51241ae1af23456e7f888143053bb9725a7b23a368ba22605845f0c9990797
+size 234051
diff --git a/EndlessVendetta/Content/Levels/BP_LevelRestart.uasset b/EndlessVendetta/Content/Levels/BP_LevelRestart.uasset
new file mode 100644
index 00000000..f5cabb07
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/BP_LevelRestart.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8580561398a23cc68eb441c7d936c8ba01841175ea2cc6544410e205c7ff1ae0
+size 50698
diff --git a/EndlessVendetta/Content/Levels/ControlTutorialLevel.umap b/EndlessVendetta/Content/Levels/ControlTutorialLevel.umap
new file mode 100644
index 00000000..9748e914
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/ControlTutorialLevel.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a86a917f878f965f58aa3bf308f3fdb2c29dd30ddc5d7f261b2dd0447ee3c44c
+size 17258822
diff --git a/EndlessVendetta/Content/Levels/NewMiamiOpenWorld.umap b/EndlessVendetta/Content/Levels/NewMiamiOpenWorld.umap
new file mode 100644
index 00000000..8491de0a
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/NewMiamiOpenWorld.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a6dd793131a6a642b1658d491820536d048c60b39ffaf6006823f150263ab3cd
+size 13999947
diff --git a/EndlessVendetta/Content/Levels/NewMiamiTemp.umap b/EndlessVendetta/Content/Levels/NewMiamiTemp.umap
index d389e5d4..e62f72e8 100644
--- a/EndlessVendetta/Content/Levels/NewMiamiTemp.umap
+++ b/EndlessVendetta/Content/Levels/NewMiamiTemp.umap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e9b04249156c82a982a6709531a4d3d339a1ddbdbad27f8d1192cd2588a3ff63
+oid sha256:3962ba820663c27fb25652ca750388ce25f29b5fbeabcc41f6d0e76ea0d57d77
size 119033
diff --git a/EndlessVendetta/Content/Levels/TrainingFacility.umap b/EndlessVendetta/Content/Levels/TrainingFacility.umap
index cbe7aa20..16e6e8ae 100644
--- a/EndlessVendetta/Content/Levels/TrainingFacility.umap
+++ b/EndlessVendetta/Content/Levels/TrainingFacility.umap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:87523c2b8607590648fb1ad88b98e94617e34faa25375af04116b01388bdbda2
-size 679514
+oid sha256:dc7fc00678941ccc23636c0c89f9f4af1d23cc4de3ab6c39b76ff21725db89bf
+size 442241
diff --git a/EndlessVendetta/Content/Levels/Tutorial02.umap b/EndlessVendetta/Content/Levels/Tutorial02.umap
new file mode 100644
index 00000000..4ce46bce
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/Tutorial02.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e9347c3538c4261ce71578db6e4063776b8f0f3135fd9c54fabb4b961377216
+size 74397
diff --git a/EndlessVendetta/Content/Levels/Tutorial03.umap b/EndlessVendetta/Content/Levels/Tutorial03.umap
new file mode 100644
index 00000000..a84667af
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/Tutorial03.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a622a6c838bdafe519640fa9582d12b46992561c37c9aafcd88c5b69e709634c
+size 73462
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_00BF1824.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_00BF1824.uasset
new file mode 100644
index 00000000..179c906e
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_00BF1824.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f3b6b55f655e038c6798cb0a96d0e41a2c553c08f820ffa6e9342c59bbe7b79
+size 13789
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_00DDB2D4.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_00DDB2D4.uasset
new file mode 100644
index 00000000..d3f0b2ec
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_00DDB2D4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1244bd5411ab8efb313137a824b7a86ed5965f35b84186275fa19731bf408bfd
+size 13789
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_286BEA66.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_286BEA66.uasset
new file mode 100644
index 00000000..28b942f5
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_286BEA66.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67ac62f72d335f966ff0f2a3f5890cf1b55cd9634a921fe6e7a9e0b6abfeb2a9
+size 33879
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_4F426B7E.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_4F426B7E.uasset
new file mode 100644
index 00000000..69a8560e
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_4F426B7E.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c6ea157258a69ae586037192306b0a2002d08dd4d3840b96b6b39e67167fbc4a
+size 13499
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_7146E972.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_7146E972.uasset
new file mode 100644
index 00000000..38c48011
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_7146E972.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e1bea70270b26a7219c0ed17d62d241ddaacc72429a2b2880c4c6a1ed3ed9f9
+size 13085
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_9E1A1986.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_9E1A1986.uasset
new file mode 100644
index 00000000..9db834d6
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_9E1A1986.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:863e791c4fad004f048324351f12eeb7762c3195b69eba34e1d96c90e7f4ca5b
+size 13789
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_A38EE932.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_A38EE932.uasset
new file mode 100644
index 00000000..ef48c3b0
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_A38EE932.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:15a0cd7a23ff6275860dc6930071419433f5b29e90df4a42caf7fb987196ab15
+size 13789
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_A5BB0004.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_A5BB0004.uasset
new file mode 100644
index 00000000..8fb2659a
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_A5BB0004.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bcb45fc5ccb6bab86bd56137096e5f6c194db35b8c349f06b741123edd2d9ec3
+size 13789
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_C02B9B5C.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_C02B9B5C.uasset
new file mode 100644
index 00000000..f1d04d85
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_C02B9B5C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47836ae84e76dab9f1de7fd3dfeeff7b9876c34b5465cc0b80648846e9fcfbbb
+size 13789
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_E68A9BDF.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_E68A9BDF.uasset
new file mode 100644
index 00000000..b284c66d
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Box_E68A9BDF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f32f4dff45e5e1432ad7e395d7e313b4dc673e596922de6736cc17ed8428bc5
+size 14182
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/CubeGridToolOutput_9A5D4D67.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/CubeGridToolOutput_9A5D4D67.uasset
new file mode 100644
index 00000000..dfac644e
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/CubeGridToolOutput_9A5D4D67.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d4ce29dd02c27421032683b7c3787db1382630fcebc6dba2218c3218d40cef3
+size 12916
diff --git a/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Rectangle_3FDB74D1.uasset b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Rectangle_3FDB74D1.uasset
new file mode 100644
index 00000000..f44183ae
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/_GENERATED/kacpe/Rectangle_3FDB74D1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae4370241f120b895ff23d04e8a20086fffe51786d6e9d941259d7ec264c43e4
+size 14622
diff --git a/EndlessVendetta/Content/MSPresets/MSTextures/Black.uasset b/EndlessVendetta/Content/MSPresets/MSTextures/Black.uasset
new file mode 100644
index 00000000..fda37f61
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSTextures/Black.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f16b0312ae5edaeea80f1f7cfb4e42b3920787decc497f083422026d6d9fc166
+size 6018
diff --git a/EndlessVendetta/Content/MSPresets/MSTextures/BlackPlaceholder.uasset b/EndlessVendetta/Content/MSPresets/MSTextures/BlackPlaceholder.uasset
new file mode 100644
index 00000000..23cf5762
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSTextures/BlackPlaceholder.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:950f8e2308afc5a1e25fef7c15f4fe82f498eace610c6cfcc2ccf87b131167c8
+size 2980
diff --git a/EndlessVendetta/Content/MSPresets/MSTextures/FlatNormal.uasset b/EndlessVendetta/Content/MSPresets/MSTextures/FlatNormal.uasset
new file mode 100644
index 00000000..e1ed2eb6
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSTextures/FlatNormal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:805b2f7968b74568ba8a134265a744ea0d1a9da319642f594ba64ca3e1330ecf
+size 3689
diff --git a/EndlessVendetta/Content/MSPresets/MSTextures/Placeholder.uasset b/EndlessVendetta/Content/MSPresets/MSTextures/Placeholder.uasset
new file mode 100644
index 00000000..6fb14b03
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSTextures/Placeholder.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:686b0cc9109f45e6e243e674241104474988a1034d0b2dc8fb0246bff726784c
+size 3413
diff --git a/EndlessVendetta/Content/MSPresets/MSTextures/Placeholder_Normal.uasset b/EndlessVendetta/Content/MSPresets/MSTextures/Placeholder_Normal.uasset
new file mode 100644
index 00000000..30c0cf53
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSTextures/Placeholder_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c37019d9104752509eef7d72bb3168fe551b59801d26a4e4ac71fdb2f626a351
+size 3617
diff --git a/EndlessVendetta/Content/MSPresets/MSTextures/White.uasset b/EndlessVendetta/Content/MSPresets/MSTextures/White.uasset
new file mode 100644
index 00000000..47f218a8
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSTextures/White.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:abfd6d3e44d2929a519c9d41e5190cf987af9353934790355262a4e722b70e71
+size 5430
diff --git a/EndlessVendetta/Content/MSPresets/MSTextures/WhitePlaceholder.uasset b/EndlessVendetta/Content/MSPresets/MSTextures/WhitePlaceholder.uasset
new file mode 100644
index 00000000..865d5dcf
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSTextures/WhitePlaceholder.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:820a514fa16075d4a92b4f3138a27324fc57b4c4c2ede3e6dc07a1bc13c5e0b1
+size 2977
diff --git a/EndlessVendetta/Content/MSPresets/MSVTTextures/BlackPlaceholder.uasset b/EndlessVendetta/Content/MSPresets/MSVTTextures/BlackPlaceholder.uasset
new file mode 100644
index 00000000..20faddeb
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSVTTextures/BlackPlaceholder.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0476e16bf71aaafb764071031da889d3622f78d1ad289fad2393dc1cecc58294
+size 4514
diff --git a/EndlessVendetta/Content/MSPresets/MSVTTextures/DefaultDiffuse.uasset b/EndlessVendetta/Content/MSPresets/MSVTTextures/DefaultDiffuse.uasset
new file mode 100644
index 00000000..6e4cde60
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSVTTextures/DefaultDiffuse.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42fbfd153354ddeb241cb311a8a48c28745c320396ec3ceb67ea6883d0cd4712
+size 2135567
diff --git a/EndlessVendetta/Content/MSPresets/MSVTTextures/Placeholder_Normal.uasset b/EndlessVendetta/Content/MSPresets/MSVTTextures/Placeholder_Normal.uasset
new file mode 100644
index 00000000..b315fcbd
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSVTTextures/Placeholder_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44c047f0cfc265404f3bdafa9b886ab4b31771f0c0023f65369a1f17a40c4a93
+size 4651
diff --git a/EndlessVendetta/Content/MSPresets/MSVTTextures/WhitePlaceholder.uasset b/EndlessVendetta/Content/MSPresets/MSVTTextures/WhitePlaceholder.uasset
new file mode 100644
index 00000000..31bef56b
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/MSVTTextures/WhitePlaceholder.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4861e6e92f0d675cad3e79d5568e75663a9e2511439fffc215cad80f3d945266
+size 4024
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Billboard_Material/M_MS_Billboard_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Billboard_Material/M_MS_Billboard_Material.uasset
new file mode 100644
index 00000000..0ebd3654
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Billboard_Material/M_MS_Billboard_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db2694ba185124533607cdbe98873fc2d844e62a2ac5893e7f1f0e7f6ada5772
+size 130048
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material/MF_QuixelDecalPOM.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material/MF_QuixelDecalPOM.uasset
new file mode 100644
index 00000000..ce89614c
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material/MF_QuixelDecalPOM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:333398783d9b472cfee5aa4fb6879fbfbc062930a80d6f39a65e0396440a911b
+size 179467
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material/M_MS_Decal_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material/M_MS_Decal_Material.uasset
new file mode 100644
index 00000000..85204eaa
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material/M_MS_Decal_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d6f7e6e3f88fadece1ecae225e4e4f74f89a4d4f900aaa2099028024cc94a1f7
+size 42889
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material_VT/MF_QuixelDecalPOM.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material_VT/MF_QuixelDecalPOM.uasset
new file mode 100644
index 00000000..db84abea
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material_VT/MF_QuixelDecalPOM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aeabd4a3c3cd9cf8b9ad5c3884d69b71d9b9da4c0f50615ab939f5104cb71abc
+size 87854
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material_VT/M_MS_Decal_Material_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material_VT/M_MS_Decal_Material_VT.uasset
new file mode 100644
index 00000000..acdc0a44
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Decal_Material_VT/M_MS_Decal_Material_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9521bc2d302ba6591072b8889ce4c6fe1d97b375c4f96d0b10f9ae37e045b0ef
+size 45739
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/Functions/MF_Fuzz.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/Functions/MF_Fuzz.uasset
new file mode 100644
index 00000000..f605b1b6
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/Functions/MF_Fuzz.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b73d8d1b77b8d03ed310bf102daa60709d61c32bbff5dd619d452d348033420
+size 71989
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/Functions/MF_Tiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/Functions/MF_Tiling.uasset
new file mode 100644
index 00000000..aada81b7
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/Functions/MF_Tiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b00d32a98567128f89dd4eedb7cf4c1b5237af760ef0e2a76b374bc5f3299fe0
+size 51948
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/M_MS_Default_Fuzz_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/M_MS_Default_Fuzz_Material.uasset
new file mode 100644
index 00000000..741fb7bf
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material/M_MS_Default_Fuzz_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9dd8ffd8b42826c8a177a37f27d66623e0d47815ab6290109d4c622b159ba801
+size 98697
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/Functions/MF_Fuzz.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/Functions/MF_Fuzz.uasset
new file mode 100644
index 00000000..3f679b43
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/Functions/MF_Fuzz.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad4d738ffed4223f2a7643fdfe65e52082aab65361ba9687d6943e967a22dc9c
+size 16913
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/Functions/MF_Tiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/Functions/MF_Tiling.uasset
new file mode 100644
index 00000000..66cc9892
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/Functions/MF_Tiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3301f996099716d007cf9c028e58e919d681c3f97cb12c02c538652f7b5c0563
+size 17310
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/M_MS_Default_Fuzz_Material_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/M_MS_Default_Fuzz_Material_VT.uasset
new file mode 100644
index 00000000..766d1cdc
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Fuzz_Material_VT/M_MS_Default_Fuzz_Material_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2f486098681eecc75ed7bab115a53e8a948808713a55571ed25ce4c2f40ed3d5
+size 23476
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_DetailNormalTiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_DetailNormalTiling.uasset
new file mode 100644
index 00000000..c3ad8e9d
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_DetailNormalTiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f9054f78dec74ddb6ce8ec1bee135e5e9845f41af6d21d571ed57aa988fc1240
+size 108134
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Displacement.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Displacement.uasset
new file mode 100644
index 00000000..5b760b7f
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Displacement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47ae8082e518c40dd3d8f59101b5efce70523e36f75a1a75cacf44eb67b8044a
+size 111405
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Fuzz.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Fuzz.uasset
new file mode 100644
index 00000000..f7822da1
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Fuzz.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76d48321c96d130a15d9656e3f0fa42f48b0cb3423f4d3b70d5ac910b1dccf22
+size 108002
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_MapAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_MapAdjustments.uasset
new file mode 100644
index 00000000..9b4f4d65
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_MapAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09a111050729839f0300e92829e81c22bb339648cf456a1f3c3d64d22c12c127
+size 135960
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_ObjAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_ObjAdjustments.uasset
new file mode 100644
index 00000000..7a634e1e
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_ObjAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:262c7e811d7730e23d69de33ddade16faaafa293655f2bd77aa49afb40b7d239
+size 127459
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Tiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Tiling.uasset
new file mode 100644
index 00000000..3ec6ea10
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Tiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e42cc3c97c6fa8f117d615adc89b3dac3ceebc933720232d13c448c241c9c3f
+size 108546
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Transmission.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Transmission.uasset
new file mode 100644
index 00000000..9205cd57
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/Functions/MF_Transmission.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12b7bd3e2c8567f0c63386c4810a8a14a1a9074c993e98d2b24b2e23c7f3f784
+size 90555
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/M_MS_Default_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/M_MS_Default_Material.uasset
new file mode 100644
index 00000000..57606413
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material/M_MS_Default_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1aa3fcea8aa693799d4e85506cd82783e980dffa3e279b3317926f9c3f8c4778
+size 93251
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_DetailNormalTiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_DetailNormalTiling.uasset
new file mode 100644
index 00000000..838edfb8
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_DetailNormalTiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9f3a6a91df5ba79f44fd70e5253a3b499c37d3fe61ac3e1fced54b5958d9d153
+size 16831
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Displacement.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Displacement.uasset
new file mode 100644
index 00000000..f01744f0
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Displacement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8e161a89b51b4b5845f64f4e8f520a5e2213048b3d3fde77e87ded56e2f13375
+size 20100
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Fuzz.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Fuzz.uasset
new file mode 100644
index 00000000..973e5fd4
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Fuzz.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1df8de6f22356dc039b655f0c4fe3c91def11bfe17a3f7b1759c2c72f608394d
+size 16695
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_MapAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_MapAdjustments.uasset
new file mode 100644
index 00000000..6055ed5e
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_MapAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39c96fda0fed73e5989d5b540a07755749bae8437f0be49d3eef348733fe777d
+size 44814
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_ObjAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_ObjAdjustments.uasset
new file mode 100644
index 00000000..136e11e9
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_ObjAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:497387b5b2f4ba0951cd12e83db2fed58f17a70617d526e806dc708bffe3fd01
+size 36199
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Tiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Tiling.uasset
new file mode 100644
index 00000000..fc1595dd
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Tiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1569e8cd18c43700e1e52ebf496283121d04be55870b473428b14bc07afa2b23
+size 17103
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Transmission.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Transmission.uasset
new file mode 100644
index 00000000..25830d01
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/Functions/MF_Transmission.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a69d6b5e096292f376c624512d08616956a5025d3a3290d8b0b42978aca05a48
+size 18530
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/M_MS_Default_Material_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/M_MS_Default_Material_VT.uasset
new file mode 100644
index 00000000..e026e5c1
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Material_VT/M_MS_Default_Material_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dffe7b3217491d0fe9a957728b6fb92c8a8c8dd241011c289731e7ef947fcf0e
+size 18693
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material/Functions/MF_SSSObjAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material/Functions/MF_SSSObjAdjustments.uasset
new file mode 100644
index 00000000..c7609df8
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material/Functions/MF_SSSObjAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d4d1eaeff8ff87221a17db80dee256162539eae4cd1df937e82055d247293e7
+size 104678
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material/M_MS_Default_Transmission_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material/M_MS_Default_Transmission_Material.uasset
new file mode 100644
index 00000000..7bae6740
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material/M_MS_Default_Transmission_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22d6fb348749d3bf7dbf9fefc0a9539004956101046e54c71b13459f2a89d449
+size 93782
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material_VT/Functions/MF_SSSObjAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material_VT/Functions/MF_SSSObjAdjustments.uasset
new file mode 100644
index 00000000..d835507b
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material_VT/Functions/MF_SSSObjAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ff98b147257cf93591d9c966219457f85f2d3f0c367d569ca3c49bb715e64c9
+size 39691
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material_VT/M_MS_Default_Transmission_Material_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material_VT/M_MS_Default_Transmission_Material_VT.uasset
new file mode 100644
index 00000000..d74e8c04
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Default_Transmission_Material_VT/M_MS_Default_Transmission_Material_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1fcd0f1bd1791eb0b9834b6706d0ea305c0e13f6c219cac1fc8f09071c11bdc7
+size 19240
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/Functions/MF_Translucency.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/Functions/MF_Translucency.uasset
new file mode 100644
index 00000000..cac4ed6d
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/Functions/MF_Translucency.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68040ec23a66c97b3119da7c3ec8db0499971f2695efa541bc3cd70fd596822e
+size 11837
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/MF_Translucency.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/MF_Translucency.uasset
new file mode 100644
index 00000000..6dbf6c75
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/MF_Translucency.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1c5daf4b6f5272b1d3313cfaf0fa8d66fa0a1e68bb924c916bf436d00f71612f
+size 103146
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/M_MS_Foliage_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/M_MS_Foliage_Material.uasset
new file mode 100644
index 00000000..41d9e550
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Foliage_Material/M_MS_Foliage_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d78b3cf97fb497d96cf93166f16d47c6742ae7e22b2213dee84e03e3b576dc9
+size 112047
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_FrameBlend.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_FrameBlend.uasset
new file mode 100644
index 00000000..77c255d0
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_FrameBlend.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1b9cb7da1cd77d7125c29fff794f2c6f34150a37f8c208837ccd0e2e301e595
+size 27336
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_FrameTextures.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_FrameTextures.uasset
new file mode 100644
index 00000000..f404a787
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_FrameTextures.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:85cc10f82a7153ed9b2631e61b0bd880a2bd9a7f9967aa466d46b131bdb36bf2
+size 12890
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_Imperfection.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_Imperfection.uasset
new file mode 100644
index 00000000..36f47d92
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_Imperfection.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:358c4e93c8dafd7fba0bef4129df5e136b2ca661bb5b408d9a00c6984fbdac50
+size 23271
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_Refraction.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_Refraction.uasset
new file mode 100644
index 00000000..27262d34
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_Refraction.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b052321aca237d13a78a4888803d1288ab3c802c3db9c64b09b050e52cafe2c7
+size 85433
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_TranslucencyEmission.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_TranslucencyEmission.uasset
new file mode 100644
index 00000000..4a95a6c4
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_TranslucencyEmission.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:064edcfcbe94bd9bb1d5bbf6c482ee1e15c1646dd721744fcbe03da2ef041fdc
+size 48357
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_TranslucencyMetallic.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_TranslucencyMetallic.uasset
new file mode 100644
index 00000000..616665c3
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_TranslucencyMetallic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0281fe07bef5cf2d5f5c7dff47de0f1f060ddd58fd1b5f4f10e9c647d3194128
+size 48298
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_WindowImperfection.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_WindowImperfection.uasset
new file mode 100644
index 00000000..ee97df74
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_WindowImperfection.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c0271e31794907461cc54129a93eb42b41c2db1b14bb893c566275559bbed87
+size 22864
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_WindowNormalStrength.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_WindowNormalStrength.uasset
new file mode 100644
index 00000000..d93f1954
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Functions/MF_WindowNormalStrength.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2aaf269549ffbe46ac21553ff60ae0f7ae0d51172a87d8fc35d3fcf282468b9e
+size 12408
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/MI_MS_Glass_Material_Inst.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/MI_MS_Glass_Material_Inst.uasset
new file mode 100644
index 00000000..a1f810dc
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/MI_MS_Glass_Material_Inst.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c28eb0923e920ea69c0bdd1572d6ebfa8944955bc9247f9825c8b95317ca4ce
+size 8628
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/M_MS_Glass_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/M_MS_Glass_Material.uasset
new file mode 100644
index 00000000..639827fd
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/M_MS_Glass_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24944ffbfb9b0f9a3ce0effdf8f0cecbd7a9c82072e430666e5d60cd13bd8e97
+size 25115
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/Black.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/Black.uasset
new file mode 100644
index 00000000..a111c2b2
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/Black.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d14dd3614c95d5e672985a70c2ef95cc8c60cd29c3f49366ba5a79bb6c86a935
+size 6036
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/FlatNormal.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/FlatNormal.uasset
new file mode 100644
index 00000000..bc0c4d90
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/FlatNormal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e6d47705bb89a3e7f864bf0dcda41b16d0b4cf80a5a553ef3ec889baaaa266d
+size 4246
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/White.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/White.uasset
new file mode 100644
index 00000000..04a33d9e
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Glass_Material/Textures/White.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3476cb4ad76a44eb4c1af607210699c815b72ed51ada1a5b33d20b2dc742422
+size 5448
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_ImperfectionDecal_Material/M_MS_ImperfectionDecal_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_ImperfectionDecal_Material/M_MS_ImperfectionDecal_Material.uasset
new file mode 100644
index 00000000..2271420b
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_ImperfectionDecal_Material/M_MS_ImperfectionDecal_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f73a1ec61a9f743714b65a7a5ce982c461d942c2ee85e12b3ac3812e951035c9
+size 34994
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_ImperfectionDecal_Material_VT/M_MS_ImperfectionDecal_Material_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_ImperfectionDecal_Material_VT/M_MS_ImperfectionDecal_Material_VT.uasset
new file mode 100644
index 00000000..bdb9979c
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_ImperfectionDecal_Material_VT/M_MS_ImperfectionDecal_Material_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c4c45dd29934fbc300be03814e7bdefc1b29b7178f50d2002f9fca6f66a14f8
+size 35156
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material/M_MS_Imperfection_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material/M_MS_Imperfection_Material.uasset
new file mode 100644
index 00000000..51286009
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material/M_MS_Imperfection_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a1abcd66444c05291a4ec88a86d0e6054540182633b3158139418a78ea1e628
+size 102359
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material/M_MS_Imperfection_Material_Var.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material/M_MS_Imperfection_Material_Var.uasset
new file mode 100644
index 00000000..3b429093
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material/M_MS_Imperfection_Material_Var.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8200dc38cfa33bc3a0e19a3f6361225068e0dd58418105150e687d88254311db
+size 148352
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_VT/M_MS_Imperfection_Material_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_VT/M_MS_Imperfection_Material_VT.uasset
new file mode 100644
index 00000000..bbb2e60d
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_VT/M_MS_Imperfection_Material_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:208870cede14349db0c675843c15bc88a0a2b98addac591349b89988d46d45b2
+size 26364
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_VT/M_MS_Imperfection_Material_Var_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_VT/M_MS_Imperfection_Material_Var_VT.uasset
new file mode 100644
index 00000000..8c87c153
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_VT/M_MS_Imperfection_Material_Var_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:88dabb510cff763f1427088919730fef08cf33df6b84e0f32a3dd42a1aa65a04
+size 25634
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_Var/M_MS_Imperfection_Material_Var.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_Var/M_MS_Imperfection_Material_Var.uasset
new file mode 100644
index 00000000..c7bb5bfa
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Imperfection_Material_Var/M_MS_Imperfection_Material_Var.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:06159d8967807ba3d3fc703b5ed1fbfa7f944788b9e6e56c131f8292ce41eb4e
+size 148356
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerAdjustments.uasset
new file mode 100644
index 00000000..3505c289
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bbe42376d39e055fdaf65188181a3d4d88c2cb2ffd102863651d0356458a889a
+size 79786
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerTessellation.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerTessellation.uasset
new file mode 100644
index 00000000..86c452c2
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerTessellation.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ddf6956ceb53c8d0291984bb99da7ee22a53059c3d6d0c47d5eea60a428060ca
+size 82120
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerTextures.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerTextures.uasset
new file mode 100644
index 00000000..be87b898
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Base/MF_BaseLayerTextures.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:70acbcc879c18c8b6b17f2702aa96c82173efa9e4411d7ecd38e12cf10340033
+size 98993
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_BlendScatter.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_BlendScatter.uasset
new file mode 100644
index 00000000..12f3012d
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_BlendScatter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f9b87b272868de3a70f715399bc19e23b64d442b383e2d0f9ae33a2a3a927b8
+size 98478
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_Displacement.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_Displacement.uasset
new file mode 100644
index 00000000..7b3cb14a
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_Displacement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eda504fa1a2a4960b207e4194e2c711277ddf58a77ea8d98b361d3e42e603bdc
+size 77478
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_DisplacementBlend.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_DisplacementBlend.uasset
new file mode 100644
index 00000000..0082ce98
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_DisplacementBlend.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:948efe3c2a495c8cf8f1ecf63c939e6787c1cc5bb9a40773677b53554badc72c
+size 94419
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_MaterialBlend.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_MaterialBlend.uasset
new file mode 100644
index 00000000..044d48d4
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_MaterialBlend.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b5339afe98cf327086073b14b53b765654b2caee27f03007ddf220680f8b755
+size 97432
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_NormalCorrection.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_NormalCorrection.uasset
new file mode 100644
index 00000000..f6050ba5
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_NormalCorrection.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c18b20eb8ff8ac8fe2607c6bea130cf8f7cf826e5a960123ecbd12097a89bb1
+size 75822
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_ScatterLayer.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_ScatterLayer.uasset
new file mode 100644
index 00000000..8f694662
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/MF_ScatterLayer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9f3e0f79d3054052dc7ab39cf25bc16b8f7dd03ccb8c1a0d66d5708e3c16fc96
+size 63833
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerAdjustments.uasset
new file mode 100644
index 00000000..125e6353
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:970b0694a44f67531fddeebc691b70a2044bbb00d78d53a3b04a40504c374184
+size 79808
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerTessellation.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerTessellation.uasset
new file mode 100644
index 00000000..70846f89
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerTessellation.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:820066ee8678c5817e0ed0c4add6a3105e1ee87ac98ca74c954fc0fad1ea28e9
+size 82156
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerTextures.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerTextures.uasset
new file mode 100644
index 00000000..bf931912
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Middle/MF_MiddleLayerTextures.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d4cc648b1632ad6f0b681da77a073f86d361b3e30f54709322850a0f0dc4fbcd
+size 99043
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Puddle/MF_PuddleLayer.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Puddle/MF_PuddleLayer.uasset
new file mode 100644
index 00000000..8528ed42
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Puddle/MF_PuddleLayer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63cb57f58b437fb4d2a8e0ed3267d10f437b10b0010a2195c9a05de65436441c
+size 132840
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerAdjustments.uasset
new file mode 100644
index 00000000..6739ff03
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cfe2c5d87829d6e4510cdb86f602bcd5f153c1da875c73cb4823613efc496a02
+size 79761
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerTessellation.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerTessellation.uasset
new file mode 100644
index 00000000..1f8e3edf
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerTessellation.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:30179784bd54d4dd2ee46ce797c7f2124a7763c7bc3299125cdbc12faff77e01
+size 82052
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerTextures.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerTextures.uasset
new file mode 100644
index 00000000..f0dd9ee0
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/LayerFunctions/Top/MF_TopLayerTextures.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:380db1949cb1f7d1ab9e9e9a0ab5044afdf3ae4f788dc88c3d99557a647b4020
+size 98968
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/M_MS_SurfaceBlend_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/M_MS_SurfaceBlend_Material.uasset
new file mode 100644
index 00000000..dfdcda20
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_SurfaceBlend_Material/M_MS_SurfaceBlend_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e5476c37747e8739be40e4414f5ecc41a06ea3281edde21a077b260ebeb94a9
+size 159365
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Displacement.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Displacement.uasset
new file mode 100644
index 00000000..b194b94f
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Displacement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d10e4b67345998e5ba9eefbcb757b12d0baa1e7a0574337fcc7cf79df37ff41
+size 78226
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_MapAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_MapAdjustments.uasset
new file mode 100644
index 00000000..31b4bbd5
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_MapAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f340958483ef9b3195adae536a38e14652a690ea65b1ec13508b12cb41fefab8
+size 135919
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_ObjAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_ObjAdjustments.uasset
new file mode 100644
index 00000000..96a79acf
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_ObjAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4b3eab74970773e2d1521f48f3e4351a5515035c2ff721b73440db155fc96e9
+size 87791
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Tiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Tiling.uasset
new file mode 100644
index 00000000..9e5b8d80
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Tiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7292d68aed3640408113c3d2dd9414457f2185ab195656c1f0e3c5d855b898a8
+size 51931
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Transmission.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Transmission.uasset
new file mode 100644
index 00000000..ed925607
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/Functions/MF_Transmission.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:328d2825e64ad3bf1417a31230fc82b3edf280624bdf9c05bc0a8523369e6e56
+size 73694
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/M_MS_Surface_Material.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/M_MS_Surface_Material.uasset
new file mode 100644
index 00000000..4a8c69fe
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material/M_MS_Surface_Material.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efb46a6fb4401dadef9c19fd05eed8c59eac3661bdddfc03d6a9c87fec7003bf
+size 19741
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Displacement.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Displacement.uasset
new file mode 100644
index 00000000..93472b14
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Displacement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:892c8382cfb4c50ed8c90a6b5be3f0923eed0e6a8eb4dbb76d1baa83a6116c3d
+size 23238
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_MapAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_MapAdjustments.uasset
new file mode 100644
index 00000000..6b6548ed
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_MapAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a714703e8d52d363349d6ebc05e1e3e33b4a96aa633e44b92b0483db6386c3c9
+size 45025
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_ObjAdjustments.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_ObjAdjustments.uasset
new file mode 100644
index 00000000..fdd5dc8a
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_ObjAdjustments.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4982906851efd468e3f9bf2021313ba007c711fb683a40d28a7681806c4566e7
+size 39514
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Tiling.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Tiling.uasset
new file mode 100644
index 00000000..222422d5
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Tiling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd608246cc837b0f2b83cbcc63eb4b741929502c3a844d37bd5f64652b177afb
+size 17314
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Transmission.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Transmission.uasset
new file mode 100644
index 00000000..fcf0e8ca
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/Functions/MF_Transmission.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a589437d09316b20ba687e30fe6f64afd6d656f3b815478e1a81302ff6c944e0
+size 18717
diff --git a/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/M_MS_Surface_Material_VT.uasset b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/M_MS_Surface_Material_VT.uasset
new file mode 100644
index 00000000..f4fa7c61
--- /dev/null
+++ b/EndlessVendetta/Content/MSPresets/M_MS_Surface_Material_VT/M_MS_Surface_Material_VT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f93c40cca6274ae25a023027de45ce155501c8fb8c70b4ca89af4126185586dd
+size 20649
diff --git a/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/MI_Fine_American_Road_sjfnch0a_2K.uasset b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/MI_Fine_American_Road_sjfnch0a_2K.uasset
new file mode 100644
index 00000000..5400953b
--- /dev/null
+++ b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/MI_Fine_American_Road_sjfnch0a_2K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b2f69d9bafe6d06d29093ae755f8f13bd54266047aec6ac86d1df4a4fd05262
+size 12463
diff --git a/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_FineAmericanRoad_sjfnch0a_2K_ORDp.uasset b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_FineAmericanRoad_sjfnch0a_2K_ORDp.uasset
new file mode 100644
index 00000000..b2520b09
--- /dev/null
+++ b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_FineAmericanRoad_sjfnch0a_2K_ORDp.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e912115f30ee2edd6145f2d868c46ccae219a3a4a0fe35c25648bffc1557165a
+size 16681591
diff --git a/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_Fine_American_Road_sjfnch0a_2K_D.uasset b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_Fine_American_Road_sjfnch0a_2K_D.uasset
new file mode 100644
index 00000000..7c9c8e3f
--- /dev/null
+++ b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_Fine_American_Road_sjfnch0a_2K_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8df08fdedd73ccc551218e3345bee8dee9e1537ecfdcbf936d5f2b77656bcd3b
+size 23552828
diff --git a/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_Fine_American_Road_sjfnch0a_2K_N.uasset b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_Fine_American_Road_sjfnch0a_2K_N.uasset
new file mode 100644
index 00000000..9c732be5
--- /dev/null
+++ b/EndlessVendetta/Content/Megascans/Surfaces/Fine_American_Road_sjfnch0a/T_Fine_American_Road_sjfnch0a_2K_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f23f0aa075abef92c5a8767d04fdc76f6f4cecacf898fc2e45627f2c289019d6
+size 20744293
diff --git a/EndlessVendetta/Content/Ships/BP_SpaceShip.uasset b/EndlessVendetta/Content/Ships/BP_SpaceShip.uasset
new file mode 100644
index 00000000..414ee7d9
--- /dev/null
+++ b/EndlessVendetta/Content/Ships/BP_SpaceShip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c424148a2d3ebc876cb27453c51f1383792430536cde08915c4114a366e77bc
+size 37169
diff --git a/EndlessVendetta/Content/Ships/LandingZone.uasset b/EndlessVendetta/Content/Ships/LandingZone.uasset
new file mode 100644
index 00000000..32fb9317
--- /dev/null
+++ b/EndlessVendetta/Content/Ships/LandingZone.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ea90e487ea5bf751b7573ac6ef2be781c1efdf4e0bae7c8b95f9fbf0c4169dd
+size 113548
diff --git a/EndlessVendetta/Content/Ships/WBP_LandingZone.uasset b/EndlessVendetta/Content/Ships/WBP_LandingZone.uasset
new file mode 100644
index 00000000..4e8bc23f
--- /dev/null
+++ b/EndlessVendetta/Content/Ships/WBP_LandingZone.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e302d2da63cfd690807b0dd6dacd7b4b4b1176e88945f007ffd2c12211cdf9c
+size 42570
diff --git a/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset b/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
index 0f990580..1c0675e1 100644
--- a/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
+++ b/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:bc35eb2d43a47427d30aba0196f9eac90d089dd3abca319528c5d25c83510d0d
-size 72364642
+oid sha256:2b1214c2656169689002a1b8976a3ae6c3287520fae9ca08f71889c57690c775
+size 66790690
diff --git a/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Pine.uasset b/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Pine.uasset
index fb828784..eafee70c 100644
--- a/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Pine.uasset
+++ b/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Pine.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:196eb4590144ea90058b1a8b48d4662f2ba04302d4184e5e68698a3e715cc50e
-size 29377
+oid sha256:b12c6d7285dd95b1c5669e07fc665f8859a17ee78c51f139170726848c06ee67
+size 31142
diff --git a/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Walnut.uasset b/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Walnut.uasset
index 1d3466c4..2e926194 100644
--- a/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Walnut.uasset
+++ b/EndlessVendetta/Content/StarterContent/Materials/M_Wood_Walnut.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:da10621d164f621c3c598d9d293d707a2879d7caf8c0525652a06b38323820f0
-size 20139
+oid sha256:8491e0b8978a41999e0f4fc6520cab088fcbe6ddf8b51655f34753aa45234c66
+size 20495
diff --git a/EndlessVendetta/Content/StarterContent/Props/MaterialSphere.uasset b/EndlessVendetta/Content/StarterContent/Props/MaterialSphere.uasset
index 89145d94..56bddfc9 100644
--- a/EndlessVendetta/Content/StarterContent/Props/MaterialSphere.uasset
+++ b/EndlessVendetta/Content/StarterContent/Props/MaterialSphere.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:b7943b84a70f66da9ce4c738e5748bd6853c3af285ea2f99a76efa584cb31301
-size 47710
+oid sha256:3a8777c01491888bba9f40eda9d2bed76a611f0e80f75917501ce69c1a321342
+size 47333
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Base/M_SuperGrid_SingleColor.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Base/M_SuperGrid_SingleColor.uasset
new file mode 100644
index 00000000..2b3b32f7
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Base/M_SuperGrid_SingleColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e67c75d5995e7061b50d34fdf1569f8e516d94b38f40b7f4440470705eb550f
+size 36609
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Base/M_SuperGrid_Template.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Base/M_SuperGrid_Template.uasset
new file mode 100644
index 00000000..3dc5f27d
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Base/M_SuperGrid_Template.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20ad9ce3f6fcca8682f340a16c4f2e545033bca3b707a18fb9dd540f748d503e
+size 36675
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/BreakSet.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/BreakSet.uasset
new file mode 100644
index 00000000..ba9bb6de
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/BreakSet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:288b7a251443edb6b16aaa5c52d3d0ec52e72204b2d34dbb3463760b426f6f5d
+size 83247
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/MakeSet.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/MakeSet.uasset
new file mode 100644
index 00000000..5cfaf30f
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/MakeSet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2b2e129b27194c6e7f3b7d33e416d7dc980b21f36803cb9040e84cea56af817
+size 84456
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/Roughness.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/Roughness.uasset
new file mode 100644
index 00000000..732a67fe
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Basic/Roughness.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:77826fd75cef07769767c0d50b8006369580296a8377f62d4855d362e56d86c7
+size 83312
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Texture/Dye_SingleColor.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Texture/Dye_SingleColor.uasset
new file mode 100644
index 00000000..8ae42130
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Texture/Dye_SingleColor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3fb94a83513e76935876edcfc4437ba2c1dcf76c20aa5a36307267749d4313f
+size 90272
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Texture/Tex_SimpleGrid.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Texture/Tex_SimpleGrid.uasset
new file mode 100644
index 00000000..4addc4d5
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/Texture/Tex_SimpleGrid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f54ca37fa2e1b4e0d302e611df8d4d1c5ce960ccb2f443570d2ffb64075f41a
+size 86793
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_CustomTexture.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_CustomTexture.uasset
new file mode 100644
index 00000000..fb3e3e56
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_CustomTexture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:190662f7373c7ee866a6c2a9eae16c9226803941992a9d566afd6872546be30b
+size 84989
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_ObjectScalable.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_ObjectScalable.uasset
new file mode 100644
index 00000000..af80f022
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_ObjectScalable.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0d8af8ddaa9077a7daa1cf6f6097cf841dfe73a5ac6ceba4860abf850244f4b
+size 100349
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_SetupGrid.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_SetupGrid.uasset
new file mode 100644
index 00000000..f6754a92
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Functions/UV/UV_SetupGrid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad0bab1d8158e904ed3a743943cc9ab8fd76d3bee0cc2ef38b4f47db5f580a91
+size 86225
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Palette/Grids/M_SuperGrid_Default.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Palette/Grids/M_SuperGrid_Default.uasset
new file mode 100644
index 00000000..6678175f
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Materials/Palette/Grids/M_SuperGrid_Default.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:645919fb89aa191157ff4cd8e91600eab9bf8ac231b863777afbf0d622b30d2d
+size 13612
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Source/New/SuperGrid_Arch2.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/New/SuperGrid_Arch2.uasset
new file mode 100644
index 00000000..d884ad8d
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/New/SuperGrid_Arch2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c00b7ca3978cde5cdfed17dd955548a480d850fec52ada218d119a880db08d97
+size 28355
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Source/New/SuperGrid_Box.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/New/SuperGrid_Box.uasset
new file mode 100644
index 00000000..fa6f7785
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/New/SuperGrid_Box.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f63aa6658d3fa0f53f34796618b4e0c9208d130f29cccfdd1278afe6de2b40a6
+size 20977
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/T_BasicGrid_M.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/T_BasicGrid_M.uasset
new file mode 100644
index 00000000..1ac01b51
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/T_BasicGrid_M.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0fe94afe3ed56357e7fe1225f3490412563998ffc8eea1f158958648f449ab98
+size 119670
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/T_BasicGrid_N.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/T_BasicGrid_N.uasset
new file mode 100644
index 00000000..ea296c62
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/T_BasicGrid_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57e5be278dbf685303fb03daf8d4bee24f9be2298c5a8db6d326341630b1b8a8
+size 24509
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/Templates/T_TemplateGrid.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/Templates/T_TemplateGrid.uasset
new file mode 100644
index 00000000..d023d677
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/Templates/T_TemplateGrid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:309ab4d16713594e7c40e760a737f9a1828207528f827280cc7c60158b7e1029
+size 62108
diff --git a/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/Templates/T_TemplateHuman.uasset b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/Templates/T_TemplateHuman.uasset
new file mode 100644
index 00000000..184bc2d7
--- /dev/null
+++ b/EndlessVendetta/Content/SuperGrid/StarterPack/Source/Textures/Templates/T_TemplateHuman.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f4a45e8f04b3f1cee67f60aaced866251a8b1798d2196ca17f396c1750b9c472
+size 86223
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Configuration_Manager.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Configuration_Manager.uasset
new file mode 100644
index 00000000..1779bd1f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Configuration_Manager.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b8a5c4d4479a6e258901bf4da7bfc45a8ec5a3c1c8c3dce5dbade32a2cf8af3
+size 2038552
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Cache_Group.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Cache_Group.uasset
new file mode 100644
index 00000000..5926b89e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Cache_Group.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef8acae4505a7230a616e866988bb979ffcb2eafe0cea636c58cb767a6642842
+size 5368
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_CachedProperties.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_CachedProperties.uasset
new file mode 100644
index 00000000..21225511
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_CachedProperties.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9647fa3790cc19a5c1c11b5213442253a6a2036415d903917d18c5174e746340
+size 43326
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_CityPresets.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_CityPresets.uasset
new file mode 100644
index 00000000..06000ffb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_CityPresets.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8e8f582e84cef264b22b5ec5ec9ef1205b784c898ea5e4043eeb53e2c6b6d5ca
+size 56481
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ColorMode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ColorMode.uasset
new file mode 100644
index 00000000..6f8ec434
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ColorMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad6c3f98c1b7491f4ec1ff3d58d0559fde18d0b6924e2cd620889ec3269ad591
+size 2625
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ConfigType.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ConfigType.uasset
new file mode 100644
index 00000000..f6a462e7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ConfigType.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bda6befce6c9812f3250c223afdf94439f44f39d94b7f8f91c3119b7e6f7270a
+size 2289
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ControlPointMode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ControlPointMode.uasset
new file mode 100644
index 00000000..93688aec
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_ControlPointMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:03db66e8553d8ef9f1f0bf9cd776360e637bbf0de8b8aed68ed2826402d0c8cd
+size 3043
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_DLWE_Mode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_DLWE_Mode.uasset
new file mode 100644
index 00000000..c66e5bac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_DLWE_Mode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12062cfd8488d8b751d1604cd2ab0f393b9b95a9359f0896331ffcb935e59780
+size 2658
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_FeatureToggle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_FeatureToggle.uasset
new file mode 100644
index 00000000..c0652ce0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_FeatureToggle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a6e64b5b4ba24582afbc2d1ab7e618a1710cd0d53498ba34e35b228ad29c144a
+size 2715
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_FogColorMode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_FogColorMode.uasset
new file mode 100644
index 00000000..8655cad4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_FogColorMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f37d491c0c78345b4cd7e26f7882c8fb24e0a03adf89efa4a3809c0f90ccd5e9
+size 3294
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_LensFlareType.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_LensFlareType.uasset
new file mode 100644
index 00000000..8f594f5d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_LensFlareType.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:966ec4592fedc0de9b99c3f5b208f39a6c03b0f8386fd0a3867db99fdf6a16f2
+size 2707
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_NoiseType.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_NoiseType.uasset
new file mode 100644
index 00000000..94e305ee
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_NoiseType.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf976cb7d9dd8ebdcd10a15361049527fea394e49d8bf3a410c80d15939411b2
+size 2791
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_OcclusionSamplingLocation.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_OcclusionSamplingLocation.uasset
new file mode 100644
index 00000000..61312c73
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_OcclusionSamplingLocation.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f2c2ef4356f6886ef0f423c1ff0070b5d878ca7acd9dd690c3af8ae8195cc1ca
+size 3202
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_OcclusionShape.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_OcclusionShape.uasset
new file mode 100644
index 00000000..5938295d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_OcclusionShape.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d7d0f669c1e55493472d028bd4224c9b9addc24f5c5e867d4f642adbd0c6e70f
+size 2723
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Occlusion_Mode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Occlusion_Mode.uasset
new file mode 100644
index 00000000..4c2630f2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Occlusion_Mode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1c572f7f099811c418f8a25b1b5dbf963e2ca17b598f371bd771207c54727e2e
+size 3526
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Planet_Lightsource.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Planet_Lightsource.uasset
new file mode 100644
index 00000000..dd1364ee
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Planet_Lightsource.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bead28558e80571d4febf09605b0c5bf0846b95d6dbe6fdaa5750550245b08be
+size 3063
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Project_Mode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Project_Mode.uasset
new file mode 100644
index 00000000..98f77aaf
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Project_Mode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4821a5f5f18d20fb6c75cdb9d4caa2138c76832aa87e2cf7d594fda064e06c67
+size 2607
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_PropertyType.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_PropertyType.uasset
new file mode 100644
index 00000000..6f15406f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_PropertyType.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b98b6dafc21ae24f7ec6a340bf57e6946fb148f83df1b2aa9b8f310df64875a
+size 5335
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Rain_Splash_RenderMode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Rain_Splash_RenderMode.uasset
new file mode 100644
index 00000000..0bfef848
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Rain_Splash_RenderMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bbb01963f84f361c01ec15ef83f7ab5718c12c0849a1663b9decefccffab0bf
+size 2788
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Readme_Glossary_Type.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Readme_Glossary_Type.uasset
new file mode 100644
index 00000000..6c96014e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Readme_Glossary_Type.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f6af50538c9663de30aedf2c3391d931f737d6c6358786ec4faf7c6764b6a1e
+size 5725
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Season.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Season.uasset
new file mode 100644
index 00000000..acbff0c3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Season.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a38dc2c68d5ff3914a3707aa5c4bb5c3e87fbe7f5d47c31f734c8314f818ca82
+size 2971
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SeasonMode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SeasonMode.uasset
new file mode 100644
index 00000000..25467f53
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SeasonMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95a68a8a5b9a27d8fddb46247c8ee81a48722916103901ba10dd4337a0940546
+size 2548
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SkyLightMode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SkyLightMode.uasset
new file mode 100644
index 00000000..bac10a20
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SkyLightMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e49153f0152edf17bd375a63a7147ac4a6a6f787a6cd42a4f43ff90721e7c849
+size 3276
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SkyMode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SkyMode.uasset
new file mode 100644
index 00000000..87cf70b6
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_SkyMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8334aa803635e35e9460242702c3b96f4b455e557d38fdb2d4afc048b599b0d4
+size 5032
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Space_Parent.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Space_Parent.uasset
new file mode 100644
index 00000000..066de8f8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Space_Parent.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0270e7d83392aec2e76b5006d9d7f574925238d6591542f8be7bf60a4bf41df5
+size 3043
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_TemperatureType.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_TemperatureType.uasset
new file mode 100644
index 00000000..eadae3e2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_TemperatureType.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa62d0d707397fdd4a7adcbcd6cbb917edb7f46574f47cb2ca12b4c1f2fac980
+size 2330
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_VolRT_Mode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_VolRT_Mode.uasset
new file mode 100644
index 00000000..97ba9e33
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_VolRT_Mode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09f7146bed556071fb3e67b58d1def110b9684880b2995b285b0263a11889fc7
+size 4099
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Display_Names.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Display_Names.uasset
new file mode 100644
index 00000000..5b11cc58
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Display_Names.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5d08aa27b2916b70af5f5501086dfeedb997c04c0f2ba66bbeb29a7e7d6a9f9
+size 7738
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Mask_Brush.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Mask_Brush.uasset
new file mode 100644
index 00000000..4d98f2cc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Mask_Brush.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d4192cf706381398efcf3423fd8350af74c2a05c80e56151f46c494a8022f0c8
+size 4006
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Override_Mode.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Override_Mode.uasset
new file mode 100644
index 00000000..0ecae076
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Override_Mode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6ea58c477be058f026101639dff6ea669ba9ff818c1ccdaf03150e6d9702f97e
+size 2732
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Sound_Components.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Sound_Components.uasset
new file mode 100644
index 00000000..c2a06695
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Enum/UDS_Weather_Sound_Components.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6559ab32b9e7794413b588b3ae2b30241c27ba5e3b50dacdf3d7ae775ad1248c
+size 5801
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Mini_Controls.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Mini_Controls.uasset
new file mode 100644
index 00000000..3b804afd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Mini_Controls.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:25d018c91329b173e21b291b1f57782c0ccc3925649808289f68810dc7d8eb85
+size 311718
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/Occlusion_Settings/Actor_Status_Occlusion_Settings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/Occlusion_Settings/Actor_Status_Occlusion_Settings.uasset
new file mode 100644
index 00000000..db84c2a3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/Occlusion_Settings/Actor_Status_Occlusion_Settings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7f525103f6092198b7310f2067e81437abfb8ddc440875038843df9cb5e527e
+size 2313
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/Occlusion_Settings/UDS_Standard_Occlusion_Settings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/Occlusion_Settings/UDS_Standard_Occlusion_Settings.uasset
new file mode 100644
index 00000000..ecb767a7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/Occlusion_Settings/UDS_Standard_Occlusion_Settings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f92725fdb9ca2e9c7c3ada940861696cda4da52719f2686dff45d723fc4981ef
+size 1748
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/UDS_Occlusion_Portal.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/UDS_Occlusion_Portal.uasset
new file mode 100644
index 00000000..09775cbd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/UDS_Occlusion_Portal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55cd20196c26ff12fa0f43cd3f1df30c1de08d68b2a8f636e95b7a6e6ba516f6
+size 28551
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/UDS_Occlusion_Volume.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/UDS_Occlusion_Volume.uasset
new file mode 100644
index 00000000..c5768cf1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Occlusion/UDS_Occlusion_Volume.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:446bb857bcb066e8e0f38de8f11e7b0e2b67062c63c22079c9a354f2d978911d
+size 141422
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/README.txt b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/README.txt
new file mode 100644
index 00000000..dd41a4e4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/README.txt
@@ -0,0 +1,1937 @@
+-----
+INTRODUCTION
+-----
+
+ Hello! Thank you for purchasing Ultra Dynamic Sky!
+
+ This document will cover all the basics of setting up and using UDS, but if you have any questions or run into any problems not covered here, please email me at support@ultradynamicsky.com
+
+ Also, there are tooltips for just about every setting on the sky and weather, so if you're confused about what something does, hover over it for a specific explanation.
+
+-----
+SKY SETUP
+-----
+
+-----
+ADDING ULTRA DYNAMIC SKY TO YOUR LEVEL
+-----
+
+ First, make sure you've removed any existing sky and cleared the following out of your level:
+
+ - Directional Lights
+
+ - Sky Light
+
+ - Exponential Height Fog
+
+ - Sky Atmosphere
+
+ - Volumetric Cloud
+
+ With all of these removed, if there is still some ambient light present, that probably means there's still static light left over in the level's lightmaps, so run a lighting build (from the Build dropdown on the main toolbar) to clear that out.
+
+ Drag the Ultra Dynamic Sky actor into your scene from the Blueprints folder. You should see the sky with its default configuration of daytime lighting with volumetric clouds.
+
+ Typically you should place UDS at ground level. If you want to change the height of the clouds, use Bottom Altitude in the Volumetric Clouds category instead of moving the actor.
+
+ Note, depending on the context, the editor may need to compile shaders for UDS before all of its features become visible. The editor should indicate this is happening, and it can potentially take a while depending on your system specs.
+
+-----
+BASIC CONTROLS
+-----
+
+ When you select UDS in your level, the details panel will show the UDS settings, starting with the Basic Controls category.
+
+ The main things to note in Basic Controls are:
+
+ - Time of Day is the main control for time on UDS, and by default will determine the position of the sun and the moon.
+
+ - Sky Mode, Color Mode, and Project Mode, which broadly determine the features and behavior of UDS. See the sections below for information about each.
+
+ - Cloud Coverage and Fog, which determine how cloudy the sky is and how foggy the scene will be. Note, if Ultra Dynamic Weather also exists in your level, these will be controlled by UDW's weather state.
+
+ - Simple adjustments like Saturation, Contrast, Overall Intensity, and Night Brightness. These can be used for basic visual tweaks of the sky and lighting.
+
+ - Dusk Time and Dawn Time determine the Time of Day values where the sun will cross the horizon. Note, these values won't be used if the sun is using Simulate Real Sun. For more information about the Simulation features, see the section on Simulation.
+
+-----
+SKY MODE
+-----
+
+ In Basic Controls on UDS, there is a setting called Sky Mode. This mainly controls the type of clouds (or volumetric aurora) in use. Here is a quick explanation of each option:
+
+ 1. Volumetric Clouds - Enabled by default, this sky mode uses a field of full 3D clouds. This can offer the most realistic visuals, but at a performance cost that may be too much for some projects/platforms.
+
+ 2. Static Clouds - Designed to mimic the look of the volumetric clouds but as a static cloud texture. Much lower performance cost than volumetric clouds.
+
+ 3. 2D Dynamic Clouds - Dynamic clouds drawn using panning 2D textures.
+
+ 4. No Clouds - This mode uses no dynamic clouds at all.
+
+ 5. Volumetric Aurora - Sacrifices clouds to render full 3D aurora effects. Adjustable using the settings in the Aurora category.
+
+ 6. Space - For scenes set in outer space, with no planet/ground beneath the viewer. Disables all clouds, atmosphere, sky coloring, leaving only sun, moon and stars.
+
+-----
+COLOR MODE
+-----
+
+ The next setting in Basic Controls, called Color Mode, determines where the colors for the sky come from.
+
+ 1. Sky Atmosphere - The system will use unreal's sky atmosphere rendering system to imitate correct atmospheric scattering. The settings for this can be further adjusted from the Sky Atmosphere category.
+
+ 2. Simplified Color - Determines colors in simpler ways, by sampling an atmospheric scattering LUT texture, along with adjustable color values. Cheaper on the material level than the sky atmosphere, and more directly customizable. The color values used by Simplified Color can be changed from the Simplified Color category.
+
+-----
+PROJECT MODE
+-----
+
+ The third top level Mode setting in Basic Controls is Project Mode. This setting determines how the system will behave at runtime. There are two options for Project Mode:
+
+ 1. Game / Real-time enables runtime optimizations which spread out calculations on UDS. It's intended for games or any kind of project where real-time performance is needed.
+
+ 2. Cinematic / Offline disables these optimizations, so that everything dynamic on the sky will update fully every frame. It also increases many quality settings automatically at runtime, to maximize render quality. It's intended for rendering movies or stills, or any project where real-time performance is not needed.
+
+-----
+CLOUDS
+-----
+
+-----
+VOLUMETRIC CLOUDS
+-----
+
+ The Volumetric Clouds category is where you'll find the settings for adjusting the appearance of the volumetric cloud layer. Here are some of the key settings and what they do:
+
+ - Volumetric Cloud Rendering Mode is what determines how the engine will render the volumetric clouds to the screen. It has performance implications, and determines if clouds can render in front of objects or just in the background layer. See the tooltips for each option for an explanation of each.
+
+ - Bottom Altitude is what sets how high the cloud layer is in the level. It's recommended to use this option instead of moving the UDS actor, as Bottom Altitude will adjust only the cloud layer, and won't have unintended effects on atmosphere and fog.
+
+ - Volumetric Clouds Scale is what you should adjust if you want to scale the entire cloud field uniformly.
+
+ - The View Sample Scale settings are what control the amount of samples used to render the clouds. If they're looking too noisy, you can increase this setting to resolve the clouds better, at a performance cost.
+
+ - Two Layers can be enabled to add a second layer of clouds above the first, offset in a handful of ways using the Layer 2 settings below that. Note that a second layer will increase the cost of cloud rendering very significantly.
+
+ If you want to directly control volumetric cloud coverage in specific parts of your level, like to make a specific area around a mountain free of clouds for example, you should use the Volumetric Cloud Painter utility. There is a section specifically on the Volumetric Cloud Painter further down in this document.
+
+-----
+2D DYNAMIC CLOUDS
+-----
+
+ In the 2D Dynamic Clouds category, you'll find all the settings relating to the look of the 2D clouds, from softness and shading effects to the noise texture used to generate the clouds.
+
+ When adjusting the 2D Dynamic Clouds, understand that the clouds are a material effect which exists on the sky sphere, so they do not exist in the 3D space of the level. Settings like Cloud Height are just a control of the fake perspective distortion that exists in the sky material.
+
+ Also note, in the advanced dropdown of the 2D Dynamic Clouds category, you'll find settings to adjust the distribution of the clouds, to make them have more coverage around the horizon for example, or reduce coverage around the moon.
+
+-----
+STATIC CLOUDS
+-----
+
+ The Static Clouds category has a few settings for changing out the texture used by the static clouds, and controlling its rotation.
+
+ There are three static clouds textures included, but you can also create your own custom ones using a special editor utility. The Static Clouds Authoring Tool, found in Blueprints/Tools, can render the volumetric clouds on UDS to create a new static clouds texture.
+
+-----
+CLOUD MOVEMENT
+-----
+
+ The Cloud Movement category contains the settings for how volumetric clouds and 2D dynamic clouds will move. You can adjust Cloud Speed and Cloud Direction from here. Note that Cloud Direction will be controlled entirely by UDW if UDW exists in the level, using its wind direction.
+
+ Cloud Phase is particularly useful when Cloud Speed is set to 0. When clouds are still, you can use Cloud Phase to fine tune an exact formation of clouds you like.
+
+ Randomize Cloud Formation On Run will start the game with a randomized cloud formation every time, independent of the other movement settings.
+
+ Clouds Move With Time of Day is useful for situations where the speed of time can change, to keep cloud movement in sync with time during a short time lapse for example.
+
+-----
+CLOUD WISPS
+-----
+
+ Cloud Wisps are the layer of static, wispy high altitude clouds, which are rendered on the sky behind every sky mode (except Space). You can find the settings for adjusting the appearance of them in the Cloud Wisps category.
+
+ The cloud wisps work by sampling a grayscale texture and using that to apply a cloud wisp color, which changes with time of day. The opacity of that color is scaled using the Cloud Wisps Opacity settings, one of which is used when Cloud Coverage is low, and one is used when coverage is high.
+
+ The texture can be replaced with a custom one with the Cloud Wisps Texture setting. Again, this should be a grayscale texture, as only the R channel will be sampled, to apply the cloud wisps color to the sky.
+
+-----
+LIGHTING
+-----
+
+-----
+LIGHT COMPONENTS
+-----
+
+ UDS has light components for the directional lights and sky light. The components (or actors) used will be determined by the settings in the Component Selection category, and in the case of the sky light, the Sky Light Mode setting.
+
+ Note that while it's possible to have UDS reference a light actor for the sun, moon or sky light, instead of using the built in component, this is not recommended in any situation except those which specifically require a light actor. For example third party assets or plugins may occasionally require a light actor reference. This is really the only situation it should be necessary to use an actor instead of the built in components.
+
+ If you do have to use light actors in place of the components, note these additional steps:
+
+ - For the directional lights, there is a setting on the component called "Cloud Scattered Luminance Scale" which controls how the lights affect the clouds. This isn't something exposed to blueprint control, so UDS cannot apply it to your light actor itself. You'll need to copy the value for Clouds Scattered Luminance Scale from the Sun or Moon component on UDS to your directional light actor.
+
+ - Similarly, on a sky light there is a setting called Source Type which UDS cannot control, but needs to be set in accordance with UDS' Sky Light Mode setting. For "Cubemap with Dynamic Color Tinting" and "Custom Cubemap", make sure the Source Type on your sky light actor is Specified Cubemap. For the sky light mode called Capture Based, make sure the source type is set to Captured Scene.
+
+-----
+SUN AND MOON DIRECTIONAL LIGHTS
+-----
+
+ The directional light components on UDS are called Sun and Moon. Several settings on the directional lights will be controlled by the blueprint, such as light color, intensity, cast shadows, and light source angle. But the rest will be left open for you to edit directly on the component. To do this, just select UDS and find the Sun or Moon in the component list at the top of the details panel. On selecting one, you will see its directional light component settings, the same as the ones on a directional light actor.
+
+ The exposed settings for UDS' control of the directional lights can be found in their respective categories in the UDS details: Sun and Moon.
+
+ For information about the positioning and movement of the sun and moon, and their appearance in the sky, see the Sun and Moon section below.
+
+-----
+CLOUD SHADOWS
+-----
+
+ Cloud Shadows will be applied to the directional lights by default, and are compatible with all sky modes, including the ones without clouds. They can be disabled from the Cloud Shadows category.
+
+ The Cloud Shadows category is also where you can adjust the intensity and softness of the shadows with cloud coverage. By default, cloud shadows fully occlude the directional light in high coverage, but only partially in low coverage. From here you can also adjust how much directional light is shadowed when Fog or Dust Amount is high. Note that this is a part of the cloud shadows light function, so it also requires Use Cloud Shadows to be enabled.
+
+ If the sky mode is volumetric clouds, then the cloud shadows will be accurate to the 3D layer, so that every cloud in the layer casts its own correct shadow on the scene. For the other sky modes, since they don't have clouds which exist in 3D space to cast direct shadows, the speed and scale of the shadows texture is determined by 2D Cloud Shadows Speed and 2D Cloud Shadows Scale.
+
+-----
+SKY LIGHT
+-----
+
+ In the Sky Light category, Sky Light Mode determines the source of the sky light cubemap and how its intensity and color will be controlled by UDS.
+
+ These are the Sky Light Modes and how they work:
+
+ 1. Capture Based - The sky light will generate a cubemap by capturing the sky. By default, this method uses the real time capture option. If real time capture isn't necessary for your project, you can disable the real time capture from the Capture Based Sky Light category. Note that Real Time Capture is not supported by all platforms, and is incompatible with Volumetric Fog without Lumen.
+
+ 2. Custom Cubemap - A simple static cubemap texture, set using the Custom Cubemap option below.
+
+ 3. Cubemap with Dynamic Color Tinting - This method uses a flat gray cubemap and tints it dynamically with the fog color to align well with the time of day. This option is good for performance in projects with dynamic time of day, as the ambient light is dynamic without requiring recapturing, and supports all platforms.
+
+ Each Sky Light Mode has its own category of settings specific to the mode, found beneath the main Sky Light category.
+
+ In the main Sky Light category itself, you'll find settings which apply to all 3 modes, like the Sky Light Intensity. You can also use the Sky Light Color Multiplier settings to tint the color differently based on Time of Day. Note that these color multipliers can also be set to values higher than 1 and this will scale the light intensity proportionally at that time.
+
+-----
+EXPOSURE
+-----
+
+ By default, UDS applies auto exposure settings. Auto exposure is what allows the brightness of the image to adapt to the light level of the scene automatically. Some features in unreal occasionally refer to auto exposure as "eye adaptation".
+
+ These auto exposure settings can be adjusted, or disabled, from the Exposure category.
+
+ When Apply Exposure Settings is enabled, UDS will apply the auto exposure mode "Auto Exposure Histogram", and control these post process settings for exposure:
+
+ - Exposure Componsation Curve, which pushes image brightness higher or lower based on the general level of light in the image.
+
+ - Exposure Compensation, controlled on UDS by the Exposure Bias settings for different time and weather scenarios. This can allow you to specifically make nighttime exposure brighter, or cloudy exposure darker, for example.
+
+ - MinEV100 and MaxEV100, which control the range of brightness that auto exposure will try to adapt to. This is controlled on UDS with Exposure Min Brightness and Exposure Max Brightness.
+
+ If you're trying to fine tune auto exposure behavior with these settings and/or the additional exposure settings in a post process volume or camera, I'd recommend using the viewport view mode found in Show > Visualize > HDR(Eye Adaptation) to see exactly what auto exposure is doing behind the scenes.
+
+-----
+USING STATIC/STATIONARY LIGHTING
+-----
+
+ UDS' default configuration uses all movable lights, but it supports static lighting as well.
+
+ To make any of UDS' lights static or stationary, find its mobility setting, in the UDS details. These are found in the lights' respective categories, so Sun, Moon, and Sky Light. Make sure you set the mobility from the exposed setting, and not on the light component itself.
+
+ Once you've built the level's lighting, you will still be able to make changes to the sky settings, but note that any settings which alter the lights or move them around will break the lighting build and you'll have to build again. Also note that if your sun light is set to be static/stationary, this disables the Animate Time of Day setting, as the sun can no longer be moved in game.
+
+-----
+TIME
+-----
+
+-----
+SETTING UP A DAY/NIGHT CYCLE
+-----
+
+ If you want Time of Day to move forward on its own at runtime, to create a day/night cycle, the place to set that up is the Animate Time of Day category.
+
+ If Animate Time of Day is enabled there, time will move forward when the level is running. The speed of time will be determined by Day Length and Night Length. These values are in minutes and represent the real time that will pass between sunrise and sunset and vice versa.
+
+ Note, if you have Simulate Real Sun enabled in the Simulation category, the speed time moves is determined by Simulation Speed there, not Day Length and Night Length. For more info about the simulation features, see the Simulation section in these docs.
+
+-----
+CONTROLLING TIME OF DAY
+-----
+
+ Change the Time of Day property in Basic Controls to adjust the time of day the system will start with. You can also enable an option to start with a random time, from the Animate Time of Day category.
+
+ For controlling Time of Day at runtime, there are several ways you can do that:
+
+ - Simply setting Time of Day on UDS at runtime will instantly change the time directly.
+
+ - You can call the functions on UDS called "Set Time of Day Using Time Code" or "Set Date and Time" to use common time/date structures to set the time with hours/minutes values.
+
+ - You can call the function "Transition Time of Day" on UDS, to have the time start animating to a target value over a specified duration. This is useful if you want to have time pass quickly to a particular point.
+
+-----
+GETTING AND DISPLAYING TIME OF DAY
+-----
+
+ To get Time of Day from UDS, there are functions which can output the time in different formats:
+
+ - "Get Time of Day in Real Time Format" will output a Time Code structure, with hours/minutes/seconds values.
+
+ - "Get Current Date and Time" will output a Date Time structure, with the time in hours/minutes/seconds as well as the simulation date.
+
+ - "Is It Daytime?" will output a boolean which is true if the sun is up. If rather than the specific time you just need to know if it's day or not, this function is the one to use.
+
+ For displaying the time on screen in a simple way, UDS comes with two clock widgets. These can be found in the widget designer palette in the Ultra Dynamic Sky Widgets category.
+
+-----
+SUN AND MOON
+-----
+
+-----
+ADJUSTING SUN AND MOON MOVEMENT
+-----
+
+ By default (without using the Simulation settings covered elsewhere in this document) the Sun and Moon's position in the sky with time will be derived using the following settings found in both the Sun and Moon categories:
+
+ - Angle (Sun Angle and Moon Angle) - This controls the yaw of the sun or moon's path. In other words, the direction that it will set/rise. It's a value in degrees, rotating the path clockwise.
+
+ - Inclination (Sun Inclination and Moon Inclination) - This pitches the path, so that the sun or moon's highest position in the sky will be lower, angled away from the zenith. It's also a value in degrees, with 0 meaning the sun/moon would go all the way to the top of the sky at midday.
+
+ - Vertical Offset (Sun Vertical Offset and Moon Vertical Offset) - This value can be positive or negative, to push the position of the sun or moon higher or lower, irrespective of the time.
+
+ - The moon specifically also has a setting for Moon Orbit Offset which controls how the moon is offset from the sun in time. A value of 0 will have the moon's path be the opposite of the sun's, rising at night and going down during the day.
+
+ Again, it's important to note all of these values will be overridden by the Simulation settings if enabled. See the section in these docs on the Simulation features for more information on how to control that.
+
+-----
+MANUALLY POSITIONING THE SUN AND MOON
+-----
+
+ It is possible to disconnect the sun or moon's position from time, and place them completely manually.
+
+ To do this, check Manually Position Sun Target in the Sun category, or Manually Position Moon Target, in the Moon category.
+
+ With that turned on, find the blue diamond shaped widget labeled Sun Target or Moon Target, visible on the UDS actor when it's selected. Select that widget and move it to adjust the position of the sun or moon.
+
+ The direction of the sun/moon will be determined by the direction from the UDS actor to the position of that target widget.
+
+-----
+SUN AND MOON APPEARANCE
+-----
+
+ The Sun and Moon categories are where you'll find settings for the appearance of the sun and the moon as they are rendered in the sky material.
+
+ Sun
+
+ The sun is rendered as a simple radial gradient, so it just has settings for radius, softness, color, and intensity.
+
+ Sun radius will also be used to derive the correct light source angle of the sun directional light, so the softness of the shadows and size of specular highlights will be correct for the sun's size in the sky.
+
+ Moon
+
+ Since the moon is rendered using a texture, it has more settings for its appearance.
+
+ The default moon texture is built to support rendering moon phases, which can be adjusted with the Moon Phase setting. You can also enable an option in the Moon category to have moon phase change over time. Note that if using Simulate Real Moon, the moon phase will be set by the simulation.
+
+ You can select a texture to replace the default moon texture with Custom Moon Texture, but note that this will remove the moon phase functionality. If you want to try authoring a texture which supports phases the same way the default one does, the setting for that is the Moon Masks Texture, in the advanced dropdown of the Moon category.
+
+-----
+FOG
+-----
+
+-----
+FOG DENSITY
+-----
+
+ The Fog Density category on UDS is where variables like Cloud Coverage and Fog are used to determine the density, height falloff, and start distance of the exponential height fog layer.
+
+ Density is how thick/opaque the fog will be with distance from the camera. Height Falloff is how quickly fog density disppates above the height of the fog component.
+
+ For density, there is a base value, and then values added to density for Cloud Coverage, Fog, and Dust Amount.
+
+ For height falloff, there is a base value, and then falloff values for a cloudy, foggy, and dusty state, which are used directly, not added together.
+
+ The start distance of the fog is derived from the density, using a value for start distance at low density, and a density value where start distance will be reduced to 0, to allow fog right next to the camera.
+
+-----
+FOG COLOR
+-----
+
+ The Fog Color category is where the settings for the color of the height fog are, but how they're used by UDS depends heavily on the project setting "Support Sky Atmosphere Affecting Height Fog".
+
+ This setting should typically be enabled by default in new projects, and I would recommend leaving it enabled, as it derives colors for fog directly from the sky atmosphere, and this usually produces good, desired results. If this project setting is on, only some of the Fog Color settings on UDS will be used by the fog. Specifically the settings which scale intensity and brightness, but not the settings for direct control of colors/saturation.
+
+ If you want more direct control over fog color on its own however, you might try disabling that project setting, to allow the fog to always use the Fog Color settings alone to determine fog colors.
+
+ Note, you can disregard everything above if you are using the Simplified Color option for Color Mode, as the sky atmosphere is not enabled at all in that mode. If Simplified Color is selected, all the Fog Color settings will be used by the fog.
+
+-----
+VOLUMETRIC FOG
+-----
+
+ Volumetric Fog is a rendering feature in Unreal Engine which can render more advanced fog nearby the camera, which recieves and scatters light from local light sources and can vary its color and extinction using volumetric materials or particles placed in the level.
+
+ The settings for enabling this on UDS are found in its Volumetric Fog category.
+
+ The basic settings for enabling volumetric fog and adjusting its overall extinction and the distance it renders from the camera are found at the top of the category. You'll also find settings for the sun and moon's Volumetric Scattering Intensity here, which scales how much each light source lights up the volumetric fog.
+
+ Below that are the options for the Global Volumetric Material, which if enabled will allow some simple global controls of extinction and color. The global volumetric material has the following features, each of which can be enabled/adjusted from here in the Volumetric Fog category:
+
+ - Texture based 3D noise applied to the fog extinction, to add some variation to the fog.
+
+ - The ability to mask the volumetric fog using the Weather Mask brush system. See the weather section of this readme for information about that toolset.
+
+ - Ground fog, which adds additional fog extinction in the air directly above distance fields. This requires the project setting to generate mesh distance fields to be enabled.
+
+ - Specific fog extinction and albedo can be applied beneath the water level. The water level is controlled from the Water category.
+
+ When volumetric fog and volumetric clouds are used together, they can sometimes produce strange ghosting artifacts in the areas they overlap. This will be influenced some by the Volumetric Cloud Rendering Mode in the Volumetric Cloud category. The one I'd recommend for best results alongside Volumetric Fog is "Clouds Render Over Opaque Objects (Quality)".
+
+-----
+SKY COLOR
+-----
+
+-----
+SKY ATMOSPHERE
+-----
+
+ If Color Mode is set to Sky Atmosphere, then the main controls of sky color will be found in the Sky Atmosphere category. Here are some of they key settings:
+
+ - The Rayleigh Scattering settings are what chiefly determine the main color of the sky. It can be adjusted for day, night, and dawn/dusk individually.
+
+ - The Sunset/Sunrise and Twilight values control the Absorption setting on the sky atmosphere component. This can be used to make stronger colored sunsets for example, or alter the tone of twilight.
+
+ - Sky Atmosphere Overcast Luminance will scale the intensity of all sky colors whenever the Cloud Coverage is high.
+
+-----
+SIMPLIFIED COLOR
+-----
+
+ If Color Mode is set to Simplified Color, then the main controls of sky color will be found in the Simplified Color category. Here are some of they key settings:
+
+ - The color variables in Simplified Color control the base sky color, as well as the light and dark color of the 2D Dynamic Clouds and Static Clouds. (For control of volumetric cloud color, see the Volumetric Cloud category.)
+
+ - The Directional Intensity float curve controls how much the intensity of the directional light is dimmed down as it nears the horizon.
+
+ - The Directional Light Scattering color curve controls how the directional light color is filtered as it nears the horizon.
+
+ - The Atmospheric Scattering LUT texture is a special HDR lookup table which is used to imitate the appearance of atmospheric scattering for the sun and the moon. The Y axis represents the height of the sun or moon relative to the horizon, and the X axis is roughly the height of the specific pixel being rendered for that point in the sky. It is very specifically and carefully authored, and if you want to customize it, I would suggest exporting it and making modifications rather than trying to make your own from scratch.
+
+-----
+SIMULATION
+-----
+
+-----
+SIMULATION OF REAL WORLD SUN, MOON AND STARS
+-----
+
+ UDS has features to position the sun, moon and stars using real world coordinates and date. These options are found in the Simulation category.
+
+ To enable them, just check Simulate Real Sun, Simulate Real Moon, and Simulate Real Stars. Each of these can also be enabled individually as needed.
+
+ - Simulate Real Sun and Simulate Real Moon simply override the default logic for the positioning of the sun and moon. All of the settings for positioning/path in the Sun and Moon categories will be overridden (except for Manually Position, which takes priority over the Simulation)
+
+ - Simulate Real Stars will change what texture is used for the stars. by default a simple tiling stars texture is used. With Simulate Real Stars enabled, a 360 degree star map will be used instead. Both of these texture settings are exposed to be changed out in the Stars category.
+
+ The simulated location is determined using the Latitude and Longitude values. Also make sure to set the Time Zone to the correct UTC offset for the location, so that Time of Day will be interpreted correctly as local to this location. You can also select a city preset, which will apply latitude, longitude and a time zone value in one step.
+
+ The year, month and day control the date of the simulation. At runtime, the date will increment one day forward every night at midnight, like you would expect.
+
+ North Yaw can be adjusted to change what world space direction corresponds to north in the simulation. It's a value in degrees, rotating the simulation clockwise. By default, north is toward positive X.
+
+ Notes on the Simulation Accuracy
+
+ Because the complete versions of the appropritate astronomical algorithms would be very expensive to calculate with blueprint math, what I've created here is my own approximation. It leaves out complicating nuances such as the eccentricity of the earth's orbit, or the irregularity of the earth's shape. That said, I've done a lot of back and forth testing, and my approximations of the sun's position were never more than a little over a degree off from the results given by the complete algorithm, and that deviation is a worst case scenario. Typically the deviation was only in fractions of
+a degree. Again, based on my own tests. You may find edge cases where the deviation is worse. Still, I think the accuracy of the sun is sufficient for almost all practical applications.
+
+ The accuracy of the Moon's position is more variable than the sun's. The Moon's orbit is calibrated using it's position in 2017. So, any date within several decades of that should be generally accurate. At the very least, the moon should generally appear in the correct constellation and have the right phase.
+
+-----
+CONTROLLING TIME OF THE SIMULATION
+-----
+
+ If Simulate Real Sun is enabled, Time of Day will behave differently in some ways to suit the needs of the simulation. Also the simulation has some specific features which interpret or change how time is handled.
+
+ - If Animate Time of Day is enabled, the speed of time will not be determined by Day Length and Night Length. Instead, it will be determined by Simulation Speed, in the Simulation category. This value scales the speed of time, with 1 being roughly realistic speed.
+
+ - Options for daylight savings time can be found in the Simulation category. If enabled, Time of Day will be interpreted with DST within the range of the year set by the DST start and end times in the advanced dropdown of the Simulation category.
+
+ - Use System Time, in the Simulation category, will disconnect the simulation from Time of Day and time the simulation using the system UTC time. This means that if the system clock is correct, the simulation will be accurate to the current real world location right now. Note, because this option gets the system's UTC time directly, there is no need to convert anything from a local time zone, so the Time Zone setting is not used.
+
+-----
+CINEMATICS AND RENDERING
+-----
+
+-----
+ANIMATING UDS WITH SEQUENCER
+-----
+
+ Here are some tips for animating the sky using sequencer.
+
+ Keyframing Time of Day
+
+ To animate Time of Day directly, you should disable the Animate Time of Day setting on UDS, and keyframe the Time of Day variable. When animating with the Time of Day variable, it's okay to go past 2400. The system will understand this and proceed forward in time with a new day.
+
+ Keyframing Cloud Coverage or Fog
+
+ To animate the cloudiness or fogginess, you can keyframe the Cloud Coverage or Fog variables on UDS, but only if you don't have an Ultra Dynamic Weather actor in your scene. If you do, you should keyframe the Cloud Coverage and Fog variables on UDW instead, using its manual weather state. (See the sequencer section in Weather for more info about animating weather state on UDW)
+
+ Keyframing Cloud Movement
+
+ To directly animate cloud movement, first set Cloud Speed to 0. Disable "Randomize Cloud Formation on Run" and "Clouds Move with Time of Day" as well. Then in sequencer, animate using the Cloud Phase variable. This will allow you to directly control cloud movement in a way that will play back the same way every time.
+
+ Keyframing Other Variables
+
+ Not every variable on UDS is reapplied dynamically at runtime, in the way that would be needed to animate the value in a cinematic. Many are though, and all of the UDS variables that will work without additional steps are exposed to be keyframed.
+
+ If you want to try keyframing additional variables that are not exposed by default, you'll need to mark them as exposed. Open UDS in the blueprint editor, find the variable in the My Blueprint panel, and check Expose to Cinematics on its variable details.
+
+ Any variables you expose manually like that will probably not update with the keyframe at runtime, but you could try calling the Update Static Variables function every frame of the animation, and that should work to force most of the remaining values to update.
+
+ For tips about animating weather, see the section about sequencer in the Weather section of the readme.
+
+-----
+RENDERING MOVIES
+-----
+
+ When rendering out a sequence using the movie render queue, first make sure to change Project Mode on UDS to "Cinematic / Offline". This configures the sky for maximum quality at runtime, while also disabling many optimizations that are useful only in real-time rendering scenarios. If rendering a movie using the path tracer, see the section in this document on using UDS with the path tracer.
+
+ If your project does need real-time performance at runtime normally , be sure to turn Project Mode back to Game / Real-time after completing your movie render, or game performance will be severely compromised.
+
+-----
+RENDERING WITH THE PATH TRACER
+-----
+
+ If you turn on the Path Tracer in a scene with Ultra Dynamic Sky, you'll face some rendering limitations of the path tracer. Specifically it cannot yet natively render some of the sky rendering features (like volumetric clouds) which UDS makes use of. The path tracer will instead use the sky light cube map as a replacement for native sky rendering.
+
+ Ultra Dynamic Sky has a setting specifically to adjust for these limitations as well as it can, to work accepably as a background for path traced renders. Just enable the option "Adjust for Path Tracer" in the advanced dropdown of the Basic Controls category on UDS.
+
+-----
+CONTROLLING YOUR LEVEL WITH UDS
+-----
+
+-----
+TURNING ON LIGHTS IN YOUR LEVEL AT NIGHT
+-----
+
+ There is a special component included to help make a light which turns on and off at sunset/sunrise. It's the "Light Day-Night Toggle" component found in the Blueprints/Utilities folder.
+
+ Just add one of these components as a child of any light component on an actor. When the level is played, the light's active state will be determined by if the sun is up or not. It will be on at night by default, but you can change that using a setting on the component.
+
+ By default the light will also animate its intensity as it powers on, to imitate a flourescent lamp. You can disable this or adjust it from the component's settings.
+
+ The state of the light can also be used to control a "Light Toggle" parameter on an array of dynamic material instances. Just add a dynamic material instance to that array, and the parameter (from 0 to 1) will be set as the state of the light changes.
+
+-----
+TRIGGERING EVENTS AT SPECIFIC TIMES
+-----
+
+ UDS has event dispatchers which fire at particular times, which your actors can use to perform actions at Sunset, Sunrise, Midnight, or Hourly.
+
+ To use them, you'll first need to get a reference to the UDS actor in your blueprints. A simple way to do that is to use "Get Actor of Class". Then using that reference, you can bind events in your blueprint to the dispatchers. For example "Bind to Sunrise" or "Bind to Sunset". Once they're bound, these events will be called by UDS at the appropriate time.
+
+ By default, the Sunset and Sunrise events will fire at the exact moment the sun crosses the horizon. But you can offset that time to suit your needs using the "Sunrise Event Offset" and "Sunset Event Offset" settings in the Animate Time of Day category.
+
+-----
+ADDITIONAL FEATURES
+-----
+
+-----
+ADJUSTING SETTINGS INSIDE INTERIORS
+-----
+
+ UDS has a category called Interior Adjustments, which if enabled, you can use to adjust things like fog and light, based on how occluded the player camera is at runtime.
+
+ To use these settings, first check "Apply Interior Adjustments" in the Interior Adjustments category. Then, make your changes to the settings below, which modify various properties of the sky when inside an interior.
+
+ Note, the interior adjustments can only test and respond to the player camera's location at runtime, so you'll need to play the level to see the effects. It's not something you'll see moving the editor camera around the level.
+
+ The settings for the occlusion system are stored in a data asset, selectable in the Interior Adjustments category as "Occlusion Settings". This settings object defines things like the location occlusion traces come from, how many are used, how often occlusion is updated, etc.
+
+ You can also place the UDS Occlusion Volume actor, found in Blueprints/Occlusion, to force specific spaces to be fully occluded and always apply the interior adjustments. Note the setting on UDS for Occlusion Sampling Mode which determines if occlusion is determined by the traces for collision, the occlusion volumes, or both.
+
+-----
+SUN LENS FLARE
+-----
+
+ UDS has its own feature to apply a filmic lens flare to the sun specifically. Note that this is a completely separate effect from the image based lens flares built into the engine.
+
+ To enable this lens flare, just check "Enable Sun Lens Flare" in the Lens Flare category, and select the Lens Flare Type you want.
+
+ It is possible to build your own custom lens flare type using this same setup. In the advanced dropdown of the Lens Flare category, see the option "Custom Lens Flare Parent Instance". To use this, create an instance of one of the existing lens flare material instances in Materials/Material_Instances/Lens_Flares. You can adjust the textures, colors, and mapping parameters of all the lens flare elements in your custom instance and use it with that exposed Custom parent instance setting.
+
+-----
+AURORA
+-----
+
+ UDS has two ways of rendering aurora effects in the sky, both adjustable from the Aurora category:
+
+ 2D Aurora
+
+ This is the effect which will be present if you enable "Use Auroras" in the Aurora category, and the Sky Mode is not Volumetric Aurora and is one which is compatible with 2D aurora. These 2D Aurora effects are a simple shader effect drawn using textures in the sky material. You can find settings specific to the 2D aurora and the way they're drawn in the advanced dropdown of the Aurora category.
+
+ Volumetric Aurora
+
+ Volumetric Aurora can be selected as a sky mode in Basic Controls. This effect is rendered using a volumetric cloud component, so it's a full 3D effect which the camera can go into/above. It is also affected by the Volumetric Cloud Rendering Mode setting in the Volumetric Clouds category.
+
+ Both of these effects share most of the settings in the Aurora category, for colors and movement.
+
+-----
+PAINTING VOLUMETRIC CLOUD COVERAGE
+-----
+
+ There are tools included for manually painting cloud coverage into the volumetric cloud layer. This painted coverage level is applied on top of the global Cloud Coverage value set on UDS (or by the weather state if UDW exists).
+
+ With UDS in the scene and Volumetric Clouds selected for its sky mode, run the Volumetric Cloud Painter editor utility, found in the Blueprints folder.
+
+ When you press Start Painting, the tool will prepare UDS and the level for clouds to be painted. An actor called UDS Cloud Paint Container will be created in the current level to hold the painting data for the level.
+
+ Here's a description of the various parts of the cloud painter interface and how to use them:
+
+ - The top bar is where you will adjust the brush used to paint cloud coverage. You can change the texture, strength, falloff, and brush spacing.
+
+ - The viewport in the cloud painter is where you will paint brush strokes onto the cloud layer. Left click to paint, right click to drag the viewport, middle mouse click and drag to zoom in and out (or use the buttons in the lower right). You can change between three view modes by clicking View in the lower left. You can also toggle the painting viewport locking the level viewport camera to the painting area, using the lock icon there.
+
+ - On the left of the viewport are the different paint and erase modes. You can paint three levels of cloud coverage, represented on the viewport as red, green, and blue. You can also erase existing painting (paint black).
+
+ - At the bottom of the tool is the button to Save to Textures. Make sure to press this to end your painting session and save your work. It will save the painted cells to texture files. It will put these into a subfolder called UDS_LevelData, in the folder where the level is located.
+
+ The painted cell textures are drawn into a cloud coverage render target on UDS. You can find the settings for the size and resolution of that target, and how its used, on UDS in the Volumetric Cloud Painting category.
+
+-----
+VOLUMETRIC CLOUD LIGHT RAYS
+-----
+
+ If in an overcast sky you use the Volumetric Cloud Painter to create a break in the cloud coverage, you will see an effect of light rays in the distance coming down through that hole in the coverage. That's a result of the Volumetric Cloud Light Rays, which are enabled by default, and can be adjusted in the category of the same name.
+
+ Note, the volumetric cloud light rays are a custom effect which renders rays using giant additive cards controlled by a niagara system. They aren't connected in any way to volumetric fog or screen space light shafts.
+
+ There are settings in the Volumetric Cloud Light Rays category to adjust the color and spacing of the ray cards, as well as enable "Individual Cloud Light Rays" which will try to cast rays through gaps in overall high coverage cloud formations, not just painted gaps in coverage. Note that this setting can potentially render many more ray cards, so it can have a more significant performance cost.
+
+-----
+UNDERWATER CAUSTICS
+-----
+
+ If your level has an ocean/water level, below which you want to have light imitate the effect of caustic refraction, UDS has a feature for this.
+
+ In the Water category on UDS, you can enable "Render Water Caustics" which will apply a caustic effect to the sun and moon directional light below the height specified by Water Level. Note that if you are using the Water Level setting on UDW for its weather effects, then water level will be controlled from there.
+
+ The light will also fade down to 0 as the depth below the water reaches Deep Water Falloff, to imitate the effect of direct sunlight being completely occluded deep beneath the surface.
+
+-----
+POST PROCESSING
+-----
+
+ If you just need to apply normal global post process settings to your level, the best way to do that is still just to use a Post Process Volume in the level. If however you want to apply post process settings which are applied dynamically depending on time or weather, UDS has a feature for that.
+
+ In the Post Processing category on UDS, you'll find an empty array called Post Process Components. If you add entries to this array, the system will create a post process component for each one.
+
+ Each entry has post process settings, where you can override and modify any post setting such as bloom settings, color grading, vignette, etc. Below the post processing settings are:
+
+ - Checkboxes to Enable/Disable this post process component based on the time of day. This will control the blend weight of the component, fading it in and out based on the current time.
+
+ - Checkboxes to mask the component with cloud coverage, fog, dust, or interior occlusion. For example, if you checked "Mask Blend Weight When Overcast", the post settings for this component would fade away as the sky becomes overcast.
+
+ By adding and customizing the entries in this array, you can create post processing settings which change for the time and weather's specific context.
+
+-----
+ADDING PLANETS / MOONS USING THE SPACE LAYER
+-----
+
+ UDS can render additional planets and moons, to the sky layer, correctly composited so they block stars, but are obscured behind clouds and aurora.
+
+ The place to do this is the Space Layer category on UDS. You can either manually add planets to the Planets / Moons array in that category, or you can start with one of the presets by selecting something for "Add Planet / Moon Preset".
+
+ Within the Planets / Moons array, you can customize the look and behavior of each planet.
+
+ All of the settings have tooltips, but here are a few key ones to note:
+
+ - Parent controls what the planet will move with. It can be parented to the sun, the moon, or it can be left unparented so it doesn't move, or could potentially be moved manually.
+
+ - Relative Rotation rotates the orientation of the planet, relative to what it's been parented to.
+
+ - Scale sets the visual scale of the planet.
+
+ - The Terminatior settings refer to the solar terminator, the line between the light and dark sides of the planet.
+
+ - The Light Vector controls where the light source determining the light/dark side of the planet will come from. The sun, the moon, or the custom vector.
+
+ - The Glow settings control an additional element, which renders a diffuse atmospheric glow around the planet. The brightness depends on how much of the lit side is facing the camera, and is scaled with the setting Space Glow Brightness in the Space Layer category.
+
+ The space layer draws these additional planets into the sky material using the dbuffer. So Dbuffer Decals should be enabled in your project, and need to be supported by the platform, for these planets/moons to be rendered.
+
+ Also note, Unreal 5.0 did not support mesh decal objects being sorted, so while this feature can be used in 5.0, the individual objects can't overlap each other without potential sorting errors. This isn't a problem in 5.1, where mesh decal sorting was added to the engine. In 5.1, the planets will be sorted from first to last, based on their order in the array.
+
+-----
+AMBIENT SOUNDS CONTROLLED BY TIME AND WEATHER
+-----
+
+ If you want an ambient sound actor to adjust it's volume based on if it's day or night, or based on the weather state from Ultra Dynamic Weather, there's a class included for that.
+
+ It's called "AmbientSound-Time and Weather Controlled" and can be found in the Blueprints/Sound folder.
+
+ It's a child of the normal Ambient Sound class, so it works exactly the same. Just with additional logic to control the volume multiplier with time and weather.
+
+ At the top of the Sound category, you'll find the settings for this. There are volume multipliers for day and night, as well as ones for snowy/rainy/no weather. There's also a setting called Volume Multiplier Transition Time which controls how long it will take the volume multiplier to change when time/weather triggers a change.
+
+ If using this for outdoor ambient sounds, you may also want your sound to adjust to UDW's sound occlusion, getting quieter in interiors the same way UDW's weather sounds do. There is an intended way to do this. If you use the sound class UDS Outdoor Sounds for your ambient sounds, and you have sound occlusion enabled on UDW, then your sound volume will be affected by the sound occlusion.
+
+-----
+ON SCREEN SKY CONTROLS
+-----
+
+ If your project needs a simple on screen interface to give the user control of time and/or weather, UDS comes with a widget built to be a good quick and clean solution for that.
+
+ It's called UDS Onscreen Controls and it can be found in the widget designer palette in the Ultra Dynamic Sky Widgets category.
+
+ By default, all of its controls will be enabled, but you can use the exposed settings on the widget details to turn off the controls you don't need. For example, you could limit it to only Show Time Control, for a simple compact control for Time of Day.
+
+ There are also settings to control the time and date format displayed, and the weather presets available in the weather controls.
+
+-----
+MISCELLANEOUS
+-----
+
+-----
+SAVING THE SKY AND WEATHER STATE FOR SAVE DATA
+-----
+
+ If you need to save the current state of UDS, and UDW as well if using it, for saving in save data or just preserving the state across a level load, there are functions on UDS to do that.
+
+ "Create UDS and UDW State for Saving" will package the state of both UDS and UDW into a single struct, which you can save with your save data. It contains all the variables for the time and current weather state.
+
+ "Apply Saved UDS and UDW State" will take in one of those saved state structs and apply it to UDS and UDW. This is to be used when loading a save or upon entering a new level.
+
+-----
+CONFIGURING FOR PERFORMANCE
+-----
+
+ Here are some of the most performance relevant settings to take note of if you want to reduce the performance cost of the main UDS features.
+
+ Sky Mode
+
+ The most performance relevant setting on the whole system is probably Sky Mode. The most expensive option here is of course Volumetric Clouds. 2D Dynamic Clouds is significantly cheaper to render, and Static Clouds is somewhat cheaper still. No Clouds obviously has the most minimal cost (outside of the Space mode).
+
+ Color Mode
+
+ Color Mode can be changed to Simplified Color to reduce some of the sky rendering cost, by disabling the sky atmosphere, and using simpler material logic for the sky colors.
+
+ Project Mode
+
+ If real-time performance is at all required, make absolutely certain Project Mode is set to "Game / Real-Time". The Cinematic option is for offline rendering only, and applies quality settings at runtime which will severely impact performance.
+
+ Volumetric Clouds
+
+ Volumetric Cloud Rendering Mode - Has an effect on the cost of the cloud rendering. The default of Background Only Clouds is usually a good balance of quality and performance, but the option Clouds Render Over Opaque Object (Performance) can be a lower cost option in some contexts.
+
+ View Sample Scale and Shadow Sample Scale - Reducing these will lower the cost of the volumetric rendering, but can introduce noise and artifacts.
+
+ High Frequency Levels - Increasing this above the default of 1 will increase cost of cloud rendering.
+
+ Two Layers - This option requires a much higher sample count for the volumetric clouds to resolve both layers, as wel as a slightly more complex volumetric material.
+
+ 2D Dynamic Clouds
+
+ One Cloud Layer - Enabling this will reduce the cost of the sky shader somewhat with 2D clouds. Note that One Cloud Layer is already enabled on the material level at Low material quality.
+
+ Sky Light
+
+ Sky Light Mode can have some small effect on performance, due to the cost of real time sky light capture. To eliminate that cost, but still have the sky light adapt to changing time and weather, try using the mode called "Cubemap with Dynamic Color Tinting".
+
+ Volumetric Fog
+
+ Note that enabling volumetric fog has a very signifcant rendering cost. In addition, UDS' own option to enable its global volumetric material will increase that cost somewhat.
+
+ Volumetric Fog, being a rendering feature of the engine, gets its scalability settings from the Shadow Quality scalability group. Note that by default, the engine's scalability settings for Low and Medium quality disable volumetric fog entirely.
+
+ Miscellaneous Performance Tips
+
+ - Almost all of UDS' materials respond in some way to global material quality level, reducing material complexity when using Low or Medium quality materials.
+
+ - All of the lights on UDS are movable by default, but static or stationary lighting is always going to be a more performance friendly option if it can fit your project. See the entry in this document on static lighting for more info on setting that up with UDS' lights.
+
+ - You can also set the Sky Mode to change on launch with the current Effects Quality set in the Game User Settings. For example, you could make it so that settings Medium and above use volumetric clouds, while Low will use static clouds. You can do this by enabling "Use Sky Mode Scalability Map" in Basic Controls, under the advanced dropdown, and adjusting the map.
+
+ - If you want to limit how often the directional lights on UDS update as they move, to reduce the frequency that cached directional shadows need updating, there are settings specifically for that. They are the Lights Update settings in the Animate Time of Day category.
+
+-----
+SAVING AND APPLYING CONFIGURATIONS
+-----
+
+ It may be useful to save a full configuration of all the settings on UDS (or UDW) for reusing in other levels/projects. You can do this using the configuration manager. You can find the configuration manager in the Blueprints folder, and run it by right clicking and selecting Run Editor Utility Widget (just like this Readme).
+
+ In the configuration manager, you can select your existing saved configurations to apply to your UDS actor. And you can create new configurations using the save button in the bottom right, when no configuration is selected.
+
+ You will be prompted to name your new configuration and select a place to save it. You can either save to your project files, which will put the new config into the Ultra Dynamic Sky folder in your project. Or you can save to the engine content folder, which will put the config file into an Ultra Dynamic Sky folder there. If the config is saved in the project, it will be accessible only from this project. If the config is saved to the engine, it will be accessible by UDS in any project using that engine version.
+
+-----
+CONSIDERATIONS FOR MOBILE
+-----
+
+ If building for mobile devices, take note of the Mobile category. This category does several things by default to adjust the sky for mobile platforms.
+
+ - Volumetric Clouds Replacement will replace volumetric clouds on mobile platforms with a different sky mode. By default the replacement is Static Clouds.
+
+ - Real Time Capture Sky Light Replacement will change the sky light mode to a replacement if the sky is using real time sky light capture (which isn't supported on mobile). By default, the replacement is the dynamic tinted sky light. Note that if Captured is selected for this option, it will use a static sky light capture, which requires recapturing.
+
+ - Adjust for Mobile Renderer will adjust a number of lighting and material settings to adjust for various features the mobile renderer doesn't support.
+
+ - Mobile Platforms allows you to customize the list of platform names which UDS will consider mobile and apply the mobile overrides to. The defaults are Android and IOS.
+***
+Ultra Dynamic Weather
+***
+
+-----
+ULTRA DYNAMIC WEATHER
+-----
+
+ Ultra Dynamic Weather can add rain, snow, dust, lightning, material effects and more to your scene. You can control the weather state in several different ways from random variation to directly calling a weather change.
+
+ This section of the readme will walk through setting up UDW in your level, controlling the weather state in various ways, adding material functions to your project's materials for dynamic weather effects, and more.
+
+-----
+WEATHER SETUP
+-----
+
+-----
+ADDING ULTRA DYNAMIC WEATHER TO YOUR LEVEL
+-----
+
+ To set up weather, first make sure you have an Ultra Dynamic Sky actor in your level. The weather system will not operate without one. If you haven't used Ultra Dynamic Sky yet, you should get started with the Sky section of this readme instead.
+
+ To add weather, simply drag an Ultra Dynamic Weather actor from the Blueprints folder into your scene. It will detect Ultra Dynamic Sky on its own and hook everything up.
+
+ By default, you should see the weather in the editor change to rain. Note that just like UDS, you might need to wait for some shaders to compile before all of the effects become visible.
+
+-----
+BASIC CONTROLS
+-----
+
+ In the details panel with Ultra Dynamic Weather selected, the Basic Controls category is where you can change the weather settings preset the system will display in the editor and start with when the game is run.
+
+ The variable Weather will allow you to select a weather settings preset. There are a number included like Rain, Partly Cloudy, Blizzard, etc.
+
+ Basic Controls is also where you can adjust the direction of the wind, which affects weather particles as well as cloud movement. You can also adjust Cloud Speed Multiplier to change how Cloud Speed is set on UDS based on wind intensity.
+
+-----
+WEATHER STATE
+-----
+
+-----
+WHAT IS WEATHER STATE?
+-----
+
+ Weather State refers to the set of values which determine the current weather conditions on UDW. These are the values which comprise the weather state:
+
+ - Cloud Coverage
+
+ - Fog
+
+ - Wind Intensity
+
+ - Rain
+
+ - Snow
+
+ - Dust
+
+ - Thunder/Lightning
+
+ There's also the material state, which controls the state of the material effects specifically:
+
+ - Material Snow Coverage
+
+ - Material Wetness
+
+ - Material Dust Coverage
+
+ These are part of the weather state, but at runtime the visible material state is not always derived directly from the values in the weather state. You can read more about the specifics of this in the section on material effects.
+
+-----
+WHAT DETERMINES THE WEATHER STATE?
+-----
+
+ The current active weather state can come from a number of different sources. Here are the places which can inform the current weather state:
+
+ - The weather settings preset selected for the Weather variable in Basic Controls.
+
+ - The Change Weather function, which transitions from the active weather state to a new preset over a specified amount of time.
+
+ - Random Weather Variation, which can change the weather periodically, with the probability of each weather preset affected by the current season.
+
+ - The Manual Weather State values, in the Manual Weather State category, used in place of the Weather variable when nothing is selected for it.
+
+ - Weather Override Volumes. This is a separate actor which can be placed into the level to apply weather that is specific to a region.
+
+ See the entries specific to each of these for more information about how to make use of them.
+
+-----
+WEATHER SETTINGS PRESETS
+-----
+
+ The Weather Settings Presets are the preconfigured weather states like Thunderstorm, Partly Cloudy, and Blizzard. They're used for the Weather variable in Basic Controls, as well as by the Change Weather function, Random Weather Variation, and Weather Override Volumes.
+
+ You can find the included presets in Blueprints/Weather_Effects/Weather_Presets.
+
+ To make your own, a good way is to just duplicate one of the assets in that folder and adjust the settings in the new preset. Your new asset will be usable in all the same ways that the included presets are.
+
+-----
+CHANGE WEATHER
+-----
+
+ To trigger a change of the weather state at runtime, either instantly or over a period of time, the intended way to do that is to call the Change Weather function.
+
+ When Change Weather is called, it will immediately start transitioning to the new weather preset over the transition length.
+
+ When Change Weather is called, this new weather state will be applied indefinitely, until another state change is called for.
+
+-----
+RANDOM WEATHER VARIATION
+-----
+
+ Random Weather Variation can change the weather state periodically, selecting a new weather preset based on season and a set of probability maps. It's controlled from the Random Weather Variation category on UDW.
+
+ To enable Random Weather Variation, check the box for "Use Random Weather Variation". The setting beneath that, "Start with a Random Weather Type" will determine if the settings from Basic Controls are used when the game is started, or if the system will choose a random starting weather at runtime.
+
+ Weather Type Change Interval controls the min and max of how long the system will hold on a given weather preset before picking a new random one to transition to. Transition Length is the fraction of that interval devoted to transitioning from the old weather to the new weather.
+
+ The maps of Weather Type Probabilities contain the weather presets and a corresponding probability value. This value is proportional to the rest of the values in the map. Meaning, if one type is set to 5 and the rest are set to 1, that type will be 5 times more likely to be picked. The map used will depend on the current season, controlled from the Season category.
+
+ You can also apply a climate preset from here, which will use real world climate data to create probability maps which suit that climate, and also set the temperature ranges in the Temperature category.
+
+ You can use the Change Weather function at runtime to change from Random Weather Variation to a specific static preset. If you need to change back to the Random Weather Variation, call "Change to Random Weather".
+
+-----
+SEASONS
+-----
+
+ In the Season category, you'll find settings for how UDW determines the current season.
+
+ Season is a float from 0 to 4, representing the progression from each season to the next, starting with Spring. So for example, 0 is Spring, 0.5 is halfway between Spring and Summer, 2 is Autumn, etc. And 4 is Spring again, completing the cycle.
+
+ In the Season category, the Season Mode variable determines if the Season is derived from the Date on UDS (entered in Simulation category and incremented with each day that passes). Otherwise, the season variable is left uncontrolled, for you to set from your own classes as needed for your project.
+
+ If deriving the season from the date, you can use the Season Day Offset to change what date will correspond to what season value.
+
+ It might be useful for your materials to sample the current season, for example to make foliage change color in Autumn. There is a material function included for this. It's called "Sample UDW Seasons". It outputs a 0-1 value for each season, so they can be sampled individually for effects specific to each.
+
+-----
+MANUAL WEATHER STATE
+-----
+
+ Much of the weather system is designed around the weather preset assets, to simplify controlling the weather state. But you can also control weather state's individual values without relying on preset assets. The way to do this is using the Manual Weather State.
+
+ To do this, first clear the Weather setting in Basic Controls, so no preset asset is selected. When this is the case, the Manual Weather State will be used instead.
+
+ The Manual Weather State category below Basic Controls is the place where that manual state is controlled.
+
+ You can also use the Manual Weather State with the Change Weather function at runtime if needed. Just call Change Weather without a preset selected for its input, and the weather will transition to the manual state instead.
+
+-----
+WEATHER OVERRIDE VOLUMES
+-----
+
+ For large maps, it may be necessary to change weather state by region. You can do this by using a Weather Override Volume, an actor found in the Weather Effects folder in Blueprints.
+
+ To adjust the area affected by the volume, edit the points of the spline component. You can right click on a point on the spline to add new spline points. You can also scale the actor, but try to avoid non-uniform scaling.
+
+ Here are some of the key settings on the Weather Override Volume:
+
+ - Mode has two options. Single Weather Type will apply a static weather preset within the region. Random Weather Variation will apply random periodic changes, controlled the same way as random weather on UDW, but using its own set of probability maps.
+
+ - Transition Width controls how much space is devoted to transitioning from the outside weather state to the inside weather state. The transition is completely spatial, so ideally the transition width should be very high, to offer a smooth transition between states as the player crosses into the region. The default transition width is small to keep the initial size of the actor reasonable as a starting point. An ideal transition width would typically be much larger.
+
+ - Priority will determine the behavior when multiple volume actors overlap each other.
+
+ - The Temperature category contains the temperature ranges used by UDW when the player is inside the region.
+
+ - You can also apply a climate preset, and it will work the same as applying one to UDS, changing the probability maps and the WOV's temperature ranges.
+
+ Note that because the Weather Override Volume's effects are applied based on the player position, they're only visible at runtime.
+
+ By default, UDW will test against the Weather Override Volumes using the current player pawn location. You can adjust this behavior from the advanced dropdown of UDW's Basic Controls. The Control Point Source Location is what determines this.
+
+ The Weather Override Volumes will, by default, draw their material state into a render target sampled by the weather material functions, so that for example a snowy region can appear snowy from outside, and from inside you can see the lack of snow coverage outside the region. This behavior can be disabled or adjusted on UDW, from the Weather Override Volumes category there.
+
+ Weather Override Volumes also have functions which can be called to change their state at runtime, similar to UDW. There is a Change Weather function, which will transition to a specific static weather preset. And there is Change to Random Weather, which will transition over to random weather if the existing mode is Single Weather Type.
+
+ If you want to use a Weather Override Volume to change anything other than the weather state on UDW, that is possible. To do this, create a child of the Weather Override Volume class, and on that child override the function called "Custom Volume Behavior". This function is run from UDW when it uses the WOV to affect local weather. The Alpha input represents how much the player is inside the volume, from 0 to 1.
+
+-----
+WEATHER ABOVE VOLUMETRIC CLOUDS
+-----
+
+ If Volumetric Clouds is selected as the Sky Mode on UDS, by default UDW will apply adjustments to the weather state at runtime when the player goes above the cloud layer.
+
+ You can find the settings for this in the Weather Above Volumetric Clouds category on UDW. You can enable or disable the adjustments entirely, or change the multipliers for each weather value used when above the clouds.
+
+-----
+WEATHER EFFECTS
+-----
+
+-----
+ADJUSTING RAIN, SNOW, AND DUST PARTICLES
+-----
+
+ There are categories on UDW for Rain Particles, Snow Particles, Dust Particles, and Shared settings which apply to all three. This is where you can enable or disable the particles of each type, and adjust their behavior and appearance.
+
+ Each emitter spawns particles in an area around the player camera, either in editor or in game. There are settings for how big this spawning area is and how many particles should be spawned.
+
+ The amount which each particle system will spawn depends on the Rain, Snow, and Dust values in the current Weather State.
+
+-----
+WEATHER PARTICLE COLLISION
+-----
+
+ The weather particles on UDW (rain, snow, dust) have a system of particle collision, so they can hit surfaces and stay out of interior spaces. This collision is enabled by default.
+
+ The weather particles will be blocked by simple collision which responds to queries and blocks a specific collision channel. By default this is Visibility, but can be adjusted with the setting Weather Particle Collision Channel in the Shared Particle Settings category.
+
+ Note that each weather particle just queries collision once, on the frame it's spawned. This means particle collision is necessarily somewhat latent, so more suitable for objects which don't move, or only move slowly.
+
+ If you want to block a space from letting weather particles inside, without any meshes involved, you can use the UDS Occlusion Volume actor, which has a setting to make it block weather particles.
+
+-----
+LIGHTNING
+-----
+
+ There are two types of lightning in UDW. Lightning Flashes and Obscured Lightning. Lightning Flashes are the big lightning bolts which can cast light into the scene and have a directly associated loud crash of thunder. Obscured Lightning is the particle effect which looks like flashes of lightning hidden in the cloud layer.
+
+ Note that the Lightning Flashes are spawned and animated at runtime, so they won't be visible until you play the level.
+
+ In the Lightning category, you can adjust the interval between Lightning Flashes and the frequency of Obscured Lightning. You can adjust or disable the directional light source for Lightning Flashes and the color of the lights and effects.
+
+ The amount of lightning of both types will scale with the Thunder/Lightning value of the current weather state.
+
+ If you need to manually trigger a Lightning Flash, you can do this. Call the function Flash Lightning on UDW to spawn a single flash at runtime. It has an input to enable a custom lightning location as well. Note that this is the position of the root of the lightning bolt, so it should be at cloud level. If Custom Target Location is a value other than 0, that will be the location the lightning bolt ends at.
+
+-----
+MATERIAL EFFECTS
+-----
+
+-----
+MATERIAL EFFECTS OVERVIEW
+-----
+
+ Ultra Dynamic Weather can control material functions which make your materials respond to the weather's changing material state. Here are the material functions included:
+
+ - Surface Weather Effects - For adding wetness, snow, and dust to solid surfaces. Intended for things like props and scenery objects, but not large ground/landscape materials. Can also render animated dripping and droplets effects on wet surfaces.
+
+ - Dynamic Landscape Weather Effects - Can add both dynamic snow/dust coverage and wetness/puddles to ground materials, particularly landscape materials. The snow/dust and puddles can respond to interactions caused by a special component placed on moving objects.
+
+ - Glass Window Rain Drips - Intended for use on flat transparent glass surfaces. Renders falling water droplets which form in rain.
+
+ - Foliage Wind Movement - Outputs a world position offset which can deform a mesh using simple noise based animation, scaled by the current wind intensity. Intended for foliage models mainly.
+
+ - Water Surface Rain Ripples - Adds animated raindrop impacts to the normal of a water surface.
+
+ The behavior of the material state can be adjusted from the Material Effects category on UDW. A key setting here is Material Effects Take Time to Change. If that's enabled, then at runtime the material state will change over time based on the weather. For example, as it snows, material snow coverage will slowly increase. The time over which this happens for each type of weather can be found in the Material Effects category as well.
+
+ If you instead disable Material Effects Take Time to Change, then the material state at runtime will come directly from the current weather state. So, for example, if you suddenly changed from Snow to Partly Cloudy, the material snow coverage would disappear instantly, because it's directly using the material snow coverage value from the Partly Cloudy weather state.
+
+ There are also material functions included called Wet Weather Effects and Snow and Dust Weather Effects. These are included for legacy support only. In all cases where they might be used, I would recommend using the newer Surface Weather Effects function instead.
+
+-----
+SURFACE WEATHER EFFECTS
+-----
+
+ Surface Weather Effects is a material function which can make a solid surface appear wet and gather snow and dust coverage, as controlled by the current material state on UDW. It can also apply optional effects for dripping and small droplets on wet surfaces.
+
+ Surface Weather Effects is intended for props, architecture, and other solid scenery objects. It's not intended for expansive ground surfaces like landscapes. For that, I'd suggest using the Dynamic Landscape Weather Effects.
+
+ You can see an example of a material using Surface Weather Effects in the UDS demo map.
+
+ Setup
+
+ To add Surface Weather Effects to a material, search the material palette for Weather and select Surface Weather Effects.
+
+ You should typically place the function right at the end of your material graph, before the material result.
+
+ Surface Weather Effects uses a Material Attributes input and output. This is a pin which combines together all possible material attributes into one. If your material doesn't use one of these for its result, you can use Make Material Attributes and Break Material Attributes nodes to adjust for that.
+
+ Use Static Bool nodes to provide True or False inputs for Apply Wetness and Apply Snow / Dust. This tells the function which effects you want to be applied to the surface. For example, if your project will only ever need wet materials but not snow or dust, you could plug True into Apply Wetness and False into Apply Snow / Dust, to save on material complexity.
+
+ Note that by default the textures used for the effects will be mapped using world space coordinates. This is a good fit for static scenery/architecture. But if your material is going to be used on a moving object or a skeletal mesh, you should plug True into Local Space or For Skeletal Mesh, to configure the function for those cases.
+
+ Dripping and Droplets
+
+ To enable additional effects on wet surfaces, you can plug True into the Dripping and Droplets inputs.
+
+ Dripping enables an effect of rivulets of water moving down the surface where wet.
+
+ Droplets enables an effect of very small water droplets which cling to a smooth surface.
+
+ Both of these effects are influenced by Porosity. This input generally represents how porous/permeable the surface is. 0 would be a surface like car paint or smooth plastic. 1 would be something like rough concrete or sand. Without an input, Porosity will be derived from the input roughness.
+
+-----
+DYNAMIC LANDSCAPE WEATHER EFFECTS
+-----
+
+ Dynamic Landscape Weather Effects is a material function which can add dynamic snow and dust coverage and wetness/puddles to a landscape (or general ground meshes). The setup process is a little more involved than the basic weather effects functions. You can find a basic example of a material using DLWE in the UDS demo map.
+
+ Setup
+
+ In your material, search the material palette for Weather and select Dynamic Landscape Weather Effects.
+
+ Typically, you'll want to add the function in at the end of the material graph, right before the material result.
+
+ The Dynamic Landscape Weather Effects will modify the Base Color, Metallic, Specular, Roughness, Normal, and World Position Offset. It also outputs Pixel Depth Offset. Route these attributes through the function and into the material result.
+
+ Some landscape materials make use of a single material attributes pin for their output. To account for this, just use Break Material Attributes and Make Material Attributes nodes to separate the attributes, apply the DLWE function, then recombine for the material result.
+
+ On the material instance, you can disable any features of the DLWE effects which you don't need using static switch parameters.
+
+ With the changes to the material made, go to UDW, to its Dynamic Landscape Weather Effects category, and check the option for "Enable Dynamic Landscape Weather Effects".
+
+ Interactions
+
+ Dynamic Landscape Weather Effects supports any kind of moving actor creating trails in the snow or dust and ripples in the puddles at runtime.
+
+ The way to do this is using the DLWE Interaction component. This is a scene component which you can parent to any moving component on an actor, or parent to a bone on a skeletal mesh.
+
+ For example, to make a character leave trails in snow with their feet, you would add a DLWE Interaction component for each foot, one parented to the left foot socket and one on the right foot socket.
+
+ A key setting on the DLWE Interaction component is the Size. This determines both how far from the component interaction effects will be caused, and how big those effects will be. The Size should match the general diameter of the object it represents.
+
+ The DLWE Interaction component also references a DLWE Interaction Settings asset, which contains the complete configuration of how the interaction component will behave and what effects it will use. You can use the default settings asset or create your own to configure the specifics of interaction behavior.
+
+ Render Target Area
+
+ The DLWE interactions can only happen within the space around the player covered by the render target which the interactions draw to. The scale of that area can be adjusted on UDW with the Render Target Area settings in the DLWE category.
+
+ The render target will dynamically recenter itself as your player pawn moves through the level. If you want this recentering to be based on a different location, you can do that. In UDW's Basic Controls, in the advanced dropdown, the setting is Control Point Location Source. This also affects how weather is changed by Weather Override Volumes. By default the player pawn location is used, and should be a good fit for most projects. But you can change this to use the player camera location, or to control it manually using a vector variable.
+
+ Blocking Interaction Effects with Physical Materials
+
+ It might be necessary to keep interaction sound effects and particles from happening on certain surfaces. You can use physical materials to do this. Find the arrays on UDW, in the advanced dropdown of the DLWE category, called "Physical Materials Which Disable Snow/ Dust Sounds And Particles" and "Physical Materials Which Disable Puddle Sounds And Particles". Any phys mats in these arrays will be blocked from causing interaction effects.
+
+ Using DLWE on Non Landscape Meshes
+
+ The effects are designed primarily for landscapes, but you can use them on a static mesh as well. To tell UDW and the Interaction components what surfaces the components should respond to (other than landscapes) you'll need to add physical materials to an array on UDW called "Physical Materials which Enable DLWE Interactions on Non-Landscapes". Make sure your static meshes are using physmats in that array, and the DLWE Interaction components will respond to their collision as they do to landscapes. Also, make sure your static mesh is of the object type for "Landscape Object Type" set on
+UDW. By default this is World Static.
+
+-----
+GLASS WINDOW RAIN DRIPS
+-----
+
+ Glass Window Rain Drips is a material function which can add refractive water droplets dripping down a thin glass surface like a window in response to rain on UDW. It is made to be used on translucent materials only.
+
+ Setup
+
+ To add Glass Window Rain Drips to your material, search the material palette for Weather and select Glass Window Rain Drips.
+
+ The material function modifies the Base Color and Opacity, and outputs Base Color, Emissive Color and Opacity. Only input what attributes your material is already using, but make sure to use all three of the outputs for your material result.
+
+ The UVs used for the drip textures will be simple world space position based UVs by default, but you can replace them using the UVs input. This is recommended if using the material on any kind of moving surface, as world space UVs will not move with the mesh.
+
+-----
+FOLIAGE WIND MOVEMENT
+-----
+
+ Foliage Wind Movement is a material function which outputs world position offset to add simple noise based movement to a material, based on the wind intensity and direction on UDW. It's intended primarily for foliage models.
+
+ Note, if working with foliage models which have their own wind movement setup already, it may be a better and simpler option to just modify those existing wind effects to reference the state of UDW's wind instead. You can use the Sample UDW Wind function to get parameters for the wind state and use those values to replace the parameters used by the existing effects.
+
+ Wind Movement Overview
+
+ The movement generated by the function is split into three layers:
+
+ - Small Movement is a high frequency layer for features like leaves, grass blades, and the ends of branches.
+
+ - Medium Movement is a middle frequency layer made to affect larger features like whole branches.
+
+ - Large Movement is a low frequency swaying movement which bends the entire mesh with gusts of the wind.
+
+ All three are enabled by default, but they can be individually disabled using the Apply inputs on the function.
+
+ Masking Movement Layers
+
+ Each of the three movement layers has an input to mask the layer. This is a value from 0-1, multiplied over the strength of the movement layer.
+
+ Typically, foliage models are authored with vertex color channels for masking levels of movement like this, but there is no common standard for what channel will be used for what kind of information. If you're using foliage models you did not author yourself, you'll need to take a look at their vertex colors to get an idea of what each channel is used for and how you might apply them to masking the three movement layers.
+
+ The Small Movement layer is the only one where a mask input is required. The Medium and Large layers will try to generate a simple mask automatically if one isn't supplied, using position relative to the mesh's pivot, but this auto mask doesn't know anything about the structure of the specific model, so a vertex color channel authored for this kind of masking will always be better to use.
+
+ The inputs for each movement layer can be used to customize the movement logic used for each. When adding this function to a foliage master material, I'd recommend using parameters for some of these inputs, so you can toggle and adjust the layers used on material instances for specific models/types of foliage.
+
+-----
+WATER SURFACE RAIN RIPPLES
+-----
+
+ Water Surface Rain Ripples is a material function which adds ripples to the normal of a water surface, based on the amount of rain on UDW.
+
+ Setup
+
+ To add Water Surface Rain Ripples to your material, search the material palette for Weather and select Water Surface Rain Ripples.
+
+ Typically you should put the function at the very end of the material graph, right before the material result. This function just modifies the normal attribute, so you should only need to give it your material's normal as an input and plug its normal output into the material result.
+
+ The two additional inputs can be used to scale the ripple effect texture, and adjust how intense it is in affecting the normal.
+
+-----
+WET WEATHER EFFECTS (LEGACY)
+-----
+
+ NOTE: Wet Weather Effects is now being phased out. I would recommend using the Surface Weather Effects function instead. See the entry on Surface Weather Effects for info on that setup.
+
+ Wet Weather Effects is a material function which can make a surface appear wet, as controlled by the current material state on UDW. It can also apply a dripping effect to vertical surfaces and a simple puddle effect.
+
+ Setup
+
+ To add Wet Weather Effects to a material, search the material palette for Weather and select Wet Weather Effects.
+
+ You should typically place the function right at the end of your material graph, before the material result.
+
+ Wet Weather Effects can affect Base Color, Roughness, and Normal, so route those attributes through the function using its inputs and outputs. You can safely ignore the inputs for attributes your material doesn't use.
+
+ A key input is Height, which determines which areas will collect wetness first. This input expects a 0-1 single channel value. Low values will become wet first, and high values last. You can use a constant value for Height, but the whole surface will be affected uniformly.
+
+ Dripping Effect
+
+ You can enable simple animated drips on vertical surfaces by plugging a static bool of True into Apply Dripping Effect.
+
+ By default, these dripping textures will be mapped in world space, and scaled with Drips Scale. You can instead plug False into Map Drips in World Space and supply a UV set into Drip UVs. This is especially important to do on any kind of moving object, as the world space drips won't move with the mesh.
+
+ Puddles
+
+ Similar to the dripping effect, you can turn on puddles by plugging True into Apply Puddles. Puddles work by affecting the normal on areas that reach max wetness (based on the Height input) and face close to straight up, based on their vertex normal. The puddles will also show an effect of raindrop ripples when it's actively raining on UDW.
+
+-----
+SNOW AND DUST WEATHER EFFECTS (LEGACY)
+-----
+
+ NOTE: Snow and Dust Weather Effects is now being phased out. I would recommend using the Surface Weather Effects function instead. See the entry on Surface Weather Effects for info on that setup.
+
+ Snow and Dust Weather Effects is a material function which can make a surface gather snow coverage or dust coverage, as controlled by the current material state on UDW.
+
+ Setup
+
+ To add Snow and Dust Weather Effects to a material, search the material palette for Weather and select Snow and Dust Weather Effects.
+
+ You should typically place the function right at the end of your material graph, before the material result.
+
+ Snow and Dust Weather Effects can affect Base Color, Roughness, and Normal, so route those attributes through the function using its inputs and outputs. You can safely ignore the inputs for attributes your material doesn't use.
+
+ A key input is Height, which determines which areas will gather coverage first. This input expects a 0-1 single channel value. Low values will be covered first, and high values last. You can use a constant value for Height, but the whole surface will be affected uniformly.
+
+ Snow/Dust UVs and Textures
+
+ Without any inputs, the function will use a default set of snow textures and map them using UV set 0.
+
+ You can replace the individual textures with your own texture samples or constant values using the inputs for the snow base color, normal map, roughness, and the scatter texture, which is used to add noise to the border between coverage and no coverage.
+
+ You can replace the UVs used to map the default textures using the Snow/Dust Texture UVs input.
+
+-----
+CONTROLLING YOUR OWN MATERIAL EFFECTS WITH UDW
+-----
+
+ You may have material logic of your own which you want to control in some way using the material state, season, or wind on UDW. There are material functions intended to help with this:
+
+ Sample UDW Material State
+
+ This function gets the values for material snow coverage, material dust coverage, and material wetness. It also applies the effects of Weather Override Volumes and the Weather Mask to these values, the same way the weather effects functions do by default.
+
+ Sample UDW Seasons
+
+ This function outputs a 0-1 value for each season. As the season value changes on UDW, each of these four values will peak at 1. The four values will always total 1.
+
+ Sample UDW Wind
+
+ This function outputs various values and vectors which describe the current state of the wind, both its direction and its intensity.
+
+ You can also reference the shared material parameter collection used by UDW directly if you want. That's found in the Materials/Weather folder, and it's called Ultra Dynamic Weather Parameters.
+
+-----
+MASKING MATERIAL EFFECT COVERAGE
+-----
+
+ By default, the material effects for snow, dust and wetness will affect everywhere globally, across the whole scene. To mask the effects in specific spaces, they also sample from a weather mask render target, which is drawn using components of two classes.
+
+ You can either use the component classes (found in Blueprints/Weather_Effects/Components) directly in your own actor classes, or you can use the included actor classes which contain one of these components (found in Blueprints/Weather_Effects).
+
+ Weather Mask Brush
+
+ The Weather Mask Brush will draw a simple shape or gradient, selectable using the variable "Brush". The brush actor can also be scaled non-uniformly and rotated on the Z axis. Because the system works by drawing these shapes into a single render target, the shapes are always projected straight up and down on the Z axis.
+
+ You can adjust how much each brush affects snow or wetness with the variables "Mask Wetness" and "Mask Snow/Dust".
+
+ There is also an option, called "Cancel Masks Above". This affects the entire rectangle the brush occupies, disabling any brush masking above the height of the actor.
+
+ Weather Mask Projection Box
+
+ The Weather Mask Projection Box captures the meshes within the box, and uses those shapes to mask weather effects straight down. You can place a projection box around a complex structure like a building, and the shapes of the structure will occlude directly below.
+
+ Try to place the box so it encompasses only the region of mesh geometry which needs to occlude downward. For example, you might place the box so it only contains the roof of a house. Also try to make sure the width and length of the box is as small as it can be to fit the occluding objects inside, to eliminate wasted space and resolution of the resulting render target.
+
+ In the exposed settings for the projection box, you can adjust the amount snow/dust and wetness are masked, as well as how much the mask beneath the box is blurred when drawn into the mask target.
+
+ If you want any individual material or instance to ignore the weather mask actors, you can use the static switch parameters "Apply Weather Mask Brushes to Wetness" and "Apply Weather Mask Brushes to Snow" to disable the effects at the material level.
+
+ The effects of the mask will stop once they reach a certain distance from the camera. This is determined by the width of the render target they draw to for the masking. You can adjust that scale in the Weather Mask Target category on UDW.
+
+-----
+SOUND EFFECTS
+-----
+
+-----
+ADJUSTING WEATHER SOUNDS
+-----
+
+ By default, Ultra Dynamic Weather has sound effects enabled for wind, rain and thunder. From the Sound Effects category, you can disable each type of sound, or you can adjust the volume of each as well. The resulting volume of the sounds will scale with these settings as well as the current weather state.
+
+ If you need to adjust which sounds are turned on at runtime, I'd recommend leaving the sounds which can be active enabled, and setting their Volume variables at runtime.
+
+ The Sound Effects category is also where you can adjust how lightning's accompanying thunder sound is delayed from the visual effect. By default, the delay is very slight, but you can increase it to represent a realistic speed of sound delay using the setting Cloud Thunder Delay Per KM.
+
+-----
+SOUND OCCLUSION
+-----
+
+ The sound effects on UDW are affected by a simple system of sound occlusion by default, which periodically sends out traces from the camera location and adjusts sound volume and low pass filter frequency (how muffled the sound is) if the player is in an enclosed space. This behavior can be disabled or adjusted from the Sound Occlusion category.
+
+ Note that sound occlusion operates by sampling the location of the player camera, so it will only be applied at runtime.
+
+ The settings for the occlusion system are defined in a special data asset, selected in the Sound Occlusion category. You can use the existing standard occlusion settings asset, or make your own to customize the behavior of the occlusion system.
+
+ You can also place the UDS Occlusion Volume actor, found in Blueprints/Occlusion, to force specific spaces to be fully occluded and always attenuate weather sounds. Note the setting on UDW for Occlusion Sampling Mode which determines if occlusion is determined by the traces for collision, the occlusion volumes, or both.
+
+ If you have sound sources of your own which you want affected by UDW's sound occlusion, you can set them to use the sound class called "UDS Outdoor Sound".
+
+ Also note the component class called UDS Occlusion Portal. If any of these exist in the area around the occlusion sampling location, they will be traced against, and can negate occlusion if the trace is unobstructed. For example, you could have an occlusion portal component placed for an open door or window, allowing outside weather sound effects to enter the space in a more natural way.
+
+-----
+SAMPLING WEATHER
+-----
+
+-----
+SAMPLING THE WEATHER STATE FROM UDW
+-----
+
+ To sample the current weather state from your own classes, you should get the Local Weather State object off of a reference to UDW. This is a weather settings object just like the weather settings presets, but created by UDW to contain the current state used by the weather effects.
+
+ If instead of specific weather state values, you need a simple description of the current state, like "Light Rain" or "Blizzard", you should call the function "Get Display Name for Current Weather".
+
+-----
+SAMPLING TEMPERATURE
+-----
+
+ There is a function on UDW called "Get Current Temperature", which you can call to sample the current temperature in Fahrenheit and Celsius. This value is generated in a simple and predictable way where temperature is a product of weather and never the other way around. The settings for this are found in the Temperature category on UDW.
+
+ How Temperature is Calculated
+
+ - The system starts with a value of 0, and adds to it using all the values labeled Temperature Bias in the Temperature category. These values use factors like Time of Day and weather state to add or subtract from this starting value.
+
+ - The resulting value is then mapped from a range of -1 to 1 over to the Min and Max range for the current season.
+
+ - A slowly changing random value is added to the temperature value, scaled by the Randomize Temperature setting.
+
+ - If "Apply Interior Temperature" is checked when calling Get Current Temperature, then the Interior settings will be used, using the player occlusion values created by the Sound Occlusion category.
+
+ Note, if using Weather Override Volumes, these will apply their own temperature ranges while the player is inside them. You can adjust the temperature ranges it applies from the WOV's settings, or disable this behavior there.
+
+-----
+CONTROLLING ACTORS WITH WEATHER
+-----
+
+-----
+WEATHER EVENT DISPATCHERS
+-----
+
+ UDW has event dispatchers which your actors can bind to to trigger events based on changes to the weather state.
+
+ - Started Raining and Finished Raining, triggered based on the amount of rain in the weather state.
+
+ - Started Snowing and Finished Snowing, which is the same thing for snow.
+
+ - Dust/Sand Forming and Dust/Sand clearing, which is the same for dust.
+
+ - Getting Cloudy and Clouds Clearing, which is based on the cloud coverage in the weather state.
+
+ - Weather Display Name Changed, which fires when the output of Get Display Name for Current Weather Changes. This is a good dispatcher to use to trigger something based on general weather changes.
+
+-----
+ACTOR WEATHER STATUS
+-----
+
+ Actor Weather Status is a component you can add to an actor which will keep track of its direct exposure to weather, as well as its temperature and wind exposure.
+
+ At runtime, this component will use periodic traces to test the actor's weather exposure and keep track of how its temperature is affected by that exposure. All of these values can be found in the component's Status category.
+
+ The Actor Weather Status component also has its own event dispatchers, for when the actor itself is exposed to rain, or snow, or its temperature goes past thresholds for hot and cold.
+
+ You can also add dynamic material instances to an array in the component's Material Effects category, to have parameters set using the status values. These parameters are all 0-1 values and are called "Wet", "Raining", "Snowy", "Dusty", and "Wind Intensity".
+
+ Instead of using an Actor Weather Status component to always track weather state, you can also do a single query of an actor's exposure to weather by calling "Test Actor for Weather Exposure" on UDW. If you have your actor call this function, and provide a reference to itself for the Actor input, the function will output floats which describe how exposed the actor is to rain, wind, snow and dust. These values each range from 0 to 1. They scale with the intensity of the weather and the amount the actor is exposed. So for example a value of 1 for snow would mean the actor is fully exposed
+to snow at maximum intensity.
+
+-----
+WIND PHYSICS FORCE
+-----
+
+ If you have objects which simulate physics, and you want them to be able to be pushed by the current wind on UDW, there is a component included for that. It's the Wind Physics Force component.
+
+ Just add this component as a child of any primitive component which simulates physics. At runtime, the component will query the current wind state on UDW and do line traces to see how exposed to wind the component is.
+
+ You can adjust the strength of the wind's physical force, as well as other specifics of how the component behaves, from its exposed settings.
+
+-----
+ADDITIONAL FEATURES
+-----
+
+-----
+WATER LEVEL
+-----
+
+ If you have a global water height in your level, like for an ocean, there are features on UDW to make the weather effects be universally affected by that water level.
+
+ The option for this is found in the Water Level category. Just enable Use Water Level and set the world Z position where the water plane sits.
+
+ Here is all the water level can affect:
+
+ - Weather particles will be kept from traveling or spawning beneath the water level.
+
+ - Sound Occlusion will be fully occluded when the player camera goes below the water level.
+
+ - Screen Droplets will turn off automatically when the camera goes underwater and the screen will be wet when the camera comes back out of the water.
+
+ - The Rainbow will be masked beneath the water level is the option for it is enabled.
+
+ - The height used for the water level by UDS' water caustics will be UDW's water level if Use Water Level is enabled on UDW.
+
+-----
+RAINBOW
+-----
+
+ You can enable a rainbow effect as a result of the weather state, on UDW. The settings are found in the Rainbow category.
+
+ A rainbow will only be visible under these conditions:
+
+ - There is rain or fog contributing to the visibility of the rainbow. The amount each of these contributes is controlled by settings in the Rainbow category.
+
+ - The camera is directly exposed to sunlight, as affected by cloud shadows. So if the camera is in shadow from the clouds, the rainbow won't be visible.
+
+ - The sun itself needs to be low enough for the rainbow to be visible above the horizon.
+
+ There are further settings in the Rainbow category to control how visible rainbows can be above the cloud layer, or below the water level, if the water level is enabled.
+
+-----
+SCREEN DROPLETS
+-----
+
+ Screen Droplets is an effect on UDW which can render an effect of water droplets on the screen, when the player camera is exposed to rain at runtime.
+
+ You can enable the effect from the Screen Droplets category on UDW.
+
+ The settings there can control the size of the droplets texture, the strength of the effect, and how much the camera is affected based on how much its directly facing the rain.
+
+-----
+RAIN DRIP SPLINE
+-----
+
+ Rain Drip Spline is an actor which you can place into your level to have a line or curve spawn rain droplets which fall based on the amount of rain in UDW's weather state. This can be used to make something like the edge of a building roof appear to drip water during rain.
+
+ Rain Drip Spline can be found in Blueprints/Weather_Effects. When you drag it into your scene, it will be a small straight line, but you can edit the spline to change the length and shape of the line. Move and rotate the spline points, and add more spline points by right clicking on the spline path.
+
+ The collision and appearance of the particles this actor spawns will be controlled using the settings for rain particles on UDW.
+
+-----
+CINEMATICS AND RENDERING
+-----
+
+-----
+USING WEATHER WITH SEQUENCER
+-----
+
+ Here are some tips for how the weather system can be animated using sequencer.
+
+ Keyframing the Weather State
+
+ To animate the current weather state manually using sequencer, you'll want to use the Manual Weather State, keyframing the variables in that category. See the entry on the Manual Weather State for more info on using that.
+
+ Keyframing the Material Effects
+
+ If you're keyframing the Material Wetness, Material Snow Coverage, or Material Dust Coverage directly, you'll need to make one change to have those keyframes work the same at runtime as they do in your sequence. In the Material Effects category, disable "Material Effects Take Time To Change". This will make it so at runtime the material effects show exactly as they're keyframed at each frame, instead of changing gradually with weather state.
+
+ Keyframing Cloud Movement
+
+ To animate cloud movement in a way that will play back the same every time: First, set Cloud Speed to 0 on UDS. Then, turn off Randomize Cloud Formation On Run, in Cloud Movement on UDS. Then in Sequencer, keyframe the Cloud Phase variable on UDS. This will allow directly controlling cloud movement with keyframes.
+
+ Weather Particles in Sequence Editor
+
+ When previewing a sequence where UDW is bound to the sequence, note that the weather particles will not be visible during the playback preview in editor. This is just a limitation of sequencer's preview, not something which will be present at runtime/in a render. It's because the only way the sequence editor has to update bound blueprints is by re-running their construction script, which restarts niagara components. To test how particles are looking at a specific place in the animation, pause the playback there and the particles should resume.
+
+ Keyframing a Lightning Flash
+
+ Lightning flashes, being animated by blueprint logic, will not be visible when previewing sequences, though they will be visible if rendering a sequence or running one in game. If you want direct control over the timing of lightning flashes in your animation, disable Spawn Lightning Flashes on UDW, and run the UDW function Flash Lightning using a trigger event track on your sequence. The Flash Lightning function also has inputs for providing a custom location for the lightning flash. Note the location it takes should be the place the bolt starts, so it should be up at the height of the c
+louds.
+
+ Rendering a Movie
+
+ Take note of the Project Mode setting on UDS, if you need to render a movie for offline playback. Change that setting on UDS to "Cinematic / Offline", to force max quality for the sky rendering and force both blueprints to update completely every frame at runtime. See the rendering entry in the sky section for more info.
+
+-----
+ADVANCED TOPICS
+-----
+
+-----
+ADDING DLWE TO A VIRTUAL HEIGHTFIELD MESH
+-----
+
+ There is support for using Dynamic Landscape Weather Effects on a virtual heightfield mesh. Note before starting that the Virtual Heightfield Mesh plugin, as of writing this, is still experimental and in my experience pretty difficult to get consistent results from. So understand before proceeding that even following this setup process correctly, you may encounter bugs and rendering artifacts which are due to the early and unstable state of the plugin.
+
+ The following setup process assumes the starting point is a working existing setup with a virtual heightfield mesh, that you are adding DLWE to.
+
+ Setup
+
+ - First, on your Runtime Virtual Texture asset for base color/normal/roughness/etc, make sure its Virtual Texture Content setting is "YCoCg Base Color, Normal, Roughness, Specular, Mask". This is necessary because the DLWE effects require the Mask channel to send information about the surface detail to the main pass. Make sure after doing this that you change the matching setting on the Runtime Virtual Texture Sample node in your material.
+
+ - There are two functions you'll be adding to your material. One is the normal Dynamic Landscape Weather Effects function, to render in the main pass on top of the RVT sample. The other is a special function called DLWE_VHFM_RVT_Stage, which exists to effect the output rendered to the RVT.
+
+ - Add the DLWE function to the graph, right after the Runtime Virtual Texture Sample node, using the sample outputs as the inputs for the DLWE function, and plugging the DLWE function outputs into the material result. Plug a static bool of True into the input "For Virtual Heightfield Mesh", and plug the RVT sample's Mask output into the input below that, called "Mask RVT Sample (For VHFM)".
+
+ - Add the DLWE_VHFM_RVT_Stage function to the graph, before the Runtime Virtual Texture Output node. Route your World Height through that function, so that it can change the height for the virtual heightfield mesh. Also plug Specular and Mask from the function into the RVT output. The inputs on the function for Min Height Level and Max Height Level should have values plugged in which represent how far from the landscape's height the ground is being deformed up and down by your texture detail. For example, if your displacement used the full 0 to 1 range and is being multiplied by 10 and a
+dded to the landscape height, the Min Height Level would be 0 and the Max Height Level would be 10.
+
+ - On UDW, make sure "Enable Dynamic Landscape Weather Effects" is checked.
+
+ - Also check "Support Virtual Heightfield Mesh" and in the option below that for "VHFM Runtime Virtual Texture Volume", select the RVT Volume in your level which is responsible for rendering to the World Height RVT, used to generate the heightfield mesh.
+***
+Common Issues
+***
+
+-----
+TECHNICAL NOTES
+-----
+
+ This section is a technical overview of the main features of the Ultra Dynamic Sky and Ultra Dynamic Weather blueprints. It's intended for those who want to modify the system to change or add their own features, to give a sense of the structure of the blueprints. Unlike the rest of this readme, which is written to be relatively approachable to unreal beginners, this section assumes the reader has a good working knowledge of blueprint.
+
+-----
+ULTRA DYNAMIC SKY
+-----
+
+-----
+OVERVIEW
+-----
+
+ Here is a brief look at UDS' overall blueprint structure, to start off.
+
+ Construction Script
+
+ UDS' construction script logic is contained in a function called Construction Script Function, to allow other classes like UDW and the editor utilities to refresh UDS manually in the editor.
+
+ The construction script itself mainly handles setting which component is active and visible for the lights, making dynamic material instances and setting visibility for the sky and clouds, and creating arrays of those dynamic material instances for referencing elsewhere in the update functions. After that, it runs the update functions themselves.
+
+ Update Functions
+
+ Update Static Variables and Update Active Variables are the two update functions, used to apply changes to properties on the components and material instances.
+
+ Update Active Variables is for applying properties which change with time, weather, or other variables which are expected to commonly change at runtime. Update Active Variables is run frequently while the level is running, to update with these changes.
+
+ Update Static Variables is for properties which aren't expected to change at runtime. It's run as part of construction script and once on event begin play, but won't run again at runtime unless called manually.
+
+ Cache System
+
+ If Project Mode is set to Game/Real-Time, UDS utilizes a cache system which spreads out complex calculations so they don't have to happen every time Update Active Variables is run.
+
+ The function which caches these values is called Cache Properties. See the section below about the cache system for more information on how that works.
+
+ General Organization
+
+ For finding functions relevant to any of the specific features on UDS, take note first that the functions are categorized generally by feature. For example, the function which creates the Lens Flare post material, "Set Up Lens Flare" is in the Lens Flare category.
+
+ Also note that nearly every function has a description which should give a general idea of what purpose it serves and how it's used.
+
+-----
+CACHE SYSTEM
+-----
+
+ The cache system exists to spread out calculations of changing properties, so that they don't have to run every time Update Active Variables is called.
+
+ The function which does this is called Cache Properties. It uses a set of functions to cache values of different data types to arrays of new and old values. These cached values are then lerped from old to new between updates of the cache.
+
+ The update period of the cache is not constant. It changes to be more frequent when faster changes are called for. The function which handles that is called Monitor for Changes. It looks at how time and weather variables are changing on each frame and these change speeds are used to affect cache timing immediately if necessary. The cache timing itself is handled from the function Increment Cache Timer.
+
+ The function Scaled Cache Period is what actually determines the current cache period based on the current change speeds. The max amount the cache can space out updates is exposed with the variable Max Property Cache Period.
+
+ Note, because Cache Properties operates essentially separately from the update functions, it has some of its own variables for things like Cached Sun Vector or Cached Moon Phase. Values which need to be shared by all of the cached properties, but aren't always the exact same as the actual current values for things like Sun Vector or Moon Phase.
+
+-----
+TIME AND LIGHTING
+-----
+
+ Time is handled through manipulation of Time of Day and the Date variables. The sun and moon rotations are derived from time (unless Manual Position options are in use) and the rotations of the sun and moon are used by Cache Properties and Update Active Variables to influence properties like fog color or light intensities.
+
+ Time of Day is manipulated using both the Animate Time of Day section in Event Tick in the main event graph, and by the Time Transition system, which can be called with Transition Time of Day, and updates with Tick Time Transition.
+
+ Date is only manipulated by UDS at midnight, to increment the day forward using the function Increment Day.
+
+ Sun and Moon rotation are cached values, so their rotation is determined in the function Cache Sun and Moon Orientation. The logic used in that function will depend on if the Simulate option is true for either the sun or moon. If it is, then the function Approximate Real Sun Moon and Stars is what handles the simulated rotations based on the time, date and coordinates.
+
+ Note, this cached orientation is only applied constantly to the Sun Root and Moon Root components, arrows which hold the rotation to be used for the visuals. The lights themselves have settings (the Lights Update settings in Animate Time of Day) which allow the lights to only periodically change rotation, so the Root components act as an intermediary.
+
+ Update Active Variables will then use the forward vector of the Sun Root component and Moon Root component to determine lots of properties which change with the lights orientation.
+
+-----
+CLOUD MOVEMENT
+-----
+
+ Most of the properties for the clouds are handled in the Update functions, but cloud movement in particular (for Volumetric Clouds and 2D Dynamic Clouds) is handled in its own function, called Set Cloud Timing.
+
+ This function operates very differently in editor vs at runtime. At runtime cloud movement is incremented every frame using cloud velocity. It does this so that clouds move smoothly as their speed and direction change at runtime. In the editor, cloud speed is set as a constant value, to preview the speed generally as it will look at runtime.
+
+ Note that the properties used for the volumetric clouds, both here and in the Update functions, are being set on a shared material parameter collection called UDS_VolumetricClouds_MPC. This is used to allow many different materials for things like cloud fog and cloud shadows to approximate cloud coverage using the same properties sampled by the visible clouds.
+
+-----
+FOG COLORS AND AMBIENT LIGHT COLORS
+-----
+
+ The fog/ambient colors calculated by UDS are determined mainly in the function Get Current Base Fog Colors. This outputs a number of colors, for ambient and directional fog colors, as well as individual sun and moon contributions, which are used both to set color properties on the fog component itself, and also for other purposes. For example, Ambient Fog Color is used by the sky light color and intensity logic, if the Cubemap with Dynamic Color Tinting sky light mode is selected.
+
+-----
+ASSET LOADING
+-----
+
+ Assets which UDS needs for its active features are loaded in using the function Load Required Assets, on startup.
+
+ There is also an async asset loading setup, found in the Loading graph. It's only use is for loading in nearby cell textures for the Volumetric Cloud Painter, as the camera moves through a large level.
+
+-----
+REPLICATION
+-----
+
+ Time of Day, Date, and Moon Phase will be replicated in a multiplayer environment. (For info about weather state replication, see the UDW replication section below.)
+
+ Time of Day's replication works by only periodically updating the "Replicated Time of Day" variable, which notifies clients to update Time of Day using the replicated value, as well as day length, night length, time speed, simulation speed, and moon phase. The rest of the time Time of Day is handled locally by the client the same as on the server. These updates just periodically keep the clients synchronized. The period between updates is set with Time of Day Replication Period.
+
+-----
+ULTRA DYNAMIC WEATHER
+-----
+
+-----
+OVERVIEW
+-----
+
+ The blueprint structure of UDW is modeled after UDS.
+
+ Construction Script
+
+ UDW's construction script, like UDS', is contained in a function called Construction Script Function.
+
+ This function first makes sure UDW has a reference to UDS. Then it creates the weather state objects used to hold local and global weather states, as well as states used for the weather transition system. Then it caches properties and runs the update functions.
+
+ Cache System
+
+ The cache system on UDW is nearly identical to that used on UDS, and enabled based on UDS' Project Mode setting in the same way. The only difference is how the cache timing is determined, which happens using Current Local Weather Change Speed, something calculated when updating the local weather state at runtime.
+
+ Update Functions
+
+ Update Active Variables and Update Static Variables exist in much the same way as they do on UDS.
+
+ Update Active Variables handles applying changes to niagara systems, sound components, and material effects, which change with the weather.
+
+ Update Static Variables applies properties which aren't expected to change with the weather, like the max spawn distance of the weather particles for example.
+
+ Update Current Global and Local Weather State
+
+ This is a function specific to UDW, which runs before Update Active Variables. It is what determines the current weather state to be used by the active variables for things like particle behavior and sound.
+
+ General Organization
+
+ Just like on UDS, the functions on UDW are categorized generally based on the feature they relate to. Each function also has a description, explaining what it's for and where it's used.
+
+-----
+WEATHER STATE
+-----
+
+ The weather state on UDW is determined in two stages, the Global Weather State and the Local Weather State.
+
+ Global Weather State
+
+ The global weather state is the state determined by the weather settings on UDW itself. This would be the weather settings preset, the Change Weather function, and the random weather variation.
+
+ The Change Weather transitions are handled from the Event Tick graph. It controls the Lerp to Static Settings, which represents if the system is using the random weather variation or the static weather objects. It also controls Lerp to New Settings, which is the alpha for lerping from the state when Change Weather was called over to the new state.
+
+ Update Current Global and Local Weather State starts by creating a manual weather state object if one is needed (if the Weather object is invalid), then the Global Weather State is written to using two Lerp Between Weather State nodes.
+
+ Lerp Between Weather State takes in an A and a B state and interpolates between them with an alpha. It also takes into account differences in cloud coverage and weather, so for example if lerping from Clear Skies to Thunderstorm, it will make sure not to start increasing the Rain value until there's enough cloud coverage present first.
+
+ Then the material effects are updated, using change rates for material snow coverage, wetness, and dust coverage which are cached by the cache system.
+
+ At that point, the Global Weather State is fully updated for this frame.
+
+ Local Weather State
+
+ The Local Weather State is then generated in the Apply Current/Local Weather function.
+
+ The Local Weather State is the state as affected by Weather Override Volumes, so it is the final state used by the actual weather particle effects and sounds, and used to set cloud coverage, fog, etc on UDS.
+
+ Local Weather State is also what factors in the settings which change the weather above the volumetric cloud layer.
+
+ The Apply Current/Local Weather function first copies the Global Weather State over to the Local Weather State. It then loops through the nearby Weather Override Volumes if any exist, and samples their spline with the control point location, to find the Current Volume Alpha. The Current Volume Alpha is used to lerp the Local Weather State over to the WOV's weather state. This is also where the WOV's effect on wind direction and temperature is applied, if enabled.
+
+ Next, the weather state changes above the volumetric cloud layer are applied to the local state.
+
+ At that point, the Local Weather State is finished for this frame, so the new local state is compared to what it was before to get the speed that local weather is changing.
+
+ In the Update Active Variables and Cache Properties functions, almost all of the properties set there will be sampling the values on the Local Weather State object.
+
+-----
+NIAGARA SYSTEMS
+-----
+
+ The niagara systems used by UDW can be found in the Particles folder.
+
+ Weather Particles
+
+ The Rain, Dust, Snow, and Wind Debris systems all inherit their main CPU emitter from the Weather Particles emitter asset.
+
+ This emitter is responsible for getting the camera transform, determining the location and range to spawn particles inside, and spawning the CPU particles which query the scene collision.
+
+ The Rain and Snow systems also have GPU emitters, which inherit from the GPU Weather Particles emitter asset. These use the arrays of valid particle paths which are created by the Weather Particles emitter, to spawn additional GPU particles which follow the same proven paths, without needing to query collision again.
+
+ Lightning
+
+ The Lightning Strike niagara system is the one used for lightning flashes with a visible lightning bolt. The Obscured Lightning system is used for the passive effect of flashes which just light the clouds.
+
+ The lightning strike system uses an emitter called Lightning Path Gen to create a series of randomized points connecting the start position to the target position. Then the Lightning Bolt emitter spawns a ribbon particle which follows that path, randomly shifting the particles connecting the points. All of the other emitters are for the adjacent cloud lighting and light flare effects.
+
+ On UDW, the niagara components for the weather particles and obscured lightning are controlled mainly from the update functions. The lightning flashes are spawned from the Lightning Flash graph.
+
+-----
+SOUND
+-----
+
+ The Audio Update function, run inside Update Active Variables, is what updates the sound components with the weather state and the sound occlusion.
+
+ The sound occlusion is calculated on the Player Occlusion component. This is the same actor component used by UDS for its interior adjustments logic. The sound occlusion values and Local Weather State are used by the Audio Update function to set parameters and volume levels on the sound components.
+
+ The sound cues, waves, and the sound class they use (UDS_Weather) can be found in the Sound folder.
+
+-----
+MATERIAL EFFECTS
+-----
+
+ The function Update Current Material Effects is where the material state in the Global Weather State object is incremented over time, if "Materials Take Time To Change" is enabled.
+
+ The function Update Material Effect Parameters is where the material state is used to set the parameters in the shared material parameter collection. This collection is called UltraDynamicWeather_Parameters, and is found in Materials/Weather.
+
+ The DLWE material effects have their own update functions. Update DLWE Parameters sets the DLWE relevant parameters in the collection which can change at runtime. Update DLWE Snow Compressions and Update DLWE Puddle ripples are the functions where new interactions are drawn into the DLWE render target.
+
+-----
+REPLICATION
+-----
+
+ Weather state is replicated by UDW for multiplayer. Specifically, the Global Weather State on UDW is replicated, as well as the state on Weather Override Volumes. The clients then determine their Local Weather State themselves, so each player can experience regional weather using the Weather Override Volumes, but the states inside and outside of volumes will be shared.
+
+ The global state isn't replicated directly, but by replicating the weather preset assets used by the transition system, the random weather variation, and the weather override volumes. This way the client can only recieve updates when a change of state on one of those sources starts, and handle global weather state reliably in the same way as the server between those updates.
+***
+Technical Documentation
+***
+
+-----
+COMMON ISSUES
+-----
+
+ This section contains solutions and workarounds for common problems faced when working with UDS and UDW.
+
+-----
+LIGHTING AND POST PROCESSING
+-----
+
+-----
+EVERYTHING RENDERING BLACK AFTER ADDING UDS
+-----
+
+ If after adding UDS to your scene, the entire level renders black, the cause is almost certainly exposure settings. Here's a few things to try:
+
+ - In your level, check to see if you have any post process volumes which are controlling the exposure settings. If you do, disable those overrides so UDS can control exposure.
+
+ - In the viewport, in the Lit dropdown, make sure Game Settings is checked for exposure.
+
+ - On UDS, try disabling "Apply Exposure Settings" in the exposure category.
+
+-----
+AMBIENT LIGHT NOT UPDATING AS TIME OF DAY CHANGES
+-----
+
+ If you notice that the ambient light starts out looking correct, but as time of day changes at runtime, the ambient light doesn't update, it's almost certainly a problem with the sky light not updating. Here are a few possible causes of that:
+
+ - If you see this problem on specific platforms, it's probably because they don't support real time sky light capture. I'd recommend changing Sky Light Mode to Cubemap with Dynamic Color Tinting for a good dynamic option that works on any platform.
+
+ - If you specifically notice ambient light remaining bright as night falls, you could also just have static light from an old lighting solution present in your map. To check for that, just run a lighting build, from the Build dropdown on the main editor toolbar.
+
+-----
+AMBIENT LIGHT TAKES A LONG TIME TO UPDATE
+-----
+
+ When the sky changes quickly, due to a fast change of Time of Day or Cloud Coverage, you might notice the ambient light in the level taking a long time to adapt to that change.
+
+ This would be an aspect of Lumen, the default global illumination method in new UE5 projects. Lumen's default settings can take a long time to adjust to changes in the scene.
+
+ You can adjust that speed from a post process volume, in its Lumen Global Illumination section. The settings would be the ones for Update Speed. Note of course that increasing the speed will increase the GPU cost of Lumen.
+
+-----
+WATER/OCEAN SHADER LIGHTS INCORRECTLY IN CLOUDY WEATHER
+-----
+
+ If using some types of water or ocean shaders, you might notice in cloudy weather that the sun or moon directional lights appear to affect the material despite being blocked by clouds. This would be because some materials like this test the intensity and color of the active directional light without factoring in light functions.
+
+ The best workaround is to enable a setting on UDS, in Basic Controls, called "Dim Directional Lights With Cloud Coverage". This will reduce directional light intensity when cloudy to approximate the effect of the cloud shadows light function for materials which can't sample it.
+
+-----
+VOLUMETRIC CLOUDS
+-----
+
+-----
+VOLUMETRIC CLOUDS DON'T RENDER IN FRONT OF OBJECTS
+-----
+
+ If using the default settings, you might notice volumetric clouds appearing incorrectly behind scenery that they should block.
+
+ By default, the volumetric clouds in UDS are optimized for best fidelity in typical use cases where the clouds exist entirely as a background layer. This allows them to prioritize fidelity and temporal stability.
+
+ If you need your clouds to render over the landscape/objects in your scene, the fix is simple. In the Volumetric Clouds category on UDS, just change the Volumetric Cloud Rendering Mode to one of the settings called "Clouds Render Over Opaque Objects".
+
+-----
+TRANSLUCENT MATERIALS AREN'T BLOCKED BY CLOUDS
+-----
+
+ Even after changing the Volumetric Cloud Rendering Mode, you may notice translucent materials still rendering in front. This is because translucent materials require additional configuration to be blocked by volumetric clouds.
+
+ On the material, in its Translucency settings, make sure both Apply Fogging and Apply Cloud Fogging are enabled. Additionally, depending on the mesh, you might want to enable Compute Fog Per Pixel, as otherwise the cloud fogging will be per vertex.
+
+ Note also that this translucency support only works with the Volumetric Cloud Rendering Modes called "Clouds Render Over Opaque Objects". It won't work with Full Cinematic Quality, as that mode disables the volumetric render target which translucent materials sample to approximate cloud fogging.
+
+-----
+VOLUMETRIC CLOUD ARTIFACTS INSIDE/ABOVE LAYER
+-----
+
+ When going up into the volumetric cloud layer you might notice banding/noise or other light artifacts in the volumetric rendering while in the layer.
+
+ The default settings are optimized to prioritize quality from the ground. Here are a few settings to try adjusting to improve render quality within the layer:
+
+ - Increase "View Sample Count Scale" This scales the number of samples used in the volumetric rendering. Increasing it will reduce noise in the resolve and can fix some artifacts if pushed high enough. Note that this will increase the performance demand of the clouds proportional to the amount you increase the setting.
+
+ - Reduce "Tracing Max Distance". There are two settings for this, one for inside the cloud layer, and one for outside. Note that these values will only be applied with the player camera location at runtime.
+
+ - Increase "Distance to Sample Max Count". This can help in particular with the horizontal band of light that can be seen from within the cloud layer.
+
+-----
+VOLUMETRIC CLOUDS LOOK BLURRY/STREAKY WHEN MOVING FAST
+-----
+
+ By default, the volumetric clouds use a rendering mode which resolves the render with a long trail of past frames. Because of this, when the clouds move fast, like during a time lapse, the rendering can become blurry or ghosted.
+
+ The solution is to use any of the other Volumetric Cloud Rendering Modes. You can change the mode from the Volumetric Clouds category on UDS.
+
+-----
+VOLUMETRIC CLOUDS ARE TOO DARK / GRAY
+-----
+
+ If the volumetric clouds look strangely dark, the problem is probably the directional light affecting them.
+
+ This can happen if you're using the "Use Custom Actor" option for the sun or moon. The built in sun and moon lights have a particular setting customized which you would need to apply to your own light to have them light volumetric clouds well. The setting is "Cloud Scattered Luminance Scale". For best results I would suggest copying the exact color from UDS' directional light components.
+
+ If you haven't selected "custom actor", the problem may instead be that you have a directional light actor or component in your level that you haven't removed before adding UDS.
+
+-----
+UDS SETTINGS
+-----
+
+-----
+CANNOT ADJUST CLOUD SPEED OR DIRECTION ON UDS
+-----
+
+ If you're trying to adjust Cloud Speed or Cloud Direction on UDS and the value will not change, that would be because UDW is also in the level, and is taking control of those settings. UDW controls cloud movement using the current wind.
+
+ To change these from UDW, adjust the variables Cloud Speed Multiplier and Wind Direction there.
+
+-----
+GENERAL RENDERING
+-----
+
+-----
+THE SKY COLOR FLICKERS BLACK WHEN MOVING THE CAMERA
+-----
+
+ If you notice the color of the sky flickering to pitch black when the camera is moved in certain places in your level, you're probably encountering an engine bug with the sky atmosphere system.
+
+ The issue is caused in some circumstances by the camera going below the "ground" defined by the sky atmosphere component.
+
+ The best solution is to select the Sky Atmosphere component in UDS (found in the component list at the top of the details panel) and move it down to the lowest point in your level, below where the camera can go.
+
+-----
+BLACK NOISE ARTIFACTS WITH YELLOW WARNING TEXT ON MESHES
+-----
+
+ If you're seeing flickering black pixel noise on certain materials, possibly with a yellow warning message visible in the black space, the problem is probably a bad implementation of pixel depth offset on the material.
+
+ The black space + yellow warning text means that the pixel is rendering nothing due to the material being broken for that pixel. This can happen due to pixel depth offset, so the first thing I would recommend is to disconnect the Pixel Depth Offset output from the material, if it has one.
+
+-----
+WEATHER
+-----
+
+-----
+WEATHER PARTICLES NOT VISIBLE AT ALL
+-----
+
+ If weather particles like rain and snow are not visible in your scene, regardless of the weather state, here are some things to check:
+
+ - The particle may be blocked by a source of invisible collision in your level, like a volume which has collision configured to block the channel used by weather particles. You can check to see if the particles are being blocked somehow by turning off "Particle Collision Enabled" in Shared Particle Settings on UDW.
+
+ - Make sure Raytraced Translucency is not active. You can override the translucency mode the renderer uses from a post process volume. The weather particles render as translucent sprites, which aren't something supported well by RT translucency.
+
+ - Make sure particle sprites aren't being hidden by your viewport's Show flags. In the Show dropdown there, select Use Defaults.
+
+-----
+WEATHER PARTICLES NOT SHOWING IN SIMULATE MODE
+-----
+
+ If running in editor using the "Simulate" play mode, weather particles will probably not be visible.
+
+ This is just a limitation of Simulate mode. It plays the level, but keeps rendering through the editor camera, and in this context Niagara cannot sample the editor camera location for the weather particles to use.
+
+ Using the other Play modes should display the weather particles correctly.
+
+-----
+DLWE INTERACTIONS NOT HAPPENING WHEN THEY SHOULD
+-----
+
+ If you've set up Dynamic Landscape Weather Effects (following the directions laid out in the DLWE section of this readme) and interactions aren't happening, here's a list of things to check:
+
+ - Make sure your landscape (or static mesh) has simple collision using the Object Type specified by "Landscape Object Type" in the DLWE settings on UDW. By default, this is World Static. Also make sure the collision is configured to respond to queries.
+
+ - Make certain "Enable Dynamic Landscape Weather Effects" is on.
+
+ - Make sure the DLWE Interaction component is positioned and has a size big enough to trigger interactions with the surface.
+
+ - Note the Control Point Location Source in the advanced dropdown of the Basic Controls category. This determines the area the DLWE effects can happen in, and by default it's centered on the player pawn location. If your camera is far from your pawn, or a pawn doesn't exist at all, you may need to change this setting.
+
+-----
+WEATHER PARTICLES NOT COLLIDING WITH OBJECTS
+-----
+
+ If you're having trouble with weather particles not being blocked by objects that they seemingly should, here are a few things to check:
+
+ - Make sure the object has simple collision. The traces used by the particles only check for simple collision.
+
+ - Make sure the collision profile of the object is set to block the trace channel selected on UDW as "Weather Particle Collision Channel". By default this is Visibility. Also make sure the collision response is Collision Enabled or Query Only, as queries are what the particles use.
+
+ - If particles are coming through the roof of a building with a very tall ceiling, it may be that the particles aren't checking high enough for the ceiling when they spawn in. You can adjust this distance using "Ceiling Check Height" on UDW.
+
+-----
+WEATHER SOUNDS GO QUIET AT INCORRECT TIMES
+-----
+
+ By default, the sound effects on UDW use a simple system of sound occlusion to dim and muffle weather sounds when inside interiors.
+
+ If you're noticing this happen at incorrect times, it's probably because the occlusion traces are hitting surfaces they shouldn't. You can adjust the behavior of the occlusion system (or disable it completely) from the Sound Occlusion category on UDW.
+
+-----
+SPLASH PARTICLES RENDERING WRONG IN VR
+-----
+
+ In VR / Stereo rendering, you might notice rain splash particles rendering only in one eye.
+
+ This is an issue with a project setting called Instanced Stereo. It doesn't seem to support GPU particles rendering as sprites which use deferred decal materials, which is how the splashes work by default.
+
+ One thing you can try is changing the Splash Particles Rendering Mode setting on UDW to "Translucent". This of course will make the particles subject to the limitations of translucent lighting, but they should render in both eyes of the HMD with instanced stereo.
\ No newline at end of file
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/README.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/README.uasset
new file mode 100644
index 00000000..d369e732
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/README.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe01c32700fc9a623e83193c59d8b67dae77ea92db70d132d47eba4d83ee1e14
+size 1382541
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Sound/AmbientSound_Time_and_Weather_Controlled.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Sound/AmbientSound_Time_and_Weather_Controlled.uasset
new file mode 100644
index 00000000..02d5ff96
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Sound/AmbientSound_Time_and_Weather_Controlled.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:119c69918c81cca3a8d72fb640e37c04ecdc1edc4161401559e21c72d45a08e6
+size 469999
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Calendars/Gregorian_Calendar.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Calendars/Gregorian_Calendar.uasset
new file mode 100644
index 00000000..afe247a9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Calendars/Gregorian_Calendar.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d6ddfb289ada1c858b2d50b52ba6cc66855c3c1dd6eeb4b9fe2437d57479375
+size 1778
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_BrushFrame.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_BrushFrame.uasset
new file mode 100644
index 00000000..2680fbc4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_BrushFrame.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46e6ad940edfd6c63fac3dd210e2c083c682e4564fb91157aebc0c3841da26b1
+size 5004
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Brush_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Brush_Mat.uasset
new file mode 100644
index 00000000..038a4aac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Brush_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:205c63b87248483b6504565b23307480ed8268ae28965c2f58df3224e26cb474
+size 17343
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Brush_Mat_Cursor.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Brush_Mat_Cursor.uasset
new file mode 100644
index 00000000..f3b9108e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Brush_Mat_Cursor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36df53f7b735e2f7da6e927dfedbd383a2491594db4a72b6b47878e44333278b
+size 7605
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Capture_Post_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Capture_Post_Mat.uasset
new file mode 100644
index 00000000..fb9cd6fb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Capture_Post_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0ad36b4260936334d13b2366e51bc01c53465af6d471f606f6d16a3a821610e
+size 64628
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Draw_Panel_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Draw_Panel_Mat.uasset
new file mode 100644
index 00000000..68226e9b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Draw_Panel_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e33b606b04b35ecdc84715a28d6221dc41f72a89c67415c8ad429720d7832760
+size 22201
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Settings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Settings.uasset
new file mode 100644
index 00000000..c8252da7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Cloud_Painter/Cloud_Painter_Settings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31fc77242f10455cd5fed2f3a4b11c062a3f1435a5a5905f1f3d56ba79bc4bec
+size 18011
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Static_Clouds_Capture.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Static_Clouds_Capture.uasset
new file mode 100644
index 00000000..39c1321d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/Static_Clouds_Capture.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9d66b96895e5f30840bb30bd75a6ff2c65c9ca93fb39d34eca47aeda1a15ce8
+size 353568
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Config_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Config_Icon.uasset
new file mode 100644
index 00000000..26d67bb1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Config_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71c41cba6e775f5c6794a3648739a8cc15b8cfbba78762cb95f28b3c4d60f32b
+size 221202
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_CurrentVersion.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_CurrentVersion.uasset
new file mode 100644
index 00000000..ff7e6bfc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_CurrentVersion.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41825a5303ee560d0783432267fc17f9c0bdb17e4da2c918aa0eb551ca3987e2
+size 1741
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary.uasset
new file mode 100644
index 00000000..7e22138b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ccac77c651a489c9cbf826b058decdc76d8aa27c5c953b0032e01acc3ca9d2b
+size 39342
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary_Entry.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary_Entry.uasset
new file mode 100644
index 00000000..3f86bcac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary_Entry.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41d94356d6da80cbae66f8a06c61d9ecee287dcfb39f5eab41b574b3e2384692
+size 6341
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary_Tooltip.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary_Tooltip.uasset
new file mode 100644
index 00000000..45652716
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Glossary_Tooltip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f76ccd94edcc5a941410c4c25eda316c716ea46ed554865d560a77b68d0f873d
+size 145127
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entries.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entries.uasset
new file mode 100644
index 00000000..b26bdb3e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entries.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:25311a92fb048e48968f005f7f6e3e29ce1b8a6f16943b14fd0619817b2cfca8
+size 465593
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry.uasset
new file mode 100644
index 00000000..9d4164bc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01d51947030386111876f57f93c6ce9b1ce757f7c84a90b97ed0997a203672c9
+size 8873
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry_Link.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry_Link.uasset
new file mode 100644
index 00000000..b723f49a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry_Link.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e3b5efef3efa644f688ab5e8c005a9215a1c79830c8b1758d1ed82736a31d28
+size 77768
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry_Widget.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry_Widget.uasset
new file mode 100644
index 00000000..3aec04c1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Entry_Widget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b58305de28819e139f1acc1ba8705d1f1bcc2f7067512f6f13d82ec0b1aaf7a9
+size 752745
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Settings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Settings.uasset
new file mode 100644
index 00000000..9a4e1b4d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Settings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09400000a4f05d20c6f37c2fcc247531a5b6b9a31d15174e0d895ad59ea2f300
+size 9678
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Tooltip_Word.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Tooltip_Word.uasset
new file mode 100644
index 00000000..dbf28973
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_Readme_Tooltip_Word.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20a9fe68601fd57c728750c0d01bd9e19275643a73dad3f4f1f32d903322b14f
+size 83035
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_VersionInfo.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_VersionInfo.uasset
new file mode 100644
index 00000000..2561ca1e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/UDS_VersionInfo.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:056d873e0c87998d6ef4575ce271cdc91119d418dc84deb56bb02c214ea4af90
+size 8455
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/config_icon_pan.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/config_icon_pan.uasset
new file mode 100644
index 00000000..44335988
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Editor_UI/config_icon_pan.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55b26dc2712ead7b426d54012be8536a401a4d66d9a54befaf0f8b661eeb7b31
+size 64749
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Asteroid.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Asteroid.uasset
new file mode 100644
index 00000000..d368496d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Asteroid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04bd33ab8716b7e3e78a85ec7f9b12f1bdd65e3d3d6c3f72c29308e64ea5bec3
+size 8368
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Earth.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Earth.uasset
new file mode 100644
index 00000000..15ff1c6c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Earth.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:554f8cadef68a8078bef4358850c24603a3c1feafc9c4c72a4409b875e17309e
+size 11777
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Gas_Giant.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Gas_Giant.uasset
new file mode 100644
index 00000000..da7ea4d4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Gas_Giant.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:057af737818194d6ff874277d56ea2b6c042faa14ae5f43d21533eb4c468da6c
+size 9573
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Ice_Giant.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Ice_Giant.uasset
new file mode 100644
index 00000000..db956b83
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Ice_Giant.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:049e2adaa885e1ae150e04b3684415fb9f0443e8483be04b2b61ab09f72c664d
+size 9169
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Rocky_Planet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Rocky_Planet.uasset
new file mode 100644
index 00000000..54168d46
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/Planet_Presets/Rocky_Planet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c52e9c030ec8fcbd5c2fc1a4e00f5eaaf1190159e2ebaf182d40e69b91d8c296
+size 9514
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/RandomWeatherVariation_State.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/RandomWeatherVariation_State.uasset
new file mode 100644
index 00000000..b4c8cc00
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/RandomWeatherVariation_State.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76872fafbd7ca0c8219693877b80518333187358152b0244ea2ae40ed43967b9
+size 7120
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Calendar.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Calendar.uasset
new file mode 100644
index 00000000..6c6c435d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Calendar.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6572ab53c760adf60e8301fce290be011c6847339932524947ddf2c01d641633
+size 19905
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Cloud_Paint_Cell.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Cloud_Paint_Cell.uasset
new file mode 100644
index 00000000..6aebe1a2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Cloud_Paint_Cell.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d45ef2bdb1900dd414cb98798c56f05cc905ced3d2520025f2023615453627a
+size 13308
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Cloud_Paint_Container.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Cloud_Paint_Container.uasset
new file mode 100644
index 00000000..ddb37510
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Cloud_Paint_Container.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63e2dd1a8ba1ade0b32670cf9194b99601b5f8574536e719197b71331e192201
+size 62752
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Configuration.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Configuration.uasset
new file mode 100644
index 00000000..6a4a36fb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Configuration.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f835441e65d0ea3aad1e52de6ea7e33596f1dfe37d42168ee719bdc72ec8e7e
+size 38317
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_OcclusionSettings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_OcclusionSettings.uasset
new file mode 100644
index 00000000..5f7e15c0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_OcclusionSettings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ffd19bd50b9a0e004dfb903cc364f8fe159164b5c9dd9fc0a800b963c1aac986
+size 29997
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Occlusion_Volume_Interface.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Occlusion_Volume_Interface.uasset
new file mode 100644
index 00000000..a9c2b82f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Occlusion_Volume_Interface.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3f4f26a9e8cdbee8a643eb876250e005a5b35bc4a7f5ffb0927287786cdc24a
+size 11451
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Planet_Preset.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Planet_Preset.uasset
new file mode 100644
index 00000000..86d871a4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Planet_Preset.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc889cad4010b47b4e94089136c34a5511098d2c094477fb8d89ce9198911794
+size 14330
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_PlayerOcclusion.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_PlayerOcclusion.uasset
new file mode 100644
index 00000000..c748c443
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_PlayerOcclusion.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:38f2ebbe679c0b50bea12f99e5fea29f926ede989cacb6a1bb5e93f94e4e48d3
+size 1355358
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Post_Process_Stage.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Post_Process_Stage.uasset
new file mode 100644
index 00000000..c859c81f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Post_Process_Stage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57f2f74f5fef56b3959d3cb59a89f2753bd8b83a834e49b35bdba94381dc9e7c
+size 86780
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Space_Planet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Space_Planet.uasset
new file mode 100644
index 00000000..a281ac5b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Space_Planet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:de09f8486cc7fd620ff263c118dc8669c25b04f6dd94b3f396cd231275260e2f
+size 49239
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Startup_Interface.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Startup_Interface.uasset
new file mode 100644
index 00000000..4ae3aa7f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_Startup_Interface.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:08703f8c034197aac433447b9c650dcb91d9a6186594b25b4225279874fcde71
+size 11659
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_and_UDW_State.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_and_UDW_State.uasset
new file mode 100644
index 00000000..8f1740f9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDS_and_UDW_State.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d4e131b5c400bac9142485759d0dc27b9cb4d5b8dde56e1e1fdda07a66c1cb60
+size 35283
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDW_Startup_Interface.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDW_Startup_Interface.uasset
new file mode 100644
index 00000000..c8d300ca
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/System/UDW_Startup_Interface.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60b68e9ba96b92a4aefd43dfc9f10d3517a0d1c15303a179141943362ee79fb3
+size 11575
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Tools/Static_Clouds_Authoring_Tool.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Tools/Static_Clouds_Authoring_Tool.uasset
new file mode 100644
index 00000000..d8ce30f2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Tools/Static_Clouds_Authoring_Tool.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e9100b504c64d405382ac462badc0f067744749e7bff441c778229fda605797
+size 441235
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky.uasset
new file mode 100644
index 00000000..c00f1c08
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Sky.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51fa10baa1b19f2006f2d60b338beda7765d6a540ce15b4385cf45c0d4724bef
+size 22260555
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Weather.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Weather.uasset
new file mode 100644
index 00000000..928ceef9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Ultra_Dynamic_Weather.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:862a213d04f86b072682217bba54f63a47d43d67264c8ef7e201e17353cdc43e
+size 13801062
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Utilities/Light_Day-Night_Toggle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Utilities/Light_Day-Night_Toggle.uasset
new file mode 100644
index 00000000..50f05c84
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Utilities/Light_Day-Night_Toggle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:599c20be3a8761a7024aeca8fffe2c48780ed789b4e7a2df62192ff8b87f0151
+size 352879
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Volumetric_Cloud_Painter.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Volumetric_Cloud_Painter.uasset
new file mode 100644
index 00000000..8558ce73
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Volumetric_Cloud_Painter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e15a3e57a0852b834f8dc5ded5a35fc3c08d383a52a5369fd0d6907157114b0
+size 3093614
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Actor_Weather_Status.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Actor_Weather_Status.uasset
new file mode 100644
index 00000000..83a57d72
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Actor_Weather_Status.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3221986c31972d7380a510579dbc719438cee3185f2638d2359c29fc1a724e3c
+size 858752
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Cold_Desert.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Cold_Desert.uasset
new file mode 100644
index 00000000..c6e99241
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Cold_Desert.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f9107f1338dda87fcb4137953e4d5d1cc58719364a22f511ce4cd3078e8a4bc0
+size 3880
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Cold_Semi-Arid.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Cold_Semi-Arid.uasset
new file mode 100644
index 00000000..d4aab465
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Cold_Semi-Arid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:415c2f8a67a9d315ac33f87da19ff7c8d7ab66694d1d10cd165908b2bdffe355
+size 3877
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Desert.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Desert.uasset
new file mode 100644
index 00000000..8309ba3b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Desert.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e9749f446bf83bb6585ef874efcce0a42e701ad3bacc22ac52e4933a250b1dbc
+size 3539
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Semi-Arid.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Semi-Arid.uasset
new file mode 100644
index 00000000..1e889e0f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Semi-Arid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efed98084f7d0fb582950e98baa45d6adbc8bbd0df2901682898f7ca1c9358c3
+size 3626
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Summer_Continental.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Summer_Continental.uasset
new file mode 100644
index 00000000..268a141d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Hot_Summer_Continental.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9cd5e89d74d20e52953424d1fd3e62c907cd4cb06a2e67a3c6a67584993b089d
+size 3904
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Humid_Subtropical-Dry_Winter.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Humid_Subtropical-Dry_Winter.uasset
new file mode 100644
index 00000000..eb0da68a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Humid_Subtropical-Dry_Winter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9b2db05e033cc97a103f30b84b197818d5b7b706de47472fd223139613c1402e
+size 3674
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Humid_Subtropical.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Humid_Subtropical.uasset
new file mode 100644
index 00000000..d861b105
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Humid_Subtropical.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d7af5ad16d9fa3c9ee14a2039d95f56c8714f11d3ca6f98993a4fb463a449e2f
+size 3728
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Cold_Summer.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Cold_Summer.uasset
new file mode 100644
index 00000000..415012ac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Cold_Summer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c55a622d433d00ac77b06173a913af8394bf6f8b6e5d24b8f49da5516e2cc537
+size 3895
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Cool_Summer.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Cool_Summer.uasset
new file mode 100644
index 00000000..2ce1c4ab
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Cool_Summer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:537c9153ede0504b11a405bff98934ae00c377d50cdbae6683e7ca5457244b38
+size 3865
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Hot_Summer.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Hot_Summer.uasset
new file mode 100644
index 00000000..8b4549a2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Mediterranean_Hot_Summer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe85f823c83c572fee69dcf0502f10094f34d7826c9459548b409250b8e5871e
+size 3636
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Oceanic.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Oceanic.uasset
new file mode 100644
index 00000000..d047c756
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Oceanic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ab5c9f8688d0dfb19c110cd95ce6e29e8179a9ca8586d8b9ea6e74125d51472
+size 3763
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Polar_Ice_Cap.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Polar_Ice_Cap.uasset
new file mode 100644
index 00000000..fee18ba4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Polar_Ice_Cap.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4353015256c217d60f00237fed9e8d6c04d94c950997a847457bf95d1a5c9fe8
+size 3519
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Polar_Tundra.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Polar_Tundra.uasset
new file mode 100644
index 00000000..73572a99
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Polar_Tundra.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba1b1e6a4aa3bf55230b223ea2bdfd433a484321c435e29e6eeb805a6bc36b27
+size 3860
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subarctic-Severe_Winter.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subarctic-Severe_Winter.uasset
new file mode 100644
index 00000000..635e7f00
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subarctic-Severe_Winter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:afd218c31ebaf02033598cbd5f886ca5108aa7c227ba9e9e7242ad37b1602f11
+size 3799
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subarctic.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subarctic.uasset
new file mode 100644
index 00000000..99d5c10b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subarctic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:795f924a205aad55bda894721ddc353f1ac8765bf0fc22e9bb93c7aa76e92893
+size 3668
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subpolar_Oceanic.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subpolar_Oceanic.uasset
new file mode 100644
index 00000000..a9780f95
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subpolar_Oceanic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e20a65747d3c70ad5e75481fa1ce10f62dc001fbcab886375af9ad8b6dcb950
+size 4084
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subtropical_Highland-Dry_Winter.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subtropical_Highland-Dry_Winter.uasset
new file mode 100644
index 00000000..29b0b3af
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subtropical_Highland-Dry_Winter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:930885af2ddd7710467a9b3f407d1165e334d30d50f3e4cf7c7ea777b8e2b95f
+size 3721
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subtropical_Highland.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subtropical_Highland.uasset
new file mode 100644
index 00000000..227f7b3e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Subtropical_Highland.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:747eb5e1fa267310b700aa323ee573c67f7b32f28546bb540f743f0ac71e73a4
+size 3612
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Monsoon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Monsoon.uasset
new file mode 100644
index 00000000..58b9f03c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Monsoon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d639bda3a886d787ce521c949a93147561cb38e6a93220c3e8ed859b8d335d3
+size 3590
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Rainforest.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Rainforest.uasset
new file mode 100644
index 00000000..edfbb7c0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Rainforest.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67f9e8b5e33be3ce1b4a0b4bd90d069c6468a13ff37cdbf2fc4967eee4a53c70
+size 3623
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Savanna-Dry_Summer.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Savanna-Dry_Summer.uasset
new file mode 100644
index 00000000..52c31b4f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Savanna-Dry_Summer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bff5ee6acf324660397aed3c95250406a7106cbfbf703d0bd14976f362b144e1
+size 3651
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Savanna-Dry_Winter.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Savanna-Dry_Winter.uasset
new file mode 100644
index 00000000..c0095cea
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Tropical_Savanna-Dry_Winter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6dafab9d931a9f16a669878147f7f10785dfa435e86b7b2c2d02e2624e8557d5
+size 3669
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Warm_Summer_Continental.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Warm_Summer_Continental.uasset
new file mode 100644
index 00000000..fe69de10
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Climate_Presets/Warm_Summer_Continental.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e3b8d6057abd3988c0c5033f9a739f111155d25cce46df781c04240167641262
+size 3857
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Components/Weather_Mask_Brush_Component.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Components/Weather_Mask_Brush_Component.uasset
new file mode 100644
index 00000000..27171d51
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Components/Weather_Mask_Brush_Component.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5841931efa23d0e734f0e2bbd43c44b0dbbadf983a522846184b69ef3a2bc5de
+size 235920
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Components/Weather_Mask_Projection_Box_Component.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Components/Weather_Mask_Projection_Box_Component.uasset
new file mode 100644
index 00000000..2dd091ee
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Components/Weather_Mask_Projection_Box_Component.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e64097a057b62df220937e5c754648ba89afa546e871988bf906e5345e991d7a
+size 545374
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/DLWE_Interaction.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/DLWE_Interaction.uasset
new file mode 100644
index 00000000..b34205d5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/DLWE_Interaction.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5982d775a9b469e188579429b575d9dd73dc804db1ee0fbe05bd893f69f9db4d
+size 1317710
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Rain_Drip_Spline.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Rain_Drip_Spline.uasset
new file mode 100644
index 00000000..5556f114
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Rain_Drip_Spline.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17d32e9aaa0f3eddfa4c94201b209f72b3bf20b48e386e845c8daffcfd5c4631
+size 398137
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Close_Thunder_Audio_Player.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Close_Thunder_Audio_Player.uasset
new file mode 100644
index 00000000..c3e5b5f5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Close_Thunder_Audio_Player.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5a9b88c7764f0bbe209691e7192a17b15514140cfa818b3e2427543cc024435f
+size 92684
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Interaction_Settings/Standard_DLWE_Interaction_Settings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Interaction_Settings/Standard_DLWE_Interaction_Settings.uasset
new file mode 100644
index 00000000..59ddf1b1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Interaction_Settings/Standard_DLWE_Interaction_Settings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f2f272c5d025b3217515e869271586dc19e1336d80c9529543ca0bea5b5d357
+size 1866
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Random_Weather_Variation.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Random_Weather_Variation.uasset
new file mode 100644
index 00000000..d2a0c6ca
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Random_Weather_Variation.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:abf1359754a3551d01d52ef6d0309a0a43eb63ea6a094d11b8094168412f7032
+size 1068913
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Climate_Preset.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Climate_Preset.uasset
new file mode 100644
index 00000000..23c09e03
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Climate_Preset.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2be4d32a1e77984ad21abac9fa5d73ed5534f2bcf08b463a131a18abb4306331
+size 91241
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_DLWE_Interaction_Settings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_DLWE_Interaction_Settings.uasset
new file mode 100644
index 00000000..f44b61b7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_DLWE_Interaction_Settings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4adf0f50c91a0b447d9c38c928627befdfdc8a4ac992ffd2a1ee8666778c984
+size 40988
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_WeatherMask_Interface.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_WeatherMask_Interface.uasset
new file mode 100644
index 00000000..aed738a2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_WeatherMask_Interface.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5509ae86026f8c4384f5e21556a8b23d2694be66f0a21125138cb97ef72e8a0
+size 14671
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Weather_Preset_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Weather_Preset_Icon.uasset
new file mode 100644
index 00000000..91ecfb59
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Weather_Preset_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:696304e227542a0129a95f3a71f81f99fd212b96df0e78366388e9519c66d13f
+size 84459
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Weather_Settings.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Weather_Settings.uasset
new file mode 100644
index 00000000..26d4a109
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDS_Weather_Settings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dffc9b9ea18cc4f29b11dd555b174b76cb5187b04bebcc44f935db86441682ce
+size 24816
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDW_Lightning_Spawn_Manager.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDW_Lightning_Spawn_Manager.uasset
new file mode 100644
index 00000000..7374efbb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/UDW_Lightning_Spawn_Manager.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b473154faa108b6401ea92ac7354db6c447fd637e0aced357898ebfad1e803a9
+size 180893
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Ultra_Dynamic_Weather_Interface.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Ultra_Dynamic_Weather_Interface.uasset
new file mode 100644
index 00000000..d6d3db12
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/Ultra_Dynamic_Weather_Interface.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:466388af6369eed94069b1e6acc14e9abe7230db4457e33a663caceb34296df6
+size 53497
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/WeatherMask.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/WeatherMask.uasset
new file mode 100644
index 00000000..033252c5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/System/WeatherMask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:22331eb69e353318ee2ce4328b6266bf2342830604e7f358a5eaaba80e62703d
+size 269620
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Mask_Brush.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Mask_Brush.uasset
new file mode 100644
index 00000000..bedcdc48
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Mask_Brush.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c81e9ad0f70e5e71a194fd3767034615418f950c442c6068c2ec8c1de7184058
+size 80313
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Mask_Projection_Box.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Mask_Projection_Box.uasset
new file mode 100644
index 00000000..76617bda
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Mask_Projection_Box.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:60fa424ae9fce6714a4a7ca3ab49f73642d6098a83e2cd41ff2535e716891a5d
+size 127795
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Override_Volume.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Override_Volume.uasset
new file mode 100644
index 00000000..95db6ae2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Override_Volume.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f41f8263d15cb80f06cb5d11df238e84d643e93c49ec1d4de2a2fc2516eb9ee8
+size 2057702
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Clear_Skies.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Clear_Skies.uasset
new file mode 100644
index 00000000..512974f0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Clear_Skies.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:29056f59a7aebf3f37602490309db9eafb34e7f07e80eecdd7454ae7a637f329
+size 8201
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Cloudy.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Cloudy.uasset
new file mode 100644
index 00000000..908749b3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Cloudy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e7b93ac98df0fde5d973b907e875da73b8f14d7d61bf599fa7ffd9dedebf1d6
+size 8176
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Foggy.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Foggy.uasset
new file mode 100644
index 00000000..423efb31
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Foggy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aeec6a827e2020a5cb9a638c7b3122f9c367270b84197f8a55d8a05268dc9a1f
+size 8541
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Overcast.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Overcast.uasset
new file mode 100644
index 00000000..6c0ec60a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Overcast.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9054bc4274c44383f7c86677cf5aae5ab9a9c8139c443c0bf9c77c08f7cfd12
+size 6505
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Partly_Cloudy.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Partly_Cloudy.uasset
new file mode 100644
index 00000000..981188ac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Partly_Cloudy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2199c7c817cec775a41e94f4498e281f3cd796226c7406048fae0076d1f33098
+size 8276
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain.uasset
new file mode 100644
index 00000000..f286e6f9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1aafc7d7139f77e5d93f736d9326373fba9df28f0db2e1c1a612f841b19f5103
+size 7871
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain_Light.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain_Light.uasset
new file mode 100644
index 00000000..1a48dd89
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain_Light.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:61fa45c62bf588238f22c4ebc9356cdc65d850ff5efb066aaa6ec4e25c7f0bc7
+size 8449
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain_Thunderstorm.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain_Thunderstorm.uasset
new file mode 100644
index 00000000..284b1a9d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Rain_Thunderstorm.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a83b9b44482af49024273894aeb0c8ef089843d4e336e15ece930e645fef3da0
+size 7941
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Sand_Dust_Calm.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Sand_Dust_Calm.uasset
new file mode 100644
index 00000000..f18580e0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Sand_Dust_Calm.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:daaa753499b99317eac10de01af9d59c887e9989a6593575b4c26e633c7ddbb2
+size 11397
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Sand_Dust_Storm.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Sand_Dust_Storm.uasset
new file mode 100644
index 00000000..1ee062c9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Sand_Dust_Storm.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6e338c1e6339fa01bd7421412ba5224ed75d98d502e8489acacb56ac8217e43
+size 10690
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow.uasset
new file mode 100644
index 00000000..ed92c0c8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:82f9ec966fb7cd52b1bae56b90647549a5c6c26edf9eece407a98f4136e00bcf
+size 8939
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow_Blizzard.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow_Blizzard.uasset
new file mode 100644
index 00000000..87044fc5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow_Blizzard.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b66969a6b430f5051a101c5f8635fc0b352f192e7430edefa52e7025d582cca
+size 9296
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow_Light.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow_Light.uasset
new file mode 100644
index 00000000..3eefe3a1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Weather_Presets/Snow_Light.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0dcdf3d96994157018912c0b2da367027378bcb4e2e9a52ea3a8a9f289eee266
+size 8960
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Wind_Physics_Force.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Wind_Physics_Force.uasset
new file mode 100644
index 00000000..2679ae8f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Weather_Effects/Wind_Physics_Force.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0b8c9bf603aebc60c63b1fa6283a09111ce908c82ace21686297f2f3c1cea80
+size 229367
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Analog_Clock.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Analog_Clock.uasset
new file mode 100644
index 00000000..b712c677
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Analog_Clock.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c5483dd06e7ff3c0525d3d123505802a86a96e14fa2392ef9798c28208e0239
+size 269051
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Digital_Clock.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Digital_Clock.uasset
new file mode 100644
index 00000000..56fbbedf
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Digital_Clock.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa62c29e4373e0e468058bb9efa5ff80c2ceb2e43b6e86bab6d5ba295fbbd2df
+size 241035
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Onscreen_Controls.uasset b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Onscreen_Controls.uasset
new file mode 100644
index 00000000..df5450fc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Blueprints/Widgets/UDS_Onscreen_Controls.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b451650219bd49d4e9ff519ee0416bb5800ee33feb71573f84fbf4fd877155b2
+size 1617570
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMap.umap b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMap.umap
new file mode 100644
index 00000000..260d7374
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMap.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39c248a38688047ac577a12aa647d9cfcd625af473220e4957c77490844b2ab8
+size 7390357
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Landscape_Example.uasset b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Landscape_Example.uasset
new file mode 100644
index 00000000..102b45cb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Landscape_Example.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:43f8932e4c2d8e0c6d17a8935b2e9b51e94f2aa035ff7ce22bd9328320b799af
+size 25652
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Landscape_Example_Distant.uasset b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Landscape_Example_Distant.uasset
new file mode 100644
index 00000000..edfcc3ca
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Landscape_Example_Distant.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:33ebd0dd95db444a56752bc16ae6bb4216892c3161a245cc09841451e77930ce
+size 13147
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Wall_Example.uasset b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Wall_Example.uasset
new file mode 100644
index 00000000..3d2be03c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/Wall_Example.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45af5f4526ebb9d3f686054fa0c32c6f57762f32023e7b651b46dbb9a55fa70f
+size 24806
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/squares_height.uasset b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/squares_height.uasset
new file mode 100644
index 00000000..0745563a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Maps/DemoMaterials/squares_height.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a04535d67d20be33a318ecdd432b232e0081a88a413226fefa6b307ec381ba8
+size 25370
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/2D_Cloud_Shadows.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/2D_Cloud_Shadows.uasset
new file mode 100644
index 00000000..82a06c37
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/2D_Cloud_Shadows.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:79eaf1b6b3bcd580d8c8db74aaa6af8dfecddc31b5c8110ecd63bafe73ba3ed9
+size 13071
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Cloud_Fog_PostProcess.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Cloud_Fog_PostProcess.uasset
new file mode 100644
index 00000000..e801123f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Cloud_Fog_PostProcess.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a99e2a2099ea1b4d858d31ba23d770a7830cb2dd3b734720a1996f2367357759
+size 27982
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Fog_Directional_Scattering_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Fog_Directional_Scattering_Color.uasset
new file mode 100644
index 00000000..9c530411
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Fog_Directional_Scattering_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:626e2b5fc1ac4ac91713c21558be4b939f5a09101bfe2d36ad63f4eee851d951
+size 5753
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Fog_Scattering_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Fog_Scattering_Color.uasset
new file mode 100644
index 00000000..7b151505
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Fog_Scattering_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d71674e077d8101320b2bac3b04ae62cd3e3ea0e019a2ad6e0b8911b2afa649
+size 5304
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Sun_Disk_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Sun_Disk_Color.uasset
new file mode 100644
index 00000000..c5ac10dc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Sun_Disk_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53dd29f885ad71d24acc5d0e445b960172aa925681a6d7c3bbe784538c9b1147
+size 5102
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Sun_Light_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Sun_Light_Color.uasset
new file mode 100644
index 00000000..df1603a7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Color_Curves/Sun_Light_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8e31328992d837fa0d7868e2cd6f33312e7517791904ac548fe0d83ac4a4481c
+size 5208
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Directional_Light_Intensity.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Directional_Light_Intensity.uasset
new file mode 100644
index 00000000..81d91c4c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Directional_Light_Intensity.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9b8e8c6c2ab504c20ef7ae3033c1dcc8c93ed1bbd92de8d7f213bf883b8ae33
+size 1956
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Equation_of_Time.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Equation_of_Time.uasset
new file mode 100644
index 00000000..a7a7a724
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Equation_of_Time.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6110df04efc4c45bf67a44d523fc141f9e04109e226f6bb0fcdb2b8daf85e66c
+size 2055
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Exposure_Compensation_Curve.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Exposure_Compensation_Curve.uasset
new file mode 100644
index 00000000..70ad2f23
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Exposure_Compensation_Curve.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cda99bb38913fb5d057f4ebb1018a31ea34a8e23810839591ebbcefc4e4dff43
+size 1983
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Lightning_Flash_Strength.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Lightning_Flash_Strength.uasset
new file mode 100644
index 00000000..6c2c48ce
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Lightning_Flash_Strength.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86d9064e79546f0975f30a67569e3a1416c9158577ec2933ce28b07693bb1b71
+size 1871
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Night_Filter.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Night_Filter.uasset
new file mode 100644
index 00000000..34ceb8ba
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Night_Filter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4f596ef61aad835552e0ef48cbdb5a5a45bbdab5a579d752bc443d219805a01c
+size 1842
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Shine_Intensity.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Shine_Intensity.uasset
new file mode 100644
index 00000000..74f5d94b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Shine_Intensity.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f037fc55181f3c1d44358a2f0daf40f0635ea4f81e764ccac153f24aa7a22b3
+size 1808
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/SkyAtmo_Fog_Influence.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/SkyAtmo_Fog_Influence.uasset
new file mode 100644
index 00000000..76437970
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/SkyAtmo_Fog_Influence.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a4555c44b807ec3599dc7a59f0a8a5f41f67c5cceef96eaed51255a356555cff
+size 1878
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Stars_Intensity.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Stars_Intensity.uasset
new file mode 100644
index 00000000..8aa7fac4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Stars_Intensity.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e10d9cd239c89b61ed06d9d68161dddb70cb34d1788bb968f7d6d96c518b251a
+size 1854
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Sun_Highlight_Intensity.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Sun_Highlight_Intensity.uasset
new file mode 100644
index 00000000..69b73595
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Sun_Highlight_Intensity.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0f06761de52b234c18eefee788f4d4bc478518e221bd795dec2ec5c4930a8f80
+size 1786
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Sun_Highlight_Radius.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Sun_Highlight_Radius.uasset
new file mode 100644
index 00000000..445127be
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Float_Curves/Sun_Highlight_Radius.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84878e8fcc25593811d3ddfd6ec002a2beb17683a94561dd24bced4a918e6de1
+size 1801
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Global_Volumetric_Fog.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Global_Volumetric_Fog.uasset
new file mode 100644
index 00000000..fdf9cbf0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Global_Volumetric_Fog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d93564e3c5732e00b17dff1777fe2e68284f9b17e2f7db23cf27424f550d7a54
+size 60875
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Inside_Clouds_Fog_Particle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Inside_Clouds_Fog_Particle.uasset
new file mode 100644
index 00000000..8bde324b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Inside_Clouds_Fog_Particle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9629bdcd1438e547a8592162ff5d8e759745cacfaa28c44d85039135244b51cc
+size 25879
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Lens_Flare.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Lens_Flare.uasset
new file mode 100644
index 00000000..583af16e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Lens_Flare.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e575a55104b900f239f4e63ce3ed2699f81ea01d16eb9a2bef76547a0eae342f
+size 114510
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/2D_Cloud_Shadows_MF.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/2D_Cloud_Shadows_MF.uasset
new file mode 100644
index 00000000..1faabb90
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/2D_Cloud_Shadows_MF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ecabac07edbae9eabe91b831dd9c645b09522fd118939b47b228a1a95f87de91
+size 34935
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Aurora.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Aurora.uasset
new file mode 100644
index 00000000..1fdc4ffb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Aurora.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5a2f3f8cfac1a6a8eaa9094560d1501e89fe4d51d2df40439ba1648a4a87f367
+size 60825
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Aurora_Time.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Aurora_Time.uasset
new file mode 100644
index 00000000..aa81f144
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Aurora_Time.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bce76f5a427036b5dfa9a4c089a5698d86b39da8c5652a86574adfa9a98108a3
+size 9755
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Base_Sky_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Base_Sky_Color.uasset
new file mode 100644
index 00000000..3ab8fa72
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Base_Sky_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42568ac9477a725fc548ead4a6d5cd85b8550c5451bc120c4a8446f6aa69a001
+size 29423
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Basic_Rotator.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Basic_Rotator.uasset
new file mode 100644
index 00000000..395ad3e1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Basic_Rotator.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b8b70072cc8db4d46a5e60e06eaa6b2071822df7cf6f56e9f506f31c6d70d3de
+size 12592
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Caustic_Refraction_Light.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Caustic_Refraction_Light.uasset
new file mode 100644
index 00000000..0eefb2b4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Caustic_Refraction_Light.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d667a650d4f34e6cece22f0b6f3b13481297a47ac3d664f44d2f5ba6013e757
+size 51648
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Distribution.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Distribution.uasset
new file mode 100644
index 00000000..9bae1e3c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Distribution.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55357e7faa3ef15657af21c82e5280ccc933dca881ff9cd74f9c70a27461b7e1
+size 30298
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Layer.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Layer.uasset
new file mode 100644
index 00000000..6b84e600
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Layer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3523e800e3e1da8932bb012a8fb67eb69fe08f79cc95704e9046168ad3f7592e
+size 84044
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_UVs.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_UVs.uasset
new file mode 100644
index 00000000..be399029
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_UVs.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df06ba46a0466bee782605610dbeb578c3edab35b7675f3f799d20657b9164c0
+size 30685
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_UVs_All_Channels.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_UVs_All_Channels.uasset
new file mode 100644
index 00000000..50b5dd38
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_UVs_All_Channels.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5fdf1cb9f68bfe1abb1dcee27d867807acefd6990170bb012d26697260a7929
+size 21145
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Wisps.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Wisps.uasset
new file mode 100644
index 00000000..591c4e5e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Cloud_Wisps.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24a64a3f253adcbc8437c1f05d3cdd04ada3227bf6465e71309d88f97e65d7ec
+size 18713
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Clouds_Time.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Clouds_Time.uasset
new file mode 100644
index 00000000..29b399be
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Clouds_Time.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:de6b24946e126de731bfe4b4361b39d02178cda737c80f377cb9cc089acc87f7
+size 9164
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Composite_Cloud_Layers.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Composite_Cloud_Layers.uasset
new file mode 100644
index 00000000..7f0cc92e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Composite_Cloud_Layers.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed699840f4d5b4d125d7e0175809766af76bd08161d507bbb971185009bfeea1
+size 43237
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Composite_Static_Clouds.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Composite_Static_Clouds.uasset
new file mode 100644
index 00000000..047b07ba
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Composite_Static_Clouds.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d380dddfef84ae83b4916250078f8f5f1d430379ee0d4c505004f74bf3846a4
+size 39895
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Contrast_Control.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Contrast_Control.uasset
new file mode 100644
index 00000000..6356d944
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Contrast_Control.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a54bb4480dbcd112d19a6e4a1b8fa19210ba4fec54f9171b49395e7c897cf05d
+size 11975
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Convert_Density_To_Middle_Threshold.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Convert_Density_To_Middle_Threshold.uasset
new file mode 100644
index 00000000..dc16035e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Convert_Density_To_Middle_Threshold.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1aa9d6f0291ad4370bdd0a0a06033460cb1cb69c0589cbdc6aaaf541eddeb546
+size 11067
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_MapRenderTargets.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_MapRenderTargets.uasset
new file mode 100644
index 00000000..20f7dea8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_MapRenderTargets.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39b40b8f754f6ead39e52df9908d007b8cb1ad1f1db496304106a7fe5387fa61
+size 12076
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_Parallax.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_Parallax.uasset
new file mode 100644
index 00000000..eab02b34
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_Parallax.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:43b63bdbeeb048557d822013d3bee80f827611ce4446556144c943f852cd0b20
+size 35913
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_PuddleMask.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_PuddleMask.uasset
new file mode 100644
index 00000000..19900a54
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_PuddleMask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:920e80d7df3abf7f7cc1c8f450472c5a190b06b4a37d5160bd053c1512d6d12c
+size 36206
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_SnowCoverage.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_SnowCoverage.uasset
new file mode 100644
index 00000000..5ad51e12
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_SnowCoverage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1ba6b93f7ffb37448631a830eaf954f997f7bc1c353c3fd7dfd1609ea34af3d
+size 29163
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_VariationClouds.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_VariationClouds.uasset
new file mode 100644
index 00000000..987c7ef3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/DLWE_VariationClouds.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07c4af4483df07c11bc11d1ea74c0bd02bed061a30ed62b05fe181428a4d4536
+size 10670
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Directional_Shading_Offset.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Directional_Shading_Offset.uasset
new file mode 100644
index 00000000..d29a4e31
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Directional_Shading_Offset.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b93b3ff630cd2460e4022056de6f8cc383c3d92d46edee3d874a8906ce48abab
+size 15010
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Filter_Clouds.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Filter_Clouds.uasset
new file mode 100644
index 00000000..78532b03
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Filter_Clouds.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7983bbd8fa5f0f0f70afce01813fdc786f385ab41fc6e07a6657b9ed4ea0006
+size 12005
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Lens_Flare_Element.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Lens_Flare_Element.uasset
new file mode 100644
index 00000000..dcc571e3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Lens_Flare_Element.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3d18bef8c9b2416f4ba1d37f37c14d187b66976f2e8144629af2b72b696b0fd2
+size 25315
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Light_and_Dark_Cloud_Colors.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Light_and_Dark_Cloud_Colors.uasset
new file mode 100644
index 00000000..cc78a9e8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Light_and_Dark_Cloud_Colors.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:62a2e07b68cad7c004aef00b6164c163adc1c27efa2d31f0709fb99630e103f3
+size 36833
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Map_Cloud_Textures.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Map_Cloud_Textures.uasset
new file mode 100644
index 00000000..0d2d62b8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Map_Cloud_Textures.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:970d3887227e74a3c7efe3002905db6e3ad6b78dace5788d8345c51916bb7689
+size 27949
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon.uasset
new file mode 100644
index 00000000..9802421b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef7be8923a03b98c0b16d2a5447120eeee5cb3823564d74957b241e9d7e616bc
+size 46640
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon_Centered_Gradient.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon_Centered_Gradient.uasset
new file mode 100644
index 00000000..f13ac33c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon_Centered_Gradient.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b31cd7421d7a7b7af670422d9265b0409720d2dfc2e624b3076adc0bda529a2
+size 12858
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon_Composite.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon_Composite.uasset
new file mode 100644
index 00000000..ea6a19c5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Moon_Composite.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:108f25ed050cdd3c52a0db9e681268fa8c084b645d32fe4a1d7a0aebb28ee692
+size 13302
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/RadialGradientBasic.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/RadialGradientBasic.uasset
new file mode 100644
index 00000000..c073da61
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/RadialGradientBasic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a2255d2074444d6040e2b1a41c59592bc83b3ac63ba84c8a2a5fff92879bcc5
+size 13906
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/RainSplash_Particle_Sprite.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/RainSplash_Particle_Sprite.uasset
new file mode 100644
index 00000000..10e500e4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/RainSplash_Particle_Sprite.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:948570226de6d840417a841ae0ca60398af1c68d02567d10d5e7415cc713e703
+size 23140
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Rain_Splash_Droplet_Sprite.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Rain_Splash_Droplet_Sprite.uasset
new file mode 100644
index 00000000..18023080
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Rain_Splash_Droplet_Sprite.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b4680b6068218661479bbdf2b916c0a938ff19379a24a8c0463afbd25e1ec43
+size 14124
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/SC_DirectionalScattering.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/SC_DirectionalScattering.uasset
new file mode 100644
index 00000000..2937b63b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/SC_DirectionalScattering.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c8aa822a696e620e62351dadbf3363cf5371624a4b3b33ee2b7dd8b28d84f54
+size 26438
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sample_WOV_Target.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sample_WOV_Target.uasset
new file mode 100644
index 00000000..7933ff59
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sample_WOV_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd09540e7b8d1a6aa224c77fbce50a94674eed9d611f6dc574bf7aad4aee295d
+size 28251
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sample_Weather_Mask_Brushes.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sample_Weather_Mask_Brushes.uasset
new file mode 100644
index 00000000..1a066398
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sample_Weather_Mask_Brushes.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb4652dfd05ce43af270a1842f38dcbdfe0aca8d8cf925deee83e6fc6c99c152
+size 39985
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Scale_Intensity_Around_Sun.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Scale_Intensity_Around_Sun.uasset
new file mode 100644
index 00000000..412c592f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Scale_Intensity_Around_Sun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba0e92d965de251009cc4ae5a98731deb17eb8ad6553b32dee5bee41e8dc766e
+size 15659
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Scale_Radial_Gradient_Around_White.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Scale_Radial_Gradient_Around_White.uasset
new file mode 100644
index 00000000..037422c7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Scale_Radial_Gradient_Around_White.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec098233ab24633506d974d8816634c2c6c1bd3de3a3e4884d24eadafb3c43d6
+size 10985
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Screen_Droplet_Sample.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Screen_Droplet_Sample.uasset
new file mode 100644
index 00000000..fc37ad7b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Screen_Droplet_Sample.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4aeaf4ec49b7be4cf4737e3a03636f16fcae5eb13e808f5f85e191b36282c7ba
+size 31679
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Shading_Gradients.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Shading_Gradients.uasset
new file mode 100644
index 00000000..b963a1e2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Shading_Gradients.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05a7e23dfd9828f2185fe1a7654acf0bc194ba02c0e1eda5eff7eaa7027e9142
+size 38057
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Active_Sun_or_Moon_Vector.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Active_Sun_or_Moon_Vector.uasset
new file mode 100644
index 00000000..b0a0a871
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Active_Sun_or_Moon_Vector.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:10cbeb9a3dd9c4e2adc763c252a30e4d19794878a1e5e58bee7370d66a109751
+size 18992
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Day_to_Night_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Day_to_Night_Color.uasset
new file mode 100644
index 00000000..785e4661
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Day_to_Night_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df8ccf47d8bb6c1e308c72e4a548f89bbef6496baf95808e48d2e36847221722
+size 14907
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Day_to_Night_Float.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Day_to_Night_Float.uasset
new file mode 100644
index 00000000..1877d115
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sky_Utilities/Day_to_Night_Float.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2dcb0d02178d1eba61404b9d7a1791e08343676a3e266e56c2ff1be410eb2d0c
+size 14993
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Stars.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Stars.uasset
new file mode 100644
index 00000000..5c9208f3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Stars.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f66288fd30ad38d8871a5a7d9ce3a1fa6bacfd71edf032bff0cdc35b9007df44
+size 49141
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Centered_Gradient.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Centered_Gradient.uasset
new file mode 100644
index 00000000..0d180571
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Centered_Gradient.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0ff783dc0b4e42b7aa6cde83ee66c1d1db659b5ab18b0928234288bf89f1e400
+size 14301
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Disk.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Disk.uasset
new file mode 100644
index 00000000..5b82f043
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Disk.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d513900c97c19f557cdc6cb1052eb0c78a992ab48e172e33abac320953bc83aa
+size 40656
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Shine_Edges.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Shine_Edges.uasset
new file mode 100644
index 00000000..a5bed01d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Sun_Shine_Edges.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efdbec5ebe49c9ddbe92faedbf094d08114d51bc4e76f4b76d57333c528c4868
+size 18747
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Tiling_Stars_UVs.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Tiling_Stars_UVs.uasset
new file mode 100644
index 00000000..4f053526
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Tiling_Stars_UVs.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:80598c2d4f20cd48b1f8c548baba97e78d006cd8306b7fbe9b3fb119aa7d9336
+size 27607
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/UDS_VolumetricClouds_MPC.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/UDS_VolumetricClouds_MPC.uasset
new file mode 100644
index 00000000..9c773a1a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/UDS_VolumetricClouds_MPC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bd44c7a8db0e7d7186e460d31eae056bafc8b0e8750aa0421a6e9e281a2e41a
+size 11679
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Cloud_Shadows_MF.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Cloud_Shadows_MF.uasset
new file mode 100644
index 00000000..4a0daaf8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Cloud_Shadows_MF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:afef25704cd2a9678b8fb46e3848e1c285a2cb65e33474eb5a8f0af5e3da284a
+size 36496
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Clouds_Conservative_Density.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Clouds_Conservative_Density.uasset
new file mode 100644
index 00000000..96560ea0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Clouds_Conservative_Density.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc70b2bc9ad62650a51cca6c7fa725c6fefa37f4d6659ddba0744a55a0ea2626
+size 103717
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Clouds_Extinction.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Clouds_Extinction.uasset
new file mode 100644
index 00000000..be504109
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Functions/Volumetric_Clouds_Extinction.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47cf6c5828aaed0b6cb5183a77ecec9c095d4bf648863b8a5868ee4c7d04437e
+size 75697
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/2D_Cloud_Shadows_Caustics.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/2D_Cloud_Shadows_Caustics.uasset
new file mode 100644
index 00000000..646123d0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/2D_Cloud_Shadows_Caustics.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1547c4e452180e2004a194839e1c59625887de305f547911dcf152fb05bb1b9c
+size 8773
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/DLWE_Brushes/Compression_EdgeFade.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/DLWE_Brushes/Compression_EdgeFade.uasset
new file mode 100644
index 00000000..3ce2dc95
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/DLWE_Brushes/Compression_EdgeFade.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b31abf2d18a9c69a9eb1fdf5109b8b98f1c87cd8589274452f2b263778253aa9
+size 10145
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/DLWE_Brushes/MaskTarget_EdgeFade.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/DLWE_Brushes/MaskTarget_EdgeFade.uasset
new file mode 100644
index 00000000..a2a13972
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/DLWE_Brushes/MaskTarget_EdgeFade.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26a6429c145c9886d6da37cc9a3d8a9e1f43a7104e2ed4683a07340729e27efe
+size 8448
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Global_Volumetric_Fog_w_Ground_Fog.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Global_Volumetric_Fog_w_Ground_Fog.uasset
new file mode 100644
index 00000000..e44d22d9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Global_Volumetric_Fog_w_Ground_Fog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d72124be8d61d413c8cd04a199b7c4745a6d6a8c4724ba60e11fc531a7b560e6
+size 7330
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/35mm_Prime.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/35mm_Prime.uasset
new file mode 100644
index 00000000..257ee71f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/35mm_Prime.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:578203223b195c2281150c01e5e3594a0cf2dfe939d4e8d71b3beb28388c5fdd
+size 92901
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/Anamorphic.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/Anamorphic.uasset
new file mode 100644
index 00000000..da312079
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/Anamorphic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2924bd20a8def6f1fe14b34802acc07cfb7c4d081ba3f6e4a219ab08a30ea946
+size 92778
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/Zoom_Chromatic.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/Zoom_Chromatic.uasset
new file mode 100644
index 00000000..60a9998b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Lens_Flares/Zoom_Chromatic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dcf0273b06f3562c99331be1cea1ce5dcfb96a5ce7d3dc706359e7a2e94e630d
+size 93956
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_A.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_A.uasset
new file mode 100644
index 00000000..6585dfb9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_A.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf87b85fac4481bc49edafaab9f712370d6c26193d75a6853869de9cd73ecfb6
+size 10001
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_AD.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_AD.uasset
new file mode 100644
index 00000000..1d21fe7b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_AD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9679758580820cf5f27929fb39c92fe25eb96c71ebc2118c09928b65654af55
+size 10301
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_ADO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_ADO.uasset
new file mode 100644
index 00000000..34d3df78
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_ADO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b89d3fec922e7949bf7ea0b34533191cd75dfc80602aee77614456d6ae5b84b
+size 8467
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_AS.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_AS.uasset
new file mode 100644
index 00000000..839a1c13
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_AS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05b63ff81ae0fc03a8cd8de1671767f8a8399b670e9aeb114aa8c393d5ef5ad2
+size 11516
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_B.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_B.uasset
new file mode 100644
index 00000000..bc06d014
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_B.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ddcdc571b942c9044f63698c500aee022e51fe367adb72c496e93f681d27767d
+size 10026
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_C.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_C.uasset
new file mode 100644
index 00000000..57d26ce8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff8da886b84962ed24264a6b0539403f9b827c37ddbc76bf4e0c219d3c5ea634
+size 9949
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CA.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CA.uasset
new file mode 100644
index 00000000..ae23d7ce
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f08e39e50d7f4126ea8bcc4c5749d2c9b428ca4d4f885a8011781dce2ef2b549
+size 8146
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CAD.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CAD.uasset
new file mode 100644
index 00000000..40c352ca
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CAD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4d9ff31a5a8fef77b77b1142cf25beb29eacba3b7b000ec2a8a915e1190408c
+size 10426
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CADO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CADO.uasset
new file mode 100644
index 00000000..07b704dd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CADO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2010326473576855578af0dd98afe81e3928cedd18e87d32f8bae3a04a88e87f
+size 10720
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CAS.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CAS.uasset
new file mode 100644
index 00000000..ac303006
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CAS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5efea32c0eb9e4a4b1e7f270101820083d0339bb6474fa29adc743aaabd1d5a1
+size 11520
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CD.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CD.uasset
new file mode 100644
index 00000000..5b1a6a42
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2632912f75dfaa4a62d1b2e48a7573322ad4359d3d47d0146be6276c481f19c2
+size 8158
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CDO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CDO.uasset
new file mode 100644
index 00000000..74690930
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CDO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:865118396bb8c1829849c9076f36a0ad74fbf3733734ecb9dcc58ab3f845f17b
+size 8471
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CS.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CS.uasset
new file mode 100644
index 00000000..90fe33ac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_CS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b11f26bcf2933e143c1eb4146aa117ee6c6304145065ce567b2b064ff682e23
+size 8496
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_D.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_D.uasset
new file mode 100644
index 00000000..ac516f09
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84655e9aaf73139665714d159f6df3cefdc0fbb5d215d9a6e13091447f779d41
+size 9781
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_DO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_DO.uasset
new file mode 100644
index 00000000..b539e0c5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_DO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58f9ea3eb01df762ed8dc63054bb7caf85b048aa03be3df866ff763f0d37378c
+size 10257
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_FFTFF.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_FFTFF.uasset
new file mode 100644
index 00000000..e10b9ed1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_FFTFF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b262d9e30ad6d410b9e12c7d2a85cef9313e62db8c0a4929a06a468a073edbdc
+size 13641
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_K.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_K.uasset
new file mode 100644
index 00000000..a7c2e110
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c67f5cc2a8c809d24caa299e54a83a6cbf677bd8a643ad0be7f5abb7d1fe65b0
+size 10557
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KA.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KA.uasset
new file mode 100644
index 00000000..9e08f6d4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f59adb7b65bf60fcbe49d3800706c3b6050a38f5abfe9cd1c6b91e5c6cdbe70
+size 10595
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KAD.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KAD.uasset
new file mode 100644
index 00000000..ff35bc9e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KAD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95eec4c95dc6b6ee3cd407ae67774bda41bd6d0c7a2c7b260b42ac7336ac4d56
+size 10871
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KADO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KADO.uasset
new file mode 100644
index 00000000..4c257e13
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KADO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a29dd182f4bb5c5a11a20196b09d3facc0cb08061f1a79f6359c5262201e7a12
+size 10723
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KAS.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KAS.uasset
new file mode 100644
index 00000000..2693e532
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KAS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1a03028ff93256086d6d2afbc3047298e0097613b3ab320ca2ccd2842462241c
+size 12205
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KC.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KC.uasset
new file mode 100644
index 00000000..0dacf1e5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:90bc1f15712ce3a426e1a995e40b743452ae25403a32e06965fbe89d9bfcb217
+size 10482
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCA.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCA.uasset
new file mode 100644
index 00000000..f1533e69
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4128ddf66ae413f507993e134a5dec39173451451cdb02ebd90f440f34c6a59
+size 10799
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCAD.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCAD.uasset
new file mode 100644
index 00000000..5c5435bb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCAD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7e1bbb06b199105e80653d6e017cbd575ee819a31cff8885362a5d00575a042
+size 11118
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCADO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCADO.uasset
new file mode 100644
index 00000000..f77d15b2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCADO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bb1c4d171012ee12510ec3dfa8b4526aff400cf5f73c278e342c9978e4d00e9
+size 11435
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCAS.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCAS.uasset
new file mode 100644
index 00000000..4fbb4eac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCAS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63976557fe9c537722a4144ad5fd553c03d6c449aee853a0b01b6d7cca72de6e
+size 12209
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCD.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCD.uasset
new file mode 100644
index 00000000..b2cec348
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d6323897f547dbb018243a437cb3ad223b287e0d543a5743c2dac7e0f0549da
+size 8162
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCDO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCDO.uasset
new file mode 100644
index 00000000..05a53f8f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCDO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:13d87fef1467fffc1dffd32e376addd37bde88a809322913f786a14e036d0faa
+size 11128
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCS.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCS.uasset
new file mode 100644
index 00000000..1e295040
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KCS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc8d0fa633572563d814c465278582fd0c85d1227916df74d9a56536941daaf7
+size 8500
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KD.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KD.uasset
new file mode 100644
index 00000000..077460e8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0786ebffc7ad05df7349aa77a1b57c52475e269a71006ebfd8d534f8cf5d49e
+size 10604
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KDO.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KDO.uasset
new file mode 100644
index 00000000..c19f0d22
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KDO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b794bad936849d93218058e0282b0b5a24b8689cca3629606f0b07dbfe13e24
+size 10121
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KS.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KS.uasset
new file mode 100644
index 00000000..675c10a8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_KS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:302d345369a66ba8cbe6c0f52730baa460bc2e13b9c0052db30efdec8aad1fb3
+size 11675
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_P.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_P.uasset
new file mode 100644
index 00000000..f5af4af7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_P.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f4eb0ae5b59e967a7cabceb0b445fb962bbc4ec25f5fa740fad3ce6a1011745
+size 9140
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_PC.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_PC.uasset
new file mode 100644
index 00000000..6ccea517
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_PC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e41ddb347803f226c7fdd72529f253da56830f60b6f08a0e66927adf85567e2e
+size 8760
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_S.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_S.uasset
new file mode 100644
index 00000000..9e86c26a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/UDS_S.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b086ef425ae2310132d231e4a9568c4653d4038f94823d138c0d56714b73c07
+size 8188
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Cloud_Shadows_Caustics.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Cloud_Shadows_Caustics.uasset
new file mode 100644
index 00000000..c95e00c4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Cloud_Shadows_Caustics.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51b66280f0945ed9cc64081deb9b2a3b793653d266eefb2e7f659aa4736fdb2b
+size 8824
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_2L.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_2L.uasset
new file mode 100644
index 00000000..d355e743
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_2L.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87d37c5e990a2e704372c75e9c389ccf4eb4d71c68dea35c2d36b689764df94d
+size 81611
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_2L_S.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_2L_S.uasset
new file mode 100644
index 00000000..155937af
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_2L_S.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:154a3993ef9029c908be9ad0f542cf5f779ba8b55d6820b0bb1880600ca6716a
+size 81902
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_default.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_default.uasset
new file mode 100644
index 00000000..315eb8c9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_default.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a594ec1d4849896da39376c896263f823a2508e7d6390c8f1687d99316b518c
+size 82192
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_default_S.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_default_S.uasset
new file mode 100644
index 00000000..de25ce9c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Volumetric_Clouds_default_S.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8b24c122f00eee5e86a85a27f1051ef19d14dbf2c282553c9749c185889b771
+size 81906
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Water_Caustics_LightFunction.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Water_Caustics_LightFunction.uasset
new file mode 100644
index 00000000..47d5a8f0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Material_Instances/Water_Caustics_LightFunction.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b4a9f38fa3ff17b33b4146ff07892f544c36a65a19cf3693db92c75604fdffd6
+size 12387
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Overcast_Turbulence.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Overcast_Turbulence.uasset
new file mode 100644
index 00000000..6c2e88cd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Overcast_Turbulence.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:560004851a95f6866196236b4b96dead92d3378102ff4f510d482095e65d915b
+size 36729
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_A.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_A.uasset
new file mode 100644
index 00000000..39507489
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_A.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a51223489f7526c2077e6feece42a2f0c0db3789e5bc72b157878c5f9e154f8c
+size 7291
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_AR.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_AR.uasset
new file mode 100644
index 00000000..1f555d68
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_AR.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31a8e31fd431268e773adf5044914bb634844159499b538bb8d25b4808ac75b3
+size 7609
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_Default.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_Default.uasset
new file mode 100644
index 00000000..f5485afe
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_Default.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8a11d6cbf5e97b9543da17ff519e7dd5c74f1786f43f2505d54eeed5b7fdde9
+size 7866
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_N.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_N.uasset
new file mode 100644
index 00000000..7095d8d8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8fc98325ccbbfdf4c696ef064fddd52496a018f6c668b272b695b5b687b71fdf
+size 7278
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NA.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NA.uasset
new file mode 100644
index 00000000..7ff6da30
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fb1d51b8e72abc68ca26a6e6fd263cae9c0c29376c42f93e706d61dda918a8a4
+size 7615
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NAR.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NAR.uasset
new file mode 100644
index 00000000..12780fa0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NAR.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dded54b01cca9bd73b67303e72dc10beb08e4e16ba5638425872b4accef5b8db
+size 7933
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NR.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NR.uasset
new file mode 100644
index 00000000..ad8b4493
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_NR.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0881c8fd1772b37153a37449b7ff1598049ded2165757d68dd0fcc2ebfd120a0
+size 7596
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_R.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_R.uasset
new file mode 100644
index 00000000..372b94f0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Instances/Space_Planet_R.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7b49a55cdc5dfabd0b3feb0818f70fe09f1f64be94ada73cb82ef72f88a24a8
+size 7272
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Space_Planet_Glow_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Space_Planet_Glow_Mat.uasset
new file mode 100644
index 00000000..54941b0b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Space_Planet_Glow_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04413575bb8cd0c4fa713ef93bd8f46ca2c8ed72d21da05f9b79cf2ae8cf277c
+size 21968
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Space_Planet_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Space_Planet_Mat.uasset
new file mode 100644
index 00000000..86a2c64d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Space/Space_Planet_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef267a95e4aa5c74d374d2415e9a25de422608a31c4f670f978ba8de75682642
+size 137745
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Tools/Static_Clouds_Cubemap_Transform.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Tools/Static_Clouds_Cubemap_Transform.uasset
new file mode 100644
index 00000000..d9593773
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Tools/Static_Clouds_Cubemap_Transform.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eaaa0bf6f65b8967cd5beb6c82fe3e0cc1df6519865d6e15286a4432cd4b8228
+size 17089
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Tools/Static_Clouds_Tool_Composite.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Tools/Static_Clouds_Tool_Composite.uasset
new file mode 100644
index 00000000..4cec905b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Tools/Static_Clouds_Tool_Composite.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:10f0e378d660411ee3023ffa9de8c8ba2ecb62b78b653cb7478ac63a7c6dd7c1
+size 13704
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Ultra_Dynamic_Sky_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Ultra_Dynamic_Sky_Mat.uasset
new file mode 100644
index 00000000..dbc41ffa
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Ultra_Dynamic_Sky_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f1376f03957b35e080be1083a29169b3866fee860212b7baeadc1909cde2a2c
+size 98255
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/VolumetricCloud_LightRay.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/VolumetricCloud_LightRay.uasset
new file mode 100644
index 00000000..c84115cb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/VolumetricCloud_LightRay.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5dfab3a03a1cd14044f6b529e4e4e4228a73f85953e507575dbed6a61b338ee0
+size 75549
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Aurora.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Aurora.uasset
new file mode 100644
index 00000000..c87a15ac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Aurora.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6fb82e2fb59b308b17cb907cece307b32e848ecd61d2189534fa946cf731c49
+size 52472
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Cloud_Shadows.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Cloud_Shadows.uasset
new file mode 100644
index 00000000..970e387a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Cloud_Shadows.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f2ceae5e1980f5430343230edfe2e4f07a3b2095714d531cf1e3bbfe69a81e04
+size 13081
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Clouds.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Clouds.uasset
new file mode 100644
index 00000000..8976e257
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Volumetric_Clouds.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d96bed681cd812f9cc8c93bad08969a8eca410691e94e4a7b45f61906c45326f
+size 52322
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Brush_Visualize_Wireframe.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Brush_Visualize_Wireframe.uasset
new file mode 100644
index 00000000..6532a1bd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Brush_Visualize_Wireframe.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5a205850dc4bca3958d377153a040895c204f983c7ac4550da48cb6bd593ca40
+size 10710
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Cloud_Altitude_Mask.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Cloud_Altitude_Mask.uasset
new file mode 100644
index 00000000..6c36e727
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Cloud_Altitude_Mask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2301c358f876e24637f56382ce2bafb3836f755d1007ac829439c83b34a2a3b
+size 28945
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/DLWE_Brush.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/DLWE_Brush.uasset
new file mode 100644
index 00000000..da2a6c87
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/DLWE_Brush.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:91d337d67ebc28676eba49589957bd51e531215435020a9a1a642e2396ba512b
+size 20306
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/DLWE_VHFM_RVTStage.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/DLWE_VHFM_RVTStage.uasset
new file mode 100644
index 00000000..c2e32cb0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/DLWE_VHFM_RVTStage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e7bbd7a735bac6a1dfb9b3e68e0dadc5f5c36c2c3986014b8463ae806b8f2a1
+size 54892
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Draw_Texture_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Draw_Texture_Mat.uasset
new file mode 100644
index 00000000..500bf2b3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Draw_Texture_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:301eff17668dd3164d031193e3f57a74bce58a2be09abcdafdbb8f299f193300
+size 7061
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dust_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dust_ParticleMat.uasset
new file mode 100644
index 00000000..611080dc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dust_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:274cdbc8fbded0c061e54e64253a5d91436d9f5b56fa2326857e8dbffc37c0bc
+size 18940
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dust_Spot_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dust_Spot_ParticleMat.uasset
new file mode 100644
index 00000000..961f4c07
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dust_Spot_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a127acb8a5bcbecd6770f60b79caf50c2c25b05df54d48f509ddec5b1e9b8f24
+size 8070
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dynamic_Landscape_Weather_Effects.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dynamic_Landscape_Weather_Effects.uasset
new file mode 100644
index 00000000..36fcacbb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Dynamic_Landscape_Weather_Effects.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d764ab313e1f4e12a668ccb0da4832856e937c3a83e9db14e42cf1eec1eecdb3
+size 194369
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Fog_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Fog_ParticleMat.uasset
new file mode 100644
index 00000000..d0dea7d2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Fog_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4fc3db4b84f4d86c7c37f7a206dcc3e22864a92cf6ad27cf818454bf711de36f
+size 24656
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Foliage_Wind_Movement.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Foliage_Wind_Movement.uasset
new file mode 100644
index 00000000..5a2c8821
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Foliage_Wind_Movement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09fac8077d9f71629fa13e106ffcf145435dc844f89beca08ce4b890b1876462
+size 148258
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/GlassWindow_Rain_Drips.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/GlassWindow_Rain_Drips.uasset
new file mode 100644
index 00000000..e0e93f4b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/GlassWindow_Rain_Drips.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c428c42ebdade430a23d6b9bb4f0e1b1a500e48d53c95a270cfb54dff45ae31
+size 69986
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Hide_Weather_Particle_With_Local_Cloud_Coverage.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Hide_Weather_Particle_With_Local_Cloud_Coverage.uasset
new file mode 100644
index 00000000..329279ba
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Hide_Weather_Particle_With_Local_Cloud_Coverage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c6bc1681651a9cca508cc3d29cdc1d50b964521143a9e5bff66b14fd7bfad692
+size 17930
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningBolt_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningBolt_ParticleMat.uasset
new file mode 100644
index 00000000..488e384b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningBolt_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:004dd9ce33e1291ec7284201edaba4d7d9842ff5acb1bbc1f05389c01c9e43a5
+size 25027
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningBranch_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningBranch_ParticleMat.uasset
new file mode 100644
index 00000000..5e1eca2b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningBranch_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3794e2cf52b195acf892d8e8619fbeb431ce41d6a6497b999ab1b5df6efa5853
+size 10749
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningFlare_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningFlare_ParticleMat.uasset
new file mode 100644
index 00000000..29dd8245
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/LightningFlare_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:393952a6e53796e44d2f573c0ea77cef35109ab269cce356f04982931565c5a1
+size 51421
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Ball_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Ball_ParticleMat.uasset
new file mode 100644
index 00000000..80a95ec9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Ball_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8e231a0d7b3e0145e0c866b52746574b8edf49a2cb56e1dab3b77b7171d1e30f
+size 18710
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Glow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Glow.uasset
new file mode 100644
index 00000000..a6e89896
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Glow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:56574f4fc64f04126496c1b078ab446688915cd4b29550b3e027545292ca791a
+size 12558
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Light_Rays_Card.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Light_Rays_Card.uasset
new file mode 100644
index 00000000..91b3b637
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Lightning_Light_Rays_Card.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f34d5acaeba461fe2534d0ad669c96524cc7f93439dd3a3682a6fefa7e5d97d
+size 32709
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Limit_Weather_Particle_Ambient.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Limit_Weather_Particle_Ambient.uasset
new file mode 100644
index 00000000..123d1746
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Limit_Weather_Particle_Ambient.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24612638c10b0964ed04123a7969351026a046fb6a01944ac75cb210cf405c98
+size 22088
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Post_Process_Wind_Fog.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Post_Process_Wind_Fog.uasset
new file mode 100644
index 00000000..73af7683
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Post_Process_Wind_Fog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:373febfcc6818a94b131bc63aa46a90630b0797e08b07c391dd679895d04fc2c
+size 45435
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Projection_Box_Height.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Projection_Box_Height.uasset
new file mode 100644
index 00000000..e11b1ef5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Projection_Box_Height.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9d006f583c05fd7831348d3ea6d2d47475dd311778df64ddbb000d0b1b4d428c
+size 29249
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Projection_Box_Mask.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Projection_Box_Mask.uasset
new file mode 100644
index 00000000..0aafd59e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Projection_Box_Mask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0ea46aed3cd4d492ca7819fa666f51bd0887bfc277a19e0a3814c314997f4985
+size 29534
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rain_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rain_ParticleMat.uasset
new file mode 100644
index 00000000..56d52bf3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rain_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ac19389290e3647d967eab3f4679a3b98e9dcfc136824796bec18742f04dda2
+size 56091
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rain_Spot_Decal.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rain_Spot_Decal.uasset
new file mode 100644
index 00000000..69ebc9e8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rain_Spot_Decal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0dade872143e3b409ba6be51140f14c098b83846672df4652c0489f84ea2fd8d
+size 16153
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rainbow_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rainbow_Mat.uasset
new file mode 100644
index 00000000..db0cec24
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rainbow_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1c139c340c10b32b8c64f7eedb14b2c1a053f93a0e5dd38c2efcc35607593d9e
+size 47994
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rainbow_Mat_Volumetric.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rainbow_Mat_Volumetric.uasset
new file mode 100644
index 00000000..282a6556
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Rainbow_Mat_Volumetric.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73bcfc57052b3a5a9c92cf08d74ac0568057d1c321ba9aa93436f177f086f7c4
+size 8046
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Material_State.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Material_State.uasset
new file mode 100644
index 00000000..a2dc055b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Material_State.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:945c68a9858fa240b3891b1448f1e98a88b63e3a897bf77597a044b743127764
+size 26690
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Seasons.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Seasons.uasset
new file mode 100644
index 00000000..4d20f02e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Seasons.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc3407b8a1fc4e7517e9b6063ac58dac3c1050960589047ac49b47eac9b8776e
+size 12471
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Wind.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Wind.uasset
new file mode 100644
index 00000000..3a50eecf
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Sample_UDW_Wind.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3c93381528f958f4507d0be36e816d463fd89422d7886ae8149f71e28484dcb
+size 14181
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Scale_Alpha_With_Distance.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Scale_Alpha_With_Distance.uasset
new file mode 100644
index 00000000..dc3d57ad
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Scale_Alpha_With_Distance.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b44bca33820e4b9eec9156a1a1264a8f2a5cd866091f598dd1ed18796bf10949
+size 10416
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Screen_Droplets.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Screen_Droplets.uasset
new file mode 100644
index 00000000..4a7d3f4f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Screen_Droplets.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb9f9d9029d953cce9df823c0e2c3e85d47fc4442faa9527d5dd06f4e04a04eb
+size 39449
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_And_Dust_Weather_Effects.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_And_Dust_Weather_Effects.uasset
new file mode 100644
index 00000000..8f71b02c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_And_Dust_Weather_Effects.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a52b181fed4d3665384e3a4977ba32fe26f806e3561e301091df46fb389550f9
+size 70660
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_Fade_Target_Mat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_Fade_Target_Mat.uasset
new file mode 100644
index 00000000..0d06fe5d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_Fade_Target_Mat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:237cad6ce285d38977a1e5a7db8887f4dd1a2ea784a114e2b5a24bde1058bb32
+size 19352
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_ParticleMat.uasset
new file mode 100644
index 00000000..f9da83ed
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dbaf5be289b4cd0390e0a41c06f55cbde7dbb4dd591afcc855d83f239aa782a2
+size 37407
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_Trail_Particle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_Trail_Particle.uasset
new file mode 100644
index 00000000..c5a366de
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Snow_Trail_Particle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78ea897b5f9bbc27ad7e2507ac5a98abc2875f8fc4575ddd42ee0d9d8d6f22b7
+size 18345
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_Droplet_Particle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_Droplet_Particle.uasset
new file mode 100644
index 00000000..c834a3e0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_Droplet_Particle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c3457fb33fe5cd05d78f14845c689010b42f81e4e8bf11c9cf52012b34b0a65
+size 11290
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_Droplet_Particle_Translucent.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_Droplet_Particle_Translucent.uasset
new file mode 100644
index 00000000..4f85414e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_Droplet_Particle_Translucent.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d181173205afc4f59701199987c4984aceb8ce9d898303ee97a33e15098c6de
+size 12629
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_ParticleMat.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_ParticleMat.uasset
new file mode 100644
index 00000000..e349c992
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_ParticleMat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63f8ba62ac368ff58a3d3a2a381fc3827987d78b2cee69834b5422cdc6c3f3b3
+size 14580
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_ParticleMat_Translucent.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_ParticleMat_Translucent.uasset
new file mode 100644
index 00000000..1067925d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Splash_ParticleMat_Translucent.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78675d7aaf8451242328f074c5c0a93069c02c4315df50172562c5b6cba82c73
+size 15314
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Surface_Weather_Effects.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Surface_Weather_Effects.uasset
new file mode 100644
index 00000000..b5de37c0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Surface_Weather_Effects.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bb4d005a2e4b7cf2edec3ba5713fbc8a8ce7f5a95809840b4b47b4f5d2b1c10
+size 244773
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/UltraDynamicWeather_Parameters.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/UltraDynamicWeather_Parameters.uasset
new file mode 100644
index 00000000..e6696602
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/UltraDynamicWeather_Parameters.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4097be2ff3341b724b2f2575fe2c9b9b79ad146c5fb798ff491be91610a37411
+size 7641
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WOV_Target_Brush.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WOV_Target_Brush.uasset
new file mode 100644
index 00000000..d7b57abe
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WOV_Target_Brush.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ef05484a5c51171c38d15193a735e93594c212c2c94caa95185e57a54796017
+size 9569
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WaterSurface_Rain_Ripples.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WaterSurface_Rain_Ripples.uasset
new file mode 100644
index 00000000..06f716db
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WaterSurface_Rain_Ripples.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17f56630123923e7b372bf4da5505e6f5b410fc83191d428962d9628864845e0
+size 101685
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WeatherParticle_DepthTest.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WeatherParticle_DepthTest.uasset
new file mode 100644
index 00000000..b062fe34
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/WeatherParticle_DepthTest.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:831e18900f9d65054fecf7ae6e8aeaa387c720b6cff766caa17a120dc07cde47
+size 14684
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Wet_Weather_Effects.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Wet_Weather_Effects.uasset
new file mode 100644
index 00000000..3362a9ec
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Wet_Weather_Effects.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b54bd041f59ff331f8b4105dc196336951977e59837d0331ee7849c2edd3f725
+size 139693
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Wind_Debris.uasset b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Wind_Debris.uasset
new file mode 100644
index 00000000..129788e9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Materials/Weather/Wind_Debris.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28f934d98b35f058e1cbffc69ef566bb519923d43e1049800728a02a4ee91e48
+size 16768
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/2D_Turbulence_Disk.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/2D_Turbulence_Disk.uasset
new file mode 100644
index 00000000..5e9fd228
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/2D_Turbulence_Disk.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5de8d51a187e542ba7eaea52b69794d77803f4593aae362dd779b886c788c67
+size 170930
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Brush_Cube.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Brush_Cube.uasset
new file mode 100644
index 00000000..60a34471
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Brush_Cube.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9831e94e94e269a3c0ec6b45c8156b87a8d17d78577ae9c06c795966a658c0c5
+size 19376
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Brush_Square.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Brush_Square.uasset
new file mode 100644
index 00000000..ba45f6cb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Brush_Square.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0cc9814e2d01135731fac069622fb476f85bd4b2232740cd920654157f0a23d4
+size 17643
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Compass.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Compass.uasset
new file mode 100644
index 00000000..57d005dc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Compass.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1cfdb7600f9e150c4920096eb0a004918f6aebe77777f36d03e6f4fb5c2fe76a
+size 20143
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Portal_Arrow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Portal_Arrow.uasset
new file mode 100644
index 00000000..82f8b67b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Portal_Arrow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a06225208311b95dbc6e4d97ae15e6c01a5811089e1876b6e91a2fcca6b7958e
+size 19312
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Rainbow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Rainbow.uasset
new file mode 100644
index 00000000..8071c5c0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Rainbow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78f0c88a03e5ec2a59d783c5015d8fc6c8e61e57b673926eea9f544409821cbf
+size 25495
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Space_Glow_Circle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Space_Glow_Circle.uasset
new file mode 100644
index 00000000..4d9556f4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Space_Glow_Circle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c1f7f4ee41325a5305d4a287c4cc2cec84f106ca67e80675d968a7105344238
+size 15525
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Space_Planet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Space_Planet.uasset
new file mode 100644
index 00000000..d3c4c164
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Space_Planet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d84d046124ad07d214dbc7eae71ae3c83884410eb86073eb458a4460bb2b5660
+size 195732
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Meshes/Ultra_Dynamic_Sky_Sphere.uasset b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Ultra_Dynamic_Sky_Sphere.uasset
new file mode 100644
index 00000000..b8317865
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Meshes/Ultra_Dynamic_Sky_Sphere.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b911699d4ef6c6b9890b6b962743982cdbe1730b8502aab86662630142d09123
+size 392516
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Dripping_Curve.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Dripping_Curve.uasset
new file mode 100644
index 00000000..54adbad4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Dripping_Curve.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c98f9dc4cfa1057f4faaa06a824b546c26366a6bf85b2ee9be7be607c9202b22
+size 2062076
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Dripping_Mesh.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Dripping_Mesh.uasset
new file mode 100644
index 00000000..356b071e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Dripping_Mesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39b48617b921a7ebdb07217f700c4ab2f1bbde15edeb54d2632436a37cede044
+size 871846
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Dust.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Dust.uasset
new file mode 100644
index 00000000..eae3e799
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Dust.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:39d78b2e4e6f9bc78ea1d4e8519b965ba5fc2ef1b6dbab3e65488620651ff285
+size 5118611
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Fog_Particle_Dynamic_Parameters.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Fog_Particle_Dynamic_Parameters.uasset
new file mode 100644
index 00000000..4e5466e8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Fog_Particle_Dynamic_Parameters.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53e42268ef13ac362b51bae305c9fab81ea18ae2062cf21ef65fb24ed8adb4e8
+size 64451
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/GPU_WeatherParticles.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/GPU_WeatherParticles.uasset
new file mode 100644
index 00000000..e3192bef
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/GPU_WeatherParticles.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:127197e69c2f5705ad350e39279abf489917bed438350575f7e6f35677ef8276
+size 502644
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Global_Volumetric_Fog.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Global_Volumetric_Fog.uasset
new file mode 100644
index 00000000..2cc7d75a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Global_Volumetric_Fog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9603585afd4bb3e011ed191977c767b3fdc3fe90439304d3df408d069befd8c0
+size 402456
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Inside_Cloud_Fog.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Inside_Cloud_Fog.uasset
new file mode 100644
index 00000000..befbf06a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Inside_Cloud_Fog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53bb1f7e7781a01e5571b7a96598bcac4c3e6ab0453637e2c687d0c7245cfd46
+size 381777
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Kill_Particles_Inside_DistanceFields.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Kill_Particles_Inside_DistanceFields.uasset
new file mode 100644
index 00000000..9da3231d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Kill_Particles_Inside_DistanceFields.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc08c1a6a02007f1bb1a47cc9d4d896eadd3acc862c602fd65121d0bdea6a308
+size 58546
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Kill_Particles_Outside_Area.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Kill_Particles_Outside_Area.uasset
new file mode 100644
index 00000000..45a94709
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Kill_Particles_Outside_Area.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae0f3a6ac6cf9cac039d38d75bf2ae0bb99165f559655be475b57cdd8bf52e6a
+size 55651
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Lightning_Strike.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Lightning_Strike.uasset
new file mode 100644
index 00000000..7cb89452
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Lightning_Strike.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40f4183ce3d41c771556c5ffbcbe1fbd6442b4c2a2d893548d677386b1b43099
+size 3911153
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Obscured_Lightning.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Obscured_Lightning.uasset
new file mode 100644
index 00000000..9c28d88c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Obscured_Lightning.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d5aadeadcaed922a94cc919edd188d250ad796abcdbf57c1afd434683579c56
+size 1102212
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Puddle_Splash.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Puddle_Splash.uasset
new file mode 100644
index 00000000..590e295d
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Puddle_Splash.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b43e974d7525da79946217f8feca3186822d8928c9d2930f42f8fb1ed21a0c11
+size 893322
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Rain.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Rain.uasset
new file mode 100644
index 00000000..7e5eb4b5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Rain.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9608dc63afe68c6c517382846a072da1f3323f2ba04a6502557478798376767c
+size 5737413
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Rain_Sprite_Appearance.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Rain_Sprite_Appearance.uasset
new file mode 100644
index 00000000..7328f259
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Rain_Sprite_Appearance.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8b0205a8666598b1e874a3971fff2e0095905a145657ce9e5c06e573f505c7af
+size 95911
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Scale_Weather_Spawn_Count.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Scale_Weather_Spawn_Count.uasset
new file mode 100644
index 00000000..be95ea00
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Scale_Weather_Spawn_Count.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0722603550acb389ab8cfa02345686aa4f0f91831ef9b66b4d61f26c87422ddc
+size 47722
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Set_Weather_Sprite_Velocity.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Set_Weather_Sprite_Velocity.uasset
new file mode 100644
index 00000000..a88bf9b2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Set_Weather_Sprite_Velocity.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:933a201ad31ed70ecd209abc9a5fa7675ae89dbd1487d40d75db05cbf33971e5
+size 62811
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Snow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Snow.uasset
new file mode 100644
index 00000000..9c7139f2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Snow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3fbe561351da56e33ae04b3fc9e4f80caba15131007740ec1b19236020de839
+size 4143293
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Snow_Trail.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Snow_Trail.uasset
new file mode 100644
index 00000000..7877fa78
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Snow_Trail.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d4582777fa4906a2762d4aa90e9d4c9d1bae4b83e7e732f0a7ea895fabe41c9a
+size 864392
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Standalone/Dripping_Skeletal_Mesh.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Standalone/Dripping_Skeletal_Mesh.uasset
new file mode 100644
index 00000000..adc4e10a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Standalone/Dripping_Skeletal_Mesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:040b024ea04fec1e3b02e1fef39587e04d6df2271af19c27182426013feca4d0
+size 2149576
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Standalone/Dripping_Static_Mesh.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Standalone/Dripping_Static_Mesh.uasset
new file mode 100644
index 00000000..49997f50
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Standalone/Dripping_Static_Mesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b4cddd5a266b38371145e224650fb7dd35a6db1720650f7bbf3b62c0b9c95b3
+size 2135546
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_Niagara_Parameters.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_Niagara_Parameters.uasset
new file mode 100644
index 00000000..d840abfe
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_Niagara_Parameters.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e69d5ca5c5ceddc2e85f2125d13fb1688c23a8cf5c00cf197e8784ac9496175f
+size 12710
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_WeatherParticle_Parameters.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_WeatherParticle_Parameters.uasset
new file mode 100644
index 00000000..1cffe025
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_WeatherParticle_Parameters.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:022aaed5fecd2e4608160be06378dabfc7014db9c74ff9d8b87fce8063708f30
+size 4511
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_WeatherParticles_Niagara.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_WeatherParticles_Niagara.uasset
new file mode 100644
index 00000000..92c52a3e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/UDW_WeatherParticles_Niagara.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c123c9332af294e44570d3a9be52bd00bc64dab9827226c63e97356135bae43
+size 7947
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Visibility_by_Camera_Distance.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Visibility_by_Camera_Distance.uasset
new file mode 100644
index 00000000..2623ad01
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Visibility_by_Camera_Distance.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7caea8953cb05573b9dfe113b4f055db13563e4d44a2278641d75f290c85e159
+size 41211
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/VolumetricCloud_LightRays.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/VolumetricCloud_LightRays.uasset
new file mode 100644
index 00000000..6fbb48e2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/VolumetricCloud_LightRays.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efc8fdcbce5f35256763457fcbc25ef953d06ef182a9c3d6f0c52b0f97299009
+size 1103426
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Weather_Particles.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Weather_Particles.uasset
new file mode 100644
index 00000000..13c71a75
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Weather_Particles.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dfdc5d01e323b339c89541fe13b062c1185738718b48290684cced481228b677
+size 729188
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Particles/Wind_Debris.uasset b/EndlessVendetta/Content/UltraDynamicSky/Particles/Wind_Debris.uasset
new file mode 100644
index 00000000..30db096b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Particles/Wind_Debris.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75084be732cc6a3a23b5259144adc46c0147c49e5e3be5cc6669e02bba67fedf
+size 2851777
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_1.uasset
new file mode 100644
index 00000000..57cdb780
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46012bc82c75784d3a410ec9aee876a6845671d3b34df43c8ebc43d794df8355
+size 1153640
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_2.uasset
new file mode 100644
index 00000000..358c00c6
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c9e8b24bbea312b99593f1bd22752cb68be040ea1bed5ab11031aa72d6543ac
+size 801537
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_3.uasset
new file mode 100644
index 00000000..17c93196
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:82a772348c6eea5b887c3722a13f853f315008aaf600c3442e81973619571e43
+size 1344910
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_4.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_4.uasset
new file mode 100644
index 00000000..b6740542
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6cdc81f100150c6b3febb662bd4e2e976c72287837e370d54b36a17ba88cc5bd
+size 1153279
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_5.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_5.uasset
new file mode 100644
index 00000000..fc0de234
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db70da31f3e4a794f8174578352cf02025d7c9357cfcc6e82ac6a804642c12a7
+size 734459
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_6.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_6.uasset
new file mode 100644
index 00000000..21ad0f54
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/CloseThunder_6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:edc2ade04c0fdbfca7b1e67bbff0b03e8868f7caf63405f7ac5a8e27bbfe4661
+size 1488508
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/Close_Thunder_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/Close_Thunder_Cue.uasset
new file mode 100644
index 00000000..932c7d4b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Close_Thunder/Close_Thunder_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2431861e09015f6b81c19cac827cebb203b1c24f05e14202a17dfd61a8a31335
+size 13817
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_1.uasset
new file mode 100644
index 00000000..3e1cd7c3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd0f2706fd1991d3bacef492bf636e34101c149ec65325fc2c0ba3af4d7612f1
+size 1726389
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_10.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_10.uasset
new file mode 100644
index 00000000..a605d19e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_10.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93f3cc63b84c93278384cd47df959e8219fd57959dfefb900b305196afe0bea8
+size 1682299
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_11.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_11.uasset
new file mode 100644
index 00000000..3b66078c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_11.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8014832dc5662a8461c97af416a452a4634be74d0e6a257518fd96269b02ef0
+size 1946700
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_2.uasset
new file mode 100644
index 00000000..c36094ac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9163c337200b50996def17d22bc12b1a667fea5f3912caa140f6b6955b46a3d3
+size 1064649
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_3.uasset
new file mode 100644
index 00000000..c5c37e15
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4eb4c799b293a6c451bbb3af024748bcbacc0625e29c9a46d9e7fb089e7e9d42
+size 1770360
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_4.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_4.uasset
new file mode 100644
index 00000000..21eb14c1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac8d7f7be76268733abbf92189a007f22fe5c1e3c2542dee2550ba3ba75d4ec6
+size 2387802
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_5.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_5.uasset
new file mode 100644
index 00000000..b99c197b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ece1b44eb2410db0ee287f27f05cc55cef8f9cb1b4fe20942b140beb13786ac5
+size 3004930
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_6.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_6.uasset
new file mode 100644
index 00000000..8a9e5962
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be96a61dbb4a0a827345f2315e3e7d186cb7265d0c141686dd1024afd963df11
+size 2475924
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_7.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_7.uasset
new file mode 100644
index 00000000..82106dcb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f30a11cf798750ad4b396dad4199923500336c607b49ac4dc503fb6989db282
+size 2740741
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_8.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_8.uasset
new file mode 100644
index 00000000..850bec13
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:881aa284ac06000647d923cb5efd494cddf81cbdec9ef145a339c154248c7245
+size 2210982
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_9.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_9.uasset
new file mode 100644
index 00000000..f9d431e4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02cfa7703abca3cf8eff181f395f7706c936a10667087aecf9cc0ecc2230d669
+size 2123727
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_Cue.uasset
new file mode 100644
index 00000000..7988d8da
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Distant_Thunder/DistantThunder_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3daac4f533b0a6baab56d30e6b1c15474d606c530074a6268b8877a12d5d99bb
+size 26840
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_1.uasset
new file mode 100644
index 00000000..3362770a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c17bc0500f18ec103069c38c27283cfde6adcb94917a5cb1e3e3b2908f987fd0
+size 50579
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_2.uasset
new file mode 100644
index 00000000..a67e985b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1dd631298d9e6a367531ab1886eb3b48b922d0800e6595c8c0d4be94511578f4
+size 37413
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_3.uasset
new file mode 100644
index 00000000..17d9f49f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dfdacb121efb6597718446f0789a62e6a4efd3136ea35471facb81799c1dbd18
+size 33602
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_4.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_4.uasset
new file mode 100644
index 00000000..0e094a87
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf421bf4eaa3aa4463480c45c5869bf01137fee6a9d96f9f27afb4cafda63cb7
+size 36490
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_5.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_5.uasset
new file mode 100644
index 00000000..de21ab7b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3f84735697bec01e555a3a41d05c83f7cacabae2f8074625c60988789b345e6
+size 49669
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_6.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_6.uasset
new file mode 100644
index 00000000..75bee8bb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:70f8d7a0670b9993031600005b26ec77e16370c43107fae7c664824d6e6b6b27
+size 39353
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_Compress_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_Compress_Cue.uasset
new file mode 100644
index 00000000..07a42196
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Dust/Dust_Compress_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dc4ad63481da34a1a225c977a03327f27c68f6eb26b91f3e9df88fa077b7c8f2
+size 13201
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_01.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_01.uasset
new file mode 100644
index 00000000..b713cfff
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:16687b11ad783cf8e0001c30558e21372305141e89d66e627acbd25e03a065f8
+size 66601
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_02.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_02.uasset
new file mode 100644
index 00000000..cdeccf73
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e1bb386395a7332aad0ac5bb8efefb97e4ff53e955a7eab9ad3272ce7026775f
+size 115324
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_03.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_03.uasset
new file mode 100644
index 00000000..cd77bfce
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_03.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b13f108693eee76bac509ca279a10d3e3f5bdddc9773051fe4c650fcb635163
+size 126159
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_04.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_04.uasset
new file mode 100644
index 00000000..638d92c0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_04.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:220e5a31a5b8d7fa4b595e0c1bd6bfdad23005c1a440227ed5f24135bf7b5dbe
+size 115320
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_Splash.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_Splash.uasset
new file mode 100644
index 00000000..8fa96904
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Puddle_Splash.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:390b4c42beb6ccaba968bfd069fbbcf0749dc21c9ad47ab598f7f006f607c73f
+size 11138
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Water_Movement.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Water_Movement.uasset
new file mode 100644
index 00000000..f2b9f82a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Water_Movement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8475368263f52b6d6384b221e4a5e9edfa8ffdc050ec8d305e7cd892f0b6db7a
+size 535004
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Water_Movement_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Water_Movement_Cue.uasset
new file mode 100644
index 00000000..652bcadb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Puddles/Water_Movement_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e0512e4af74d6138057aed856d16ec907aed6f326fd581f813b417831b8956d
+size 6376
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_1.uasset
new file mode 100644
index 00000000..ad394fe2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b6347b344e5dc3558241e20cc48589f174e9930d817fe5acd492adbb7c625250
+size 1416844
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_2.uasset
new file mode 100644
index 00000000..7fefba70
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4257827ce213498f9d17a8d8ffd1277dfad1a5d277e7ad94bf060f0c3d30e26
+size 1417017
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_3.uasset
new file mode 100644
index 00000000..5516543b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b4af901faccf15389cafaf13209eb791c445e73da9eb24922a9f8a2fc325ad7
+size 1416817
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_4.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_4.uasset
new file mode 100644
index 00000000..29a76ae7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/LightRain_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:257b71524120753fe52168b0be56f995b90cb5fc827ca84a0a63d0951242deca
+size 1416991
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_1.uasset
new file mode 100644
index 00000000..ef61b2dc
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:480a907c58eed6298e6315e079b31dbcabe9d74608791bb62cf1c18cc239864a
+size 1417004
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_2.uasset
new file mode 100644
index 00000000..eb72ebd0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a4ba2813538aa33fee7a3df253f22a89f82be7eb405fa150b548dd7719c3d85c
+size 1417059
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_3.uasset
new file mode 100644
index 00000000..bff325d2
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58b22b644421014ac9d85c579bafc13c0aaa5dbecc88d17ad58d19dc21da7964
+size 1416605
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_4.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_4.uasset
new file mode 100644
index 00000000..d0fb4133
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/MediumRain_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af74e377ee25552171691a6995c7132f858cdaf4c289bdef8bc8bfcbe02689c0
+size 1416562
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_1.uasset
new file mode 100644
index 00000000..0ca7f8e7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd21c0b09abe66f8bef42bbb7ece3f2899b60ec4f2432783e78492bf1708b8a9
+size 10074
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_2.uasset
new file mode 100644
index 00000000..4aac5a44
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c5897f5a3b5552ffe660f427b4fd669bb11742f4b172f70a3b47d845fa55973
+size 11135
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_3.uasset
new file mode 100644
index 00000000..9446faa9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/RainHit_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49ee892adda7d795e1a39ed892daa99c17480929286d15fe35f74f38ad6573c4
+size 11000
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/Rain_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/Rain_Cue.uasset
new file mode 100644
index 00000000..c5be74c4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Rain/Rain_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c047a3b34b2d44f2ad00421a373ead4e77c1c0909f1435aa7475847876b88b4
+size 29830
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_1.uasset
new file mode 100644
index 00000000..9a816376
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:512334d5df10a4f5842937b8efeb5a250fc7b01b0510791f91c2a396f21e0caa
+size 48801
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_2.uasset
new file mode 100644
index 00000000..236439e4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8a8ee3b9ba56d422086af5b11be9053d233e841146602ec80103aae04b4daca
+size 42657
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_3.uasset
new file mode 100644
index 00000000..d20990e5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac910295509404c1baa48dfc0fa38711e0856f8296f3f40b5206469ec633c447
+size 38015
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_4.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_4.uasset
new file mode 100644
index 00000000..f07be120
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df65d818a41898ea2ce0ce49be2f25366fed8dcf8ae1c8b5f417ef0b0e3c935c
+size 46611
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_5.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_5.uasset
new file mode 100644
index 00000000..98236351
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b9f828db74cb5fc41929d06f0cbc600d9c59ea06b4811388bc533556787360a0
+size 42677
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_6.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_6.uasset
new file mode 100644
index 00000000..3f1b3b51
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b1cb860d520253f42304c3f9ae20fbaa89efdcfa7790bb168b6a471b176f2a8
+size 59668
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_Cue.uasset
new file mode 100644
index 00000000..c2992518
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Compress_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:84fd14700fa821466ea5d8adc7e0acb9f4ee1e1f949c583799bb91c438884479
+size 13441
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Movement.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Movement.uasset
new file mode 100644
index 00000000..08ed9356
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Movement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f64cb5dcc4695bdcc455f31e08ba395f6c35a86808786b0c7f28dc2e256e3838
+size 656313
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Movement_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Movement_Cue.uasset
new file mode 100644
index 00000000..630fdef0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Snow/Snow_Movement_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd436bb1a97e64d29296ccb3676da726fba76b53eb78ebc36331b6b751f2b9f7
+size 5989
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/UDS_Outdoor_Sound.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/UDS_Outdoor_Sound.uasset
new file mode 100644
index 00000000..ac3b10ad
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/UDS_Outdoor_Sound.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b88cb79afe1415fb3db8fe47884b3388ec95fcc157dd31659b8c8a1ee90686c1
+size 1469
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/UDS_Weather.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/UDS_Weather.uasset
new file mode 100644
index 00000000..d5211dce
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/UDS_Weather.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:372963345969c629ef1df2a82abe81dfeeed381f1df88ee802f1131887b381b1
+size 1445
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_1.uasset
new file mode 100644
index 00000000..5dd829f5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fda59f3b4213a2ca01b8f8632d25c2216f948071d42c6772731fdcd7ff71a34c
+size 535797
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_2.uasset
new file mode 100644
index 00000000..027a158b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fd4029cb0e6af568db588fd730597788e0560dd99fa9e0bd921ed54d725b474
+size 535837
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_3.uasset
new file mode 100644
index 00000000..8d15aad1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a38a3d5183695ca557f1b6a9f9fc91c1e27310ea1c76cb0a6f3de4eb77943fd1
+size 535814
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_4.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_4.uasset
new file mode 100644
index 00000000..e08da17a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/BrownianNoise_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f23dadc26194db86f7c443befca63533751b469773e7a853d219447791938599
+size 535927
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Cue.uasset
new file mode 100644
index 00000000..024a39f9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a39eb4433cba672977a74cf8d05b148c5b1ddfe9c470b9e1f32731f5e739327
+size 20122
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Whistling.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Whistling.uasset
new file mode 100644
index 00000000..f6b9d264
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Whistling.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f67e2d6bc156f263c397246a7f2448a8c398f3e519762e102837ed362006b9a7
+size 2864846
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Whistling_Cue.uasset b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Whistling_Cue.uasset
new file mode 100644
index 00000000..7b267e55
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Sound/Wind/Wind_Whistling_Cue.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:18bc11097955061be376193f57d5007af67708319bc5721ae494a4f41d8393de
+size 14026
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_128.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_128.uasset
new file mode 100644
index 00000000..f45dddf8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_128.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af1f587f5f7fda44543ee59bd018e54d9a7de2b9a6b08920c0fa7976e437906c
+size 6652757
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_128_Sheet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_128_Sheet.uasset
new file mode 100644
index 00000000..8a07abf8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_128_Sheet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:82c2e07b8c4edc07d95631b33a6ce02e9ed667a9d9bfea0f5bf4ba8d78759dbf
+size 4759854
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_64_Sheet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_64_Sheet.uasset
new file mode 100644
index 00000000..afe70ef0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3DCells_64_Sheet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75ce5d67f88bd0c2eb309471f173a2db1c4b9d43b3557b754c24f82caa40cf44
+size 680430
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_32.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_32.uasset
new file mode 100644
index 00000000..4c1bed6a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_32.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3d5ce22195a7f238e574166ad0e5be213cedcaede8033a67cb6859e6389e1b81
+size 199988
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_32_Sheet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_32_Sheet.uasset
new file mode 100644
index 00000000..8cbf7234
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_32_Sheet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:63418b9117f6ec383e44a6c7d8e6d7f3e3c484ef45db9edd61d80304c523a38c
+size 103166
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_64.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_64.uasset
new file mode 100644
index 00000000..70805a06
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/3D_Clouds/3D_Cells_64.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb1fa379d185caf7d4040598b58f9b32884abf2f5644a212ec081c8c24d3e1c4
+size 806583
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/Aurora_Clouds.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/Aurora_Clouds.uasset
new file mode 100644
index 00000000..6293c5c3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/Aurora_Clouds.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d49823b3c092e81baa4eececbece97b609d6b2889775a95094d85f11651ab24a
+size 1081718
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/clouds_diverse.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/clouds_diverse.uasset
new file mode 100644
index 00000000..88f46917
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/clouds_diverse.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:37aee99f55b5238ae54b1de254a2b4e51cb51fb9b1f5b8eb54c4724869f8b479
+size 4938694
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/clouds_voronoi_smooth.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/clouds_voronoi_smooth.uasset
new file mode 100644
index 00000000..df939449
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Clouds/clouds_voronoi_smooth.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c29e3f5178973b7ea5ce876301e38a7f3016c8f39d9e8c870559c1800c974c0b
+size 5360468
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Actor_Weather_State.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Actor_Weather_State.uasset
new file mode 100644
index 00000000..65f0bc9c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Actor_Weather_State.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fadfe15cf560856738c8f8b59ad49a63e797c5bd9e314c2918b2d5348997506
+size 16777
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/AmbientSound_TimeWeather.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/AmbientSound_TimeWeather.uasset
new file mode 100644
index 00000000..822ebcb4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/AmbientSound_TimeWeather.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a60a6578b3ededd0bd75460ea40fa518ebc3a6b41e69917976a0caf8bfab90c8
+size 18761
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/CloudPainter_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/CloudPainter_Icon.uasset
new file mode 100644
index 00000000..7aed2438
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/CloudPainter_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee24f802b09ca8456581fcac01ec2c8ed4156d0ec872abfcbf1cbaaf28a58f2f
+size 18386
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/ConfigManager_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/ConfigManager_Icon.uasset
new file mode 100644
index 00000000..7136737c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/ConfigManager_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07004ad1fd407bf70212c5942a346573fda7252239d2b01b34d6506d15ebc0ed
+size 15345
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/DLWE_Interact.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/DLWE_Interact.uasset
new file mode 100644
index 00000000..9e382795
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/DLWE_Interact.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc091d785cb9ae2df53fa60d8aff2d974acd0e283e139e4e32f39773e656362a
+size 17384
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Erase_CloudPaint_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Erase_CloudPaint_Icon.uasset
new file mode 100644
index 00000000..4336ecce
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Erase_CloudPaint_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f120eca14eacbe4807f89edc9cb23b2094a3c21f6b5aa57ec620086a8a66df6
+size 6415
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Fog_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Fog_Icon.uasset
new file mode 100644
index 00000000..066008ce
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Fog_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:38ef63baeadf8858a04053ca3affc46865169d589d62cd771e0ade0501816c2e
+size 6302
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Full_CloudPaint_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Full_CloudPaint_Icon.uasset
new file mode 100644
index 00000000..6bd9a10f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Full_CloudPaint_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9b2e347d83889656736dd84b3fcc86d0ee5641ab040dd0d971b1d716452dcbf
+size 5820
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Globe_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Globe_Icon.uasset
new file mode 100644
index 00000000..6aa372b4
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Globe_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f642b1128b5f7a02969afdf7ab44250ff240f43f6b3ea3bb19ad15364e39908
+size 5282
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Light_DayNight_Toggle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Light_DayNight_Toggle.uasset
new file mode 100644
index 00000000..1a99ac9f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Light_DayNight_Toggle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec37295edcf4d004d39b5ff018098649b2d1961a030e090f59cec13166729320
+size 19518
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Lock_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Lock_Icon.uasset
new file mode 100644
index 00000000..c15584fe
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Lock_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed58fd6fee4cc2611c10972901e353ee90e2f55d6b9ac754e2ca35f62dfe1d8f
+size 5129
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Med_CloudPaint_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Med_CloudPaint_Icon.uasset
new file mode 100644
index 00000000..4729c9bd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Med_CloudPaint_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9432ab7d836919ac334578f3cc15d4f741a5ab53a6ca7792b758b26de38fff9
+size 6581
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/MiniControls_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/MiniControls_Icon.uasset
new file mode 100644
index 00000000..970769b9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/MiniControls_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73e6665f91f631a6363f306a119dc7e199caa91108dd53ef6baa7e2a11f12431
+size 14815
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Moon_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Moon_Icon.uasset
new file mode 100644
index 00000000..4dbba01a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Moon_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bc955b5432a3a09fb7855d536e34405f83d8a3f6037a1d5748e610414a13daf
+size 15666
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/OcclusionVolume.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/OcclusionVolume.uasset
new file mode 100644
index 00000000..17cb6b63
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/OcclusionVolume.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:487948f47ce90ac24c2b8049da1b64b1e8c98c599ef28c331ba1f7bd3710fc8e
+size 14478
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Occlusion_Portal.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Occlusion_Portal.uasset
new file mode 100644
index 00000000..664100cf
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Occlusion_Portal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9d33da7635b516d25e6a9ac23f82d20aa6add4d81cce40c4ece4d88754957382
+size 20889
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Rain_Drip_Spline.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Rain_Drip_Spline.uasset
new file mode 100644
index 00000000..532473d3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Rain_Drip_Spline.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97de40ba13fb898ee8aa1e772f5d595863cff0fe6a4a0e83ce934c923a8e2be7
+size 15024
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Readme_icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Readme_icon.uasset
new file mode 100644
index 00000000..6a247e92
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Readme_icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ad7e975c9cde1d9de8969f349cc3afd38f380550a7e543c9dd80dbe8cd13623
+size 21126
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Star_Icon_Off.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Star_Icon_Off.uasset
new file mode 100644
index 00000000..450c1bd8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Star_Icon_Off.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:213a13b75641f051f27cfd33fb197b3b196f4308fdcdc6605366666fdc77e8c8
+size 5747
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Star_Icon_On.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Star_Icon_On.uasset
new file mode 100644
index 00000000..1a5e2360
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Star_Icon_On.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c598425a42109eac78be976ca9bfb1b9c9564d97b9cd1ec006f7cd68191e7b75
+size 6133
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/StaticCloudsAuthoringTool_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/StaticCloudsAuthoringTool_Icon.uasset
new file mode 100644
index 00000000..47d74d39
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/StaticCloudsAuthoringTool_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cde0dce659c0bf4b2d736c88211e9e20ab74b432f7809fd991a8ec8d57b08ff1
+size 16335
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Sun_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Sun_Icon.uasset
new file mode 100644
index 00000000..0c942f4b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Sun_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e2ac72aecfdf4423b9b2c7f94105d29e7f130fe7f296f746ce47f15f64118d6d
+size 19247
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDS_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDS_Icon.uasset
new file mode 100644
index 00000000..b00f29df
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDS_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05eea24eb97fb67b4369b75fbf80fc479842e787316c8f462c843590d26948c2
+size 29890
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDS_Logo.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDS_Logo.uasset
new file mode 100644
index 00000000..4fac7b3b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDS_Logo.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73c106741e156835bc9837a6506d35c378fa7ec803b4e9c4b8f713bb0ef965c0
+size 38339
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDW_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDW_Icon.uasset
new file mode 100644
index 00000000..18d63541
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/UDW_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc490936715b084f5bd758845d98111d558e187291e66389b80c0adcaa6469ea
+size 33699
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Blizzard.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Blizzard.uasset
new file mode 100644
index 00000000..4f494734
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Blizzard.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db9137b89f2257169ed99f9514ae86b20a43143d7a74063ae101fff90f5a248f
+size 15588
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Clear_Skies.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Clear_Skies.uasset
new file mode 100644
index 00000000..38c52a76
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Clear_Skies.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7cdf3f33d891f2152ef55623ca2e2aec0656f4ed80173eea5e7c9c576af469b7
+size 14904
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Cloudy.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Cloudy.uasset
new file mode 100644
index 00000000..7bc25e74
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Cloudy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04eef1d41ba82ffdf63a4adfc9d2ed2ba3ab1a1de17c6f039a0c693adfd43075
+size 14345
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Dust.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Dust.uasset
new file mode 100644
index 00000000..17e2d355
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Dust.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:304a5523690738b729f9977c60dd385e68524f650cac2b8806e3c164a3bd1c74
+size 19271
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/DustStorm.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/DustStorm.uasset
new file mode 100644
index 00000000..71ef3911
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/DustStorm.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f06f0042423c09db2c7588986eb1e66760b38793f26758c111e0413ed76df606
+size 18647
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Foggy.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Foggy.uasset
new file mode 100644
index 00000000..b4088702
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Foggy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:292fa277e4e5123a8bbf57de35a6b4a0b761bb9e6be4f4cf51b7db925fd70b65
+size 12102
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/LightRain.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/LightRain.uasset
new file mode 100644
index 00000000..fb5ff4a6
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/LightRain.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9a346b09a379aa5d8a04d79e75d5d569a8b5a79a688cbe10a064e48114bde39b
+size 14886
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Light_Snow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Light_Snow.uasset
new file mode 100644
index 00000000..47ecabd0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Light_Snow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4838c20a5a9a3fd0d5d557a9bcf2127bf0c17292ca4d9d11279098ef232b4de4
+size 15929
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Overcast.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Overcast.uasset
new file mode 100644
index 00000000..305ce5c7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Overcast.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9bd6492552e057760e3610fb001dd730d1c9105c2ff333ba5c8f7b8925fc847b
+size 11221
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/PartlyCloudy.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/PartlyCloudy.uasset
new file mode 100644
index 00000000..5cd1a847
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/PartlyCloudy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be7a6c3831ee4c600d017aac7cfba0f4ff2fa5febb2df18f907c7cd0847c64be
+size 14768
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Rain.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Rain.uasset
new file mode 100644
index 00000000..5e0f9457
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Rain.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:491f8043fa3766afcf37a827a137c9db2710cf3a756e9305c3b515382b1ec772
+size 13323
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Snow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Snow.uasset
new file mode 100644
index 00000000..0b90b685
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Snow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:83cf482794325da9e67f977f7ec3fcaaa624567f15af7e5f95e90d8ed7e8a711
+size 15436
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Thunderstorms.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Thunderstorms.uasset
new file mode 100644
index 00000000..8c42ff63
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Thunderstorms.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c1717c39b14d9e71a59c37864c263c17d4eb1d3dda3999260172e3fd5f056dd
+size 13504
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Weather_Icon_BG.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Weather_Icon_BG.uasset
new file mode 100644
index 00000000..e171cd81
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather/Weather_Icon_BG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d38a5ef639030e71145f4fb04fee7128f265473300060a2b16add9549fda9e0
+size 9866
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Mask_Brush.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Mask_Brush.uasset
new file mode 100644
index 00000000..c8efcab6
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Mask_Brush.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34fe4ca20ae69c071e165b36ecc070f70cae3a3d2817025964018ee9bb55798c
+size 19340
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Mask_Projection_Box.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Mask_Projection_Box.uasset
new file mode 100644
index 00000000..77bab2fb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Mask_Projection_Box.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dfeed4aa5fe2f12439c92c22494f9a2f0327a2da81a2271891021597471cf5bb
+size 18023
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Override_Volume.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Override_Volume.uasset
new file mode 100644
index 00000000..9789f4a5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Weather_Override_Volume.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0562c718c0074273240c5bfb4cdafaae97bcd53156729e47e78d2993eba41db4
+size 19818
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Wind_Physics_Force.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Wind_Physics_Force.uasset
new file mode 100644
index 00000000..c513fcf3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Wind_Physics_Force.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eca80a4969433c33c5354b75e69ce7fb9728eac6943a53e0804dba2263d4d335
+size 13384
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Zero_CloudPaint_Icon.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Zero_CloudPaint_Icon.uasset
new file mode 100644
index 00000000..f9e66ecf
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Icons/Zero_CloudPaint_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7593da15f65023e443fa46ec702fb8d685369f1aa61c6c999c405802cb5261ec
+size 6669
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Anamorphic_Flare.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Anamorphic_Flare.uasset
new file mode 100644
index 00000000..f1e13d42
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Anamorphic_Flare.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ea454e4b80fb713a517df4d6d0d2b864240c357b0f55481e7888227869491de
+size 163763
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Anamorphic_Streak.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Anamorphic_Streak.uasset
new file mode 100644
index 00000000..f046e18b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Anamorphic_Streak.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36421c25a1580ef73587668115c703d4dd16776b3c2eccb88e8c09bdbbfdfe3f
+size 27478
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Circle_Bokeh.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Circle_Bokeh.uasset
new file mode 100644
index 00000000..f4274723
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Circle_Bokeh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a4693e4b913c69b72ef1c578c5ef80ea52b7add33ccc1b33829dff539fcd5706
+size 43407
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Flare_Line.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Flare_Line.uasset
new file mode 100644
index 00000000..caf60015
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Flare_Line.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c51e7c9ac2c3dca38cfa5c96bae4672d33a0472233940b7e2b17a4d2e41500c9
+size 10337
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Prime_Flare.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Prime_Flare.uasset
new file mode 100644
index 00000000..b14046de
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Prime_Flare.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b24cc545a5e69b44f0c7ced1fcd170cb421fcbec25e9335ccf0297242eba56c
+size 131193
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Rainbow_Ring.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Rainbow_Ring.uasset
new file mode 100644
index 00000000..82f62593
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Rainbow_Ring.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:058aba186fbfe0ebb68a2f0dcfc92e2be51acdd24c9389ebbd713ded34ecd403
+size 149050
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Rough_Abberated_Bokeh.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Rough_Abberated_Bokeh.uasset
new file mode 100644
index 00000000..f0af8056
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Rough_Abberated_Bokeh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2cf6eff6152ab014a3773e426ad7f3eee64472b3752315dcce99696d0ff77c34
+size 47768
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Soft_Abberation.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Soft_Abberation.uasset
new file mode 100644
index 00000000..32bd812c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Soft_Abberation.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5878629f6ba52775f6e4273853d6537eb2444ad1edc10633bdd1d62aa6fd3eaa
+size 131368
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Star_Flare.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Star_Flare.uasset
new file mode 100644
index 00000000..2368f2ef
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/LensFlares/Star_Flare.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32351f90763ca34c5574fdf9de0b00f2606a86723b19ce288de2226452310b8e
+size 356904
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/AtmosphericScattering_LUT.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/AtmosphericScattering_LUT.uasset
new file mode 100644
index 00000000..c05f13f9
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/AtmosphericScattering_LUT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04ab076d383e39f6ffbdab1577ac77842fc1ba6e637c8926e95b39f7328e23f8
+size 33272
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Caustic_Pattern.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Caustic_Pattern.uasset
new file mode 100644
index 00000000..eaf405e3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Caustic_Pattern.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00d6571f1cac42750cbbe58795f48c9a1841df70238b6079b89398f63554c669
+size 416561
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Cloud_Wisps.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Cloud_Wisps.uasset
new file mode 100644
index 00000000..35371274
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Cloud_Wisps.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59b71554b9e523368464775a0987895b0e0e565bb9f37ecc094fcb1bb04163a5
+size 1485540
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/FlatCubemap.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/FlatCubemap.uasset
new file mode 100644
index 00000000..b7e4ba81
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/FlatCubemap.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:29fbeb8c15a12ab2cf34803e63fe30fb192fac3526deb5eb25384fe6d31b401b
+size 69582
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/LightRay_Card.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/LightRay_Card.uasset
new file mode 100644
index 00000000..51806bdd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/LightRay_Card.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:25a56b4d2b8bf450b57c5d84cbb48f9b99cb002efe4efdc88ceb027a04c1d015
+size 6432
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Moon_Masks.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Moon_Masks.uasset
new file mode 100644
index 00000000..1a1fcb82
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Moon_Masks.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf84db0f7d3411d7cc6ed864d4575cbbeb52016ce4cb1889b77a5a280ec9dca0
+size 1600130
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Real_Stars.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Real_Stars.uasset
new file mode 100644
index 00000000..0a912cf8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Real_Stars.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6693062897d19629e6f4dcd3af7a75c0f72ffc7cca4fe289667ba67fd08dfdb5
+size 99606617
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Stars_Noise.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Stars_Noise.uasset
new file mode 100644
index 00000000..2d5d5149
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Stars_Noise.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c0fdf209ce7eb35afddf364f3da2a2e89795b2133ede2ef7dc94fdfcf07920e
+size 45441
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Tiling_Stars.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Tiling_Stars.uasset
new file mode 100644
index 00000000..39dcf2ac
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Sky/Tiling_Stars.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1e513ef0328e84ad26b1cbe3dd94fa0ae8ff8afdfd176f114d561a8ed2dca152
+size 5841044
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Asteroid_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Asteroid_Color.uasset
new file mode 100644
index 00000000..747feb02
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Asteroid_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:000d472397840ae8bf9a2807ef3cbf6947f57976aeeada351439f832067eb2d1
+size 388209
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Asteroid_Normal.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Asteroid_Normal.uasset
new file mode 100644
index 00000000..84e74b27
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Asteroid_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec891de86972fecc7cbce985fa0a51f2b1136b4a4e50ac5fe70e20c2e9477fc8
+size 483368
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Deform_Noise.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Deform_Noise.uasset
new file mode 100644
index 00000000..186d2ec0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Deform_Noise.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6b90416106490a83901cb1526b857ca85fcbfba3f0e992276d031a25e070693f
+size 11719
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_CityLights.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_CityLights.uasset
new file mode 100644
index 00000000..0dd858cf
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_CityLights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d1b80719c40622321eb2b578df4756c7959e458e5479c82dc1aab8f1ec1e126
+size 99984
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_Color.uasset
new file mode 100644
index 00000000..5eac6413
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73056b6e9c4acc2cb39dd6d2f8e0243385a6368e920cee6024c4cb7e22a722bf
+size 1693626
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_Normal.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_Normal.uasset
new file mode 100644
index 00000000..21a6e306
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Earth_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:27dee6d34a583e2478350cbf3b91b779e8d65c454eb5e59f00cc93a665b699fc
+size 1706841
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Gas_Giant_Color_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Gas_Giant_Color_1.uasset
new file mode 100644
index 00000000..ab98eff0
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Gas_Giant_Color_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5687853d5bebc153803a378799979448bcd518131d3a0244a9f5b4f3fbdad90e
+size 1197010
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Gas_Giant_Color_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Gas_Giant_Color_2.uasset
new file mode 100644
index 00000000..267c2813
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Gas_Giant_Color_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09843926180242712d2d51696de3beae7f652ae9502481fc9031f5286d88be1f
+size 1150812
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Rocky_Planet_Color.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Rocky_Planet_Color.uasset
new file mode 100644
index 00000000..4073f59e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Rocky_Planet_Color.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d4f44ce01c3a63b29298b445a5033643c78b68647631de617ea9c4a349ac751
+size 1356555
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Rocky_Planet_Normal.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Rocky_Planet_Normal.uasset
new file mode 100644
index 00000000..33631d45
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Planets_Moons/Rocky_Planet_Normal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2ce9e9175ee3e0ff2dc1262886c9885946c8d93e010869fad4d4f072ccece49b
+size 1966403
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_1.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_1.uasset
new file mode 100644
index 00000000..7baffdd1
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:15faf7a076ca0d9237d2232f548725941b5abf5e556512812cafe97197767ef2
+size 5234
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_2.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_2.uasset
new file mode 100644
index 00000000..6bf3327b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42c543bbe6f18902ac47ad62a5426b51bc7342e99831e1711dd65654ffc239e5
+size 5344
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_3.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_3.uasset
new file mode 100644
index 00000000..39eb69fe
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Space/Rings/Planetary_Ring_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af30fb4d08037f8b6d0eb31e42384b18c88a2132e40a15f49ccab574d9ec1f01
+size 4000
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_A.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_A.uasset
new file mode 100644
index 00000000..909ccc73
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_A.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5d12292eb14660f63c83604fc90c203d263a8d51086bec65ca949ce49fca4a69
+size 26035065
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_B.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_B.uasset
new file mode 100644
index 00000000..bc183e26
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_B.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bcdf3e762be67a93f49fe2715078d396069bd10005ac64be8a4e7f6896aab12a
+size 23013586
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_C.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_C.uasset
new file mode 100644
index 00000000..62dfeb77
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/StaticClouds/StaticClouds_C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9cbd1f92f29b507631626967d913b9c546d8d748bf03ea3846dcefcd5e0a8868
+size 23979531
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Tools/Static_Clouds_Authoring_Target.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Tools/Static_Clouds_Authoring_Target.uasset
new file mode 100644
index 00000000..3df0290e
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Tools/Static_Clouds_Authoring_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c7b90455c6166d6ff3aefb7cafc4133bbb81adaa3ccbbd7d2dad449ac9863cf
+size 4307
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Volumetric_Clouds/Cloud_Profile.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Volumetric_Clouds/Cloud_Profile.uasset
new file mode 100644
index 00000000..09bacfaa
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Volumetric_Clouds/Cloud_Profile.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f36817aa3c4a09413724dacf9ac665dc1c466ba4bc41643cbc36cbe2cc260ac1
+size 22513
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_MaskTarget.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_MaskTarget.uasset
new file mode 100644
index 00000000..f240c757
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_MaskTarget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:172d213097295be391c3f250d440dfb3e1591ca21792c4521cdbb2ac79d9d446
+size 4946
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_Noise.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_Noise.uasset
new file mode 100644
index 00000000..943a6cf8
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_Noise.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:af82dd702d053bcc5549d6abfcffe3ba3147b11ccdfedf7ddaef4eb143de0d62
+size 4888145
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_NormalBrush.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_NormalBrush.uasset
new file mode 100644
index 00000000..e216b50c
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/DLWE_NormalBrush.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:516700683cc0392b424078781a163b198659e9feeede8db196e172a0211c415d
+size 9360
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Debris_Twigs_and_Leaves.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Debris_Twigs_and_Leaves.uasset
new file mode 100644
index 00000000..4fad3fa5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Debris_Twigs_and_Leaves.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:638c7ef13005b51dacaeb7f764775ca71dc9e15cec8d704a8b152789aa93a236
+size 181882
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Dripping_Pattern_Masks.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Dripping_Pattern_Masks.uasset
new file mode 100644
index 00000000..51966652
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Dripping_Pattern_Masks.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c59c6c44690d6c2d458efc875142344c4506af987cb061347e52cec00bcee05
+size 1621411
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Drips_Vertical_Mask.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Drips_Vertical_Mask.uasset
new file mode 100644
index 00000000..6843b194
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Drips_Vertical_Mask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cfb447aadf4e96133bc94dfb22f1f38f50b4f778a312882cf320e3569245e19b
+size 136480
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Dust_Alpha.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Dust_Alpha.uasset
new file mode 100644
index 00000000..db0f4203
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Dust_Alpha.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:247d09ce23e3449f7eb6f910db193b4f62edecbfa84c5d3d036e29bf640d0d55
+size 419307
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Edge_Fade.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Edge_Fade.uasset
new file mode 100644
index 00000000..97f10bfe
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Edge_Fade.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81ff3ea06989ac44c437029bdd809d81decf7d4aebc78017b2e90ec0563fc235
+size 5315
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Bolt.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Bolt.uasset
new file mode 100644
index 00000000..80776a75
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Bolt.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dede27d40da3096dfdbbc0de3a3d5c153a983a4dc2c0e56a81040bd44fe6c3b4
+size 9170
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Branches.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Branches.uasset
new file mode 100644
index 00000000..7fa6f62f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Branches.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0711c1a010f48dc3401f100e2e30b2c981ad3cd9b5f7f98ae7e3e5e8f23877e9
+size 17429
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Flare_Sheet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Flare_Sheet.uasset
new file mode 100644
index 00000000..7da0b495
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Lightning_Flare_Sheet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8df51754e6d04f4600a2c93e231178688e2ccff1ee9fcc4ac955d7555c78bd2
+size 390702
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Circle.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Circle.uasset
new file mode 100644
index 00000000..462e4ac5
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Circle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3b110f9d8fceffb620fc04225afbde933486074d3b2faa233841142dd79cc20
+size 23982
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Falloff.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Falloff.uasset
new file mode 100644
index 00000000..b2f18f58
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Falloff.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9dcc8094535d78ef3a9df66f433f5f632d1df1bcf1a652339b44f9067bab5c07
+size 26578
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Pyramid.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Pyramid.uasset
new file mode 100644
index 00000000..66dcec3a
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Pyramid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:071f21a58505fe9a5fa679fd333bffc1ef4b45084647aef040e7e520bbac1829
+size 78138
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Radial.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Radial.uasset
new file mode 100644
index 00000000..0a15d155
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Radial.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4fbf5fc10c8b2ab34b3069eba449c058c84827b9e733e0846f542bea5e2b956
+size 25065
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Square.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Square.uasset
new file mode 100644
index 00000000..5e38bf13
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Mask_Brushes/Brush_Square.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3dadc711fe1e1385b247306fc28b937b8d567f692007f1638bdc883800465d8a
+size 19771
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/ParticleClouds.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/ParticleClouds.uasset
new file mode 100644
index 00000000..5e3190dd
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/ParticleClouds.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bcdc60ed77975e996f26478d94c5543e630d378404532368b4fe8434a5599e80
+size 238123
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/RainSnow_Sheet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/RainSnow_Sheet.uasset
new file mode 100644
index 00000000..f45db857
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/RainSnow_Sheet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31c2b68fa310784b07e42b7061882afdc509fc49c866428f548f05752bdddb3d
+size 21913
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Rainbow_gradient.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Rainbow_gradient.uasset
new file mode 100644
index 00000000..d44c3d6b
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Rainbow_gradient.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a7a0789e16226815a044a46cbd3b0bcba22a11801ed9e1c079aedb4e5424955a
+size 4101
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Ripple_Sheet.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Ripple_Sheet.uasset
new file mode 100644
index 00000000..7366ab69
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Ripple_Sheet.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb54dfcb401892fd69facf5886b20b3a2f914450003ea52f8d51145071811e8b
+size 2220944
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Rough_Snow.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Rough_Snow.uasset
new file mode 100644
index 00000000..28254262
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Rough_Snow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5953080a8f860b0dd358105eae8be8d1acaaa9d14db47a3f556f2e763139186
+size 10280427
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Snow_masks.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Snow_masks.uasset
new file mode 100644
index 00000000..29b5ae1f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Snow_masks.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b40861bf77cc84eeac5f89b26d85658ee750ff5d1d5b39d15a7fa9d7e68fa84c
+size 3488954
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Splash_Animation.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Splash_Animation.uasset
new file mode 100644
index 00000000..e75ab7e7
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Splash_Animation.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1eda67c252d5651dc5db0dcff1bf6ae5d22d8f8e346e01e1189b3051804ed77a
+size 75748
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/WOV_Material_State_Target.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/WOV_Material_State_Target.uasset
new file mode 100644
index 00000000..7cb9019f
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/WOV_Material_State_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f12f03b38a3478d75532ee0fe964e6ac2ec7a01d03a77632bb810a3b590d74cd
+size 4861
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/WaterDroplets_Small.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/WaterDroplets_Small.uasset
new file mode 100644
index 00000000..6d46ef54
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/WaterDroplets_Small.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7bc37d6fc96b7d8d8b140fbc4230b94f0424eb0373820f4c026db9c3c4974c46
+size 2902733
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Weather_Mask_Brush_Target.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Weather_Mask_Brush_Target.uasset
new file mode 100644
index 00000000..a6a2fcb3
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Weather_Mask_Brush_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4000edd21647c33dd765c1954a8cf531304181f313f0788d3d4d29a588decbbc
+size 4707
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Wind_Movement.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Wind_Movement.uasset
new file mode 100644
index 00000000..68d489cb
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Weather/Wind_Movement.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0b1f0cb5f6f64be5e144ce9788fa6ee0eb134002ed009d1b967b67d5756187d
+size 60499
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Center.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Center.uasset
new file mode 100644
index 00000000..d2faf250
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Center.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac652eb398f21a3d74b08c2559e7400f451f7349814a67b188e7804a26c2a071
+size 4337
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Face.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Face.uasset
new file mode 100644
index 00000000..49cd3005
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Face.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1234b235fad574585a3dbd861b6381cfca9f0d2ce985a5b7258e6312a4096373
+size 22704
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Hand.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Hand.uasset
new file mode 100644
index 00000000..0e0b9796
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Clock_Hand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:476e323fdb65b999bf5a4d37ebe377e8a5b76aa581597f5de441b4d926da5e1f
+size 3915
diff --git a/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Earth_Map.uasset b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Earth_Map.uasset
new file mode 100644
index 00000000..ea7e17ee
--- /dev/null
+++ b/EndlessVendetta/Content/UltraDynamicSky/Textures/Widgets/Earth_Map.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:431df9d48bdb43e68a9a1449689da2ebd4fd1d4f78a9761ac1c352cd5ba15112
+size 26237
diff --git a/EndlessVendetta/EndlessVendetta.uproject b/EndlessVendetta/EndlessVendetta.uproject
index 340e263e..7e992166 100644
--- a/EndlessVendetta/EndlessVendetta.uproject
+++ b/EndlessVendetta/EndlessVendetta.uproject
@@ -23,6 +23,11 @@
"TargetAllowList": [
"Editor"
]
+ },
+ {
+ "Name": "VaultIt",
+ "Enabled": true,
+ "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/7d19b5622d6846edb9881e6c89bce05e"
}
]
}
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Ability/GA_Vault.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Ability/GA_Vault.uasset
new file mode 100644
index 00000000..876d9653
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Ability/GA_Vault.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3365fec27bac97a5b30cb1f54c2bcd75d701ff407883c0410b618fc07e228fb
+size 571723
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Ability/GE_Vault.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Ability/GE_Vault.uasset
new file mode 100644
index 00000000..7b645bc3
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Ability/GE_Vault.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e65b5843384888f1d62d95b116e15b91970465139fd066c4d594ab0a34736c8f
+size 5929
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Ability/GE_VaultRemoval.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Ability/GE_VaultRemoval.uasset
new file mode 100644
index 00000000..2711892b
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Ability/GE_VaultRemoval.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8cc7a96ea09e07571c3e7f48b84beba3a93fbbee068cb6110e8dd0ab09499829
+size 5502
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AB_VaultIt_Dog.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AB_VaultIt_Dog.uasset
new file mode 100644
index 00000000..454d32d8
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AB_VaultIt_Dog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfee5421a7475d150ecfe69801a87c855fc58b412a596619d97994034c253f5c
+size 197759
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonIdle.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonIdle.uasset
new file mode 100644
index 00000000..0699f4f4
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonIdle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cbf8213f85f2aa9b738cfe4fb76c6bb2fde293d10ddebaf53d7c7b57bc0f49c4
+size 173630
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonJump_Loop.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonJump_Loop.uasset
new file mode 100644
index 00000000..387ac1ef
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonJump_Loop.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2ac97ba2b242695d5565bcef1295769a480348561c5f55c278d60181145c813
+size 127238
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonJump_Start.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonJump_Start.uasset
new file mode 100644
index 00000000..edc77c06
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonJump_Start.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a59630fda5c68ef95070a45a4376fdd27e9ff444c3b921fb711bb9e74374f220
+size 118833
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonRun.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonRun.uasset
new file mode 100644
index 00000000..a8170132
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonRun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2217b141d64c68acf8edf091d4d229097daed2c96a71f67f0bb4686ea7b44bd5
+size 120046
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonWalk.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonWalk.uasset
new file mode 100644
index 00000000..3f0aebf9
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPersonWalk.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59b5129d5c3a3e4c20fdef0d84adea861311cb4148f8aa9615bd0ba67bd705bd
+size 131851
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPerson_IdleRun_2D.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPerson_IdleRun_2D.uasset
new file mode 100644
index 00000000..53c3d593
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPerson_IdleRun_2D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b03c7cc251cafeb3baf14bd7cc8ee5cb12b837401d4f3be0e2b8d37c05498e65
+size 92612
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPerson_Jump.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPerson_Jump.uasset
new file mode 100644
index 00000000..bb93e25f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsFP/FirstPerson_Jump.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea0dd6f4ab4d2c631127b808b332c9cb384fade6a6dc5721a7d01a5c227b34ab
+size 111098
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonIdle.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonIdle.uasset
new file mode 100644
index 00000000..61c523a0
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonIdle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5760add9800ccbc64b9ce411a3c7049ad85a78ce78c8aae50bf3fd5993d2f1aa
+size 150254
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_End.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_End.uasset
new file mode 100644
index 00000000..8bb315b6
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_End.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:73f3f733f90747e0d1656368a167f36a2ceeca494e66a07b2faf7ffb4fe6a878
+size 116275
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_Loop.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_Loop.uasset
new file mode 100644
index 00000000..b8e08e60
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_Loop.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5abd97b9ba02925df90ca5eb9f4129e10d90c08d0dc0b0371ad80912e9dcc0cb
+size 123499
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_Start.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_Start.uasset
new file mode 100644
index 00000000..e994b971
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonJump_Start.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52b5a6f4d267367615811150634317780b33f350c0ada1f44daf468b95b14555
+size 118621
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonRun.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonRun.uasset
new file mode 100644
index 00000000..eab1b381
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonRun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f69c78a62c1d3b4e32968a50c5b3ed38dd042e96f106ede19c4604ba09e5f25
+size 120116
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonWalk.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonWalk.uasset
new file mode 100644
index 00000000..0163e95f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPersonWalk.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d1828d6405429dfbcee2e55aa0586f759b58200d974416f417c0c4d93248188
+size 130199
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPerson_IdleRun_2D.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPerson_IdleRun_2D.uasset
new file mode 100644
index 00000000..7ee3daa3
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPerson_IdleRun_2D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:462e30770035c02ead135f6e462a8eb84ce0dcbe5e7d93a18703f92b44b8c9d5
+size 100303
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPerson_Jump.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPerson_Jump.uasset
new file mode 100644
index 00000000..83e4ad89
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsTP/ThirdPerson_Jump.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba16e6f20abcf3f32afa3efe0182d35674607d4da6c2bab7543d93731a36ccfd
+size 116259
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_BothHands.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_BothHands.uasset
new file mode 100644
index 00000000..b9f94c68
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_BothHands.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b4592c3c9e9059a6ba5350a5e9fd44a4abe6eb60b9612e869a2f64a185008b3c
+size 163779
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_LeftHand.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_LeftHand.uasset
new file mode 100644
index 00000000..025ec91f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_LeftHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c1a0ca5e44c32789cdb40e0c7b8ea3f7d63d80d7ddf24d7926f77c4b8575a19c
+size 120398
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_RightHand.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_RightHand.uasset
new file mode 100644
index 00000000..6a8b6532
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/CR_Dog_RightHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ea7ac3d06b46dd33899627a9ae77ca047c1cb64a08ed36942912ef1cf187c18
+size 120418
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_100.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_100.uasset
new file mode 100644
index 00000000..4f98e181
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_100.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bc9bdd434e28077a9ec7c44e72fe3fc7d996f835c0797a65e756df05ccb7a2b
+size 119989
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_100_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_100_Montage.uasset
new file mode 100644
index 00000000..e49fd731
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_100_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fffc31873d32ea0302137f352954cbc35eca66d5152d049029110c5bd34454bd
+size 12817
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_150.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_150.uasset
new file mode 100644
index 00000000..5426f3c5
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_150.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1eb1ea0915e9d435c1a6372ac9f1ae857655c19cc5275231e66772d7d7fb051c
+size 125435
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_150_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_150_Montage.uasset
new file mode 100644
index 00000000..8aa15951
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_150_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff38b862295f10073ae5c8a947dc26a4b8e689c3cfe2999d6c05b4f04bf3e4ea
+size 14351
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_200.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_200.uasset
new file mode 100644
index 00000000..9d2760bd
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_200.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:13acd01b316308b1ca85566d7466be0b8f22e9777ccf2022ca9a428adb2df12d
+size 146899
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_200_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_200_Montage.uasset
new file mode 100644
index 00000000..d775dd5b
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_200_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52c4a59430916d63c67cb7727e5b981272d3f7b070b1c1a13284fd82859479f6
+size 17753
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_250.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_250.uasset
new file mode 100644
index 00000000..3f44c796
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_250.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd82a70de652e7b5dae841acfa45e59622ce88e5e57f2bc87401288e0b3260b9
+size 159537
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_250_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_250_Montage.uasset
new file mode 100644
index 00000000..bcad7388
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_250_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f7aa7f2d00ec7f4458c9548d1db970c7c5922ffb31c147cf85331c2d4fc8e217
+size 16443
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_45.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_45.uasset
new file mode 100644
index 00000000..66c6f1e2
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_45.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b35a2e57552d0561dfedc35733898eb156d546a783c5195aee1412248bf91d0d
+size 111009
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_45_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_45_Montage.uasset
new file mode 100644
index 00000000..8e3e67a8
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_45_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:313e80a6735e50aef38446dced1b16c3125981c2ea63ab7292f665bfdf6c7031
+size 12708
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_75.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_75.uasset
new file mode 100644
index 00000000..d256759a
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_75.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8442cf02321d4595f79412904e299b98dab500232c2f9fbc1bfeec3be7990384
+size 114347
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_75_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_75_Montage.uasset
new file mode 100644
index 00000000..a3c60e17
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultDog/VaultIt_Quadruped_75_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a94190b47408743868ddee4b67bf7239a90e497fed8c23dc0fa8ff514017d375
+size 12828
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_BothHands.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_BothHands.uasset
new file mode 100644
index 00000000..2e0d017f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_BothHands.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93360ea0ec2ecce56a41c80e1b327a94e20cb1db2f86a1f7cd3d92d846ac8b8b
+size 201066
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_LeftHand.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_LeftHand.uasset
new file mode 100644
index 00000000..782c7900
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_LeftHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ba216e1c090066029aea37b9c4599bfd365a1266d1dab0d672cf8861899c0ed
+size 146340
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_RIghtHand.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_RIghtHand.uasset
new file mode 100644
index 00000000..c06b26a2
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/CR_VaultIt_FP_RIghtHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf211a7647a5dd43b964fbf79e8e076ed0cea0b31478c287dfa52112b7bb0552
+size 146177
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_100.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_100.uasset
new file mode 100644
index 00000000..e4a896ba
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_100.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b03648c89e663308e13b943b201fc48327fb90a3b4f3be5566822da03dbafe7a
+size 123280
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_100_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_100_Montage.uasset
new file mode 100644
index 00000000..5e1bdcdb
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_100_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b2d2e98316c2278840c94fccce1e49947819a07af6c1fd464dd220985ef55faf
+size 92565
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_150.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_150.uasset
new file mode 100644
index 00000000..10f110d4
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_150.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fef0f709ea0912edbb94b8037426e15a3ad0eeffdabaf637d0fd17114153d405
+size 128636
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_150_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_150_Montage.uasset
new file mode 100644
index 00000000..90894e68
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_150_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:486ce47465908bcac3d69571c6b8fc35490fcf356d45c6856072677ea12f47ba
+size 96671
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_200.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_200.uasset
new file mode 100644
index 00000000..85e0cdf1
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_200.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f338175de4f5e3a14d56828c2a3bfc50579fbf084d4625a69cbfb848cb1d6fe
+size 143604
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_200_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_200_Montage.uasset
new file mode 100644
index 00000000..a00a3718
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_200_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58f7e8cc37c7c49c5b6691fee03b22b742c79b385224382800004628f57ec16a
+size 97800
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_250.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_250.uasset
new file mode 100644
index 00000000..4573411f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_250.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86c982492525d0dfddae90a90f86c14ae23149d0423e555738852a7189d5649c
+size 149396
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_250_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_250_Montage.uasset
new file mode 100644
index 00000000..a0a1ad3f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_250_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:89f2e0a7016feadd03d2ab9a14b7ee55f75abac40c52a97f4541f21590700265
+size 97292
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_45.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_45.uasset
new file mode 100644
index 00000000..8e4ef366
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_45.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bd2f3a7fe77b82e8613a1bd1a9a7ebee0b080fe6dc3769f685b49033408cf51e
+size 125725
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_45_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_45_Montage.uasset
new file mode 100644
index 00000000..f40615d0
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_45_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c557d75b458fddbedfb91c97f583c349ccca39fddf6b49cd808852f7f3f43ee6
+size 92983
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_75.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_75.uasset
new file mode 100644
index 00000000..83505139
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_75.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:469278aa08716615d5f28c47344bbdadbefb97745713e76bfa92b48995f00e28
+size 123421
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_75_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_75_Montage.uasset
new file mode 100644
index 00000000..fa1ec223
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultFP/VaultItFP_Height_75_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41b2a460d9a83c48dfa30947d73f27c65466a5639611c9392c94484a716ba40a
+size 92715
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_BothHands.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_BothHands.uasset
new file mode 100644
index 00000000..15ed50a2
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_BothHands.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d3abd4d022937d9aabd0f92a017ba7e954203f54e66e3b3bf304c6921b637ae
+size 197493
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_LeftHand.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_LeftHand.uasset
new file mode 100644
index 00000000..ad4437f9
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_LeftHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:706cdac812d0b877fe51727b9ead1f4d8765ed40f3063f0f647eb64a6b726aac
+size 147680
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_RightHand.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_RightHand.uasset
new file mode 100644
index 00000000..6490a55f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/CR_VaultIt_Mannequin_RightHand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40a303ee64ba92b51beaf043f8e58d22631bbf11eba590e7e7e91c4b93027fa1
+size 147624
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_100.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_100.uasset
new file mode 100644
index 00000000..8e863819
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_100.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efa708de593856f65cc289e17ce3b53a435e32d0927a52325b2a35dd956d11cb
+size 129231
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_100_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_100_Montage.uasset
new file mode 100644
index 00000000..eb8fa2a1
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_100_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5e470026e3df5063d01dc68c1625985dffe2743124fbb625fe8ccdc05a90512f
+size 12628
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_150.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_150.uasset
new file mode 100644
index 00000000..65a2ad7c
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_150.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8fbf7a0ba28e8e0f98668b7730f9656ee570d4c5afa71a5139c150d50309f7a9
+size 132415
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_150_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_150_Montage.uasset
new file mode 100644
index 00000000..7f84a851
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_150_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9baba6adfb5368702a7ba03f31584665e0009ae52cea0e13f1544db3363ec054
+size 14219
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_200.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_200.uasset
new file mode 100644
index 00000000..0424f688
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_200.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e4737f22e66f499d617278ea3e0d8420f0d690be609dc9f13cd489339746e6b
+size 150184
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_200_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_200_Montage.uasset
new file mode 100644
index 00000000..1732f438
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_200_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:572847486c52e99412555ab88673bfed289972f018e7388cefe2a137db7614b9
+size 15661
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_250.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_250.uasset
new file mode 100644
index 00000000..96bb125c
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_250.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b676d67efa01ad692475a73a2cfe604614b1beb0bceeb76dceda8e1a5dbdec74
+size 156017
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_250_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_250_Montage.uasset
new file mode 100644
index 00000000..3d08a6ed
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_250_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d058e5461fa16e1ebaee031a8fd05efb085a7c8ed525139132aaf8a83523135b
+size 16097
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_45.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_45.uasset
new file mode 100644
index 00000000..cc50b86b
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_45.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8ed22c65c174cca4ccdf5bbc821059cdca04ffa653a90d4cc8da0844cf9a291
+size 129523
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_45_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_45_Montage.uasset
new file mode 100644
index 00000000..f3345c83
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_45_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:48a1a24e7abff51c65fc309c6aeddd3b70bbfba8e55dc09963e5545c77c6bd82
+size 12584
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_75.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_75.uasset
new file mode 100644
index 00000000..f6be385e
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_75.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:410734eff136f29fcc690df4d7ff6eccdd4ca16a9386b3e5dd408e79dac540fb
+size 129713
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_75_Montage.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_75_Montage.uasset
new file mode 100644
index 00000000..bf8d2d47
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/AnimsVaultTP/VaultIt_Height_75_Montage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e9248f32c2351d717b25c0397d67e4f2e2fc36a8e15dbc38dea945f076c6576
+size 12578
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/FirstPerson_AnimBP.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/FirstPerson_AnimBP.uasset
new file mode 100644
index 00000000..b67d5b88
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/FirstPerson_AnimBP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:33ba7eb9dcdbb0b23d7d9e70b4ea40e03fe7973c0e46a70f672fc91a6e66ae71
+size 540695
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/FirstPerson_AnimCPP.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/FirstPerson_AnimCPP.uasset
new file mode 100644
index 00000000..5b2ef3fc
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/FirstPerson_AnimCPP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42aaef02d8242a8a2a734c133c791e3552f141b845308bf4aafd41276340f68b
+size 271884
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/ThirdPerson_AnimBP.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/ThirdPerson_AnimBP.uasset
new file mode 100644
index 00000000..c2754f9f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/ThirdPerson_AnimBP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71c9924f07084d25f69b32653bebdefe9acd187c74dbffce3f8e170489335622
+size 457152
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Anims/ThirdPerson_AnimCPP.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Anims/ThirdPerson_AnimCPP.uasset
new file mode 100644
index 00000000..05bea5c8
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Anims/ThirdPerson_AnimCPP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc9e70a7f359b4aaa21ecab8191006f8552783c4128a2efc4438ba75d40ce9ad
+size 265825
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_FirstPersonCharacterVaultIT.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_FirstPersonCharacterVaultIT.uasset
new file mode 100644
index 00000000..b73401e2
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_FirstPersonCharacterVaultIT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e7efa05f25b618c28daba0531d83db78f4f759a545553d421061d2dcd2a59110
+size 281495
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_HUD.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_HUD.uasset
new file mode 100644
index 00000000..4509ee7a
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_HUD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be753a21a923f1aae69fb17c48b6b5c0ee8e65c6e6eafa41af40036ffd3b83d7
+size 113018
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_HeightActor.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_HeightActor.uasset
new file mode 100644
index 00000000..15ffb7a2
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_HeightActor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d0e3583507c24aec1de39c1a1925aa00cfe7765fa8c1566f42c2514b771fbcb7
+size 175932
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_JumpNavLink.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_JumpNavLink.uasset
new file mode 100644
index 00000000..3d614ff4
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_JumpNavLink.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:35132292ac138757447718d19d3063584724c161b3f57213df2cfcc859c02ce1
+size 26571
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonCharacter.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonCharacter.uasset
new file mode 100644
index 00000000..348f9d4f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonCharacter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f97ad551dabb113d83556da5e522cebfe7dd1f32386707c0bf8d740cc81f9d4
+size 175392
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonCharacterAI.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonCharacterAI.uasset
new file mode 100644
index 00000000..a4f2f30e
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonCharacterAI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32678c087d0576020754e76005004785ddd8945859017bf2be619d99d8cf0179
+size 128415
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonDog.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonDog.uasset
new file mode 100644
index 00000000..65b7f854
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonDog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e55454ac8eadb71612ef6447c2e3bdd0c0de1764d5dd53bb8f8967b7ac7a8b8e
+size 173314
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonGameMode.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonGameMode.uasset
new file mode 100644
index 00000000..8c61ec4d
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Blueprints/BP_ThirdPersonGameMode.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:949b694f7056a04e2c177861e817c56ef62ec36037c13be9f7baa72779aa540b
+size 14549
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Dog/M_VaultIt_Dog.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Dog/M_VaultIt_Dog.uasset
new file mode 100644
index 00000000..fee39f6f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Dog/M_VaultIt_Dog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb5b513596ef83ccdca44445c2831b383985526fb3af88605789556224b68044
+size 102692
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Dog/PHAT_VaultIt_Dog.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Dog/PHAT_VaultIt_Dog.uasset
new file mode 100644
index 00000000..e8909c6c
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Dog/PHAT_VaultIt_Dog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e81b1c3ab219c3703b0bc3ecd3c5b76382cc5950db9a88308b018c9ddd1b9c26
+size 138916
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Dog/SKL_VaultIt_Dog.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Dog/SKL_VaultIt_Dog.uasset
new file mode 100644
index 00000000..bc532ab1
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Dog/SKL_VaultIt_Dog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d0278f0d91a5ec927cf3e06b63ead87e171585410d6e767943f75384bb5c26b
+size 12416
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Dog/SK_VaultIt_Dog.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Dog/SK_VaultIt_Dog.uasset
new file mode 100644
index 00000000..0b82302f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Dog/SK_VaultIt_Dog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0dea832d983dd78d5553260d47c0167a37ac901eaebcc316362d55cff6105b6d
+size 2142534
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Dog/SRIG_VaultIt_Dog.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Dog/SRIG_VaultIt_Dog.uasset
new file mode 100644
index 00000000..24f9cb96
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Dog/SRIG_VaultIt_Dog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8ebe6485c753bae212629edea433c8cb96d14f867f413e0a8c4e248e3c99c72
+size 38068
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Camera.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Camera.uasset
new file mode 100644
index 00000000..8cbb877e
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Camera.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f229274da306981e357a2bf8a9887dccc7d3e2527dbc5942508722c8c2da8d41
+size 1382
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Jump.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Jump.uasset
new file mode 100644
index 00000000..d5a40851
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Jump.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6894ba1e10af0dc3de3a588c2d2b2c1efc4f4c0471c4cc84a5b4954eab6ce4c0
+size 1372
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Look.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Look.uasset
new file mode 100644
index 00000000..a95f1209
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Look.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a22cd7133ffbaef7e02ae8d3e88b4f9862c717917dfb17b5fce3a3016250978
+size 1519
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Move.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Move.uasset
new file mode 100644
index 00000000..da256155
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Move.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6f366ded7ed98abe9513bea2b3464f5f3caecaf50d54738d240197eb53787ab5
+size 1519
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Vault.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Vault.uasset
new file mode 100644
index 00000000..506d629c
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Input/Actions/IA_VaultIt_Vault.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09489b70a62fe88e10361d75d9317e6184d7c31bc434684e896d56efc532c61e
+size 1377
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Input/IMC_VaultIt_Default.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Input/IMC_VaultIt_Default.uasset
new file mode 100644
index 00000000..2d58c9de
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Input/IMC_VaultIt_Default.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:420db2ed4f31e60bdff55b19b2849db37cb3d01e999ac3ed76267f03ce9fc670
+size 14109
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/M_Male_Body.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/M_Male_Body.uasset
new file mode 100644
index 00000000..9cf8a200
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/M_Male_Body.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0a29eb8912142c240671f6f2f094d6a1ba908f499b323399e9bf91737a00a8d
+size 156181
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/M_UE4Man_ChestLogo.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/M_UE4Man_ChestLogo.uasset
new file mode 100644
index 00000000..df71aaf9
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/M_UE4Man_ChestLogo.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32930931c798a8769d7c18bf393db753cf427bd39cf8b2ddc039c823478aeb1f
+size 109296
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset
new file mode 100644
index 00000000..235ded94
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2914cf46139832e1a84abd1df8c9cffd4dfdc416b83fbf5c0574ec83511b076f
+size 80549
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset
new file mode 100644
index 00000000..7a77388c
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:16288356505356b444a3c353b0d3fb1462e8a5344f5a65e6e1c51e8d999974a5
+size 76884
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset
new file mode 100644
index 00000000..8b048018
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:601bf39df015f229525a2467024cfa2739881632c2e8346b86213669f161a586
+size 78033
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset
new file mode 100644
index 00000000..f4f54818
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2c0ba6f906c1e0b9b7220d8f86949e0c5bf6d7803878435d862a8a77cc642ef9
+size 81229
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Aluminum01.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Aluminum01.uasset
new file mode 100644
index 00000000..14a1e879
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Aluminum01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:820d3fcd679e374b9ae6e3abb676bf025c4e2f1882cf1d3fe71f3fd38bc94873
+size 457650
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset
new file mode 100644
index 00000000..9781ef15
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b0a1bd1454208ded735a836db627e4b8d2366b7f4d4f7c82f1e540aed44a6f55
+size 406022
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset
new file mode 100644
index 00000000..e44bc716
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:040b44407473013b13e6e039843f79653a98e9cd7bc0af884763d4eab1373672
+size 502390
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset
new file mode 100644
index 00000000..f5cb8d23
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c72d724ef767a40988bb48a1df5eedf6a3ab3aeef50892b7206fdbad0bad7ac5
+size 362883
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SKL_VaultIt_Mannequin.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SKL_VaultIt_Mannequin.uasset
new file mode 100644
index 00000000..1129f9c6
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SKL_VaultIt_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75f175b596d5649e632f53ddc78a2e3b62d76ade6ec83d0992afdfc66015ee43
+size 22359
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_Mannequin_Arms.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_Mannequin_Arms.uasset
new file mode 100644
index 00000000..e881f3bf
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_Mannequin_Arms.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee8505cce94a1c23c2567bcf0e2bcd7b2b5ad7491aa22674885e1e2746770710
+size 2860869
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_Mannequin_Arms_Skeleton.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_Mannequin_Arms_Skeleton.uasset
new file mode 100644
index 00000000..51d4fc7a
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_Mannequin_Arms_Skeleton.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:240997f4df5d1a9be6bfcf22ff9fc55ae22ccc22d7b2b8db58b2fa6648cba5a3
+size 19102
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_VaultIt_Mannequin.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_VaultIt_Mannequin.uasset
new file mode 100644
index 00000000..54ee6304
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Mesh/SK_VaultIt_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:599b5a51b348857efe17f7a6bbf8a86737a42bd291000bc180bfaf8ab619cf3a
+size 5669675
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_Male_Mask.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_Male_Mask.uasset
new file mode 100644
index 00000000..e83ec6aa
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_Male_Mask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:513a67e81cac13e93285b0dc78484fe4ab4a9838c474d61a6255a06d89b304fe
+size 225135
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_Male_N.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_Male_N.uasset
new file mode 100644
index 00000000..842338ad
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_Male_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8b40fe7bad5b1eaaf729a822b520d9531c9510978425ee9ddf4765c6f3c9f7d4
+size 5532850
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_UE4Logo_Mask.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_UE4Logo_Mask.uasset
new file mode 100644
index 00000000..7f6e0b95
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_UE4Logo_Mask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a06cbd00cdd144538d2ba0494526b81fd9a0e5031c706a0f247e1c379b67082
+size 88009
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_UE4Logo_N.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_UE4Logo_N.uasset
new file mode 100644
index 00000000..49bda957
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Mannequin/Textures/T_UE4Logo_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:594c67060b515e918cd1fdb0ff3a0092eba2f48f04f291ca81ca9087b5716c3a
+size 147601
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/1M_Cube.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/1M_Cube.uasset
new file mode 100644
index 00000000..dc8fbbc5
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/1M_Cube.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c0edb0e5b9a191a4e084ffb8535630cc23bea7d0994cb26378775a385e0b52c0
+size 80039
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/1M_Cube_Chamfer.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/1M_Cube_Chamfer.uasset
new file mode 100644
index 00000000..4347d6a0
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/1M_Cube_Chamfer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5d42173b6b749cf9f393aeda28f4710d5673c80f7dd98e9ce96a5a48a042c4c
+size 89180
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Bump_StaticMesh.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Bump_StaticMesh.uasset
new file mode 100644
index 00000000..c933e496
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Bump_StaticMesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:698838b26dab98088f12dc6ed9c36912269e7f821fd495875974df02aaac39e4
+size 88317
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/CubeMaterial.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/CubeMaterial.uasset
new file mode 100644
index 00000000..db222bec
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/CubeMaterial.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1c70a288121c45f54f712e10490331a2a99817a290e6637d15668fb0fd392e6d
+size 87526
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/LeftArm_StaticMesh.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/LeftArm_StaticMesh.uasset
new file mode 100644
index 00000000..b4f29c90
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/LeftArm_StaticMesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:112c30e49e442438984bd4e7e64bab8df96b8474d986f1b24565a0acddda8883
+size 89373
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Linear_Stair_StaticMesh.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Linear_Stair_StaticMesh.uasset
new file mode 100644
index 00000000..1ad2e35e
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Linear_Stair_StaticMesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed8a0f64d137866a98398cf6b1004876060c0b9b36abc486e99ab3dc624bc3ad
+size 93103
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/RampMaterial.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/RampMaterial.uasset
new file mode 100644
index 00000000..9a4d8c07
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/RampMaterial.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:356fbc0831a229d2d3f37b0b9ad57d757818086fdd0fed5e9724b252174f8648
+size 83859
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Ramp_StaticMesh.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Ramp_StaticMesh.uasset
new file mode 100644
index 00000000..486f94a5
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/Ramp_StaticMesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:355f76083704fe028c8853e8e271cb8596367582dedec68ba21ede164dbf22a8
+size 88414
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/RightArm_StaticMesh.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/RightArm_StaticMesh.uasset
new file mode 100644
index 00000000..6d037919
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/RightArm_StaticMesh.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e504dd6086cab7a0321eba98db420ea797eb61111061a3f50bc3b21c84ab1c4
+size 88181
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/TemplateFloor.uasset b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/TemplateFloor.uasset
new file mode 100644
index 00000000..133cbeed
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/Meshes/TemplateFloor.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eff1e1fa4f2201cd3dac7d9688f6d3b79f280d05e5e590d8ba91301d9d85034b
+size 94488
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/Maps/ThirdPersonExampleMap.umap b/EndlessVendetta/Plugins/VaultIt/Content/Maps/ThirdPersonExampleMap.umap
new file mode 100644
index 00000000..38bd7645
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/Maps/ThirdPersonExampleMap.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac684be13a824f310007c058fc593b60fdbf3c373791760b3fa6d4a43494bbe8
+size 160843
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/UI/FF_Font.uasset b/EndlessVendetta/Plugins/VaultIt/Content/UI/FF_Font.uasset
new file mode 100644
index 00000000..eab2abe5
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/UI/FF_Font.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:460a512ff918bb1eccae989ac45cb05a270527559a17d9c6be8e233cdceb2208
+size 34999
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/UI/F_Font.uasset b/EndlessVendetta/Plugins/VaultIt/Content/UI/F_Font.uasset
new file mode 100644
index 00000000..b57de7b3
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/UI/F_Font.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:518ae21a854853971b6cc1516bbead00c7381ab29af789fce49128e05b5983ad
+size 6960
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/UI/T_Dot.uasset b/EndlessVendetta/Plugins/VaultIt/Content/UI/T_Dot.uasset
new file mode 100644
index 00000000..c39e85cf
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/UI/T_Dot.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:58b1eb7b2837f2854260f55851d3b7afb542769a281b2966e3f64fbd1fca118c
+size 5882
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/UI/W_MasterWidget.uasset b/EndlessVendetta/Plugins/VaultIt/Content/UI/W_MasterWidget.uasset
new file mode 100644
index 00000000..80ab827f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/UI/W_MasterWidget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98d569fa2b59f9b9b93550ef039e9e7dca3c05ff0f4293f3b163c6d243c5e7cf
+size 23737
diff --git a/EndlessVendetta/Plugins/VaultIt/Content/UI/W_Net.uasset b/EndlessVendetta/Plugins/VaultIt/Content/UI/W_Net.uasset
new file mode 100644
index 00000000..7b41acbd
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Content/UI/W_Net.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31849472649d929ae0ca8748c2d1f72d76468dce5842d77f04fe407c2aff7169
+size 178210
diff --git a/EndlessVendetta/Plugins/VaultIt/Resources/Icon128.png b/EndlessVendetta/Plugins/VaultIt/Resources/Icon128.png
new file mode 100644
index 00000000..e95da900
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Resources/Icon128.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12ff1fa00f71fb76c7246bc1cdf7a09e39541c970c854550972cb94e911915e1
+size 32275
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimInstance.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimInstance.cpp
new file mode 100644
index 00000000..8e58270c
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimInstance.cpp
@@ -0,0 +1,91 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "Animation/VIAnimInstance.h"
+#include "Pawn/VICharacterBase.h"
+#include "VIBlueprintFunctionLibrary.h"
+#include "GameFramework/CharacterMovementComponent.h"
+
+void UVIAnimInstance::NativeInitializeAnimation()
+{
+ Super::NativeInitializeAnimation();
+
+ Character = (TryGetPawnOwner()) ? Cast(TryGetPawnOwner()) : nullptr;
+}
+
+void UVIAnimInstance::NativeUpdateAnimation(float DeltaTime)
+{
+ if (Character)
+ {
+ const bool bWasVaulting = bIsVaulting;
+ bIsVaulting = Character->IsVaulting();
+ if (bIsVaulting)
+ {
+ // Resetting these while vaulting leads to better blending out
+ bIsJumping = false;
+ bIsFalling = false;
+ Speed = 0.f;
+
+ // Interp FBIK
+ UVIBlueprintFunctionLibrary::InterpolateFBIK(DeltaTime, FBIK);
+
+ // Right Hand
+ {
+ const FVIBoneFBIKData* BoneData = UVIBlueprintFunctionLibrary::GetBoneForFBIK(RHandName, FBIK);
+ bRHand = BoneData->bEnabled;
+ RHandLoc = BoneData->Location;
+ }
+ // Left Hand
+ {
+ const FVIBoneFBIKData* BoneData = UVIBlueprintFunctionLibrary::GetBoneForFBIK(LHandName, FBIK);
+ bLHand = BoneData->bEnabled;
+ LHandLoc = BoneData->Location;
+ }
+ // Both Hands
+ {
+ bBothHand = (bRHand && bLHand);
+ if (bBothHand)
+ {
+ // Use only control rig with both IK
+ // Only ever uses one control rig at a time
+ bRHand = false;
+ bLHand = false;
+ }
+ }
+ }
+ else
+ {
+ bIsFalling = Character->GetCharacterMovement() && Character->GetCharacterMovement()->IsFalling();
+ bIsJumping = bIsFalling && UVIBlueprintFunctionLibrary::ActorIsAscending(Character, false);
+ Speed = Character->GetVelocity().Size();
+ }
+
+ if (bIsVaulting && !bWasVaulting)
+ {
+ OnStartVault();
+ }
+ else if (bWasVaulting && !bIsVaulting)
+ {
+ OnStopVault();
+ }
+ }
+}
+
+void UVIAnimInstance::OnStartVault()
+{
+ K2_OnStartVault();
+}
+
+void UVIAnimInstance::OnStopVault()
+{
+ // Stopped vaulting
+ bRHand = false;
+ bLHand = false;
+ bBothHand = false;
+
+ K2_OnStopVault();
+}
+
+void UVIAnimInstance::SetBoneFBIK_Implementation(const FName& BoneName, const FVector& BoneLocation, bool bEnabled)
+{
+ UVIBlueprintFunctionLibrary::ToggleBoneFBIK(BoneName, BoneLocation, bEnabled, FBIK);
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimInstanceFP.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimInstanceFP.cpp
new file mode 100644
index 00000000..0faa683b
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimInstanceFP.cpp
@@ -0,0 +1,50 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "Animation/VIAnimInstanceFP.h"
+#include "Pawn/VICharacterBase.h"
+#include "VIBlueprintFunctionLibrary.h"
+
+bool UVIAnimInstanceFP::CanPlayFPMontage() const
+{
+ return Character && Character->IsLocallyControlled() && !Character->IsBotControlled();
+}
+
+void UVIAnimInstanceFP::OnStartVault()
+{
+ Super::OnStartVault();
+
+ if (CanPlayFPMontage())
+ {
+ if (MontageLinkMap.Contains(Character->GetCurrentMontage()))
+ {
+ // Find the FP animation that corresponds to the current TP animation
+ MontageToPlay = MontageLinkMap.FindChecked(Character->GetCurrentMontage());
+ }
+
+ if (MontageToPlay)
+ {
+ // Play the animation, borrowing the length and blend out time from the TP animation
+ VaultBlendOutTime = Character->GetCurrentMontage()->GetDefaultBlendOutTime();
+ const float PlayLength = Character->GetCurrentMontage()->GetPlayLength();
+ const float PlayRate = UVIBlueprintFunctionLibrary::ComputeAnimationPlayRateFromDuration(MontageToPlay, PlayLength);
+ Montage_Play(MontageToPlay, PlayRate);
+ }
+ else
+ {
+ // Should have been able to play an animation but it doesn't exist
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("{ %s} No FP Vault Animation found for { %s }"), *Character->GetName(), *Character->GetCurrentMontage()->GetName()));
+ }
+ }
+}
+
+void UVIAnimInstanceFP::OnStopVault()
+{
+ Super::OnStopVault();
+
+ // Stop the montage if vaulting ended
+ if (MontageToPlay)
+ {
+ Montage_Stop(VaultBlendOutTime, MontageToPlay);
+ MontageToPlay = nullptr;
+ }
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimNotifyState_FBIK.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimNotifyState_FBIK.cpp
new file mode 100644
index 00000000..a7907e45
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Animation/VIAnimNotifyState_FBIK.cpp
@@ -0,0 +1,237 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "Animation/VIAnimNotifyState_FBIK.h"
+#include "Components/SkeletalMeshComponent.h"
+#include "Animation/AnimInstance.h"
+#include "Animation/VIAnimationInterface.h"
+#include "Pawn/VIPawnInterface.h"
+#include "VIBlueprintFunctionLibrary.h"
+#include "GameFramework/Pawn.h"
+#include "Kismet/KismetSystemLibrary.h"
+
+DECLARE_CYCLE_STAT(TEXT("Update FBIK"), STAT_VAULTFBIK, STATGROUP_VaultIt);
+
+#if WITH_EDITOR
+void UVIAnimNotifyState_FBIK::OnAnimNotifyCreatedInEditor(FAnimNotifyEvent& ContainingAnimNotifyEvent)
+{
+ ContainingAnimNotifyEvent.bTriggerOnDedicatedServer = false;
+ ContainingAnimNotifyEvent.NotifyFilterType = ENotifyFilterType::LOD;
+ ContainingAnimNotifyEvent.NotifyFilterLOD = 2;
+}
+#endif // WITH_EDITOR
+
+void UVIAnimNotifyState_FBIK::NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration)
+{
+ // Compute LateralOffset
+ APawn* const PawnOwner = GetPawnOwner(MeshComp);
+ if (!PawnOwner)
+ {
+ return;
+ }
+
+ if (!HasValidRole(PawnOwner))
+ {
+ return;
+ }
+
+ LateralOffset = 0.f;
+ SkippedTicks = TickSkipAmount;
+
+ const FVector& Loc = PawnOwner->GetActorLocation();
+ const FVector& BoneLoc = MeshComp->GetSocketLocation(BoneName);
+
+ LateralOffset = UVIBlueprintFunctionLibrary::ComputeDirectionToFloat((BoneLoc - Loc), PawnOwner->GetActorRightVector());
+
+ if (UpdateType == EVIFBIKUpdateType::FUT_Single)
+ {
+ UpdateFBIK(MeshComp);
+ }
+}
+
+void UVIAnimNotifyState_FBIK::NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime)
+{
+ if (UpdateType == EVIFBIKUpdateType::FUT_Tick)
+ {
+ UpdateFBIK(MeshComp);
+ }
+}
+
+void UVIAnimNotifyState_FBIK::NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation)
+{
+ if (MeshComp && MeshComp->GetAnimInstance())
+ {
+ APawn* const PawnOwner = GetPawnOwner(MeshComp);
+ if (!PawnOwner)
+ {
+ return;
+ }
+
+ if (!HasValidRole(PawnOwner))
+ {
+ return;
+ }
+
+ LateralOffset = 0.f;
+ SkippedTicks = TickSkipAmount;
+
+ if (MeshComp->GetAnimInstance()->Implements())
+ {
+ // Disable FBIK
+ IVIAnimationInterface::Execute_SetBoneFBIK(MeshComp->GetAnimInstance(), BoneName, FVector::ZeroVector, false);
+ }
+ else
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("{ %s } does not implement interface VIAnimationInterface. Aborting FBIK update."), *MeshComp->GetAnimInstance()->GetName()));
+ }
+ }
+}
+
+void UVIAnimNotifyState_FBIK::UpdateFBIK(USkeletalMeshComponent* MeshComp)
+{
+ if (MeshComp && MeshComp->GetAnimInstance())
+ {
+ if (LateralOffset == 0.f)
+ {
+ return;
+ }
+
+ APawn* const PawnOwner = GetPawnOwner(MeshComp);
+ if (!PawnOwner)
+ {
+ return;
+ }
+
+ if (!HasValidRole(PawnOwner))
+ {
+ return;
+ }
+
+ SCOPE_CYCLE_COUNTER(STAT_VAULTFBIK);
+
+ // Skip ticks to reduce overhead
+ // (as this is only cosmetic and old values can be safely used for the insignificant amount of time lapsed as values are interpolated anyway)
+ if (SkippedTicks != TickSkipAmount)
+ {
+ SkippedTicks++;
+ return;
+ }
+ else
+ {
+ SkippedTicks = 0;
+ }
+
+ if (!PawnOwner->Implements())
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("{ %s } does not implement interface VIPawnInterface. Aborting FBIK update."), *PawnOwner->GetName()));
+ return;
+ }
+
+ if (MeshComp->GetAnimInstance()->Implements())
+ {
+ // Perform the trace
+ FHitResult Hit(ForceInit);
+ {
+ const FVITraceSettings& TraceSettings = IVIPawnInterface::Execute_GetVaultTraceSettings(PawnOwner);
+ const TArray TraceIgnore = { PawnOwner };
+
+ FVector VaultLoc;
+ FVector VaultDir;
+ IVIPawnInterface::Execute_GetVaultLocationAndDirection(PawnOwner, VaultLoc, VaultDir);
+
+ const FVector& Right = PawnOwner->GetActorRightVector();
+ const FVector RightLoc = PawnOwner->GetActorLocation() + (Right * LateralOffset);
+ const FVector VaultRightLoc = VaultLoc + (Right * LateralOffset);
+
+ const FVector& TraceStart = RightLoc;
+ const FVector TraceEnd = VaultRightLoc + (VaultDir * TraceLength);
+
+ bool bTraceComplex = (TraceType != EVIFBIKTraceType::FTT_Simple);
+ if (TraceType == EVIFBIKTraceType::FTT_ComplexLocalOnly)
+ {
+ bTraceComplex = IsLocalPlayer(PawnOwner);
+ }
+
+#if WITH_EDITOR
+ const EDrawDebugTrace::Type DrawDebugType = (bDebugTraceDuringPIE) ? ((UpdateType == EVIFBIKUpdateType::FUT_Single) ? EDrawDebugTrace::ForDuration : EDrawDebugTrace::ForOneFrame) : EDrawDebugTrace::None;
+#else
+ const EDrawDebugTrace::Type DrawDebugType = EDrawDebugTrace::None;
+#endif // WITH_EDITOR
+
+ UKismetSystemLibrary::SphereTraceSingleForObjects(
+ PawnOwner, // World Context
+ TraceStart, // Start
+ TraceEnd, // End
+ TraceRadius, // Radius
+ TraceSettings.GetObjectTypes(), // TraceChannels
+ bTraceComplex, // bTraceComplex
+ TraceIgnore, // ActorsToIgnore
+ DrawDebugType, // DrawDebugType
+ Hit, // OutHit
+ false, // bIgnoreSelf
+ FLinearColor::Yellow, // TraceColor
+ FLinearColor::Blue, // TraceHitColor
+ 1.f // DrawTime
+ );
+
+ if (Hit.bBlockingHit)
+ {
+ Hit.Location += Hit.ImpactNormal * BoneOffset;
+ }
+ }
+
+ if (Hit.bBlockingHit)
+ {
+ IVIAnimationInterface::Execute_SetBoneFBIK(MeshComp->GetAnimInstance(), BoneName, Hit.Location, true);
+ }
+ else if (bDisableIfHitFails)
+ {
+ // We generally leave it enabled if there was no hit and just use the last successful hit
+ // but here the user has specified to disable it
+ IVIAnimationInterface::Execute_SetBoneFBIK(MeshComp->GetAnimInstance(), BoneName, FVector::ZeroVector, false);
+ }
+ }
+ else
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("{ %s } does not implement interface VIAnimationInterface. Aborting FBIK update."), *MeshComp->GetAnimInstance()->GetName()));
+ }
+ }
+}
+
+APawn* UVIAnimNotifyState_FBIK::GetPawnOwner(const USkeletalMeshComponent* const MeshComp)
+{
+ if (MeshComp && MeshComp->GetOwner())
+ {
+ return MeshComp->GetOwner();
+ }
+
+ return nullptr;
+}
+
+bool UVIAnimNotifyState_FBIK::HasValidRole(const APawn* const PawnOwner) const
+{
+ switch (ApplyToRoles)
+ {
+ case EVIFBIKUpdateRole::FUR_LocalOnly:
+ if (IsLocalPlayer(PawnOwner))
+ {
+ return true;
+ }
+ return false;
+ case EVIFBIKUpdateRole::FUR_SimulatedOnly:
+ if (PawnOwner->GetLocalRole() == ROLE_SimulatedProxy)
+ {
+ return true;
+ }
+ return false;
+ case EVIFBIKUpdateRole::FUR_All:
+ default:
+ break;
+ }
+
+ return true;
+}
+
+bool UVIAnimNotifyState_FBIK::IsLocalPlayer(const APawn* const PawnOwner)
+{
+ return PawnOwner && PawnOwner->IsLocallyControlled() && (PawnOwner->GetNetMode() == NM_Standalone || !PawnOwner->HasAuthority());
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/GameplayAbility_Vault.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/GameplayAbility_Vault.cpp
new file mode 100644
index 00000000..6c6b8046
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/GameplayAbility_Vault.cpp
@@ -0,0 +1,11 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "GAS/GameplayAbility_Vault.h"
+
+UGameplayAbility_Vault::UGameplayAbility_Vault()
+{
+ InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
+
+ bServerRespectsRemoteAbilityCancellation = false;
+ NetSecurityPolicy = EGameplayAbilityNetSecurityPolicy::ServerOnlyTermination;
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/PlayMontageForMeshAndWait.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/PlayMontageForMeshAndWait.cpp
new file mode 100644
index 00000000..f42ac439
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/PlayMontageForMeshAndWait.cpp
@@ -0,0 +1,266 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+// Based on GASShooter by Dan Kestranek
+
+#include "GAS/PlayMontageForMeshAndWait.h"
+#include "GAS/VIAbilitySystemComponent.h"
+#include "VITypes.h"
+#include "AbilitySystemGlobals.h"
+#include "GameFramework/Character.h"
+
+DEFINE_LOG_CATEGORY_STATIC(LogVIPlayMontage, Log, All);
+
+DECLARE_CYCLE_STAT(TEXT("UPlayMontageForMeshAndWait Activate"), STAT_PLAYMONTAGEFORMESHANDWAIT_ACTIVATE, STATGROUP_VaultIt);
+
+UPlayMontageForMeshAndWait::UPlayMontageForMeshAndWait(const FObjectInitializer& OI)
+ : Super(OI)
+{
+ Rate = 1.f;
+ bStopWhenAbilityEnds = true;
+}
+
+UPlayMontageForMeshAndWait* UPlayMontageForMeshAndWait::PlayMontageForMeshAndWait(UGameplayAbility* OwningAbility, FName TaskInstanceName, USkeletalMeshComponent* InMesh, UAnimMontage* MontageToPlay, float Rate /*= 1.f*/, FName StartSection /*= NAME_None*/, bool bStopWhenAbilityEnds /*= true*/, float AnimRootMotionTranslationScale /*= 1.f*/, bool bReplicateMontage /*= true*/, float OverrideBlendOutTimeForCancelAbility /*= -1.f*/, float OverrideBlendOutTimeForStopWhenEndAbility /*= -1.f*/)
+{
+ UAbilitySystemGlobals::NonShipping_ApplyGlobalAbilityScaler_Rate(Rate);
+
+ UPlayMontageForMeshAndWait* MyObj = NewAbilityTask(OwningAbility, TaskInstanceName);
+ MyObj->Mesh = InMesh;
+ MyObj->MontageToPlay = MontageToPlay;
+ MyObj->Rate = Rate;
+ MyObj->StartSection = StartSection;
+ MyObj->AnimRootMotionTranslationScale = AnimRootMotionTranslationScale;
+ MyObj->bStopWhenAbilityEnds = bStopWhenAbilityEnds;
+ MyObj->bReplicateMontage = bReplicateMontage;
+ MyObj->OverrideBlendOutTimeForCancelAbility = OverrideBlendOutTimeForCancelAbility;
+ MyObj->OverrideBlendOutTimeForStopWhenEndAbility = OverrideBlendOutTimeForStopWhenEndAbility;
+
+ return MyObj;
+}
+
+void UPlayMontageForMeshAndWait::Activate()
+{
+ if (!Ability)
+ {
+ return;
+ }
+
+ if (!Mesh)
+ {
+ UE_LOG(LogVIPlayMontage, Error, TEXT("UPlayMontageForMeshAndWait::Activate - invalid Mesh"));
+ return;
+ }
+
+ SCOPE_CYCLE_COUNTER(STAT_PLAYMONTAGEFORMESHANDWAIT_ACTIVATE);
+
+ bool bPlayedMontage = false;
+ UVIAbilitySystemComponent* ASC = GetTargetASC();
+
+ if (ASC)
+ {
+ UAnimInstance* AnimInstance = Mesh->GetAnimInstance();
+ if (AnimInstance != nullptr)
+ {
+ if (ASC->PlayMontageForMesh(Ability, Mesh, Ability->GetCurrentActivationInfo(), MontageToPlay, Rate, StartSection, bReplicateMontage) > 0.f)
+ {
+ // Playing a montage could potentially fire off a callback into game code which could kill this ability! Early out if we are pending kill.
+ if (ShouldBroadcastAbilityTaskDelegates() == false)
+ {
+ return;
+ }
+
+ CancelledHandle = Ability->OnGameplayAbilityCancelled.AddUObject(this, &UPlayMontageForMeshAndWait::OnAbilityCancelled);
+
+ BlendingOutDelegate.BindUObject(this, &UPlayMontageForMeshAndWait::OnMontageBlendingOut);
+ AnimInstance->Montage_SetBlendingOutDelegate(BlendingOutDelegate, MontageToPlay);
+
+ MontageEndedDelegate.BindUObject(this, &UPlayMontageForMeshAndWait::OnMontageEnded);
+ AnimInstance->Montage_SetEndDelegate(MontageEndedDelegate, MontageToPlay);
+
+ ACharacter* Character = Cast(GetAvatarActor());
+ if (Character && (Character->GetLocalRole() == ROLE_Authority ||
+ (Character->GetLocalRole() == ROLE_AutonomousProxy && Ability->GetNetExecutionPolicy() == EGameplayAbilityNetExecutionPolicy::LocalPredicted)))
+ {
+ Character->SetAnimRootMotionTranslationScale(AnimRootMotionTranslationScale);
+ }
+
+ bPlayedMontage = true;
+ }
+ }
+ else
+ {
+ UE_LOG(LogVIPlayMontage, Warning, TEXT("UPlayMontageForMeshAndWait call to PlayMontage failed!"));
+ }
+ }
+ else
+ {
+ UE_LOG(LogVIPlayMontage, Warning, TEXT("UPlayMontageForMeshAndWait called on invalid AbilitySystemComponent"));
+ }
+
+ if (!bPlayedMontage)
+ {
+ UE_LOG(LogVIPlayMontage, Warning, TEXT("UPlayMontageForMeshAndWait called in Ability %s failed to play montage %s; Task Instance Name %s."), *Ability->GetName(), *GetNameSafe(MontageToPlay), *InstanceName.ToString());
+ if (ShouldBroadcastAbilityTaskDelegates())
+ {
+ //ABILITY_LOG(Display, TEXT("%s: OnCancelled"), *GetName());
+ OnCancelled.Broadcast();
+ }
+ }
+
+ SetWaitingOnAvatar();
+}
+
+void UPlayMontageForMeshAndWait::ExternalCancel()
+{
+ check(AbilitySystemComponent.IsValid());
+
+ OnAbilityCancelled();
+
+ Super::ExternalCancel();
+}
+
+void UPlayMontageForMeshAndWait::OnDestroy(bool AbilityEnded)
+{
+ // Note: Clearing montage end delegate isn't necessary since its not a multicast and will be cleared when the next montage plays.
+ // (If we are destroyed, it will detect this and not do anything)
+ if (Ability)
+ {
+ Ability->OnGameplayAbilityCancelled.Remove(CancelledHandle);
+ if (AbilityEnded && bStopWhenAbilityEnds)
+ {
+ StopPlayingMontage(OverrideBlendOutTimeForStopWhenEndAbility);
+ }
+ }
+
+ Super::OnDestroy(AbilityEnded);
+}
+
+bool UPlayMontageForMeshAndWait::StopPlayingMontage(float OverrideBlendOutTime /*= -1.f*/)
+{
+ if (!Mesh)
+ {
+ return false;
+ }
+
+ UVIAbilitySystemComponent* const ASC = GetTargetASC();
+ if (!ASC)
+ {
+ return false;
+ }
+
+ const FGameplayAbilityActorInfo* const ActorInfo = Ability->GetCurrentActorInfo();
+ if (!ActorInfo)
+ {
+ return false;
+ }
+
+ const UAnimInstance* const AnimInstance = Mesh->GetAnimInstance();
+ if (!AnimInstance)
+ {
+ return false;
+ }
+
+ // Check if the montage is still playing
+ // The ability would have been interrupted, in which case we should automatically stop the montage
+ if (ASC && Ability)
+ {
+ if (ASC->GetAnimatingAbilityFromAnyMesh() == Ability
+ && ASC->GetCurrentMontageForMesh(Mesh) == MontageToPlay)
+ {
+ // Unbind delegates so they don't get called as well
+ FAnimMontageInstance* MontageInstance = AnimInstance->GetActiveInstanceForMontage(MontageToPlay);
+ if (MontageInstance)
+ {
+ MontageInstance->OnMontageBlendingOutStarted.Unbind();
+ MontageInstance->OnMontageEnded.Unbind();
+ }
+
+ ASC->CurrentMontageStopForMesh(Mesh, OverrideBlendOutTime);
+ return true;
+ }
+ }
+
+ return false;
+}
+
+UVIAbilitySystemComponent* UPlayMontageForMeshAndWait::GetTargetASC() const
+{
+ return Cast(AbilitySystemComponent);
+}
+
+void UPlayMontageForMeshAndWait::OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted)
+{
+ if (Ability && Ability->GetCurrentMontage() == MontageToPlay)
+ {
+ if (Montage == MontageToPlay)
+ {
+ AbilitySystemComponent->ClearAnimatingAbility(Ability);
+
+ // Reset AnimRootMotionTranslationScale
+ ACharacter* Character = Cast(GetAvatarActor());
+ if (Character && (Character->GetLocalRole() == ROLE_Authority ||
+ (Character->GetLocalRole() == ROLE_AutonomousProxy && Ability->GetNetExecutionPolicy() == EGameplayAbilityNetExecutionPolicy::LocalPredicted)))
+ {
+ Character->SetAnimRootMotionTranslationScale(1.f);
+ }
+
+ }
+ }
+
+ if (bInterrupted)
+ {
+ if (ShouldBroadcastAbilityTaskDelegates())
+ {
+ OnInterrupted.Broadcast();
+ }
+ }
+ else
+ {
+ if (ShouldBroadcastAbilityTaskDelegates())
+ {
+ OnBlendOut.Broadcast();
+ }
+ }
+}
+
+void UPlayMontageForMeshAndWait::OnAbilityCancelled()
+{
+ // UE4 was calling the wrong callback
+
+ if (StopPlayingMontage(OverrideBlendOutTimeForCancelAbility))
+ {
+ // Let the BP handle the interrupt as well
+ if (ShouldBroadcastAbilityTaskDelegates())
+ {
+ OnCancelled.Broadcast();
+ }
+ }
+}
+
+void UPlayMontageForMeshAndWait::OnMontageEnded(UAnimMontage* Montage, bool bInterrupted)
+{
+ if (!bInterrupted)
+ {
+ if (ShouldBroadcastAbilityTaskDelegates())
+ {
+ OnCompleted.Broadcast();
+ }
+ }
+
+ EndTask();
+}
+
+FString UPlayMontageForMeshAndWait::GetDebugString() const
+{
+ const UAnimMontage* PlayingMontage = nullptr;
+ if (Ability && Mesh)
+ {
+ const UAnimInstance* const AnimInstance = Mesh->GetAnimInstance();
+
+ if (AnimInstance != nullptr)
+ {
+ PlayingMontage = AnimInstance->Montage_IsActive(MontageToPlay) ? MontageToPlay : AnimInstance->GetCurrentActiveMontage();
+ }
+ }
+
+ return FString::Printf(TEXT("PlayMontageForMeshAndWait. MontageToPlay: %s (Currently Playing): %s"), *GetNameSafe(MontageToPlay), *GetNameSafe(PlayingMontage));
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIAbilitySystemComponent.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIAbilitySystemComponent.cpp
new file mode 100644
index 00000000..791c3c38
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIAbilitySystemComponent.cpp
@@ -0,0 +1,500 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "GAS/VIAbilitySystemComponent.h"
+
+#include "AbilitySystemLog.h"
+#include "Net/UnrealNetwork.h"
+#include "Components/SkeletalMeshComponent.h"
+#include "GAS/VIGameplayAbility.h"
+#include "VITypes.h"
+#include "Engine/World.h"
+#include "Engine/Engine.h"
+#include "Runtime/Launch/Resources/Version.h"
+
+DECLARE_CYCLE_STAT(TEXT("VIAbilitySystemComponent Tick"), STAT_VIABILITYSYSTEM_TICK, STATGROUP_VaultIt);
+DECLARE_CYCLE_STAT(TEXT("VIAbilitySystemComponent PlayMontageForMesh"), STAT_PLAYMONTAGEFORMESH, STATGROUP_VaultIt);
+DECLARE_CYCLE_STAT(TEXT("VIAbilitySystemComponent PlaySimulatedMontageForMesh"), STAT_PLAYSIMULATEDMONTAGEFORMESH, STATGROUP_VaultIt);
+DECLARE_CYCLE_STAT(TEXT("VIAbilitySystemComponent UpdateReplicatedDataForMesh"), STAT_VIABILITYSYSTEM_UPDATEREPLDATAFORMESH, STATGROUP_VaultIt);
+DECLARE_CYCLE_STAT(TEXT("VIAbilitySystemComponent OnReplicatedAnimMontageForMesh"), STAT_VIABILITYSYSTEM_ONREPLICATEDANIMMONTAGEFORMESH, STATGROUP_VaultIt);
+
+static TAutoConsoleVariable CVarReplayMontageErrorThreshold(
+ TEXT("VI.replay.MontageErrorThreshold"),
+ 0.5f,
+ TEXT("Tolerance level for when montage playback position correction occurs in replays")
+);
+
+void UVIAbilitySystemComponent::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const
+{
+ Super::GetLifetimeReplicatedProps(OutLifetimeProps);
+
+ DOREPLIFETIME(UVIAbilitySystemComponent, RepAnimMontageInfoForMeshes);
+}
+
+bool UVIAbilitySystemComponent::GetShouldTick() const
+{
+ for (const FVIGameplayAbilityRepAnimMontageForMesh RepMontageInfo : RepAnimMontageInfoForMeshes)
+ {
+ const bool bHasReplicatedMontageInfoToUpdate = (IsOwnerActorAuthoritative() && RepMontageInfo.RepMontageInfo.IsStopped == false);
+
+ if (bHasReplicatedMontageInfoToUpdate)
+ {
+ return true;
+ }
+ }
+
+ return Super::GetShouldTick();
+}
+
+void UVIAbilitySystemComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
+{
+ SCOPE_CYCLE_COUNTER(STAT_VIABILITYSYSTEM_TICK);
+
+ if (IsOwnerActorAuthoritative())
+ {
+ for (const FVIGameplayAbilityLocalAnimMontageForMesh& MontageInfo : LocalAnimMontageInfoForMeshes)
+ {
+ AnimMontage_UpdateReplicatedDataForMesh(MontageInfo.Mesh);
+ }
+ }
+
+ Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
+}
+
+void UVIAbilitySystemComponent::InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor)
+{
+ Super::InitAbilityActorInfo(InOwnerActor, InAvatarActor);
+
+ LocalAnimMontageInfoForMeshes = TArray();
+ RepAnimMontageInfoForMeshes = TArray();
+
+ if (bPendingMontageRep)
+ {
+ OnRep_ReplicatedAnimMontageForMesh();
+ }
+}
+
+void UVIAbilitySystemComponent::NotifyAbilityEnded(FGameplayAbilitySpecHandle Handle, UGameplayAbility* Ability, bool bWasCancelled)
+{
+ Super::NotifyAbilityEnded(Handle, Ability, bWasCancelled);
+
+ // If AnimatingAbility ended, clear the pointer
+ ClearAnimatingAbilityForAllMeshes(Ability);
+}
+
+float UVIAbilitySystemComponent::PlayMontageForMesh(UGameplayAbility* InAnimatingAbility, class USkeletalMeshComponent* InMesh, FGameplayAbilityActivationInfo ActivationInfo, UAnimMontage* NewAnimMontage, float InPlayRate, FName StartSectionName /*= NAME_None*/, bool bReplicateMontage /*= true*/)
+{
+ SCOPE_CYCLE_COUNTER(STAT_PLAYMONTAGEFORMESH);
+
+ UVIGameplayAbility* InAbility = Cast(InAnimatingAbility);
+
+ float Duration = -1.f;
+
+ UAnimInstance* AnimInstance = IsValid(InMesh) && InMesh->GetOwner() == AbilityActorInfo->AvatarActor ? InMesh->GetAnimInstance() : nullptr;
+ if (AnimInstance && NewAnimMontage)
+ {
+ Duration = AnimInstance->Montage_Play(NewAnimMontage, InPlayRate);
+ if (Duration > 0.f)
+ {
+ FVIGameplayAbilityLocalAnimMontageForMesh& AnimMontageInfo = GetLocalAnimMontageInfoForMesh(InMesh);
+
+#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 2
+ if (AnimMontageInfo.LocalMontageInfo.AnimatingAbility.IsValid() && AnimMontageInfo.LocalMontageInfo.AnimatingAbility != InAnimatingAbility)
+#else
+ if (AnimMontageInfo.LocalMontageInfo.AnimatingAbility && AnimMontageInfo.LocalMontageInfo.AnimatingAbility != InAnimatingAbility)
+#endif
+ {
+ // The ability that was previously animating will have already gotten the 'interrupted' callback.
+ // It may be a good idea to make this a global policy and 'cancel' the ability.
+ //
+ // For now, we expect it to end itself when this happens.
+ }
+
+ if (NewAnimMontage->HasRootMotion() && AnimInstance->GetOwningActor())
+ {
+ UE_LOG(LogRootMotion, Log, TEXT("UAbilitySystemComponent::PlayMontage %s, Role: %s")
+ , *GetNameSafe(NewAnimMontage)
+ , *UEnum::GetValueAsString(TEXT("Engine.ENetRole"), AnimInstance->GetOwningActor()->GetLocalRole())
+ );
+ }
+
+ AnimMontageInfo.LocalMontageInfo.AnimMontage = NewAnimMontage;
+ AnimMontageInfo.LocalMontageInfo.AnimatingAbility = InAnimatingAbility;
+
+ if (InAbility)
+ {
+ InAbility->SetCurrentMontageForMesh(InMesh, NewAnimMontage);
+ }
+
+ // Start at a given Section.
+ if (StartSectionName != NAME_None)
+ {
+ AnimInstance->Montage_JumpToSection(StartSectionName, NewAnimMontage);
+ }
+
+ // Replicate to non owners
+ if (IsOwnerActorAuthoritative())
+ {
+ if (bReplicateMontage)
+ {
+ // Those are static parameters, they are only set when the montage is played. They are not changed after that.
+ FVIGameplayAbilityRepAnimMontageForMesh& AbilityRepMontageInfo = GetGameplayAbilityRepAnimMontageForMesh(InMesh);
+ AbilityRepMontageInfo.RepMontageInfo.AnimMontage = NewAnimMontage;
+ AbilityRepMontageInfo.RepMontageInfo.PlayInstanceId = (AbilityRepMontageInfo.RepMontageInfo.PlayInstanceId + 1) % 255;
+
+ // Update parameters that change during Montage life time.
+ AnimMontage_UpdateReplicatedDataForMesh(InMesh);
+
+ // Force net update on our avatar actor
+ if (AbilityActorInfo->AvatarActor != nullptr)
+ {
+ AbilityActorInfo->AvatarActor->ForceNetUpdate();
+ }
+ }
+ }
+ else
+ {
+ // If this prediction key is rejected, we need to end the preview
+ FPredictionKey PredictionKey = GetPredictionKeyForNewAction();
+ if (PredictionKey.IsValidKey())
+ {
+ PredictionKey.NewRejectedDelegate().BindUObject(this, &UVIAbilitySystemComponent::OnPredictiveMontageRejectedForMesh, InMesh, NewAnimMontage);
+ }
+ }
+ }
+ }
+
+ return Duration;
+}
+
+float UVIAbilitySystemComponent::PlayMontageSimulatedForMesh(USkeletalMeshComponent* InMesh, UAnimMontage* NewAnimMontage, float InPlayRate, FName StartSectionName /*= NAME_None*/)
+{
+ SCOPE_CYCLE_COUNTER(STAT_PLAYSIMULATEDMONTAGEFORMESH);
+
+ float Duration = -1.f;
+ UAnimInstance* AnimInstance = IsValid(InMesh) && InMesh->GetOwner() == AbilityActorInfo->AvatarActor ? InMesh->GetAnimInstance() : nullptr;
+ if (AnimInstance && NewAnimMontage)
+ {
+ Duration = AnimInstance->Montage_Play(NewAnimMontage, InPlayRate);
+ if (Duration > 0.f)
+ {
+ FVIGameplayAbilityLocalAnimMontageForMesh& AnimMontageInfo = GetLocalAnimMontageInfoForMesh(InMesh);
+ AnimMontageInfo.LocalMontageInfo.AnimMontage = NewAnimMontage;
+ }
+ }
+
+ return Duration;
+}
+
+UGameplayAbility* UVIAbilitySystemComponent::GetAnimatingAbilityFromAnyMesh()
+{
+ // Only one ability can be animating for all meshes
+ for (const FVIGameplayAbilityLocalAnimMontageForMesh& GameplayAbilityLocalAnimMontageForMesh : LocalAnimMontageInfoForMeshes)
+ {
+#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 2
+ if (GameplayAbilityLocalAnimMontageForMesh.LocalMontageInfo.AnimatingAbility.IsValid())
+ {
+ return GameplayAbilityLocalAnimMontageForMesh.LocalMontageInfo.AnimatingAbility.Get();
+ }
+#else
+ if (GameplayAbilityLocalAnimMontageForMesh.LocalMontageInfo.AnimatingAbility)
+ {
+ return GameplayAbilityLocalAnimMontageForMesh.LocalMontageInfo.AnimatingAbility;
+ }
+#endif
+ }
+
+ return nullptr;
+}
+
+UAnimMontage* UVIAbilitySystemComponent::GetCurrentMontageForMesh(USkeletalMeshComponent* InMesh)
+{
+ const UAnimInstance* const AnimInstance = IsValid(InMesh) && InMesh->GetOwner() == AbilityActorInfo->AvatarActor ? InMesh->GetAnimInstance() : nullptr;
+ const FVIGameplayAbilityLocalAnimMontageForMesh& AnimMontageInfo = GetLocalAnimMontageInfoForMesh(InMesh);
+
+ if (AnimMontageInfo.LocalMontageInfo.AnimMontage && AnimInstance
+ && AnimInstance->Montage_IsActive(AnimMontageInfo.LocalMontageInfo.AnimMontage))
+ {
+ return AnimMontageInfo.LocalMontageInfo.AnimMontage;
+ }
+
+ return nullptr;
+}
+
+void UVIAbilitySystemComponent::CurrentMontageStopForMesh(USkeletalMeshComponent* InMesh, float OverrideBlendOutTime /*= -1.0f*/)
+{
+ UAnimInstance* AnimInstance = IsValid(InMesh) && InMesh->GetOwner() == AbilityActorInfo->AvatarActor ? InMesh->GetAnimInstance() : nullptr;
+ const FVIGameplayAbilityLocalAnimMontageForMesh& AnimMontageInfo = GetLocalAnimMontageInfoForMesh(InMesh);
+ const UAnimMontage* MontageToStop = AnimMontageInfo.LocalMontageInfo.AnimMontage;
+ const bool bShouldStopMontage = AnimInstance && MontageToStop && !AnimInstance->Montage_GetIsStopped(MontageToStop);
+
+ if (bShouldStopMontage)
+ {
+ const float BlendOutTime = (OverrideBlendOutTime >= 0.0f ? OverrideBlendOutTime : MontageToStop->BlendOut.GetBlendTime());
+
+ AnimInstance->Montage_Stop(BlendOutTime, MontageToStop);
+
+ if (IsOwnerActorAuthoritative())
+ {
+ AnimMontage_UpdateReplicatedDataForMesh(InMesh);
+ }
+ }
+}
+
+void UVIAbilitySystemComponent::ClearAnimatingAbilityForAllMeshes(UGameplayAbility* Ability)
+{
+ UVIGameplayAbility* VIAbility = Cast(Ability);
+ for (FVIGameplayAbilityLocalAnimMontageForMesh& GameplayAbilityLocalAnimMontageForMesh : LocalAnimMontageInfoForMeshes)
+ {
+ if (GameplayAbilityLocalAnimMontageForMesh.LocalMontageInfo.AnimatingAbility == Ability)
+ {
+ VIAbility->SetCurrentMontageForMesh(GameplayAbilityLocalAnimMontageForMesh.Mesh, nullptr);
+ GameplayAbilityLocalAnimMontageForMesh.LocalMontageInfo.AnimatingAbility = nullptr;
+ }
+ }
+}
+
+void UVIAbilitySystemComponent::AnimMontage_UpdateReplicatedDataForMesh(USkeletalMeshComponent* InMesh)
+{
+ check(IsOwnerActorAuthoritative());
+
+ AnimMontage_UpdateReplicatedDataForMesh(GetGameplayAbilityRepAnimMontageForMesh(InMesh));
+}
+
+void UVIAbilitySystemComponent::AnimMontage_UpdateReplicatedDataForMesh(FVIGameplayAbilityRepAnimMontageForMesh& OutRepAnimMontageInfo)
+{
+ SCOPE_CYCLE_COUNTER(STAT_VIABILITYSYSTEM_UPDATEREPLDATAFORMESH);
+
+ const UAnimInstance* AnimInstance = IsValid(OutRepAnimMontageInfo.Mesh) && OutRepAnimMontageInfo.Mesh->GetOwner() ==
+ AbilityActorInfo->AvatarActor ? OutRepAnimMontageInfo.Mesh->GetAnimInstance() : nullptr;
+ const FVIGameplayAbilityLocalAnimMontageForMesh& AnimMontageInfo = GetLocalAnimMontageInfoForMesh(OutRepAnimMontageInfo.Mesh);
+
+ if (AnimInstance && AnimMontageInfo.LocalMontageInfo.AnimMontage)
+ {
+ OutRepAnimMontageInfo.RepMontageInfo.AnimMontage = AnimMontageInfo.LocalMontageInfo.AnimMontage;
+
+ // Compressed Flags
+ const bool bIsStopped = AnimInstance->Montage_GetIsStopped(AnimMontageInfo.LocalMontageInfo.AnimMontage);
+
+ if (!bIsStopped)
+ {
+ OutRepAnimMontageInfo.RepMontageInfo.PlayRate = AnimInstance->Montage_GetPlayRate(AnimMontageInfo.LocalMontageInfo.AnimMontage);
+ OutRepAnimMontageInfo.RepMontageInfo.Position = AnimInstance->Montage_GetPosition(AnimMontageInfo.LocalMontageInfo.AnimMontage);
+ OutRepAnimMontageInfo.RepMontageInfo.BlendTime = AnimInstance->Montage_GetBlendTime(AnimMontageInfo.LocalMontageInfo.AnimMontage);
+ }
+
+ if (OutRepAnimMontageInfo.RepMontageInfo.IsStopped != bIsStopped)
+ {
+ // Set this prior to calling UpdateShouldTick, so we start ticking if we are playing a Montage
+ OutRepAnimMontageInfo.RepMontageInfo.IsStopped = bIsStopped;
+
+ // When we start or stop an animation, update the clients right away for the Avatar Actor
+ if (AbilityActorInfo->AvatarActor != nullptr)
+ {
+ AbilityActorInfo->AvatarActor->ForceNetUpdate();
+ }
+
+ // When this changes, we should update whether or not we should be ticking
+ UpdateShouldTick();
+ }
+
+ // Replicate NextSectionID to keep it in sync.
+ // We actually replicate NextSectionID+1 on a BYTE to put INDEX_NONE in there.
+ const int32 CurrentSectionID = AnimMontageInfo.LocalMontageInfo.AnimMontage->GetSectionIndexFromPosition(OutRepAnimMontageInfo.RepMontageInfo.Position);
+ if (CurrentSectionID != INDEX_NONE)
+ {
+ const int32 NextSectionID = AnimInstance->Montage_GetNextSectionID(AnimMontageInfo.LocalMontageInfo.AnimMontage, CurrentSectionID);
+ if (NextSectionID >= (256 - 1))
+ {
+ ABILITY_LOG(Error, TEXT("AnimMontage_UpdateReplicatedData. NextSectionID = %d. RepAnimMontageInfo.Position: %.2f, CurrentSectionID: %d. LocalAnimMontageInfo.AnimMontage %s"),
+ NextSectionID, OutRepAnimMontageInfo.RepMontageInfo.Position, CurrentSectionID, *GetNameSafe(AnimMontageInfo.LocalMontageInfo.AnimMontage));
+ ensure(NextSectionID < (256 - 1));
+ }
+ OutRepAnimMontageInfo.RepMontageInfo.NextSectionID = uint8(NextSectionID + 1);
+ }
+ else
+ {
+ OutRepAnimMontageInfo.RepMontageInfo.NextSectionID = 0;
+ }
+ }
+}
+
+void UVIAbilitySystemComponent::OnRep_ReplicatedAnimMontageForMesh()
+{
+ SCOPE_CYCLE_COUNTER(STAT_VIABILITYSYSTEM_ONREPLICATEDANIMMONTAGEFORMESH);
+
+ for (FVIGameplayAbilityRepAnimMontageForMesh& NewRepMontageInfoForMesh : RepAnimMontageInfoForMeshes)
+ {
+ FVIGameplayAbilityLocalAnimMontageForMesh& AnimMontageInfo = GetLocalAnimMontageInfoForMesh(NewRepMontageInfoForMesh.Mesh);
+
+ const UWorld* const World = GetWorld();
+
+ if (NewRepMontageInfoForMesh.RepMontageInfo.bSkipPlayRate)
+ {
+ NewRepMontageInfoForMesh.RepMontageInfo.PlayRate = 1.f;
+ }
+
+ const bool bIsPlayingReplay = World && World->IsPlayingReplay();
+
+ const float MONTAGE_REP_POS_ERR_THRESH = bIsPlayingReplay ? CVarReplayMontageErrorThreshold.GetValueOnGameThread() : 0.1f;
+
+ UAnimInstance* AnimInstance = IsValid(NewRepMontageInfoForMesh.Mesh) && NewRepMontageInfoForMesh.Mesh->GetOwner()
+ == AbilityActorInfo->AvatarActor ? NewRepMontageInfoForMesh.Mesh->GetAnimInstance() : nullptr;
+ if (AnimInstance == nullptr || !IsReadyForReplicatedMontageForMesh())
+ {
+ // We can't handle this yet
+ bPendingMontageRep = true;
+ return;
+ }
+ bPendingMontageRep = false;
+
+ if (!AbilityActorInfo->IsLocallyControlled())
+ {
+ static const auto CVar = IConsoleManager::Get().FindTConsoleVariableDataInt(TEXT("net.Montage.Debug"));
+ const bool DebugMontage = (CVar && CVar->GetValueOnGameThread() == 1);
+ if (DebugMontage)
+ {
+ ABILITY_LOG(Warning, TEXT("\n\nOnRep_ReplicatedAnimMontage, %s"), *GetNameSafe(this));
+ ABILITY_LOG(Warning, TEXT("\tAnimMontage: %s\n\tPlayRate: %f\n\tPosition: %f\n\tBlendTime: %f\n\tNextSectionID: %d\n\tIsStopped: %d\n\tForcePlayBit: %d"),
+ *GetNameSafe(NewRepMontageInfoForMesh.RepMontageInfo.AnimMontage),
+ NewRepMontageInfoForMesh.RepMontageInfo.PlayRate,
+ NewRepMontageInfoForMesh.RepMontageInfo.Position,
+ NewRepMontageInfoForMesh.RepMontageInfo.BlendTime,
+ NewRepMontageInfoForMesh.RepMontageInfo.NextSectionID,
+ NewRepMontageInfoForMesh.RepMontageInfo.IsStopped,
+ NewRepMontageInfoForMesh.RepMontageInfo.PlayInstanceId);
+ ABILITY_LOG(Warning, TEXT("\tLocalAnimMontageInfo.AnimMontage: %s\n\tPosition: %f"),
+ *GetNameSafe(AnimMontageInfo.LocalMontageInfo.AnimMontage), AnimInstance->Montage_GetPosition(AnimMontageInfo.LocalMontageInfo.AnimMontage));
+ }
+
+ if (NewRepMontageInfoForMesh.RepMontageInfo.AnimMontage)
+ {
+ // New Montage to play
+ const uint8 ReplicatedPlayBit = NewRepMontageInfoForMesh.RepMontageInfo.PlayInstanceId;
+ if ((AnimMontageInfo.LocalMontageInfo.AnimMontage != NewRepMontageInfoForMesh.RepMontageInfo.AnimMontage) || (AnimMontageInfo.LocalMontageInfo.PlayInstanceId != ReplicatedPlayBit))
+ {
+ AnimMontageInfo.LocalMontageInfo.PlayInstanceId = ReplicatedPlayBit;
+ PlayMontageSimulatedForMesh(NewRepMontageInfoForMesh.Mesh, NewRepMontageInfoForMesh.RepMontageInfo.AnimMontage, NewRepMontageInfoForMesh.RepMontageInfo.PlayRate);
+ }
+
+ if (AnimMontageInfo.LocalMontageInfo.AnimMontage == nullptr)
+ {
+ ABILITY_LOG(Warning, TEXT("OnRep_ReplicatedAnimMontage: PlayMontageSimulated failed. Name: %s, AnimMontage: %s"), *GetNameSafe(this), *GetNameSafe(NewRepMontageInfoForMesh.RepMontageInfo.AnimMontage));
+ return;
+ }
+
+ // Play Rate has changed
+ if (AnimInstance->Montage_GetPlayRate(AnimMontageInfo.LocalMontageInfo.AnimMontage) != NewRepMontageInfoForMesh.RepMontageInfo.PlayRate)
+ {
+ AnimInstance->Montage_SetPlayRate(AnimMontageInfo.LocalMontageInfo.AnimMontage, NewRepMontageInfoForMesh.RepMontageInfo.PlayRate);
+ }
+
+ // Compressed Flags
+ const bool bIsStopped = AnimInstance->Montage_GetIsStopped(AnimMontageInfo.LocalMontageInfo.AnimMontage);
+ const bool bReplicatedIsStopped = bool(NewRepMontageInfoForMesh.RepMontageInfo.IsStopped);
+
+ // Process stopping first, so we don't change sections and cause blending to pop.
+ if (bReplicatedIsStopped)
+ {
+ if (!bIsStopped)
+ {
+ CurrentMontageStopForMesh(NewRepMontageInfoForMesh.Mesh, NewRepMontageInfoForMesh.RepMontageInfo.BlendTime);
+ }
+ }
+ else if (!NewRepMontageInfoForMesh.RepMontageInfo.SkipPositionCorrection)
+ {
+ const int32 RepSectionID = AnimMontageInfo.LocalMontageInfo.AnimMontage->GetSectionIndexFromPosition(NewRepMontageInfoForMesh.RepMontageInfo.Position);
+ const int32 RepNextSectionID = int32(NewRepMontageInfoForMesh.RepMontageInfo.NextSectionID) - 1;
+
+ // And NextSectionID for the replicated SectionID.
+ if (RepSectionID != INDEX_NONE)
+ {
+ const int32 NextSectionID = AnimInstance->Montage_GetNextSectionID(AnimMontageInfo.LocalMontageInfo.AnimMontage, RepSectionID);
+
+ // If NextSectionID is different than the replicated one, then set it.
+ if (NextSectionID != RepNextSectionID)
+ {
+ AnimInstance->Montage_SetNextSection(AnimMontageInfo.LocalMontageInfo.AnimMontage->GetSectionName(RepSectionID), AnimMontageInfo.LocalMontageInfo.AnimMontage->GetSectionName(RepNextSectionID), AnimMontageInfo.LocalMontageInfo.AnimMontage);
+ }
+
+ // Make sure we haven't received that update too late and the client hasn't already jumped to another section.
+ const int32 CurrentSectionID = AnimMontageInfo.LocalMontageInfo.AnimMontage->GetSectionIndexFromPosition(AnimInstance->Montage_GetPosition(AnimMontageInfo.LocalMontageInfo.AnimMontage));
+ if ((CurrentSectionID != RepSectionID) && (CurrentSectionID != RepNextSectionID))
+ {
+ // Client is in a wrong section, teleport him into the begining of the right section
+ const float SectionStartTime = AnimMontageInfo.LocalMontageInfo.AnimMontage->GetAnimCompositeSection(RepSectionID).GetTime();
+ AnimInstance->Montage_SetPosition(AnimMontageInfo.LocalMontageInfo.AnimMontage, SectionStartTime);
+ }
+ }
+
+ // Update Position. If error is too great, jump to replicated position.
+ const float CurrentPosition = AnimInstance->Montage_GetPosition(AnimMontageInfo.LocalMontageInfo.AnimMontage);
+ const int32 CurrentSectionID = AnimMontageInfo.LocalMontageInfo.AnimMontage->GetSectionIndexFromPosition(CurrentPosition);
+ const float DeltaPosition = NewRepMontageInfoForMesh.RepMontageInfo.Position - CurrentPosition;
+
+ // Only check threshold if we are located in the same section. Different sections require a bit more work as we could be jumping around the timeline.
+ // And therefore DeltaPosition is not as trivial to determine.
+ if ((CurrentSectionID == RepSectionID) && (FMath::Abs(DeltaPosition) > MONTAGE_REP_POS_ERR_THRESH) && (NewRepMontageInfoForMesh.RepMontageInfo.IsStopped == 0))
+ {
+ // fast forward to server position and trigger notifies
+ if (FAnimMontageInstance* MontageInstance = AnimInstance->GetActiveInstanceForMontage(NewRepMontageInfoForMesh.RepMontageInfo.AnimMontage))
+ {
+ // Skip triggering notifies if we're going backwards in time, we've already triggered them.
+ const float DeltaTime = !FMath::IsNearlyZero(NewRepMontageInfoForMesh.RepMontageInfo.PlayRate) ? (DeltaPosition / NewRepMontageInfoForMesh.RepMontageInfo.PlayRate) : 0.f;
+ if (DeltaTime >= 0.f)
+ {
+ MontageInstance->UpdateWeight(DeltaTime);
+ MontageInstance->HandleEvents(CurrentPosition, NewRepMontageInfoForMesh.RepMontageInfo.Position, nullptr);
+ AnimInstance->TriggerAnimNotifies(DeltaTime);
+ }
+ }
+ AnimInstance->Montage_SetPosition(AnimMontageInfo.LocalMontageInfo.AnimMontage, NewRepMontageInfoForMesh.RepMontageInfo.Position);
+ }
+ }
+ }
+ }
+ }
+}
+
+FVIGameplayAbilityLocalAnimMontageForMesh& UVIAbilitySystemComponent::GetLocalAnimMontageInfoForMesh(USkeletalMeshComponent* InMesh)
+{
+ for (FVIGameplayAbilityLocalAnimMontageForMesh& MontageInfo : LocalAnimMontageInfoForMeshes)
+ {
+ if (MontageInfo.Mesh == InMesh)
+ {
+ return MontageInfo;
+ }
+ }
+
+ const FVIGameplayAbilityLocalAnimMontageForMesh MontageInfo = FVIGameplayAbilityLocalAnimMontageForMesh(InMesh);
+ LocalAnimMontageInfoForMeshes.Add(MontageInfo);
+ return LocalAnimMontageInfoForMeshes.Last();
+}
+
+FVIGameplayAbilityRepAnimMontageForMesh& UVIAbilitySystemComponent::GetGameplayAbilityRepAnimMontageForMesh(USkeletalMeshComponent* InMesh)
+{
+ for (FVIGameplayAbilityRepAnimMontageForMesh& RepMontageInfo : RepAnimMontageInfoForMeshes)
+ {
+ if (RepMontageInfo.Mesh == InMesh)
+ {
+ return RepMontageInfo;
+ }
+ }
+
+ const FVIGameplayAbilityRepAnimMontageForMesh RepMontageInfo = FVIGameplayAbilityRepAnimMontageForMesh(InMesh);
+ RepAnimMontageInfoForMeshes.Add(RepMontageInfo);
+ return RepAnimMontageInfoForMeshes.Last();
+}
+
+void UVIAbilitySystemComponent::OnPredictiveMontageRejectedForMesh(
+ USkeletalMeshComponent* const InMesh, UAnimMontage* const PredictiveMontage)
+{
+ UAnimInstance* AnimInstance = IsValid(InMesh) && InMesh->GetOwner() == AbilityActorInfo->AvatarActor ? InMesh->GetAnimInstance() : nullptr;
+ if (AnimInstance && PredictiveMontage)
+ {
+ // If this montage is still playing, kill it
+ if (AnimInstance->Montage_IsPlaying(PredictiveMontage))
+ {
+ AnimInstance->Montage_Stop(PredictiveMontage->GetDefaultBlendOutTime(), PredictiveMontage);
+ }
+ }
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIAssetManager.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIAssetManager.cpp
new file mode 100644
index 00000000..93f74bbd
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIAssetManager.cpp
@@ -0,0 +1,11 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "GAS/VIAssetManager.h"
+#include "AbilitySystemGlobals.h"
+
+void UVIAssetManager::StartInitialLoading()
+{
+ Super::StartInitialLoading();
+
+ UAbilitySystemGlobals::Get().InitGlobalData();
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIGameplayAbility.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIGameplayAbility.cpp
new file mode 100644
index 00000000..99c801ff
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/GAS/VIGameplayAbility.cpp
@@ -0,0 +1,66 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "GAS/VIGameplayAbility.h"
+#include "Logging/MessageLog.h"
+#include "AbilitySystemComponent.h"
+
+#if WITH_EDITOR
+void UVIGameplayAbility::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent)
+{
+ Super::PostEditChangeProperty(PropertyChangedEvent);
+
+ if (PropertyChangedEvent.GetPropertyName().IsEqual(TEXT("InstancingPolicy")))
+ {
+ if (InstancingPolicy == EGameplayAbilityInstancingPolicy::NonInstanced)
+ {
+ InstancingPolicy = EGameplayAbilityInstancingPolicy::InstancedPerActor;
+
+ FMessageLog MsgLog("AssetCheck");
+
+ MsgLog.Error(FText::FromString("VIGameplayAbility must be instanced, resetting to default automatically"));
+ MsgLog.Open(EMessageSeverity::Error);
+ }
+ }
+}
+#endif // WITH_EDITOR
+
+void UVIGameplayAbility::SetCurrentMontageForMesh(USkeletalMeshComponent* InMesh, UAnimMontage* InCurrentMontage)
+{
+ ensure(IsInstantiated());
+
+ FVIAbilityMeshMontage AbilityMeshMontage;
+ if (FindAbillityMeshMontage(InMesh, AbilityMeshMontage))
+ {
+ AbilityMeshMontage.Montage = InCurrentMontage;
+ }
+ else
+ {
+ CurrentAbilityMeshMontages.Add(FVIAbilityMeshMontage(InMesh, InCurrentMontage));
+ }
+}
+
+bool UVIGameplayAbility::FindAbillityMeshMontage(const USkeletalMeshComponent* InMesh, FVIAbilityMeshMontage& InAbilityMeshMontage)
+{
+ for (const FVIAbilityMeshMontage& MeshMontage : CurrentAbilityMeshMontages)
+ {
+ if (MeshMontage.Mesh == InMesh)
+ {
+ InAbilityMeshMontage = MeshMontage;
+ return true;
+ }
+ }
+
+ return false;
+}
+
+FString UVIGameplayAbility::GetCurrentPredictionKeyStatus() const
+{
+ const UAbilitySystemComponent* ASC = GetAbilitySystemComponentFromActorInfo();
+ return ASC->ScopedPredictionKey.ToString() + " is valid for more prediction: " + (ASC->ScopedPredictionKey.IsValidForMorePrediction() ? TEXT("true") : TEXT("false"));
+}
+
+bool UVIGameplayAbility::IsPredictionKeyValidForMorePrediction() const
+{
+ const UAbilitySystemComponent* ASC = GetAbilitySystemComponentFromActorInfo();
+ return ASC->ScopedPredictionKey.IsValidForMorePrediction();
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacter.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacter.cpp
new file mode 100644
index 00000000..309179ae
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacter.cpp
@@ -0,0 +1,47 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "Pawn/VICharacter.h"
+#include "GAS/VIAbilitySystemComponent.h"
+#include "Pawn/VIPawnVaultComponent.h"
+#include "MotionWarpingComponent.h"
+
+AVICharacter::AVICharacter(const FObjectInitializer& OI)
+ : Super(OI)
+{
+ VaultComponent = CreateDefaultSubobject(TEXT("PawnVaulting"));
+ MotionWarpingComponent = CreateDefaultSubobject(TEXT("MotionWarping"));
+}
+
+void AVICharacter::BeginPlay()
+{
+ Super::BeginPlay();
+
+ // Init simulated proxy
+ if (AbilitySystem && GetLocalRole() == ROLE_SimulatedProxy)
+ {
+ // Will never have a valid controller
+ AbilitySystem->InitAbilityActorInfo(this, this);
+ }
+}
+
+void AVICharacter::PossessedBy(AController* NewController)
+{
+ Super::PossessedBy(NewController);
+
+ // Init authority/standalone
+ if (AbilitySystem)
+ {
+ AbilitySystem->InitAbilityActorInfo(this, this);
+ }
+}
+
+void AVICharacter::OnRep_Controller()
+{
+ Super::OnRep_Controller();
+
+ // Init local client
+ if (AbilitySystem)
+ {
+ AbilitySystem->InitAbilityActorInfo(this, this);
+ }
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacterAbilityBase.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacterAbilityBase.cpp
new file mode 100644
index 00000000..cd61d954
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacterAbilityBase.cpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "Pawn/VICharacterAbilityBase.h"
+#include "GAS/VIAbilitySystemComponent.h"
+
+AVICharacterAbilityBase::AVICharacterAbilityBase(const FObjectInitializer& OI)
+ : Super(OI)
+{
+ AbilitySystem = CreateDefaultSubobject(TEXT("AbilitySystem"));
+ AbilitySystem->SetIsReplicated(true);
+ AbilitySystem->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
+ AbilitySystemReplicationMode = (EVIGameplayEffectReplicationMode)(uint8)AbilitySystem->ReplicationMode;
+}
+
+#if WITH_EDITOR
+void AVICharacterAbilityBase::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent)
+{
+ Super::PostEditChangeProperty(PropertyChangedEvent);
+
+ if (PropertyChangedEvent.GetPropertyName().IsEqual(GET_MEMBER_NAME_CHECKED(AVICharacterAbilityBase, AbilitySystemReplicationMode)))
+ {
+ AbilitySystem->SetReplicationMode((EGameplayEffectReplicationMode)(uint8)AbilitySystemReplicationMode);
+ }
+}
+#endif // WITH_EDITOR
+
+UAbilitySystemComponent* AVICharacterAbilityBase::GetAbilitySystemComponent() const
+{
+ return AbilitySystem;
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacterBase.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacterBase.cpp
new file mode 100644
index 00000000..d994a713
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VICharacterBase.cpp
@@ -0,0 +1,308 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "Pawn/VICharacterBase.h"
+#include "Net/UnrealNetwork.h"
+#include "GameFramework/CharacterMovementComponent.h"
+#include "Pawn/VIPawnVaultComponent.h"
+#include "MotionWarpingComponent.h"
+#include "VIBlueprintFunctionLibrary.h"
+
+void AVICharacterBase::BeginPlay()
+{
+ Super::BeginPlay();
+
+ VaultComponent = IVIPawnInterface::Execute_GetPawnVaultComponent(this);
+ MotionWarpingComponent = IVIPawnInterface::Execute_GetMotionWarpingComponent(this);
+}
+
+void AVICharacterBase::CheckJumpInput(float DeltaTime)
+{
+ const bool bIsVaulting = IsVaulting();
+
+ // Server update simulated proxies with correct vaulting state
+ if (GetLocalRole() == ROLE_Authority && GetNetMode() != NM_Standalone)
+ {
+ bRepIsVaulting = bIsVaulting;
+ }
+
+ // Try to vault from local input
+ if (IsLocallyControlled() && VaultComponent)
+ {
+ // Disable jump if vaulting
+ if (VaultComponent->bPressedVault)
+ {
+ bPressedJump = false;
+ }
+
+ // Possibly execute vault
+ if (GetCharacterMovement())
+ {
+ VaultComponent->CheckVaultInput(DeltaTime, GetCharacterMovement()->MovementMode);
+ }
+ else
+ {
+ VaultComponent->CheckVaultInput(DeltaTime);
+ }
+ }
+
+ // Pick up changes in vaulting state to change movement mode
+ // to something other than flying (required for root motion on Z)
+ if (bWasVaulting && !bIsVaulting)
+ {
+ StopVaultAbility();
+ }
+
+ // Call super so we actually jump if we're meant to
+ Super::CheckJumpInput(DeltaTime);
+
+ // Cache end of frame
+ bWasVaulting = bIsVaulting;
+}
+
+void AVICharacterBase::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const
+{
+ Super::GetLifetimeReplicatedProps(OutLifetimeProps);
+
+ DOREPLIFETIME_CONDITION(AVICharacterBase, bRepIsVaulting, COND_SimulatedOnly);
+ DOREPLIFETIME_CONDITION(AVICharacterBase, RepMotionMatch, COND_SimulatedOnly);
+}
+
+void AVICharacterBase::Jump()
+{
+ // If missing critical components then jump and exit
+ if (!VaultComponent || !GetCharacterMovement())
+ {
+ Super::Jump();
+ return;
+ }
+
+ // Either jump or vault, determined by VaultComponent::EVIJumpKeyPriority
+ if (VaultComponent->Jump(GetCharacterMovement()->GetGravityZ(), CanJump(), GetCharacterMovement()->IsFalling()))
+ {
+ // Jump normally
+ Super::Jump();
+ }
+ else
+ {
+ // Jump key essentially presses the vault input
+ VaultComponent->Vault();
+ }
+}
+
+void AVICharacterBase::StopJumping()
+{
+ Super::StopJumping();
+
+ // Release vault input if the jump key pressed vault instead
+ if (VaultComponent)
+ {
+ VaultComponent->StopJumping();
+ }
+}
+
+void AVICharacterBase::StartVaultAbility_Implementation()
+{
+ // Called by GA_Vault
+ // Need to be in flying mode to have root motion on Z axis
+ if (GetCharacterMovement() && GetLocalRole() > ROLE_SimulatedProxy)
+ {
+ GetCharacterMovement()->SetMovementMode(MOVE_Flying);
+ }
+}
+
+void AVICharacterBase::StopVaultAbility()
+{
+ // Called by CheckJumpInput()
+ // Exiting flying mode
+ // This may put is straight into falling if we aren't properly grounded, which is fine
+ if (GetCharacterMovement() && GetLocalRole() > ROLE_SimulatedProxy)
+ {
+ GetCharacterMovement()->SetMovementMode(GetCharacterMovement()->GetGroundMovementMode());
+ }
+
+ OnStopVaultAbility();
+}
+
+void AVICharacterBase::OnRep_MotionMatch()
+{
+ // Simulated proxies update their sync points here, sent from the server during GA_Vault
+ MotionWarpingComponent->AddOrUpdateWarpTargetFromLocationAndRotation(TEXT("VaultSyncPoint"), RepMotionMatch.Location, RepMotionMatch.Direction.Rotation());
+}
+
+bool AVICharacterBase::IsVaulting() const
+{
+ // Simulated proxies use the value provided by server
+ if (GetLocalRole() == ROLE_SimulatedProxy)
+ {
+ return bRepIsVaulting;
+ }
+
+ // Local and authority uses gameplay tags for a predicted result
+ if (VaultComponent)
+ {
+ return VaultComponent->IsVaulting();
+ }
+
+ return false;
+}
+
+// *********************************************** //
+// ******** Begin Pawn Vaulting Interface ******** //
+// *********************************************** //
+
+UVIPawnVaultComponent* AVICharacterBase::GetPawnVaultComponent_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetPawnVaultComponent not implemented for { %s }. Cannot Vault."), *GetName()));
+ return nullptr;
+}
+
+UMotionWarpingComponent* AVICharacterBase::GetMotionWarpingComponent_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetMotionWarpingComponent not implemented for { %s }. Cannot Vault."), *GetName()));
+ return nullptr;
+}
+
+FVIAnimSet AVICharacterBase::GetVaultAnimSet_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetVaultAnimSet not implemented for { %s }. Cannot Vault."), *GetName()));
+ return FVIAnimSet();
+}
+
+FVITraceSettings AVICharacterBase::GetVaultTraceSettings_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetVaultTraceSettings not implemented for { %s }. Using default trace settings."), *GetName()), false);
+ return FVITraceSettings();
+}
+
+FVector AVICharacterBase::GetVaultDirection_Implementation() const
+{
+ // Use input vector if available
+ if (GetCharacterMovement() && !GetCharacterMovement()->GetCurrentAcceleration().IsNearlyZero())
+ {
+ return GetCharacterMovement()->GetCurrentAcceleration();
+ }
+
+ // Use character facing direction if not providing input
+ return GetActorForwardVector();
+}
+
+bool AVICharacterBase::CanVault_Implementation() const
+{
+ // Vaulting must finish before starting another vault attempt
+ if (IsVaulting())
+ {
+ return false;
+ }
+
+ // Invalid components
+ if (!VaultComponent || !GetCharacterMovement())
+ {
+ return false;
+ }
+
+ // Animation instance is required to play vault montage
+ if (!GetMesh() || !GetMesh()->GetAnimInstance())
+ {
+ return false;
+ }
+
+ // Authority not initialized (this isn't set on clients)
+ if (HasAuthority() && !VaultComponent->bVaultAbilityInitialized)
+ {
+ return false;
+ }
+
+ // Exit if character is in a state they cannot vault from
+ if (GetCharacterMovement()->IsMovingOnGround() || GetCharacterMovement()->IsFalling() || GetCharacterMovement()->IsSwimming())
+ {
+ if (GetCharacterMovement()->IsMovingOnGround() && !VaultComponent->bCanVaultFromGround)
+ {
+ return false;
+ }
+
+ if (GetCharacterMovement()->IsFalling() && !VaultComponent->bCanVaultFromFalling)
+ {
+ return false;
+ }
+
+ if (GetCharacterMovement()->IsSwimming() && !VaultComponent->bCanVaultFromSwimming)
+ {
+ return false;
+ }
+ }
+ else
+ {
+ return false;
+ }
+
+ // Can't vault while crouching
+ if (!VaultComponent->bCanVaultFromCrouching && GetCharacterMovement()->IsCrouching())
+ {
+ return false;
+ }
+
+ // Passed all conditions
+ return true;
+}
+
+void AVICharacterBase::OnLocalPlayerVault_Implementation(const FVector& Location, const FVector& Direction)
+{
+ // LocalPlayer just stores the data in the same place for convenience, ease of use, memory reduction, etc
+ RepMotionMatch = FVIRepMotionMatch(Location, Direction);
+}
+
+void AVICharacterBase::GetVaultLocationAndDirection_Implementation(FVector& OutLocation, FVector& OutDirection) const
+{
+ // Because LocalPlayer stores in the same place, no need for any testing as they all use RepMotionMatch to store this
+
+ // This is only currently used for FBIK tracing
+ OutLocation = RepMotionMatch.Location;
+ OutDirection = RepMotionMatch.Direction;
+}
+
+void AVICharacterBase::ReplicateMotionMatch_Implementation(const FVIRepMotionMatch& MotionMatch)
+{
+ // GA_Vault has directed server to update it's RepMotionMatch property so that it will
+ // be replicated to simulated proxies with 1 decimal point of precision (net quantization)
+ RepMotionMatch = MotionMatch;
+}
+
+bool AVICharacterBase::IsWalkable_Implementation(const FHitResult& HitResult) const
+{
+ // Surface we hit can be walked on or not
+ return GetCharacterMovement() && GetCharacterMovement()->IsWalkable(HitResult);
+}
+
+bool AVICharacterBase::CanAutoVaultInCustomMovementMode_Implementation() const
+{
+ return true;
+
+ // Example usage commented out
+
+ /*
+
+ if (GetCharacterMovement())
+ {
+ switch (GetCharacterMovement()->CustomMovementMode)
+ {
+ case 0:
+ return false;
+ case 1: // Some example custom mode where auto vault can work
+ return true;
+ case 2:
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ */
+}
+
+// *********************************************** //
+// ********* End Pawn Vaulting Interface ********* //
+// *********************************************** //
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VIPawnVaultComponent.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VIPawnVaultComponent.cpp
new file mode 100644
index 00000000..8ad33b58
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/Pawn/VIPawnVaultComponent.cpp
@@ -0,0 +1,517 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "Pawn/VIPawnVaultComponent.h"
+#include "VIBlueprintFunctionLibrary.h"
+#include "GameFramework/Character.h"
+#include "Components/CapsuleComponent.h"
+#include "AbilitySystemInterface.h"
+#include "GAS/VIAbilitySystemComponent.h"
+#include "Pawn/VIPawnInterface.h"
+#include "GameFramework/PawnMovementComponent.h"
+#include "Kismet/GameplayStaticsTypes.h"
+#include "AbilitySystemBlueprintLibrary.h"
+#include "Kismet/KismetSystemLibrary.h"
+
+DECLARE_CYCLE_STAT(TEXT("AutoVault"), STAT_VAULTAUTOVAULT, STATGROUP_VaultIt);
+
+DEFINE_LOG_CATEGORY_STATIC(LogVaultItAntiCheat, Log, All);
+
+void UVIPawnVaultComponent::BeginPlay()
+{
+ Super::BeginPlay();
+
+ // Cache PawnOwner
+ PawnOwner = (GetOwner()) ? GetOwner() : nullptr;
+
+ if (PawnOwner)
+ {
+ // Cache CapsuleInfo
+ CapsuleInfo = GetCapsuleInfo();
+
+ // Cache ASC
+ if (const IAbilitySystemInterface* const Interface = Cast(PawnOwner))
+ {
+ ASC = Interface->GetAbilitySystemComponent();
+ if (!ASC)
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("UVIPawnVaultComponent::BeginPlay %s IAbilitySystemInterface does not return a valid UAbilitySystemComponent. Vault will not work."), *PawnOwner->GetName()));
+ }
+ }
+ else
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("UVIPawnVaultComponent::BeginPlay %s does not implement interface IAbilitySystemInterface. Vault will not work."), *PawnOwner->GetName()));
+ return;
+ }
+ }
+
+ // Grant Vault Ability to PawnOwner ASC (on server / standalone)
+ // Has a lot of error logging if anything is invalid to reduce user error
+ if (PawnOwner->GetLocalRole() == ROLE_Authority && !bVaultAbilityInitialized)
+ {
+ if (VaultAbility)
+ {
+ if (VaultAbilityTag.IsValid())
+ {
+ bVaultAbilityInitialized = true;
+ ASC->GiveAbility(FGameplayAbilitySpec(VaultAbility, 1, INDEX_NONE, PawnOwner));
+ }
+ else
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("VaultTag not assigned for { %s }"), *GetName()));
+ }
+ }
+ else
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("VaultAbility class not assigned for { %s }"), *GetName()));
+ }
+
+ if (!VaultStateTag.IsValid())
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("VaultStateTag not assigned for { %s }"), *GetName()));
+ }
+
+ if (!VaultRemovalTag.IsValid())
+ {
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("VaultRemovalTag not assigned for { %s }"), *GetName()));
+ }
+ }
+
+ AutoVaultSkippedTicks = AutoVaultCheckSkip;
+}
+
+bool UVIPawnVaultComponent::Jump(float GravityZ /* = 0.f */, bool bCanJump /* = false */, bool bIsFalling /* = false */)
+{
+ bLastJumpInputVaulted = false;
+
+ switch (JumpKeyPriority)
+ {
+ case EVIJumpKeyPriority::JKP_SelectHighestPoint:
+ // Test to see if jump is likely to succeed, otherwise vault
+ if (IVIPawnInterface::Execute_CanVault(PawnOwner))
+ {
+ PendingVaultResult = ComputeVault();
+ if (PendingVaultResult.bSuccess)
+ {
+ // Have a surface we can land on from the result
+ // now test if jumping will get us there instead
+ // by testing against the vertical height of predicted
+ // landing location
+
+ FPredictProjectilePathResult PathResult = FPredictProjectilePathResult();
+ bool bUseJump = PredictLandingLocation(PathResult, CapsuleInfo.HalfHeight, CapsuleInfo.Radius, GravityZ);
+
+ if (bUseJump)
+ {
+ const FVector& Up = PawnOwner->GetActorUpVector();
+
+ const FVector& LandLoc = PathResult.HitResult.Location;
+ const FVector VaultLoc = PendingVaultResult.Location - (Up * CapsuleInfo.HalfHeight);
+
+ const float LandZ = UVIBlueprintFunctionLibrary::ComputeDirectionToFloat(LandLoc, Up);
+ const float VaultZ = UVIBlueprintFunctionLibrary::ComputeDirectionToFloat(VaultLoc, Up);
+
+ if (LandZ < VaultZ)
+ {
+ bUseJump = false;
+ }
+ }
+
+ if (bUseJump)
+ {
+ PendingVaultResult = FVIVaultResult();
+ return true;
+ }
+ else
+ {
+ bLastJumpInputVaulted = true;
+ return false;
+ }
+ }
+ else
+ {
+ return true;
+ }
+ }
+ else
+ {
+ return true;
+ }
+ break;
+ case EVIJumpKeyPriority::JKP_AlwaysVault:
+ // If it can vault it will, otherwise jump
+ if (IVIPawnInterface::Execute_CanVault(PawnOwner))
+ {
+ PendingVaultResult = ComputeVault();
+ if (PendingVaultResult.bSuccess)
+ {
+ bLastJumpInputVaulted = true;
+ return false;
+ }
+ else
+ {
+ PendingVaultResult = FVIVaultResult();
+ return true;
+ }
+ }
+ break;
+ case EVIJumpKeyPriority::JKP_OnlyVaultFromAir:
+ // Determine if jump key can do anything
+ if (bIsFalling && !bCanJump)
+ {
+ bLastJumpInputVaulted = true;
+ return false;
+ }
+ else
+ {
+ return true;
+ }
+ break;
+ case EVIJumpKeyPriority::JKP_DisableVault:
+ default:
+ break;
+ }
+
+ return true;
+}
+
+void UVIPawnVaultComponent::StopJumping()
+{
+ if (bLastJumpInputVaulted)
+ {
+ StopVault();
+ }
+}
+
+void UVIPawnVaultComponent::Vault()
+{
+ bPressedVault = true;
+}
+
+void UVIPawnVaultComponent::StopVault()
+{
+ bPressedVault = false;
+}
+
+void UVIPawnVaultComponent::CheckVaultInput(float DeltaTime, TEnumAsByte MovementMode /* = MOVE_Walking */)
+{
+ if (PawnOwner && PawnOwner->IsLocallyControlled())
+ {
+ // Compute AutoVault
+ bool bAutoVault = false;
+ if (!bPressedVault)
+ {
+ // Skip ticks optionally to reduce overhead
+ if (AutoVaultSkippedTicks == AutoVaultCheckSkip)
+ {
+ // Waste of resources to check if already vaulting
+ if (!IsVaulting() && AutoVaultStates != (uint8)EVIAutoVault::VIAV_None)
+ {
+ // Compare bit flags to see if we are in a state we're allowed to auto-vault from
+ switch (MovementMode)
+ {
+ case MOVE_Walking:
+ case MOVE_NavWalking:
+ bAutoVault = (AutoVaultStates & (uint8)EVIAutoVault::VIAV_Walking) != 0;
+ break;
+ case MOVE_Falling:
+ bAutoVault = (AutoVaultStates & (uint8)EVIAutoVault::VIAV_Falling) != 0;
+ break;
+ case MOVE_Swimming:
+ bAutoVault = (AutoVaultStates & (uint8)EVIAutoVault::VIAV_Swimming) != 0;
+ break;
+ case MOVE_Flying:
+ bAutoVault = (AutoVaultStates & (uint8)EVIAutoVault::VIAV_Flying) != 0;
+ break;
+ case MOVE_Custom:
+ bAutoVault = (AutoVaultStates & (uint8)EVIAutoVault::VIAV_Custom) != 0;
+ if (bAutoVault)
+ {
+ bAutoVault = IVIPawnInterface::Execute_CanAutoVaultInCustomMovementMode(PawnOwner);
+ }
+ default:
+ break;
+ }
+
+ if (bAutoVault)
+ {
+ // Perform traces to test if we should auto vault
+ bAutoVault &= ComputeShouldAutoVault();
+ }
+ }
+
+ AutoVaultSkippedTicks = 0;
+ }
+ else
+ {
+ AutoVaultSkippedTicks++;
+ }
+ }
+
+ if (bPressedVault || bAutoVault)
+ {
+ if (IVIPawnInterface::Execute_CanVault(PawnOwner))
+ {
+ const FVIVaultResult& VaultResult = (PendingVaultResult.IsValid()) ? PendingVaultResult : ComputeVault();
+
+ if (VaultResult.bSuccess)
+ {
+ // Consume input if required
+ if (AutoReleaseVaultInput != EVIVaultInputRelease::VIR_Never) { bPressedVault = false; }
+
+ // Send vault result as info through EventData
+ FVIGameplayAbilityTargetData_VaultInfo Info;
+ Info.VaultInfo = ComputeVaultInfoFromResult(VaultResult);
+
+ // Cache gameplay ability event data to be sent
+ FGameplayEventData EventData;
+ EventData.Instigator = PawnOwner;
+ EventData.TargetData.Add(new FVIGameplayAbilityTargetData_VaultInfo(Info));
+
+ // Trigger ability and send event data to ability & server
+ UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(PawnOwner, VaultAbilityTag, EventData);
+
+ // Send to Pawn to use for FBIK (or anything extended by user)
+ IVIPawnInterface::Execute_OnLocalPlayerVault(PawnOwner, VaultResult.Location, VaultResult.Direction);
+ }
+ }
+ }
+ }
+
+ if (AutoReleaseVaultInput == EVIVaultInputRelease::VIR_Always)
+ {
+ bPressedVault = false;
+ }
+
+ // Clear at end of frame always; triggered by jump key
+ PendingVaultResult = FVIVaultResult();
+}
+
+bool UVIPawnVaultComponent::IsVaulting() const
+{
+ if (ASC)
+ {
+ return ASC->GetTagCount(VaultStateTag) > ASC->GetTagCount(VaultRemovalTag);
+ }
+
+ return false;
+}
+
+FVIVaultResult UVIPawnVaultComponent::ComputeVault() const
+{
+ return UVIBlueprintFunctionLibrary::ComputeVault(PawnOwner, IVIPawnInterface::Execute_GetVaultDirection(PawnOwner), IVIPawnInterface::Execute_GetVaultTraceSettings(PawnOwner), CapsuleInfo, bVaultTraceComplex);
+}
+
+FVIVaultInfo UVIPawnVaultComponent::ComputeVaultInfoFromResult_Implementation(const FVIVaultInfo& VaultResult) const
+{
+ FVIVaultInfo Result;
+
+ // Cache properties
+ const FVector& Up = PawnOwner->GetActorUpVector();
+ const FVector Location = VaultResult.Location - Up * CapsuleInfo.HalfHeight;
+
+ const bool bUseAdditionalHeight = (AdditionalVaultHeight > 0.f || AdditionalVaultHeightFalling > 0.f);
+ const float AdditionalHeight = (bUseAdditionalHeight && PawnOwner->GetMovementComponent() && PawnOwner->GetMovementComponent()->IsFalling()) ? AdditionalVaultHeightFalling : AdditionalVaultHeight;
+ const FVector AdditionalHeightOffset = (bUseAdditionalHeight) ? Up * AdditionalHeight : FVector::ZeroVector;
+
+ // Compute
+ Result.Location = Location + AdditionalHeightOffset; // Where we are going on the ledge
+ Result.Direction = VaultResult.Direction; // Used by montage notify to face ledge
+ Result.SetHeight(VaultResult.Height); // Used to determine which animation set to use
+
+ if (PawnOwner->IsLocallyControlled())
+ {
+ Result.RandomSeed = FMath::RandRange(0, 999); // Used as a rand seed to randomize animations
+ }
+
+ return Result;
+}
+
+bool UVIPawnVaultComponent::ComputeShouldAutoVault_Implementation()
+{
+ if (!CapsuleInfo.IsValidCapsule())
+ {
+ return false;
+ }
+
+ const FVector& VaultDirection = IVIPawnInterface::Execute_GetVaultDirection(PawnOwner).GetSafeNormal();
+ if (VaultDirection.IsNearlyZero())
+ {
+ // Do not have a usable vector
+ return false;
+ }
+
+ SCOPE_CYCLE_COUNTER(STAT_VAULTAUTOVAULT);
+
+ // Trace to see if a potentially vault-able object is ahead of us
+ const FVITraceSettings& TraceSettings = IVIPawnInterface::Execute_GetVaultTraceSettings(PawnOwner);
+
+ const float HeightOffset = CapsuleInfo.HalfHeight + TraceSettings.CollisionFloatHeight;
+ const FVector& Up = PawnOwner->GetActorUpVector();
+ const FVector BaseLoc = PawnOwner->GetActorLocation() - (Up * HeightOffset) - (Up * CapsuleInfo.Radius * 0.05f);
+
+ const FVector TraceStart = BaseLoc + Up * ((TraceSettings.MaxLedgeHeight + TraceSettings.MinLedgeHeight) * 0.5f);
+ const FVector TraceEnd = TraceStart + (VaultDirection * TraceSettings.ReachDistance);
+ const float TraceHalfHeight = 1.f + ((TraceSettings.MaxLedgeHeight - TraceSettings.MinLedgeHeight) * 0.5f);
+
+ const TArray TraceIgnore = { PawnOwner };
+
+ FHitResult Hit(ForceInit);
+ UVIBlueprintFunctionLibrary::CapsuleTraceSingleForObjects(
+ PawnOwner, // World Context
+ TraceStart, // Start
+ TraceEnd, // End
+ PawnOwner->GetActorQuat(), // Rotation
+ CapsuleInfo.Radius, // Radius
+ TraceHalfHeight, // HalfHeight
+ TraceSettings.GetObjectTypes(), // TraceChannels
+ false, // bTraceComplex
+ TraceIgnore, // ActorsToIgnore
+ false, // bDrawDebug (ForDuration)
+ Hit, // OutHit
+ false, // bIgnoreSelf
+ FLinearColor::Red, // TraceColor
+ FLinearColor::Green, // TraceHitColor
+ 1.f // DrawTime
+ );
+
+ return Hit.bBlockingHit;
+}
+
+FVICapsuleInfo UVIPawnVaultComponent::GetCapsuleInfo_Implementation() const
+{
+ // Always return the cached info if its valid, no need to do anything
+ // User is expected to update CapsuleInfo themselves if the size changes
+ if (CapsuleInfo.IsValidCapsule())
+ {
+ return CapsuleInfo;
+ }
+ else if (const ACharacter* const CharacterOwner = Cast(PawnOwner))
+ {
+ // Automatically use the character's capsule if owner is a character
+ if (CharacterOwner->GetCapsuleComponent())
+ {
+ return FVICapsuleInfo(CharacterOwner->GetCapsuleComponent()->GetScaledCapsuleHalfHeight(), CharacterOwner->GetCapsuleComponent()->GetScaledCapsuleRadius());
+ }
+ else
+ {
+ // Just to prevent a crash in some strange contexts, better to pick it up so it can be resolved
+ ensure(false);
+ }
+ }
+ else
+ {
+ // Pawns must override this and return information akin to a capsule
+ UVIBlueprintFunctionLibrary::MessageLogError("UVIPawnVaultComponent::GetCapsuleInfo requires override for non-characters", true);
+ }
+
+ return CapsuleInfo;
+}
+
+bool UVIPawnVaultComponent::ComputeAntiCheatResult(const FVIVaultInfo& ClientVaultInfo) const
+{
+ if (!PawnOwner)
+ {
+ return true;
+ }
+
+ // AntiCheat disabled
+ if (AntiCheatType == EVIAntiCheatType::VIACT_None)
+ {
+ return true;
+ }
+
+ // Standalone and listen server and AI and client doesn't need to test
+ // Only need to test for remote players who sent info to server
+ if (PawnOwner->IsLocallyControlled())
+ {
+ return true;
+ }
+
+ // If too out of sync, deny vault (this will cause client to de-sync as server will force vaulting to end and return to original location)
+ switch (AntiCheatType)
+ {
+ case EVIAntiCheatType::VIACT_Enabled:
+ {
+ // Custom logic for expensive anti-cheat, server doing same checks as client and comparing the result
+ const FVIVaultResult& ServerVaultResult = ComputeVault();
+ if (!ServerVaultResult.bSuccess)
+ {
+ // User may want to use more lenient settings for authority in VIPawnInterface::GetVaultTraceSettings()
+ return false;
+ }
+
+ // Convert trace to usable info
+ const FVIVaultInfo ServerVaultInfo = ComputeVaultInfoFromResult(ServerVaultResult);
+
+ if (!AntiCheatSettings.ComputeAntiCheat(ClientVaultInfo, ServerVaultInfo, PawnOwner))
+ {
+ return false;
+ }
+ }
+ return true;
+ case EVIAntiCheatType::VIACT_Custom:
+ // Using custom AntiCheat override
+ return ComputeCustomAntiCheat(ClientVaultInfo);
+ case EVIAntiCheatType::VIACT_None:
+ default:
+ break;
+ }
+
+ return true;
+}
+
+bool FVIAntiCheatSettings::ComputeAntiCheat(const FVIVaultInfo& ClientInfo, const FVIVaultInfo& ServerInfo, const APawn* const Pawn) const
+{
+ // The results here are almost always nearly identical due to prediction unless de-syncing, lower tolerances can be used
+
+ if (!Pawn)
+ {
+ return true;
+ }
+
+ // Location test (magnitude)
+ if (LocationErrorThreshold > -1.f)
+ {
+ const float LocDiff = (ServerInfo.Location - ClientInfo.Location).Size();
+ if (LocDiff >= LocationErrorThreshold)
+ {
+ UE_LOG(LogVaultItAntiCheat, Warning, TEXT("{ %s } failed anti-cheat test due to error in location comparison with diff %f"), *Pawn->GetName(), LocDiff);
+ return false;
+ }
+ }
+
+ // Direction test (dot product)
+ if (DirectionErrorThreshold > -1.f)
+ {
+ const float DirDiff = (ServerInfo.Direction | ClientInfo.Direction);
+ if (DirDiff < (1.f - DirectionErrorThreshold))
+ {
+ UE_LOG(LogVaultItAntiCheat, Warning, TEXT("{ %s } failed anti-cheat test due to error in direction comparison with diff %f"), *Pawn->GetName(), DirDiff);
+ return false;
+ }
+ }
+
+ // Height test (magnitude)
+ if (HeightErrorThreshold > -1.f)
+ {
+ const float HeightDiff = (ServerInfo.Height - ClientInfo.Height);
+ if (HeightDiff >= HeightErrorThreshold)
+ {
+ UE_LOG(LogVaultItAntiCheat, Warning, TEXT("{ %s } failed anti-cheat test due to error in height comparison with diff %f"), *Pawn->GetName(), HeightDiff);
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool UVIPawnVaultComponent::ComputeCustomAntiCheat_Implementation(const FVIVaultInfo& ClientVaultInfo) const
+{
+ UVIBlueprintFunctionLibrary::MessageLogError("UVIPawnVaultComponent::PassCustomAntiCheatAnalysis requires override and testing, otherwise will always return true", true);
+ return true;
+}
+
+bool UVIPawnVaultComponent::PredictLandingLocation(FPredictProjectilePathResult& OutPredictResult, float HalfHeight, float Radius, float GravityZ) const
+{
+ return UVIBlueprintFunctionLibrary::PredictLandingLocation(OutPredictResult, PawnOwner, IVIPawnInterface::Execute_GetVaultTraceSettings(PawnOwner).GetObjectTypes(), HalfHeight, Radius, GravityZ, bVaultTraceComplex);
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VIBlueprintFunctionLibrary.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VIBlueprintFunctionLibrary.cpp
new file mode 100644
index 00000000..69b53a0d
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VIBlueprintFunctionLibrary.cpp
@@ -0,0 +1,576 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "VIBlueprintFunctionLibrary.h"
+#include "Kismet/GameplayStaticsTypes.h"
+#include "Pawn/VICharacterBase.h"
+#include "Components/CapsuleComponent.h"
+#include "GameFramework/CharacterMovementComponent.h"
+#include "Pawn/VIPawnInterface.h"
+#include "Stats/Stats.h"
+#include "CollisionQueryParams.h"
+#include "PhysicsEngine/PhysicsSettings.h"
+#include "DrawDebugHelpers.h"
+
+DECLARE_DWORD_ACCUMULATOR_STAT(TEXT("ComputeVault"), STAT_COMPUTEVAULT_COUNT, STATGROUP_VaultIt);
+DECLARE_CYCLE_STAT(TEXT("ComputeVault"), STAT_COMPUTEVAULT, STATGROUP_VaultIt);
+
+DECLARE_DWORD_ACCUMULATOR_STAT(TEXT("PredictCapsulePath"), STAT_PREDICTLANDINGLOCATION_COUNT, STATGROUP_VaultIt);
+DECLARE_CYCLE_STAT(TEXT("PredictCapsulePath"), STAT_PREDICTLANDINGLOCATION, STATGROUP_VaultIt);
+
+void UVIBlueprintFunctionLibrary::MessageLogError(const FString& ErrorMsg, bool bOpenLog /*= true*/)
+{
+ FMessageLog MsgLog("PIE");
+
+ MsgLog.Error(FText::FromString(ErrorMsg));
+
+ if (bOpenLog)
+ {
+ MsgLog.Open(EMessageSeverity::Error);
+ }
+}
+
+float UVIBlueprintFunctionLibrary::GetMaxHeightFromGround(const ACharacter* Character)
+{
+ if(!Character || !Character->GetCharacterMovement())
+ {
+ return 0.f;
+ }
+
+ return GetMaxHeightFromGroundForPawn(Character, Character->GetCharacterMovement()->GetGravityZ(), Character->GetCharacterMovement()->JumpZVelocity);
+}
+
+float UVIBlueprintFunctionLibrary::GetMaxVaultHeight(const APawn* Pawn)
+{
+ if (Pawn)
+ {
+ if (Pawn->Implements())
+ {
+ return IVIPawnInterface::Execute_GetVaultTraceSettings(Pawn).MaxLedgeHeight;
+ }
+ else
+ {
+ FMessageLog MsgLog("AssetCheck");
+
+ MsgLog.Error(FText::FromString(FString::Printf(TEXT("UVIBlueprintFunctionLibrary::GetMaxHeightFromGroundForPawn failed: %s does not implement interface UVIPawnInterface"), *Pawn->GetName())));
+ MsgLog.Open(EMessageSeverity::Error);
+ }
+ }
+
+ return 0.f;
+}
+
+float UVIBlueprintFunctionLibrary::GetMaxHeightFromGroundForPawn(const APawn* Pawn, const float Gravity, const float JumpZVelocity)
+{
+ return GetMaxJumpHeight(Gravity, JumpZVelocity) + GetMaxVaultHeight(Pawn);
+}
+
+float UVIBlueprintFunctionLibrary::GetMaxJumpHeightForCharacter(const ACharacter* Character)
+{
+ if (Character && Character->GetCharacterMovement())
+ {
+ return GetMaxJumpHeight(Character->GetCharacterMovement()->GetGravityZ(), Character->GetCharacterMovement()->JumpZVelocity);
+ }
+
+ return 0.f;
+}
+
+bool UVIBlueprintFunctionLibrary::ActorIsAscending(const AActor* InActor, bool bWorldUpIsZ)
+{
+ if (!InActor)
+ {
+ return false;
+ }
+
+ if (bWorldUpIsZ)
+ {
+ return InActor->GetVelocity().Z > 0.f;
+ }
+
+ return ComputeDirectionToFloat(InActor->GetVelocity(), InActor->GetActorUpVector()) > 0.f;
+}
+
+float UVIBlueprintFunctionLibrary::ComputeAnimationPlayRateFromDuration(const UAnimSequenceBase* Animation,
+ float Duration)
+{
+ if (Animation && Duration > 0.f)
+ {
+ return Animation->GetPlayLength() / Duration;
+ }
+ return 0.f;
+}
+
+FVIVaultInfo UVIBlueprintFunctionLibrary::GetVaultInfoFromTargetData(const FGameplayAbilityTargetDataHandle& TargetData)
+{
+ if (TargetData.Data.IsValidIndex(0))
+ {
+ const FGameplayAbilityTargetData* Data = TargetData.Data[0].Get();
+ if (Data)
+ {
+ const FVIGameplayAbilityTargetData_VaultInfo* VaultData = (const FVIGameplayAbilityTargetData_VaultInfo*)(Data);
+ const FVIVaultInfo* VaultInfoPtr = VaultData->GetVaultInfo();
+ if (VaultInfoPtr)
+ {
+ return *VaultInfoPtr;
+ }
+ }
+ }
+
+ return FVIVaultInfo();
+}
+
+bool UVIBlueprintFunctionLibrary::PredictLandingLocation(FPredictProjectilePathResult& OutPredictResult, ACharacter* ForCharacter, const TArray>& ObjectTypes, bool bTraceComplex)
+{
+ if (!ForCharacter)
+ {
+ return false;
+ }
+
+ return PredictLandingLocation(
+ OutPredictResult,
+ ForCharacter,
+ ObjectTypes,
+ ForCharacter->GetCapsuleComponent()->GetScaledCapsuleHalfHeight(),
+ ForCharacter->GetCapsuleComponent()->GetScaledCapsuleRadius(),
+ ForCharacter->GetCharacterMovement()->GetGravityZ(),
+ bTraceComplex
+ );
+}
+
+bool UVIBlueprintFunctionLibrary::PredictLandingLocation(FPredictProjectilePathResult& OutPredictResult, AActor* ForActor, const TArray>& ObjectTypes, float HalfHeight, float Radius, const FVector& Gravity, bool bTraceComplex)
+{
+ if (!ForActor)
+ {
+ return false;
+ }
+
+ const float GravityZ = ComputeDirectionToFloat(Gravity, ForActor->GetActorUpVector());
+ return PredictLandingLocation(OutPredictResult, ForActor, ObjectTypes, HalfHeight, Radius, GravityZ, bTraceComplex);
+}
+
+bool UVIBlueprintFunctionLibrary::PredictLandingLocation(FPredictProjectilePathResult& OutPredictResult, AActor* ForActor, const TArray>& ObjectTypes, float HalfHeight, float Radius, float GravityZ, bool bTraceComplex)
+{
+ if (!ForActor)
+ {
+ return false;
+ }
+
+ // Performance profiling
+ INC_DWORD_STAT(STAT_PREDICTLANDINGLOCATION_COUNT);
+ SCOPE_CYCLE_COUNTER(STAT_PREDICTLANDINGLOCATION);
+
+ Radius *= 0.98f;
+ constexpr float MaxSimTime = 2.f;
+ constexpr float SimFrequency = 15.f;
+ const TArray TraceIgnore{ ForActor };
+
+ FPredictProjectilePathParams Params = FPredictProjectilePathParams(Radius, ForActor->GetActorLocation(), ForActor->GetVelocity(), MaxSimTime);
+ Params.bTraceWithCollision = true;
+ Params.bTraceComplex = bTraceComplex;
+ Params.ActorsToIgnore = TraceIgnore;
+ Params.SimFrequency = SimFrequency;
+ Params.OverrideGravityZ = GravityZ;
+ Params.ObjectTypes = ObjectTypes;
+
+ // Do the trace
+ if (!PredictCapsulePath(ForActor, HalfHeight, Params, OutPredictResult, ForActor->GetActorUpVector()))
+ {
+ return false;
+ }
+ return true;
+}
+
+bool UVIBlueprintFunctionLibrary::PredictCapsulePath(const UObject* WorldContextObject, float HalfHeight, const struct FPredictProjectilePathParams& PredictParams, struct FPredictProjectilePathResult& PredictResult, const FVector& UpVector)
+{
+ PredictResult.Reset();
+ bool bBlockingHit = false;
+
+ UWorld const* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
+ if (World && PredictParams.SimFrequency > KINDA_SMALL_NUMBER)
+ {
+ const float SubstepDeltaTime = 1.f / PredictParams.SimFrequency;
+ const float GravityZ = FMath::IsNearlyEqual(PredictParams.OverrideGravityZ, 0.0f) ? World->GetGravityZ() : PredictParams.OverrideGravityZ;
+ const float ProjectileRadius = PredictParams.ProjectileRadius;
+
+ FCollisionQueryParams QueryParams(SCENE_QUERY_STAT(PredictProjectilePath), PredictParams.bTraceComplex);
+ FCollisionObjectQueryParams ObjQueryParams;
+ const bool bTraceWithObjectType = (PredictParams.ObjectTypes.Num() > 0);
+ const bool bTracePath = PredictParams.bTraceWithCollision && (PredictParams.bTraceWithChannel || bTraceWithObjectType);
+ if (bTracePath)
+ {
+ QueryParams.AddIgnoredActors(PredictParams.ActorsToIgnore);
+ if (bTraceWithObjectType)
+ {
+ for (auto Iter = PredictParams.ObjectTypes.CreateConstIterator(); Iter; ++Iter)
+ {
+ const ECollisionChannel& Channel = UCollisionProfile::Get()->ConvertToCollisionChannel(false, *Iter);
+ ObjQueryParams.AddObjectTypesToQuery(Channel);
+ }
+ }
+ }
+
+ FVector CurrentVel = PredictParams.LaunchVelocity;
+ FVector TraceStart = PredictParams.StartLocation;
+ FVector TraceEnd = TraceStart;
+ float CurrentTime = 0.f;
+ PredictResult.PathData.Reserve(FMath::Min(128, FMath::CeilToInt(PredictParams.MaxSimTime * PredictParams.SimFrequency)));
+ PredictResult.AddPoint(TraceStart, CurrentVel, CurrentTime);
+
+ FHitResult ObjectTraceHit(NoInit);
+ FHitResult ChannelTraceHit(NoInit);
+ ObjectTraceHit.Time = 1.f;
+ ChannelTraceHit.Time = 1.f;
+
+ const float MaxSimTime = PredictParams.MaxSimTime;
+ while (CurrentTime < MaxSimTime)
+ {
+ // Limit step to not go further than total time.
+ const float PreviousTime = CurrentTime;
+ const float ActualStepDeltaTime = FMath::Min(MaxSimTime - CurrentTime, SubstepDeltaTime);
+ CurrentTime += ActualStepDeltaTime;
+
+ // Integrate (Velocity Verlet method)
+ TraceStart = TraceEnd;
+ FVector OldVelocity = CurrentVel;
+ CurrentVel = OldVelocity + (UpVector * GravityZ * ActualStepDeltaTime);
+ //CurrentVel = OldVelocity + FVector(0.f, 0.f, GravityZ * ActualStepDeltaTime);
+ TraceEnd = TraceStart + (OldVelocity + CurrentVel) * (0.5f * ActualStepDeltaTime);
+ PredictResult.LastTraceDestination.Set(TraceEnd, CurrentVel, CurrentTime);
+
+ if (bTracePath)
+ {
+ bool bObjectHit = false;
+ bool bChannelHit = false;
+ if (bTraceWithObjectType)
+ {
+ bObjectHit = World->SweepSingleByObjectType(ObjectTraceHit, TraceStart, TraceEnd, FQuat::Identity, ObjQueryParams, FCollisionShape::MakeCapsule(ProjectileRadius, HalfHeight), QueryParams);
+ }
+ if (PredictParams.bTraceWithChannel)
+ {
+ bChannelHit = World->SweepSingleByChannel(ChannelTraceHit, TraceStart, TraceEnd, FQuat::Identity, PredictParams.TraceChannel, FCollisionShape::MakeCapsule(ProjectileRadius, HalfHeight), QueryParams);
+ }
+
+ // See if there were any hits.
+ if (bObjectHit || bChannelHit)
+ {
+ // Hit! We are done. Choose trace with earliest hit time.
+ PredictResult.HitResult = (ObjectTraceHit.Time < ChannelTraceHit.Time) ? ObjectTraceHit : ChannelTraceHit;
+ const float HitTimeDelta = ActualStepDeltaTime * PredictResult.HitResult.Time;
+ const float TotalTimeAtHit = PreviousTime + HitTimeDelta;
+ const FVector VelocityAtHit = OldVelocity + (UpVector * GravityZ * HitTimeDelta);
+ //const FVector VelocityAtHit = OldVelocity + FVector(0.f, 0.f, GravityZ * HitTimeDelta);
+ PredictResult.AddPoint(PredictResult.HitResult.Location, VelocityAtHit, TotalTimeAtHit);
+ bBlockingHit = true;
+ break;
+ }
+ }
+
+ PredictResult.AddPoint(TraceEnd, CurrentVel, CurrentTime);
+ }
+
+ // Draw debug path
+#if ENABLE_DRAW_DEBUG
+ if (PredictParams.DrawDebugType != EDrawDebugTrace::None)
+ {
+ const bool bPersistent = PredictParams.DrawDebugType == EDrawDebugTrace::Persistent;
+ const float LifeTime = (PredictParams.DrawDebugType == EDrawDebugTrace::ForDuration) ? PredictParams.DrawDebugTime : 0.f;
+ const float DrawRadius = (ProjectileRadius > 0.f) ? ProjectileRadius : 5.f;
+
+ // draw the path
+ for (const FPredictProjectilePathPointData& PathPt : PredictResult.PathData)
+ {
+ ::DrawDebugCapsule(World, PathPt.Location, HalfHeight, DrawRadius, FQuat::Identity, FColor::Green, bPersistent, LifeTime);
+ }
+ // draw the impact point
+ if (bBlockingHit)
+ {
+ ::DrawDebugCapsule(World, PredictResult.HitResult.Location, HalfHeight, DrawRadius + 1.0f, FQuat::Identity, FColor::Red, bPersistent, LifeTime);
+ }
+ }
+#endif //ENABLE_DRAW_DEBUG
+ }
+
+ return bBlockingHit;
+}
+
+FVIVaultResult UVIBlueprintFunctionLibrary::ComputeVault(APawn* const Pawn, const FVector& InVaultDirection, const FVITraceSettings& TraceSettings, const FVICapsuleInfo& Capsule, bool bTraceComplex)
+{
+ FVIVaultResult Result = FVIVaultResult();
+
+ if (!IsValid(Pawn))
+ {
+ // Invalid
+ return Result;
+ }
+
+ if (!Pawn->Implements())
+ {
+ // Needs pawn interface
+ FMessageLog MsgLog("PIE");
+
+ MsgLog.Error(FText::FromString(FString::Printf(TEXT("ComputeVault() failed: %s does not implement interface UVIPawnInterface"), *Pawn->GetName())));
+ MsgLog.Open(EMessageSeverity::Error);
+ return Result;
+ }
+
+ const FVector& VaultDirection = InVaultDirection.GetSafeNormal();
+ if (VaultDirection.IsNearlyZero())
+ {
+ // Do not have a usable vector
+ return Result;
+ }
+
+ // Performance profiling
+ INC_DWORD_STAT(STAT_COMPUTEVAULT_COUNT);
+ SCOPE_CYCLE_COUNTER(STAT_COMPUTEVAULT);
+
+ // Ease of access
+ const float HalfHeight = Capsule.HalfHeight;
+ const float Radius = Capsule.Radius;
+
+ // Adding 1.f overcomes issues with step height and inconsistencies with MaxLedgeHeight
+ const float MaxLedgeHeight = TraceSettings.MaxLedgeHeight + 1.f;
+ const float MinLedgeHeight = TraceSettings.MinLedgeHeight + 1.f;
+
+ const TArray TraceIgnore = { Pawn };
+
+ // Cache properties
+ const float HeightOffset = HalfHeight + TraceSettings.CollisionFloatHeight;
+ const FVector& Up = Pawn->GetActorUpVector();
+ const FVector& Loc = Pawn->GetActorLocation();
+ const FVector BaseLoc = Loc - (Up * HeightOffset) - (Up * Radius * 0.05f);
+
+ // Trace forward to find something not walkable; don't climb something character can simply walk on
+ FHitResult NotWalkableHit(ForceInit);
+ {
+ // Cache trace
+ const FVector TraceStart = BaseLoc + Up * ((MaxLedgeHeight + MinLedgeHeight) * 0.5f);
+ const FVector TraceEnd = TraceStart + (VaultDirection * TraceSettings.ReachDistance);
+ const float TraceHalfHeight = 1.f + ((MaxLedgeHeight - MinLedgeHeight) * 0.5f);
+
+ CapsuleTraceSingleForObjects(
+ Pawn, // World Context
+ TraceStart, // Start
+ TraceEnd, // End
+ Pawn->GetActorQuat(), // Rotation
+ TraceSettings.ForwardTraceRadius, // Radius
+ TraceHalfHeight, // HalfHeight
+ TraceSettings.GetObjectTypes(), // TraceChannels
+ bTraceComplex, // bTraceComplex
+ TraceIgnore, // ActorsToIgnore
+ false, // bDrawDebug (ForDuration)
+ NotWalkableHit, // OutHit
+ false, // bIgnoreSelf
+ FLinearColor::Red, // TraceColor
+ FLinearColor::Green, // TraceHitColor
+ 1.f // DrawTime
+ );
+
+ if (!NotWalkableHit.IsValidBlockingHit() || IVIPawnInterface::Execute_IsWalkable(Pawn, NotWalkableHit))
+ {
+ // IsValidBlockingHit() returns false if no hit or starting in penetration
+ return Result;
+ }
+ }
+
+ // Abort if object is moving too fast to vault onto
+ if (TraceSettings.MaxObjectVelocity > 0.f && NotWalkableHit.GetActor()->GetVelocity().Size() > TraceSettings.MaxObjectVelocity)
+ {
+ return Result;
+ }
+
+ // Determined whats in front of us isn't walkable so lets check if we can stand on it
+ // Trace downward from first trace to ensure surface is walkable
+ FHitResult GroundHit(ForceInit);
+ {
+ const FVector ImpactLoc = NotWalkableHit.ImpactPoint;
+ const FVector ImpactNormal = NotWalkableHit.ImpactNormal;
+
+ const FVector TraceFwd = FVector::VectorPlaneProject(ImpactLoc, Up);
+ const FVector TraceUp = BaseLoc.ProjectOnTo(Up);
+
+ const FVector TraceEnd = TraceFwd + TraceUp + (ImpactNormal * -15.f);
+ const FVector TraceStart = TraceEnd + (Up * (MaxLedgeHeight + TraceSettings.DownwardTraceRadius + 1.f));
+
+ UKismetSystemLibrary::SphereTraceSingleForObjects(
+ Pawn, // World Context
+ TraceStart, // Start
+ TraceEnd, // End
+ TraceSettings.DownwardTraceRadius, // Radius
+ TraceSettings.GetObjectTypes(), // TraceChannels
+ bTraceComplex, // bTraceComplex
+ TraceIgnore, // ActorsToIgnore
+ EDrawDebugTrace::None, // DrawDebugType
+ GroundHit, // OutHit
+ false, // bIgnoreSelf
+ FLinearColor::Yellow, // TraceColor
+ FLinearColor::Blue, // TraceHitColor
+ 1.f // DrawTime
+ );
+
+ // If we can't walk on the surface don't try to vault onto it
+ if (!IVIPawnInterface::Execute_IsWalkable(Pawn, GroundHit))
+ {
+ return Result;
+ }
+ }
+
+ // Ensure capsule can fit at location
+ const FVector GroundLoc = FVector(GroundHit.Location.X, GroundHit.Location.Y, GroundHit.ImpactPoint.Z) + (Up * HeightOffset);
+ FHitResult Hit(1.f);
+ {
+ // Identical to GetCapsuleComponent()->GetScaledCapsuleHalfHeight_WithoutHemisphere()
+ const float HalfHeightNoHemisphere = HalfHeight - Radius;
+
+ const FVector TraceStart = GroundLoc + (Up * HalfHeightNoHemisphere);
+ const FVector TraceEnd = GroundLoc - (Up * HalfHeightNoHemisphere);
+
+ UKismetSystemLibrary::SphereTraceSingleByProfile(
+ Pawn, // World Context
+ TraceStart, // Start
+ TraceEnd, // End
+ Radius, // Radius
+ TraceSettings.TraceProfile, // ProfileName
+ bTraceComplex, // bTraceComplex
+ TraceIgnore, // ActorsToIgnore
+ EDrawDebugTrace::None, // DrawDebugType
+ Hit, // OutHit
+ false, // bIgnoreSelf
+ FLinearColor::Yellow, // TraceColor
+ FLinearColor::Blue, // TraceHitColor
+ 1.f // DrawTime
+ );
+
+ // No room if an obstacle is in the way
+ if (Hit.IsValidBlockingHit())
+ {
+ return Result;
+ }
+ }
+
+ // Can vault
+ Result.bSuccess = true;
+ Result.Location = GroundLoc;
+ Result.Direction = -FVector::VectorPlaneProject(NotWalkableHit.ImpactNormal, Up);
+ Result.Height = (GroundLoc - Loc).ProjectOnTo(Up).Size();
+
+ //DrawDebugSphere(Pawn->GetWorld(), GroundLoc, 32.f, 16, FColor::White, true);
+ //DrawDebugDirectionalArrow(Pawn->GetWorld(), GroundLoc, GroundLoc + Result.Direction * 200.f, 40.f, FColor::Green, true, -1.f, 0, 2.f);
+
+ return Result;
+}
+
+FCollisionQueryParams VIConfigureCollisionParams(FName TraceTag, bool bTraceComplex, const TArray& ActorsToIgnore, bool bIgnoreSelf, const UObject* WorldContextObject)
+{
+ FCollisionQueryParams Params(TraceTag, SCENE_QUERY_STAT_ONLY(KismetTraceUtils), bTraceComplex);
+ Params.bReturnPhysicalMaterial = true;
+ Params.bReturnFaceIndex = !UPhysicsSettings::Get()->bSuppressFaceRemapTable; // Ask for face index, as long as we didn't disable globally
+ Params.AddIgnoredActors(ActorsToIgnore);
+ if (bIgnoreSelf)
+ {
+ const AActor* IgnoreActor = Cast(WorldContextObject);
+ if (IgnoreActor)
+ {
+ Params.AddIgnoredActor(IgnoreActor);
+ }
+ else
+ {
+ // find owner
+ const UObject* CurrentObject = WorldContextObject;
+ while (CurrentObject)
+ {
+ CurrentObject = CurrentObject->GetOuter();
+ IgnoreActor = Cast(CurrentObject);
+ if (IgnoreActor)
+ {
+ Params.AddIgnoredActor(IgnoreActor);
+ break;
+ }
+ }
+ }
+ }
+
+ return Params;
+}
+
+FCollisionObjectQueryParams VIConfigureCollisionObjectParams(const TArray >& ObjectTypes)
+{
+ TArray> CollisionObjectTraces;
+ CollisionObjectTraces.AddUninitialized(ObjectTypes.Num());
+
+ for (auto Iter = ObjectTypes.CreateConstIterator(); Iter; ++Iter)
+ {
+ CollisionObjectTraces[Iter.GetIndex()] = UEngineTypes::ConvertToCollisionChannel(*Iter);
+ }
+
+ FCollisionObjectQueryParams ObjectParams;
+ for (auto Iter = CollisionObjectTraces.CreateConstIterator(); Iter; ++Iter)
+ {
+ const ECollisionChannel& Channel = (*Iter);
+ if (FCollisionObjectQueryParams::IsValidObjectQuery(Channel))
+ {
+ ObjectParams.AddObjectTypesToQuery(Channel);
+ }
+ else
+ {
+ UE_LOG(LogBlueprintUserMessages, Warning, TEXT("%d isn't valid object type"), (int32)Channel);
+ }
+ }
+
+ return ObjectParams;
+}
+
+void UVIBlueprintFunctionLibrary::CapsuleTraceSingleForObjects(const UObject* WorldContextObject, const FVector& Start, const FVector& End, const FQuat& Rot, float Radius, float HalfHeight, const TArray >& ObjectTypes, bool bTraceComplex, const TArray& ActorsToIgnore, bool bDrawDebug, FHitResult& OutHit, bool bIgnoreSelf, FLinearColor TraceColor /*= FLinearColor::Red*/, FLinearColor TraceHitColor /*= FLinearColor::Green*/, float DrawTime /*= 5.0f*/)
+{
+ static const FName CapsuleTraceSingleName(TEXT("CapsuleTraceSingleForObjects"));
+ const FCollisionQueryParams Params = VIConfigureCollisionParams(CapsuleTraceSingleName, bTraceComplex, ActorsToIgnore, bIgnoreSelf, WorldContextObject);
+
+ const FCollisionObjectQueryParams ObjectParams = VIConfigureCollisionObjectParams(ObjectTypes);
+ if (ObjectParams.IsValid() == false)
+ {
+ UE_LOG(LogBlueprintUserMessages, Warning, TEXT("Invalid object types"));
+ return;
+ }
+
+ const UWorld* const World = GEngine->GetWorldFromContextObject(WorldContextObject, EGetWorldErrorMode::LogAndReturnNull);
+ bool const bHit = World ? World->SweepSingleByObjectType(OutHit, Start, End, Rot, ObjectParams, FCollisionShape::MakeCapsule(Radius, HalfHeight), Params) : false;
+
+#if ENABLE_DRAW_DEBUG
+ DrawDebugCapsuleTraceSingle(World, Start, End, Rot, Radius, HalfHeight, bDrawDebug, bHit, OutHit, TraceColor, TraceHitColor, DrawTime);
+#endif
+}
+
+void UVIBlueprintFunctionLibrary::DrawDebugCapsuleTraceSingle(const UWorld* World, const FVector& Start, const FVector& End, const FQuat& Rot, float Radius, float HalfHeight, bool bDrawDebug, bool bHit, const FHitResult& OutHit, FLinearColor TraceColor, FLinearColor TraceHitColor, float DrawTime)
+{
+ if (bDrawDebug)
+ {
+ constexpr bool bPersistent = false;
+ const float LifeTime = DrawTime;
+
+ if (bHit && OutHit.bBlockingHit)
+ {
+ // Red up to the blocking hit, green thereafter
+ DrawDebugCapsule(World, Start, HalfHeight, Radius, Rot, TraceColor.ToFColor(true), bPersistent, LifeTime);
+ DrawDebugCapsule(World, OutHit.Location, HalfHeight, Radius, Rot, TraceColor.ToFColor(true), bPersistent, LifeTime);
+ DrawDebugLine(World, Start, OutHit.Location, TraceColor.ToFColor(true), bPersistent, LifeTime);
+ DrawDebugPoint(World, OutHit.ImpactPoint, 16.f, TraceColor.ToFColor(true), bPersistent, LifeTime);
+
+ DrawDebugCapsule(World, End, HalfHeight, Radius, Rot, TraceHitColor.ToFColor(true), bPersistent, LifeTime);
+ DrawDebugLine(World, OutHit.Location, End, TraceHitColor.ToFColor(true), bPersistent, LifeTime);
+ }
+ else
+ {
+ // no hit means all red
+ DrawDebugCapsule(World, Start, HalfHeight, Radius, Rot, TraceColor.ToFColor(true), bPersistent, LifeTime);
+ DrawDebugCapsule(World, End, HalfHeight, Radius, Rot, TraceColor.ToFColor(true), bPersistent, LifeTime);
+ DrawDebugLine(World, Start, End, TraceColor.ToFColor(true), bPersistent, LifeTime);
+ }
+ }
+}
+
+float UVIBlueprintFunctionLibrary::ComputeDirectionToFloat(const FVector& Vector, const FVector& Dir)
+{
+ const FVector VectorProject = Vector.ProjectOnTo(Dir);
+ const float SignDirection = FMath::Sign(VectorProject | Dir);
+
+ return VectorProject.Size() * SignDirection;
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VITypes.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VITypes.cpp
new file mode 100644
index 00000000..5085bd0d
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VITypes.cpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "VITypes.h"
+
+bool FVIGameplayAbilityTargetData_VaultInfo::NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess)
+{
+ FVector_NetQuantize10 VaultLocation = FVector_NetQuantize10(VaultInfo.Location);
+ FVector_NetQuantize10 VaultDirection = FVector_NetQuantize10(VaultInfo.Direction);
+ VaultLocation.NetSerialize(Ar, Map, bOutSuccess);
+ VaultDirection.NetSerialize(Ar, Map, bOutSuccess);
+
+ Ar << VaultInfo.Height;
+ Ar << VaultInfo.RandomSeed;
+
+ if (Ar.IsLoading())
+ {
+ VaultInfo.Location = VaultLocation;
+ VaultInfo.Direction = VaultDirection;
+ }
+
+ bOutSuccess = true;
+ return true;
+}
+
+bool FVIRepMotionMatch::NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess)
+{
+ FVector_NetQuantize10 NetLocation = FVector_NetQuantize10(Location);
+ FVector_NetQuantize10 NetDirection = FVector_NetQuantize10(Direction);
+ NetLocation.NetSerialize(Ar, Map, bOutSuccess);
+ NetDirection.NetSerialize(Ar, Map, bOutSuccess);
+
+ if (Ar.IsLoading())
+ {
+ Location = NetLocation;
+ Direction = NetDirection;
+ }
+
+ bOutSuccess = true;
+ return true;
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VaultIt.cpp b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VaultIt.cpp
new file mode 100644
index 00000000..b71359a9
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Private/VaultIt.cpp
@@ -0,0 +1,20 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include "VaultIt.h"
+
+#define LOCTEXT_NAMESPACE "FVaultItModule"
+
+void FVaultItModule::StartupModule()
+{
+ // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
+}
+
+void FVaultItModule::ShutdownModule()
+{
+ // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
+ // we call this function before unloading the module.
+}
+
+#undef LOCTEXT_NAMESPACE
+
+IMPLEMENT_MODULE(FVaultItModule, VaultIt)
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimInstance.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimInstance.h
new file mode 100644
index 00000000..bda9db2e
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimInstance.h
@@ -0,0 +1,99 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Animation/AnimInstance.h"
+#include "VIAnimationInterface.h"
+#include "VITypes.h"
+#include "VIAnimInstance.generated.h"
+
+class AVICharacterBase;
+
+/**
+ *
+ */
+UCLASS()
+class VAULTIT_API UVIAnimInstance : public UAnimInstance, public IVIAnimationInterface
+{
+ GENERATED_BODY()
+
+protected:
+ /** Name of Right FBIK Bone */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK)
+ FName RHandName;
+
+ /** Name of Left FBIK Bone */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK)
+ FName LHandName;
+
+ /** FBIK Settings and Data */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK)
+ TArray FBIK;
+
+ /** Used by Anim Graph to determine right hand FBIK is used */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK, meta = (DisplayName = "R Hand"))
+ bool bRHand;
+
+ /** Used by Anim Graph to determine left hand FBIK is used */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK, meta = (DisplayName = "L Hand"))
+ bool bLHand;
+
+ /** Used by Anim Graph to determine both hand FBIK is used */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK)
+ bool bBothHand;
+
+ /** Used by Anim Graph to determine right hand FBIK location */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK, meta = (DisplayName = "R Hand Loc"))
+ FVector RHandLoc;
+
+ /** Used by Anim Graph to determine left hand FBIK location */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = FBIK, meta = (DisplayName = "L Hand Loc"))
+ FVector LHandLoc;
+
+ /** Is currently vaulting */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Vault)
+ bool bIsVaulting;
+
+protected:
+ UPROPERTY(BlueprintReadWrite, Category = References)
+ AVICharacterBase* Character;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = AnimGraph)
+ bool bIsJumping;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = AnimGraph)
+ bool bIsFalling;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = AnimGraph)
+ float Speed;
+
+public:
+ UVIAnimInstance()
+ : RHandName(TEXT("hand_r"))
+ , LHandName(TEXT("hand_l"))
+ , FBIK( { FVIBoneFBIKData(RHandName), FVIBoneFBIKData(LHandName) } )
+ {}
+
+ virtual void NativeInitializeAnimation() override;
+ virtual void NativeUpdateAnimation(float DeltaTime) override;
+
+protected:
+ virtual void OnStartVault();
+ virtual void OnStopVault();
+
+ /** Called when starting vaulting */
+ UFUNCTION(BlueprintImplementableEvent, Category = Vault, meta = (DisplayName = "On Start Vault"))
+ void K2_OnStartVault();
+
+ /** Called when stopping vaulting */
+ UFUNCTION(BlueprintImplementableEvent, Category = Vault, meta = (DisplayName = "On Stop Vault"))
+ void K2_OnStopVault();
+
+public:
+ /**
+ * Called by anim notify when a bone has its location updated for FBIK
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ void SetBoneFBIK(const FName& BoneName, const FVector& BoneLocation, bool bEnabled);
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimInstanceFP.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimInstanceFP.h
new file mode 100644
index 00000000..1352f328
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimInstanceFP.h
@@ -0,0 +1,38 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Animation/VIAnimInstance.h"
+#include "VIAnimInstanceFP.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class VAULTIT_API UVIAnimInstanceFP : public UVIAnimInstance
+{
+ GENERATED_BODY()
+
+public:
+ /**
+ * Key: ThirdPersonMontage
+ * Value: FirstPersonMontage that is played corresponding to the ThirdPersonMontage
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Vault)
+ TMap MontageLinkMap;
+
+protected:
+ UPROPERTY()
+ UAnimMontage* MontageToPlay;
+
+ UPROPERTY()
+ float VaultBlendOutTime;
+
+protected:
+ bool CanPlayFPMontage() const;
+
+public:
+ virtual void OnStartVault() override;
+ virtual void OnStopVault() override;
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimNotifyState_FBIK.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimNotifyState_FBIK.h
new file mode 100644
index 00000000..11b75d58
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimNotifyState_FBIK.h
@@ -0,0 +1,150 @@
+// Copyright (c) 2019-2021 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Animation/AnimNotifies/AnimNotifyState.h"
+#include "VIAnimNotifyState_FBIK.generated.h"
+
+class USkeletalMeshComponent;
+class UAnimSequenceBase;
+class APawn;
+
+UENUM(BlueprintType)
+enum class EVIFBIKUpdateType : uint8
+{
+ FUT_Single UMETA(DisplayName = "Single Update", ToolTip = "Updates once at the start of the notify, and is disabled at the end of the notify"),
+ FUT_Tick UMETA(DisplayName = "Continuous Update", ToolTip = "Updates on tick since the start of the notify, and is disabled at the end of the notify - be sure to LOD, this can be expensive"),
+};
+
+UENUM(BlueprintType)
+enum class EVIFBIKUpdateRole : uint8
+{
+ FUR_All UMETA(DisplayName = "All", ToolTip = "Applies to all roles"),
+ FUR_LocalOnly UMETA(DisplayName = "Local Player Only", ToolTip = "Will only apply to the local player"),
+ FUR_SimulatedOnly UMETA(DisplayName = "Simulated Only", ToolTip = "Will only apply to simulated players"),
+};
+
+UENUM(BlueprintType)
+enum class EVIFBIKTraceType : uint8
+{
+ FTT_Simple UMETA(DisplayName = "Collision", ToolTip = "Use the object's collision to trace against for bone placement"),
+ FTT_Complex UMETA(DisplayName = "Geometry", ToolTip = "Use the object's geometry to trace against for very accurate bone placement - can be a lot more expensive"),
+ FTT_ComplexLocalOnly UMETA(DisplayName = "Geometry Local Player Only", ToolTip = "Use the object's geometry to trace against for the local player only, otherwise use the object's collision"),
+};
+
+/** AnimNotifyState used to setup FBIK for a bone during a window in the animation */
+UCLASS(meta = (DisplayName = "VI FBIK"))
+class VAULTIT_API UVIAnimNotifyState_FBIK : public UAnimNotifyState
+{
+ GENERATED_BODY()
+
+public:
+ /**
+ * The bone that is being planted onto a surface
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ FName BoneName;
+
+ /**
+ * How far ahead of the bone (BoneName) to trace
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ float TraceLength;
+
+ /**
+ * Radius of sphere trace
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ float TraceRadius;
+
+ /**
+ * Offset along the trace direction to provide width for the hand so it doesn't penetrate the surface
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ float BoneOffset;
+
+ /**
+ * If there is no hit, will disable the FBIK for this bone
+ * Default behaviour simply uses the last successful location
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ bool bDisableIfHitFails;
+
+ /**
+ * What type of collision to trace against
+ * Collision will use the collision mesh on the object which is a lot cheaper
+ * Geometry will use a complex trace which uses the object's geometry which can be expensive
+ * Geometry Local Only will use a complex trace only for the local player which can be a good compromise for accuracy where it matters most and cost-cutting elsewhere
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ EVIFBIKTraceType TraceType;
+
+ /**
+ * Whether to update at the start of the notify and never again or on tick
+ * If updating on tick be extra careful to LOD this (as well as the control rig anim graph nodes) so it doesn't waste resources
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ EVIFBIKUpdateType UpdateType;
+
+ /**
+ * Will skip this many ticks if UpdateType is continuous to save on performance costs
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify, meta = (EditCondition = "UpdateType == EVIFBIKUpdateType::FUT_Tick"))
+ uint8 TickSkipAmount;
+
+ /**
+ * Which network roles to apply the FBIK to
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ EVIFBIKUpdateRole ApplyToRoles;
+
+ /**
+ * If true, will draw the trace during PIE
+ */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AnimNotify)
+ bool bDebugTraceDuringPIE;
+
+protected:
+ /** When notify begins, caches bone offset lateral (the side of) to the owner */
+ float LateralOffset;
+
+ uint8 SkippedTicks;
+
+public:
+ UVIAnimNotifyState_FBIK()
+ : BoneName(TEXT("hand_r"))
+ , TraceLength(40.f)
+ , TraceRadius(20.f)
+ , BoneOffset(10.f)
+ , bDisableIfHitFails(false)
+ , TraceType(EVIFBIKTraceType::FTT_ComplexLocalOnly)
+ , UpdateType(EVIFBIKUpdateType::FUT_Tick)
+ , TickSkipAmount(3)
+ , ApplyToRoles(EVIFBIKUpdateRole::FUR_All)
+ , bDebugTraceDuringPIE(false)
+ , LateralOffset(0.f)
+ , SkippedTicks(0)
+ {
+#if WITH_EDITOR
+ NotifyColor = FColor::Cyan;
+#endif // WITH_EDITOR
+ }
+
+#if WITH_EDITOR
+ virtual void OnAnimNotifyCreatedInEditor(FAnimNotifyEvent& ContainingAnimNotifyEvent) override final;
+#endif // WITH_EDITOR
+
+ virtual void NotifyBegin(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float TotalDuration) override final;
+ virtual void NotifyTick(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation, float FrameDeltaTime) override final;
+ virtual void NotifyEnd(USkeletalMeshComponent* MeshComp, UAnimSequenceBase* Animation) override final;
+
+protected:
+ void UpdateFBIK(USkeletalMeshComponent* MeshComp);
+
+ static APawn* GetPawnOwner(const USkeletalMeshComponent* const MeshComp);
+
+ bool HasValidRole(const APawn* const PawnOwner) const;
+
+ static bool IsLocalPlayer(const APawn* const PawnOwner);
+};
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimationInterface.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimationInterface.h
new file mode 100644
index 00000000..1a8b0b2c
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Animation/VIAnimationInterface.h
@@ -0,0 +1,27 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "VIAnimationInterface.generated.h"
+
+/**
+ * Used by AnimInstance by notify to update FBIK
+ */
+UINTERFACE(BlueprintType)
+class VAULTIT_API UVIAnimationInterface : public UInterface
+{
+ GENERATED_BODY()
+};
+
+class VAULTIT_API IVIAnimationInterface
+{
+ GENERATED_BODY()
+
+public:
+ /**
+ * Called by anim notify when a bone has its location updated for FBIK
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ void SetBoneFBIK(const FName& BoneName, const FVector& BoneLocation, bool bEnabled);
+};
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/GameplayAbility_Vault.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/GameplayAbility_Vault.h
new file mode 100644
index 00000000..a3b6d857
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/GameplayAbility_Vault.h
@@ -0,0 +1,19 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "VIGameplayAbility.h"
+#include "GameplayAbility_Vault.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class VAULTIT_API UGameplayAbility_Vault : public UVIGameplayAbility
+{
+ GENERATED_BODY()
+
+public:
+ UGameplayAbility_Vault();
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/PlayMontageForMeshAndWait.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/PlayMontageForMeshAndWait.h
new file mode 100644
index 00000000..2dc393a5
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/PlayMontageForMeshAndWait.h
@@ -0,0 +1,130 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+// Based on GASShooter by Dan Kestranek
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Abilities/Tasks/AbilityTask.h"
+#include "PlayMontageForMeshAndWait.generated.h"
+
+class UVIAbilitySystemComponent;
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FVIPlayMontageForMeshAndWaitDelegate);
+DECLARE_DELEGATE_TwoParams( FOnMontageBlendingOutStarted, class UAnimMontage*, bool /*bInterrupted*/)
+DECLARE_DELEGATE_TwoParams( FOnMontageEnded, class UAnimMontage*, bool /*bInterrupted*/)
+
+/**
+ * This task combines PlayMontageAndWait and WaitForEvent into one task, so you can wait for multiple types of activations such as from a melee combo
+ * Much of this code is copied from one of those two ability tasks
+ */
+UCLASS()
+class VAULTIT_API UPlayMontageForMeshAndWait : public UAbilityTask
+{
+ GENERATED_BODY()
+
+public:
+ /** The montage completely finished playing */
+ UPROPERTY(BlueprintAssignable)
+ FVIPlayMontageForMeshAndWaitDelegate OnCompleted;
+
+ /** The montage started blending out */
+ UPROPERTY(BlueprintAssignable)
+ FVIPlayMontageForMeshAndWaitDelegate OnBlendOut;
+
+ /** The montage was interrupted */
+ UPROPERTY(BlueprintAssignable)
+ FVIPlayMontageForMeshAndWaitDelegate OnInterrupted;
+
+ /** The ability task was explicitly cancelled by another ability */
+ UPROPERTY(BlueprintAssignable)
+ FVIPlayMontageForMeshAndWaitDelegate OnCancelled;
+
+public:
+ UPlayMontageForMeshAndWait(const FObjectInitializer& OI);
+
+ /**
+ * Play a montage and wait for it end. If a gameplay event happens that matches EventTags (or EventTags is empty), the EventReceived delegate will fire with a tag and event data.
+ * If StopWhenAbilityEnds is true, this montage will be aborted if the ability ends normally. It is always stopped when the ability is explicitly cancelled.
+ * On normal execution, OnBlendOut is called when the montage is blending out, and OnCompleted when it is completely done playing
+ * OnInterrupted is called if another montage overwrites this, and OnCancelled is called if the ability or task is cancelled
+ *
+ * @param TaskInstanceName Set to override the name of this task, for later querying
+ * @param MontageToPlay The montage to play on the character
+ * @param Rate Change to play the montage faster or slower
+ * @param bStopWhenAbilityEnds If true, this montage will be aborted if the ability ends normally. It is always stopped when the ability is explicitly cancelled
+ * @param AnimRootMotionTranslationScale Change to modify size of root motion or set to 0 to block it entirely
+ */
+ UFUNCTION(BlueprintCallable, Category = "Ability|Tasks", meta = (HidePin = "OwningAbility", DefaultToSelf = "OwningAbility", BlueprintInternalUseOnly = "TRUE"))
+ static UPlayMontageForMeshAndWait* PlayMontageForMeshAndWait(
+ UGameplayAbility* OwningAbility,
+ FName TaskInstanceName,
+ USkeletalMeshComponent* Mesh,
+ UAnimMontage* MontageToPlay,
+ float Rate = 1.f,
+ FName StartSection = NAME_None,
+ bool bStopWhenAbilityEnds = true,
+ float AnimRootMotionTranslationScale = 1.f,
+ bool bReplicateMontage = true,
+ float OverrideBlendOutTimeForCancelAbility = -1.f,
+ float OverrideBlendOutTimeForStopWhenEndAbility = -1.f
+ );
+
+ /**
+ * The Blueprint node for this task, PlayMontageAndWaitForEvent, has some black magic from the plugin that automagically calls Activate()
+ * inside of K2Node_LatentAbilityCall as stated in the AbilityTask.h. Ability logic written in C++ probably needs to call Activate() itself manually.
+ */
+ virtual void Activate() override;
+ virtual void ExternalCancel() override;
+ virtual void OnDestroy(bool AbilityEnded) override;
+ virtual FString GetDebugString() const override;
+
+private:
+ /** Mesh that the Montage is playing on. Must be owned by the AvatarActor. */
+ UPROPERTY()
+ USkeletalMeshComponent* Mesh;
+
+ /** Montage that is playing */
+ UPROPERTY()
+ UAnimMontage* MontageToPlay;
+
+ /** Playback rate */
+ UPROPERTY()
+ float Rate;
+
+ /** Section to start montage from */
+ UPROPERTY()
+ FName StartSection;
+
+ /** Modifies how root motion movement to apply */
+ UPROPERTY()
+ float AnimRootMotionTranslationScale;
+
+ /** Rather montage should be aborted if ability ends */
+ UPROPERTY()
+ bool bStopWhenAbilityEnds;
+
+ UPROPERTY()
+ bool bReplicateMontage;
+
+ UPROPERTY()
+ float OverrideBlendOutTimeForCancelAbility;
+
+ UPROPERTY()
+ float OverrideBlendOutTimeForStopWhenEndAbility;
+
+private:
+ /** Checks if the ability is playing a montage and stops that montage, returns true if a montage was stopped, false if not. */
+ bool StopPlayingMontage(float OverrideBlendOutTime = -1.f);
+
+ /** Returns our ability system component */
+ UVIAbilitySystemComponent* GetTargetASC() const;
+
+ void OnMontageBlendingOut(UAnimMontage* Montage, bool bInterrupted);
+ void OnAbilityCancelled();
+ void OnMontageEnded(UAnimMontage* Montage, bool bInterrupted);
+
+ FOnMontageBlendingOutStarted BlendingOutDelegate;
+ FOnMontageEnded MontageEndedDelegate;
+ FDelegateHandle CancelledHandle;
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIAbilitySystemComponent.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIAbilitySystemComponent.h
new file mode 100644
index 00000000..5126bebe
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIAbilitySystemComponent.h
@@ -0,0 +1,143 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "AbilitySystemComponent.h"
+#include "VIAbilitySystemComponent.generated.h"
+
+class USkeletalMeshComponent;
+
+/**
+ * Data about montages that were played locally (all montages in case of server. Predictive montages in case of client). Never replicated directly.
+ */
+USTRUCT()
+struct VAULTIT_API FVIGameplayAbilityLocalAnimMontageForMesh
+{
+ GENERATED_BODY();
+
+public:
+ UPROPERTY()
+ USkeletalMeshComponent* Mesh;
+
+ UPROPERTY()
+ FGameplayAbilityLocalAnimMontage LocalMontageInfo;
+
+ FVIGameplayAbilityLocalAnimMontageForMesh()
+ : Mesh(nullptr)
+ {
+ }
+
+ FVIGameplayAbilityLocalAnimMontageForMesh(USkeletalMeshComponent* InMesh)
+ : Mesh(InMesh)
+ {
+ }
+
+ FVIGameplayAbilityLocalAnimMontageForMesh(USkeletalMeshComponent* InMesh, FGameplayAbilityLocalAnimMontage& InLocalMontageInfo)
+ : Mesh(InMesh)
+ , LocalMontageInfo(InLocalMontageInfo)
+ {
+ }
+};
+
+/**
+* Data about montages that is replicated to simulated clients.
+* Based on GASShooter by Dan Kestranek
+*/
+USTRUCT()
+struct VAULTIT_API FVIGameplayAbilityRepAnimMontageForMesh
+{
+ GENERATED_BODY();
+
+public:
+ UPROPERTY()
+ USkeletalMeshComponent* Mesh;
+
+ UPROPERTY()
+ FGameplayAbilityRepAnimMontage RepMontageInfo;
+
+ FVIGameplayAbilityRepAnimMontageForMesh()
+ : Mesh(nullptr)
+ {
+ }
+
+ FVIGameplayAbilityRepAnimMontageForMesh(USkeletalMeshComponent* InMesh)
+ : Mesh(InMesh)
+ {
+ }
+};
+
+/**
+ *
+ */
+UCLASS()
+class VAULTIT_API UVIAbilitySystemComponent : public UAbilitySystemComponent
+{
+ GENERATED_BODY()
+
+protected:
+ /**
+ * Montages instigated locally
+ * All if server, predicted if client, replicated if simulated
+ */
+ UPROPERTY()
+ TArray LocalAnimMontageInfoForMeshes;
+
+ /**
+ * Replicates montage info to simulated clients
+ */
+ UPROPERTY(ReplicatedUsing = OnRep_ReplicatedAnimMontageForMesh)
+ TArray RepAnimMontageInfoForMeshes;
+
+public:
+ virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override;
+
+ virtual bool GetShouldTick() const override;
+
+ virtual void TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction) override;
+
+ virtual void InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor) override;
+
+ virtual void NotifyAbilityEnded(FGameplayAbilitySpecHandle Handle, UGameplayAbility* Ability, bool bWasCancelled) override;
+
+ /** Plays montage, handles replication and prediction based on passed in ability or activation info */
+ virtual float PlayMontageForMesh(UGameplayAbility* AnimatingAbility, class USkeletalMeshComponent* InMesh, FGameplayAbilityActivationInfo ActivationInfo, UAnimMontage* Montage, float InPlayRate, FName StartSectionName = NAME_None, bool bReplicateMontage = true);
+
+ /** Plays a montage without updating replication or prediction structures. Used by simulated proxies when replication tells them to play a montage. */
+ virtual float PlayMontageSimulatedForMesh(USkeletalMeshComponent* InMesh, UAnimMontage* Montage, float InPlayRate, FName StartSectionName = NAME_None);
+
+ /** Returns the current animating ability */
+ UGameplayAbility* GetAnimatingAbilityFromAnyMesh();
+
+ // Returns the montage that is playing for the mesh
+ UAnimMontage* GetCurrentMontageForMesh(USkeletalMeshComponent* InMesh);
+
+ /** Stops whatever montage is currently playing. Expectation is caller should only be stopping it if they are the current animating ability (or have good reason not to check) */
+ virtual void CurrentMontageStopForMesh(USkeletalMeshComponent* InMesh, float OverrideBlendOutTime = -1.0f);
+
+ /** Clear the animating ability that is passed in, if it's still currently animating */
+ virtual void ClearAnimatingAbilityForAllMeshes(UGameplayAbility* Ability);
+
+protected:
+ /** Copy LocalAnimMontageInfo into RepAnimMontageInfo */
+ void AnimMontage_UpdateReplicatedDataForMesh(USkeletalMeshComponent* InMesh);
+ void AnimMontage_UpdateReplicatedDataForMesh(FVIGameplayAbilityRepAnimMontageForMesh& OutRepAnimMontageInfo);
+
+ UFUNCTION()
+ virtual void OnRep_ReplicatedAnimMontageForMesh();
+
+ /** Finds existing FGameplayAbilityLocalAnimMontageForMesh for the mesh or creates one if it doesn't exist */
+ FVIGameplayAbilityLocalAnimMontageForMesh& GetLocalAnimMontageInfoForMesh(USkeletalMeshComponent* InMesh);
+
+ /** Finds existing FGameplayAbilityRepAnimMontageForMesh for the mesh or creates one if it doesn't exist */
+ FVIGameplayAbilityRepAnimMontageForMesh& GetGameplayAbilityRepAnimMontageForMesh(USkeletalMeshComponent* InMesh);
+
+ /** Called when a prediction key that played a montage is rejected */
+ void OnPredictiveMontageRejectedForMesh(USkeletalMeshComponent* InMesh, UAnimMontage* PredictiveMontage);
+
+ /**
+ * @return True if we are ready to handle replicated montage information
+ * Not used by default, may be overridden
+ */
+ virtual bool IsReadyForReplicatedMontageForMesh() { return true; }
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIAssetManager.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIAssetManager.h
new file mode 100644
index 00000000..5e3cd20b
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIAssetManager.h
@@ -0,0 +1,19 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Engine/AssetManager.h"
+#include "VIAssetManager.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class VAULTIT_API UVIAssetManager : public UAssetManager
+{
+ GENERATED_BODY()
+
+public:
+ virtual void StartInitialLoading() override;
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIGameplayAbility.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIGameplayAbility.h
new file mode 100644
index 00000000..089ee0c1
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/GAS/VIGameplayAbility.h
@@ -0,0 +1,67 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Abilities/GameplayAbility.h"
+#include "VIGameplayAbility.generated.h"
+
+class USkeletalMeshComponent;
+class UAnimMontage;
+
+USTRUCT()
+struct VAULTIT_API FVIAbilityMeshMontage
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY()
+ USkeletalMeshComponent* Mesh;
+
+ UPROPERTY()
+ UAnimMontage* Montage;
+
+ FVIAbilityMeshMontage()
+ : Mesh(nullptr)
+ , Montage(nullptr)
+ {}
+
+ FVIAbilityMeshMontage(USkeletalMeshComponent* InMesh, UAnimMontage* InMontage)
+ : Mesh(InMesh)
+ , Montage(InMontage)
+ {}
+};
+
+/**
+ *
+ */
+UCLASS()
+class VAULTIT_API UVIGameplayAbility : public UGameplayAbility
+{
+ GENERATED_BODY()
+
+protected:
+ /** Active montages being played by this ability */
+ UPROPERTY()
+ TArray CurrentAbilityMeshMontages;
+
+public:
+#if WITH_EDITOR
+ virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
+#endif // WITH_EDITOR
+
+ /** Call to set the current montage from a montage task. Set to allow hooking up montage events to ability events */
+ virtual void SetCurrentMontageForMesh(USkeletalMeshComponent* InMesh, UAnimMontage* InCurrentMontage);
+
+protected:
+ bool FindAbillityMeshMontage(const USkeletalMeshComponent* InMesh, FVIAbilityMeshMontage& InAbilityMontage);
+
+public:
+ /** Returns the current prediction key and if it's valid for more prediction. Used for debugging ability prediction windows */
+ UFUNCTION(BlueprintPure, Category = "Ability")
+ virtual FString GetCurrentPredictionKeyStatus() const;
+
+ /** Returns the current prediction key and if it's valid for more prediction */
+ UFUNCTION(BlueprintPure, Category = "Ability")
+ virtual bool IsPredictionKeyValidForMorePrediction() const;
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacter.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacter.h
new file mode 100644
index 00000000..1b9d70d2
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacter.h
@@ -0,0 +1,41 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "VICharacterAbilityBase.h"
+#include "VICharacter.generated.h"
+
+class AController;
+
+
+/**
+ * This is a class that is fully setup for vaulting
+ * VIPawnComponent needs additional setup as it has per-project settings (GameplayTags)
+ * VaultTraceSettings also needs additional setup as it has per-project settings (Collision Profile)
+ */
+UCLASS()
+class VAULTIT_API AVICharacter : public AVICharacterAbilityBase
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY(EditDefaultsOnly, Category = Vault)
+ FVIAnimSet VaultAnimSet;
+
+ UPROPERTY(EditDefaultsOnly, Category = Vault)
+ FVITraceSettings VaultTraceSettings;
+
+public:
+ AVICharacter(const FObjectInitializer& OI);
+
+ virtual void BeginPlay() override;
+ virtual void PossessedBy(AController* NewController) override;
+ virtual void OnRep_Controller() override;
+
+ virtual UVIPawnVaultComponent* GetPawnVaultComponent_Implementation() const override { return VaultComponent; }
+ virtual UMotionWarpingComponent* GetMotionWarpingComponent_Implementation() const override { return MotionWarpingComponent; }
+
+ virtual FVIAnimSet GetVaultAnimSet_Implementation() const override { return VaultAnimSet; }
+ virtual FVITraceSettings GetVaultTraceSettings_Implementation() const override { return VaultTraceSettings; }
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacterAbilityBase.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacterAbilityBase.h
new file mode 100644
index 00000000..eacfbdad
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacterAbilityBase.h
@@ -0,0 +1,54 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Pawn/VICharacterBase.h"
+#include "AbilitySystemInterface.h"
+#include "VICharacterAbilityBase.generated.h"
+
+class UVIAbilitySystemComponent;
+
+/**
+ * Adds a UVIAbilitySystemComponent to your character base
+ * Allows switching replication mode in Blueprint for the sake of AI using Minimal instead of Mixed
+ */
+UCLASS()
+class VAULTIT_API AVICharacterAbilityBase : public AVICharacterBase, public IAbilitySystemInterface
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY(BlueprintReadOnly, Category = Abilities)
+ UVIAbilitySystemComponent* AbilitySystem;
+
+protected:
+ /**
+ * Used by blueprints to allow changing replication mode which is usually
+ * only accessible via C++
+ *
+ * Recommended as follows:
+ * For player characters use Mixed
+ * For AI characters use Minimal
+ */
+ UPROPERTY(EditDefaultsOnly, Category = Abilities)
+ EVIGameplayEffectReplicationMode AbilitySystemReplicationMode;
+
+public:
+ AVICharacterAbilityBase(const FObjectInitializer& OI);
+
+#if WITH_EDITOR
+ virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
+#endif // WITH_EDITOR
+
+protected:
+ // *********************************************** //
+ // ******** Begin IAbilitySystemInterface ******** //
+ // *********************************************** //
+
+ virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;
+
+ // *********************************************** //
+ // ********* End IAbilitySystemInterface ********* //
+ // *********************************************** //
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacterBase.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacterBase.h
new file mode 100644
index 00000000..c9dc3a43
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VICharacterBase.h
@@ -0,0 +1,118 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Character.h"
+#include "VITypes.h"
+#include "VIPawnInterface.h"
+#include "VICharacterBase.generated.h"
+
+class UMotionWarpingComponent;
+class UVIPawnVaultComponent;
+
+/**
+ * An incomplete character base class
+ * Needs to inherit from IAbilitySystemInterface and implement a UVIAbilitySystemComponent
+ * @see: AVICharacterAbilityBase where this is done for you
+ *
+ * Requires multiple overrides which will cause errors if not correctly performed
+ */
+UCLASS(abstract)
+class VAULTIT_API AVICharacterBase : public ACharacter, public IVIPawnInterface
+{
+ GENERATED_BODY()
+
+public:
+ /**
+ * Motion Warping Component used for vaulting
+ */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Character)
+ UMotionWarpingComponent* MotionWarpingComponent;
+
+ /**
+ * Pawn Vault Component used for core vaulting logic
+ *
+ * This is added in Blueprint and must be returned via
+ * the IVIPawnInterface::GetPawnVaultComponent function
+ */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Character)
+ UVIPawnVaultComponent* VaultComponent;
+
+protected:
+ /** Simulated proxies use this to update their vaulting state based on server values */
+ UPROPERTY(Replicated, BlueprintReadWrite, Category = Vault)
+ bool bRepIsVaulting;
+
+ /** Used to detect changes in vaulting state and call StopVaultAbility() */
+ UPROPERTY()
+ bool bWasVaulting;
+
+ /**
+ * Simulated proxies use this to reproduce motion matching results provided
+ * by server in the GA_Vault gameplay ability
+ *
+ * Local players use this as a cache for FBIK testing (returned via GetVaultLocationAndDirection)
+ *
+ * Net Serialized to one decimal point of precision
+ */
+ UPROPERTY(ReplicatedUsing="OnRep_MotionMatch", BlueprintReadWrite, Category = Vault)
+ FVIRepMotionMatch RepMotionMatch;
+
+public:
+ virtual void BeginPlay() override;
+
+ virtual void CheckJumpInput(float DeltaTime) override;
+
+ virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override;
+
+public:
+ virtual void Jump() override;
+ virtual void StopJumping() override;
+
+ /** Called from gameplay ability when vault stops */
+ UFUNCTION(BlueprintCallable, Category = Vault)
+ void StopVaultAbility();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = Vault)
+ void OnStopVaultAbility();
+
+protected:
+ UFUNCTION()
+ void OnRep_MotionMatch();
+
+public:
+ /**
+ * @return True if vaulting
+ * Correct value must be returned based on net role here
+ * Simulated proxies return bRepIsVaulting
+ * Server & Authority must return CMC bIsVaulting
+ */
+ UFUNCTION(BlueprintPure, Category = Vault)
+ virtual bool IsVaulting() const;
+
+ // *********************************************** //
+ // *********** Begin IVIPawnInterface ************ //
+ // *********************************************** //
+
+ // Read VIPawnInterface.h for detailed descriptions of these functions or look
+ // inside their functions themselves
+
+ virtual UVIPawnVaultComponent* GetPawnVaultComponent_Implementation() const override;
+ virtual UMotionWarpingComponent* GetMotionWarpingComponent_Implementation() const override;
+ virtual USkeletalMeshComponent* GetMeshForVaultMontage_Implementation() const override { return GetMesh(); }
+ virtual FVIAnimSet GetVaultAnimSet_Implementation() const override;
+ virtual FVITraceSettings GetVaultTraceSettings_Implementation() const override;
+ virtual FVector GetVaultDirection_Implementation() const override;
+ virtual bool CanVault_Implementation() const override;
+ virtual void StartVaultAbility_Implementation() override;
+ virtual void OnLocalPlayerVault_Implementation(const FVector& Location, const FVector& Direction) override;
+ virtual void GetVaultLocationAndDirection_Implementation(FVector& OutLocation, FVector& OutDirection) const override;
+ virtual void ReplicateMotionMatch_Implementation(const FVIRepMotionMatch& MotionMatch) override;
+ virtual bool IsWalkable_Implementation(const FHitResult& HitResult) const override;
+ virtual bool CanAutoVaultInCustomMovementMode_Implementation() const override;
+
+ // *********************************************** //
+ // ************* End IVIPawnInterface ************ //
+ // *********************************************** //
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VIPawnInterface.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VIPawnInterface.h
new file mode 100644
index 00000000..9fc9a21f
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VIPawnInterface.h
@@ -0,0 +1,148 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "VITypes.h"
+#include "VIPawnInterface.generated.h"
+
+class UMotionWarpingComponent;
+class UVIPawnVaultComponent;
+
+UINTERFACE(BlueprintType)
+class VAULTIT_API UVIPawnInterface : public UInterface
+{
+ GENERATED_BODY()
+};
+
+class VAULTIT_API IVIPawnInterface
+{
+ GENERATED_BODY()
+
+public:
+ /**
+ * VIPawnVaultComponent should either be derived as a blueprint or an
+ * existing blueprint should be copied and added to your pawn or character
+ * and returned by this event
+ *
+ * Ideally it should also be set and cached on the character for cheaper access
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ UVIPawnVaultComponent* GetPawnVaultComponent() const;
+
+ /**
+ * Simply return the motion warping component that has been added to
+ * your pawn or character
+ *
+ * Ideally it should also be set and cached on the character for cheaper access
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ UMotionWarpingComponent* GetMotionWarpingComponent() const;
+
+ /**
+ * This is the mesh that players the vaulting montage
+ * In most cases it is the character's mesh but it can be whichever
+ * is capable of driving root motion
+ *
+ * If you have first and third person, it is advisable to use third
+ * person mesh and have the first person animation line up both
+ * cosmetically and in terms of length
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ USkeletalMeshComponent* GetMeshForVaultMontage() const;
+
+ /**
+ * Provide animation set used when vaulting
+ * You can use CharacterMovementComponent's movement mode such as
+ * Falling, Swimming, etc to provide different results
+ *
+ * The runtime change in vault animation must come through some form of
+ * prediction so the server and client are never out of sync
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ FVIAnimSet GetVaultAnimSet() const;
+
+ /**
+ * Provide trace settings used when vaulting
+ * You can use CharacterMovementComponent's movement mode such as
+ * Falling, Swimming, etc to provide different results
+ *
+ * If you use a more extreme anti-cheat that requires the server to do
+ * full vaulting checks then the runtime change in trace settings must
+ * come through some form of prediction so the server and client are never
+ * out of sync
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ FVITraceSettings GetVaultTraceSettings() const;
+
+ /**
+ * The vector used to determine the direction to vault in
+ * There is no need to normalize this vector; it will just end up being
+ * done twice
+ *
+ * The most responsive option is to use acceleration (input) if available
+ * and otherwise use the character's forward direction
+ *
+ * You could also use the velocity direction, however that could frustrate
+ * players because it may ignore or go against their intentions but
+ * should provide a much more realistic result
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ FVector GetVaultDirection() const;
+
+ /**
+ * Logic to determine if we are currently able to vault
+ * UVIPawnVaultComponent::IsVaulting() should be compatible with GAS
+ * as it is based on state gameplay tags
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ bool CanVault() const;
+
+ /**
+ * Called by GA_Vault when the vault ability starts
+ * For characters, they need to have their movement components placed
+ * into flying mode for root motion to work on Z axis (a natural requirement
+ * for vaulting)
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ void StartVaultAbility();
+
+ /**
+ * Called when the local player starts vaulting to allow them to cache
+ * the Location and Direction for other purposes, in particular, FBIK
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ void OnLocalPlayerVault(const FVector& Location, const FVector& Direction);
+
+ /**
+ * Return the cached location and direction for vaulting
+ * On local player this is the data stored from OnLocalPlayerVault()
+ * On server and simulated proxy this is the data stored from ReplicateMotionMatch()
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ void GetVaultLocationAndDirection(FVector& OutLocation, FVector& OutDirection) const;
+
+ /**
+ * Called by GA_Vault to notify server that it should update a predicted
+ * property that simulated clients receive to set their motion matching
+ * sync point
+ *
+ * Net quantized to 1 decimal place
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ void ReplicateMotionMatch(const FVIRepMotionMatch& MotionMatch);
+
+ /**
+ * Determine if the surface provided by the hit result is walkable or not
+ * For characters this is UCharacterMovementComponent::IsWalkable()
+ */
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category = Vault)
+ bool IsWalkable(const FHitResult& HitResult) const;
+
+ /**
+ * This is only used when AutoVaultSettings utilizes "Custom" and the Pawn is in custom movement mode
+ * This is where you check against the custom movement mode it is currently in to determine if it can auto vault in this mode
+ */
+ UFUNCTION(BlueprintNativeEvent, Category = Vault)
+ bool CanAutoVaultInCustomMovementMode() const;
+};
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VIPawnVaultComponent.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VIPawnVaultComponent.h
new file mode 100644
index 00000000..0e440879
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/Pawn/VIPawnVaultComponent.h
@@ -0,0 +1,423 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Components/ActorComponent.h"
+#include "GameplayTagContainer.h"
+#include "VITypes.h"
+#include "VIPawnVaultComponent.generated.h"
+
+class APawn;
+class UGameplayAbility;
+struct FPredictProjectilePathResult;
+
+UENUM(BlueprintType)
+enum class EVIVaultInputRelease : uint8
+{
+ VIR_Always UMETA(DisplayName = "Always", ToolTip = "Always release vault input after a single test; recommended setting for performance"),
+ VIR_OnSuccess UMETA(DisplayName = "On Success", ToolTip = "Always release vault input after successfully vaulting; can be expensive computationally"),
+ VIR_Never UMETA(DisplayName = "Never", ToolTip = "Never release vault input unless the player does so; can be expensive computationally"),
+};
+
+/**
+ * Used to set which movement modes auto vault works with
+ */
+UENUM(BlueprintType, meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true"))
+enum class EVIAutoVault : uint8
+{
+ VIAV_None = 0 UMETA(Hidden),
+ VIAV_Walking = 1 << 1 UMETA(DisplayName = "Walking"),
+ VIAV_Falling = 1 << 2 UMETA(DisplayName = "Falling"),
+ VIAV_Swimming = 1 << 3 UMETA(DisplayName = "Swimming"),
+ VIAV_Flying = 1 << 4 UMETA(DisplayName = "Flying"),
+ VIAV_Custom = 1 << 5 UMETA(DisplayName = "Custom", ToolTip = "Make sure to properly implement VIPawnInterface::CanAutoVaultInCustomMovementMode"),
+};
+ENUM_CLASS_FLAGS(EVIAutoVault);
+
+UENUM(BlueprintType)
+enum class EVIAntiCheatType : uint8
+{
+ VIACT_None UMETA(DisplayName = "None", ToolTip = "No Anti-Cheat, always trust client. Suitable for co-op and non-competitive games"),
+ VIACT_Enabled UMETA(DisplayName = "Enabled", ToolTip = "Competitive anti-cheat, avoid using with high player count. Does full vault checks on server and offers tolerances within which to compare the client's data. If tolerances are too tight may de-sync the client and reject the vault"),
+ VIACT_Custom UMETA(DisplayName = "Custom", ToolTip = "Override ComputeCustomAntiCheat on the PawnVaultComponent to define behaviour that server verifies"),
+};
+
+/**
+ * Performs a full vault check to compare to client's (can get expensive)
+ * Should only be used in competitive environments without many players that vault
+ * This check is never needed for AI
+ */
+USTRUCT(BlueprintType)
+struct FVIAntiCheatSettings
+{
+ GENERATED_BODY()
+
+ FVIAntiCheatSettings()
+ : LocationErrorThreshold(10.f)
+ , DirectionErrorThreshold(0.2f)
+ , HeightErrorThreshold(4.f)
+ {}
+
+ virtual ~FVIAntiCheatSettings() = default;
+
+ /**
+ * How far apart in unreal units the client and server can be with their vault location
+ * This check doesn't work for vaulting over objects below half height
+ * Set to -1 to disable check
+ *
+ * Remember to allow for player collisions, packet loss, etc. that could prevent vaulting when not cheating
+ */
+ UPROPERTY(EditDefaultsOnly, Category = "Vault|AntiCheat", meta = (ClampMin = "-1", UIMin = "-1"))
+ float LocationErrorThreshold;
+
+ /**
+ * How far apart the client and server can be with their vault direction
+ * This check works in a range of -1 (opposite) to 1 (completely identical)
+ * Set to -1 to disable check
+ *
+ * Remember to allow for player collisions, packet loss, etc. that could prevent vaulting when not cheating
+ */
+ UPROPERTY(EditDefaultsOnly, Category = "Vault|AntiCheat", meta = (ClampMin = "-1", UIMin = "-1"))
+ float DirectionErrorThreshold;
+
+ /**
+ * How far apart in unreal units the client and server can be with their vault height
+ * Set to -1 to disable check
+ *
+ * Remember to allow for player collisions, packet loss, etc. that could prevent vaulting when not cheating
+ */
+ UPROPERTY(EditDefaultsOnly, Category = "Vault|AntiCheat", meta = (ClampMin = "-1", UIMin = "-1"))
+ float HeightErrorThreshold;
+
+ /** The results here are almost always identical due to prediction if network conditions are ideal (latency is OK, but packet loss or collisions can cause issues), low tolerances can be used */
+ virtual bool ComputeAntiCheat(const FVIVaultInfo& ClientInfo, const FVIVaultInfo& ServerInfo, const APawn* const Pawn) const;
+};
+
+/**
+ * Responsible for all vaulting logic that doesn't belong in a character or pawn
+ * Owner must implement IVIPawnInterface
+ * Owner must override most functions in IVIPawnInterface
+ * Owner must implement IAbilitySystemInterface
+ * Owner must have an AbilitySystemComponent
+ *
+ * If owner is a pawn, you will need to create a blueprint and override GetCapsuleInfo() (read it's tooltip, it's important)
+ */
+UCLASS(Blueprintable, ClassGroup=(Custom), meta=(BlueprintSpawnableComponent, DisplayName = "PawnVaultComponent"))
+class VAULTIT_API UVIPawnVaultComponent : public UActorComponent
+{
+ GENERATED_BODY()
+
+public:
+ /**
+ * The GA_Vault GameplayAbility responsible for the action itself
+ */
+ UPROPERTY(EditDefaultsOnly, Category = "Ability")
+ TSubclassOf VaultAbility;
+
+ /** Tag used to initiate vaulting ability */
+ UPROPERTY(EditDefaultsOnly, Category = "Ability")
+ FGameplayTag VaultAbilityTag;
+
+ /** Tag used to check if vaulting is active */
+ UPROPERTY(EditDefaultsOnly, Category = "Ability")
+ FGameplayTag VaultStateTag;
+
+ /** Tag used to check if vaulting is active */
+ UPROPERTY(EditDefaultsOnly, Category = "Ability")
+ FGameplayTag VaultRemovalTag;
+
+ /**
+ * How to handle releasing of vault input
+ * Note that jump key will always auto release, this only applies to holding down vault key
+ * Allowing player to continue holding vault key as opposed to doing single checks each press
+ * can be computationally expensive as it does multiple traces every render tick
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ EVIVaultInputRelease AutoReleaseVaultInput;
+
+ /**
+ * What to do when pressing the jump key
+ * Disable Vault from Jump: Jump key cannot vault
+ * Select Highest Point: Checks ahead to see if jump can reach as high as vault, and will vault if it can go higher
+ * Always Vault if Possible: Will always vault if it is possible to do so, otherwise jump
+ * Only Vault from Air: Only vault if in air and jump key wont otherwise do anything (eg. double jump)
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ EVIJumpKeyPriority JumpKeyPriority;
+
+ /**
+ * If true, will trace geometry instead of collision mesh when looking for vaulting surface
+ * This is helpful if using a map that wasn't setup with collisions that work well with vaulting and you just want something usable
+ * But a production ready game should probably disable this
+ *
+ * This could result in vaulting onto something the character cannot actually move onto, as character movement does not use complex collision
+ */
+ bool bVaultTraceComplex;
+
+ /**
+ * If not using root motion animations using only motion warping may fail to reach the ledge,
+ * providing extra height will fix this but requires more blending
+ *
+ * When using root motion animations you should leave this at 0
+ *
+ * Only works when vaulting onto a surface higher than us
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ float AdditionalVaultHeight;
+
+ /**
+ * Used instead of AdditionalVaultHeight if falling
+ * If not using root motion animations using only motion warping may fail to reach the ledge,
+ * providing extra height will fix this but requires more blending
+ *
+ * When using root motion animations you should leave this at 0
+ *
+ * Only works when vaulting onto a surface higher than us
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ float AdditionalVaultHeightFalling;
+
+ /**
+ * Vault is allowed to occur when on ground
+ * The component itself does not use this setting, it is available for use by the owner when checking CanVault()
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ bool bCanVaultFromGround;
+
+ /**
+ * Vault is allowed to occur when in falling state
+ * The component itself does not use this setting, it is available for use by the owner when checking CanVault()
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ bool bCanVaultFromFalling;
+
+ /**
+ * Vault is allowed to occur when in swimming state
+ * The component itself does not use this setting, it is available for use by the owner when checking CanVault()
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ bool bCanVaultFromSwimming;
+
+ /**
+ * WARNING: It is up to you to handle the logic for crouching, VaultIt does not support this by default
+ * Vault is allowed to occur when crouching
+ * The component itself does not use this setting, it is available for use by the owner when checking CanVault()
+ * Crouching has a different capsule size, you will either need to update CapsuleInfo or stop crouching when vaulting starts
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ bool bCanVaultFromCrouching;
+
+ /**
+ * Optional auto vaulting
+ * This can be expensive as it is performed on tick (CheckVaultInput)
+ * However, it is not a full vault test, it only tests if something is in our way
+ *
+ * AI requires this to vault
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, meta = (Bitmask, BitmaskEnum = "EVIAutoVault"), Category = Vault)
+ uint8 AutoVaultStates;
+
+ /**
+ * Used to skip AutoVault checks for AutoVaultFrameSkip amount of ticks
+ * If set to 0, will always check on tick
+ * If set to 1, will check every second tick
+ * If set to 2, will check every third tick
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = Vault)
+ uint8 AutoVaultCheckSkip;
+
+ /**
+ * Corrections from anti-cheat tend to be aggressive and cause rubber banding at most latencies, so be forgiving where possible
+ * Because vaulting is predicted there shouldn't be much deviation, so using slightly higher tolerances to allow for some deviation
+ * should suffice until you have packet loss, in which case de-syncing becomes quite normal
+ */
+ UPROPERTY(EditDefaultsOnly, Category = "Vault|AntiCheat")
+ EVIAntiCheatType AntiCheatType;
+
+public:
+ /**
+ * Competitive anti-cheat. Does full vault checks and offers tolerances within which to compare the client's data. If tolerances are too tight may de-sync the client
+ * and reject the vault.
+ * Can get expensive with a lot of player characters, test cost with `stat VaultIt`
+ * Will always fail regardless if the ComputeVault result is false, consider using more lenient settings for the authority in VIPawnInterface::GetVaultTraceSettings()
+ * The results here are almost always identical due to prediction, low tolerances can be used, however collisions with other players may interfere
+ *
+ * Remember to allow for player collisions, packet loss, etc. that could prevent vaulting when not cheating
+ */
+ UPROPERTY(EditDefaultsOnly, Category = "Vault|AntiCheat")
+ FVIAntiCheatSettings AntiCheatSettings;
+
+public:
+ UPROPERTY()
+ bool bVaultAbilityInitialized;
+
+ /** When true, player wants to vault */
+ UPROPERTY(BlueprintReadOnly, Category = Vault)
+ bool bPressedVault;
+
+ UPROPERTY(BlueprintReadWrite, Category = Vault)
+ FVICapsuleInfo CapsuleInfo;
+
+protected:
+ /** If true, last jump key resulted in vault press and releasing jump should release vault */
+ bool bLastJumpInputVaulted;
+
+ uint8 AutoVaultSkippedTicks;
+
+ /** Was used in determining if jump key should vault or not; no need to do the check twice */
+ FVIVaultResult PendingVaultResult;
+
+ UPROPERTY(BlueprintReadOnly, Transient, DuplicateTransient, Category = Pawn)
+ APawn* PawnOwner;
+
+public:
+ UPROPERTY()
+ UAbilitySystemComponent* ASC;
+
+public:
+ UVIPawnVaultComponent()
+ : AutoReleaseVaultInput(EVIVaultInputRelease::VIR_Always)
+ , JumpKeyPriority(EVIJumpKeyPriority::JKP_SelectHighestPoint)
+ , bVaultTraceComplex(false)
+ , bCanVaultFromGround(true)
+ , bCanVaultFromFalling(true)
+ , bCanVaultFromSwimming(false)
+ , bCanVaultFromCrouching(false)
+ , AutoVaultStates(0)
+ , AutoVaultCheckSkip(8)
+ , AntiCheatType(EVIAntiCheatType::VIACT_None)
+ , bVaultAbilityInitialized(false)
+ , bPressedVault(false)
+ , bLastJumpInputVaulted(false)
+ , AutoVaultSkippedTicks(0)
+ , PendingVaultResult(FVIVaultResult())
+ {
+ PrimaryComponentTick.bStartWithTickEnabled = false;
+ PrimaryComponentTick.bCanEverTick = false;
+ }
+
+ virtual void BeginPlay() override;
+
+ /**
+ * Call this from the Jump function override if using character
+ *
+ * You only need to supply the parameters that are used by your choice of JumpKeyPriority
+ * @param GravityZ: Used by "Select Highest Point"
+ * @param bCanJump: Used by "Only Vault from Air"
+ * @param bIsFalling: Used by "Only Vault from Air"
+ * @return True if jumping or false if vaulting
+ */
+ UFUNCTION(BlueprintCallable, Category = Vault)
+ virtual bool Jump(float GravityZ = 0.f, bool bCanJump = false, bool bIsFalling = false);
+
+ /**
+ * Call this from StopJumping function override if using character
+ */
+ UFUNCTION(BlueprintCallable, Category = Vault)
+ virtual void StopJumping();
+
+ /**
+ * Call this when vault input is pressed
+ */
+ UFUNCTION(BlueprintCallable, Category = Vault)
+ void Vault();
+
+ /**
+ * Call this when vault input is released
+ */
+ UFUNCTION(BlueprintCallable, Category = Vault)
+ void StopVault();
+
+ /**
+ * For characters this is called on CheckJumpInput() (see AVICharacterBase for example)
+ * For pawns it would be called on tick
+ * @param MovementMode: Used to identify AutoVault capability; if this isn't being used nothing needs to be passed
+ */
+ UFUNCTION(BlueprintCallable, Category = Vault)
+ virtual void CheckVaultInput(float DeltaTime, TEnumAsByte MovementMode = MOVE_Walking);
+
+ /**
+ * @return True if vaulting
+ * Should be compatible with GAS as it uses gameplay tags for vaulting state
+ */
+ UFUNCTION(BlueprintPure, Category = Vault)
+ virtual bool IsVaulting() const;
+
+ /**
+ * Compute the actual result of a vault attempt and return all information as well as whether it succeeded or not
+ * Always check CanVault() or similar functionality to ensure character or pawn is in a state where they're allowed to vault
+ * This performs multiple traces so use `stat VaultIt` to ensure you're not using too much CPU by over-using it
+ */
+ UFUNCTION(BlueprintPure, Category = Vault)
+ FVIVaultResult ComputeVault() const;
+
+ /**
+ * Convert the data from ComputeVault into usable data
+ */
+ UFUNCTION(BlueprintNativeEvent, BlueprintPure, Category = Vault)
+ FVIVaultInfo ComputeVaultInfoFromResult(const FVIVaultInfo& VaultResult) const;
+
+ /**
+ * @return True if the trace(s) allows us to vault
+ */
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Category = Vault)
+ bool ComputeShouldAutoVault();
+
+protected:
+ /**
+ * This is called on BeginPlay() to cache the default values from the owner
+ * If owner is a Character then it will simply use the capsule sizes
+ * If owner is a Pawn then you must subclass and override this
+ *
+ * If overriding this in blueprint, you should first call IsCapsuleInfoValid() and return parent function if it's true and use custom logic if false
+ * If overriding this in C++, you should call CapsuleInfo.IsValidCapsule() and return super if it's true and use custom logic if false
+ *
+ * If Pawn uses a box instead of a capsule, return the box HalfHeightt as the HalfHeight and the longest width as Radius
+ *
+ * If it has a valid CapsuleInfo it will always return it
+ *
+ * If capsule size changes eg. when crouching then you need to update the CapsuleInfo manually
+ * (eg. from the OnStartCrouching and OnStopCrouching) events
+ */
+ UFUNCTION(BlueprintNativeEvent, BlueprintPure, Category = Vault)
+ FVICapsuleInfo GetCapsuleInfo() const;
+
+ UFUNCTION(BlueprintPure, Category = Vault)
+ bool IsCapsuleInfoValid() const { return CapsuleInfo.IsValidCapsule(); }
+
+ // Anti-cheat
+public:
+ /**
+ * Tests for cheating or invalid / incompatible data
+ * Incompatible data and rejection can result from de-sync and does not necessarily mean the player is cheating
+ *
+ * No need to test local or remote role or net mode; this is all done for you
+ *
+ * @return True if anti-cheat passed
+ */
+ UFUNCTION(BlueprintPure, Category = "Vault|AntiCheat")
+ bool ComputeAntiCheatResult(const FVIVaultInfo& VaultInfo) const;
+
+protected:
+ /**
+ * Used by ComputeCustomAntiCheat to call built-in anti-cheat functions
+ * This allows extension of existing behaviour
+ *
+ * ServerVaultResult can be obtained from ComputeVault()
+ *
+ * @return True if anti-cheat passed
+ */
+ UFUNCTION(BlueprintPure, Category = "Vault|AntiCheat")
+ bool ComputeDefaultAntiCheat(const FVIVaultInfo& ClientVaultInfo, const FVIVaultResult& ServerVaultResult) const { return AntiCheatSettings.ComputeAntiCheat(ClientVaultInfo, ServerVaultResult, PawnOwner); }
+
+ /**
+ * Override to implement custom AntiCheat
+ * Note that performance metrics are not available for this function
+ */
+ UFUNCTION(BlueprintNativeEvent, Category = "Vault|AntiCheat")
+ bool ComputeCustomAntiCheat(const FVIVaultInfo& ClientVaultInfo) const;
+
+protected:
+ bool PredictLandingLocation(FPredictProjectilePathResult& PredictResult, float HalfHeight, float Radius, float GravityZ) const;
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VIBlueprintFunctionLibrary.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VIBlueprintFunctionLibrary.h
new file mode 100644
index 00000000..0b78cb50
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VIBlueprintFunctionLibrary.h
@@ -0,0 +1,231 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Kismet/BlueprintFunctionLibrary.h"
+#include "VITypes.h"
+#include "VIBlueprintFunctionLibrary.generated.h"
+
+class ACharacter;
+class AVICharacterBase;
+struct FPredictProjectilePathResult;
+
+/**
+ *
+ */
+UCLASS(meta = (ScriptName = "VIBlueprintFunctionLibrary"))
+class VAULTIT_API UVIBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
+{
+ GENERATED_BODY()
+
+public:
+ static void MessageLogError(const FString& ErrorMsg, bool bOpenLog = true);
+
+ UFUNCTION(BlueprintPure, Category = Vault)
+ static bool VaultAnimSetIsValid(const FVIAnimSet& AnimSet) { return AnimSet.IsValid(); }
+
+ UFUNCTION(BlueprintPure, Category = Replication)
+ static bool IsRunningOnServer(const AActor* Actor)
+ {
+ if (Actor)
+ {
+ return (Actor->GetNetMode() == NM_DedicatedServer || Actor->GetNetMode() == NM_ListenServer);
+ }
+ return false;
+ }
+
+ /**
+ * Get Max Jump Height + Max Vault Height
+ * The maximum height a character can achieve from the ground
+ * Assumes gravity, jump velocity, and vault height do not change during runtime and is not in a physics volume or otherwise modified
+ */
+ UFUNCTION(BlueprintPure, Category = Pawn)
+ static float GetMaxHeightFromGround(const ACharacter* Character);
+
+ UFUNCTION(BlueprintPure, Category = Pawn)
+ static float GetMaxVaultHeight(const APawn* Pawn);
+
+ /**
+ * Get Max Jump Height + Max Vault Height
+ * The maximum height a pawn can achieve from the ground
+ * Assumes gravity, jump velocity, and vault height do not change during runtime and is not in a physics volume or otherwise modified
+ */
+ UFUNCTION(BlueprintPure, Category = Pawn)
+ static float GetMaxHeightFromGroundForPawn(const APawn* Pawn, const float Gravity, const float JumpZVelocity);
+
+ /**
+ * Get Max Jump Height
+ * When added to max vault height we get the maximum height a character can achieve from the ground
+ * Assumes gravity, jump velocity, and vault height do not change during runtime and is not in a physics volume or otherwise modified
+ */
+ UFUNCTION(BlueprintPure, Category = Pawn)
+ static float GetMaxJumpHeightForCharacter(const ACharacter* Character);
+
+ /**
+ * Get Max Jump Height
+ * When added to max vault height we get the maximum height a character can achieve from the ground
+ * Assumes gravity, jump velocity, and vault height do not change during runtime and is not in a physics volume or otherwise modified
+ */
+ UFUNCTION(BlueprintPure, Category = Pawn)
+ static float GetMaxJumpHeight(const float Gravity, const float JumpZVelocity)
+ {
+ if (FMath::Abs(Gravity) > KINDA_SMALL_NUMBER)
+ {
+ return FMath::Square(JumpZVelocity) / (-2.f * Gravity);
+ }
+ else
+ {
+ return 0.f;
+ }
+ }
+
+ /**
+ * @param InActor: Actor to check
+ * @param bWorldUpIsZ: If true does a much cheaper check when using Z as world up axis, if false will use vector
+ * projection for arbitrary orientation
+ * @return True if character is rising, false if falling
+ */
+ UFUNCTION(BlueprintPure, Category = Pawn)
+ static bool ActorIsAscending(const AActor* InActor, bool bWorldUpIsZ);
+
+ UFUNCTION(BlueprintPure, Category = Animation)
+ static float ComputeAnimationPlayRateFromDuration(const UAnimSequenceBase* Animation, float Duration = 1.f);
+
+ /**
+ * Called by Anim Graph from VIAnimationInterface::SetBoneFBIK to either enable and update FBIK bone data or disable it
+ */
+ UFUNCTION(BlueprintCallable, Category = FBIK)
+ static void ToggleBoneFBIK(const FName& BoneName, const FVector& NewLocation, bool bEnable, UPARAM(ref) TArray& Bones)
+ {
+ if (FVIBoneFBIKData* Bone = GetBoneForFBIK(BoneName, Bones))
+ {
+ if (bEnable)
+ {
+ Bone->Enable(NewLocation);
+ }
+ else
+ {
+ Bone->Disable();
+ }
+ }
+ }
+
+ /**
+ * Called by Anim Graph to interpolate array of FBIK bone data
+ */
+ UFUNCTION(BlueprintCallable, Category = FBIK)
+ static void InterpolateFBIK(float DeltaTime, UPARAM(ref) TArray& Bones)
+ {
+ for (FVIBoneFBIKData& Bone : Bones)
+ {
+ Bone.Update(DeltaTime);
+ }
+ }
+
+ /** Get specific FBIK Bone Data */
+ static FVIBoneFBIKData* GetBoneForFBIK(FName BoneName, TArray& Bones)
+ {
+ for (FVIBoneFBIKData& Bone : Bones)
+ {
+ if (Bone.BoneName.IsEqual(BoneName))
+ {
+ return &Bone;
+ }
+ }
+
+ return nullptr;
+ }
+
+ /** Get specific FBIK Bone Data */
+ static const FVIBoneFBIKData* GetBoneForFBIK(FName BoneName, const TArray& Bones)
+ {
+ for (const FVIBoneFBIKData& Bone : Bones)
+ {
+ if (Bone.BoneName.IsEqual(BoneName))
+ {
+ return &Bone;
+ }
+ }
+
+ return nullptr;
+ }
+
+ /**
+ * Get specific FBIK Bone Data
+ * This is not checked whether it exists or not; you can add your own based on whether the resulting BoneName is None or not
+ */
+ UFUNCTION(BlueprintPure, Category = FBIK, meta = (DisplayName = "Get Bone For FBIK"))
+ static FVIBoneFBIKData K2_GetBoneForFBIK(FName BoneName, const TArray& Bones)
+ {
+ for (const FVIBoneFBIKData& Bone : Bones)
+ {
+ if (Bone.BoneName.IsEqual(BoneName))
+ {
+ return Bone;
+ }
+ }
+
+ return FVIBoneFBIKData();
+ }
+
+ /** Returns the VaultInfo if it exists */
+ UFUNCTION(BlueprintPure, Category = "Ability|TargetData")
+ static FVIVaultInfo GetVaultInfoFromTargetData(const FGameplayAbilityTargetDataHandle& TargetData);
+
+ /**
+ * Predict where a Character or Pawn will land
+ */
+ static bool PredictLandingLocation(FPredictProjectilePathResult& OutPredictResult, ACharacter* ForCharacter, const TArray>& ObjectTypes, bool bTraceComplex);
+
+ /**
+ * Predict where a Character or Pawn will land
+ */
+ static bool PredictLandingLocation(FPredictProjectilePathResult& OutPredictResult, AActor* ForActor, const TArray>& ObjectTypes, float HalfHeight, float Radius, const FVector& Gravity, bool bTraceComplex);
+
+ /**
+ * Predict where a Character or Pawn will land
+ */
+ static bool PredictLandingLocation(FPredictProjectilePathResult& OutPredictResult, AActor* ForActor, const TArray>& ObjectTypes, float HalfHeight, float Radius, float GravityZ, bool bTraceComplex);
+
+ /**
+ * Predict the arc of a virtual capsule (character) affected by gravity with collision checks along the arc.
+ * Returns true if it hit something.
+ *
+ * @param PredictParams Input params to the trace (start location, velocity, time to simulate, etc).
+ * @param PredictResult Output result of the trace (Hit result, array of location/velocity/times for each trace step, etc).
+ * @return True if hit something along the path (if tracing with collision).
+ */
+ static bool PredictCapsulePath(const UObject* WorldContextObject, float HalfHeight, const struct FPredictProjectilePathParams& PredictParams, struct FPredictProjectilePathResult& PredictResult, const FVector& UpVector);
+
+ /**
+ * Always check CanVault() or similar functionality to ensure character is in a state where they're allowed to vault
+ */
+ static FVIVaultResult ComputeVault(APawn* const Pawn, const FVector& InVaultDirection, const FVITraceSettings& TraceSettings, const FVICapsuleInfo& Capsule, bool bTraceComplex);
+
+ /**
+ * Same as engine version but allows for rotation via quaternion
+ * Sweeps a capsule along the given line and returns the first hit encountered.
+ * This only finds objects that are of a type specified by ObjectTypes.
+ *
+ * @param WorldContext World context
+ * @param Start Start of line segment.
+ * @param End End of line segment.
+ * @param Rot Actor Quat
+ * @param Radius Radius of the capsule to sweep
+ * @param HalfHeight Distance from center of capsule to tip of hemisphere endcap.
+ * @param ObjectTypes Array of Object Types to trace
+ * @param bTraceComplex True to test against complex collision, false to test against simplified collision.
+ * @param OutHit Properties of the trace hit.
+ * @return True if there was a hit, false otherwise.
+ */
+ static void CapsuleTraceSingleForObjects(const UObject* WorldContextObject, const FVector& Start, const FVector& End, const FQuat& Rot, float Radius, float HalfHeight, const TArray > & ObjectTypes, bool bTraceComplex, const TArray& ActorsToIgnore, bool bDrawDebug, FHitResult& OutHit, bool bIgnoreSelf, FLinearColor TraceColor = FLinearColor::Red, FLinearColor TraceHitColor = FLinearColor::Green, float DrawTime = 5.0f);
+
+ static void DrawDebugCapsuleTraceSingle(const UWorld* World, const FVector& Start, const FVector& End, const FQuat& Rot, float Radius, float HalfHeight, bool bDrawDebug, bool bHit, const FHitResult& OutHit, FLinearColor TraceColor, FLinearColor TraceHitColor, float DrawTime);
+
+ /**
+ * When not using Z-Up this will convert a vector to a float that is only in the given direction
+ * It is the equivalent of doing Vector.Z (0,0,1) if Dir is the up vector or Vector.X (1,0,0) if Dir is the forward vector
+ */
+ static float ComputeDirectionToFloat(const FVector& Vector, const FVector& Dir);
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VITypes.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VITypes.h
new file mode 100644
index 00000000..eb1abcb0
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VITypes.h
@@ -0,0 +1,403 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "Abilities/GameplayAbilityTargetTypes.h"
+#include "GameplayTagsManager.h"
+#include "VITypes.generated.h"
+
+DECLARE_STATS_GROUP(TEXT("VaultIt_Plugin"), STATGROUP_VaultIt, STATCAT_Advanced);
+
+/**
+ * Used to determine behaviour of jump key in relation to vaulting
+ */
+UENUM(BlueprintType)
+enum class EVIJumpKeyPriority : uint8
+{
+ JKP_DisableVault UMETA(DisplayName = "Disable Vault from Jump", ToolTip = "Jump key cannot vault"),
+ JKP_SelectHighestPoint UMETA(DisplayName = "Select Highest Point", ToolTip = "Checks ahead to see if jump can reach as high as vault, and will vault if it can go higher"),
+ JKP_AlwaysVault UMETA(DisplayName = "Always Vault if Possible", ToolTip = "Will always vault if it is possible to do so, otherwise jump"),
+ JKP_OnlyVaultFromAir UMETA(DisplayName = "Only Vault from Air", ToolTip = "Only vault if in air and jump key wont otherwise do anything (eg. double jump)"),
+ JKP_MAX = 255 UMETA(Hidden)
+};
+
+/** How gameplay effects will be replicated to clients */
+UENUM(BlueprintType)
+enum class EVIGameplayEffectReplicationMode : uint8
+{
+ /** Only replicate minimal gameplay effect info. Note: this does not work for Owned AbilitySystemComponents (Use Mixed instead). */
+ Minimal,
+ /** Only replicate minimal gameplay effect info to simulated proxies but full info to owners and autonomous proxies */
+ Mixed,
+ /** Replicate full gameplay info to all */
+ Full,
+};
+
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVICapsuleInfo
+{
+ GENERATED_BODY()
+
+ FVICapsuleInfo()
+ : HalfHeight(0.f)
+ , Radius(0.f)
+ {}
+
+ FVICapsuleInfo(float InHalfHeight, float InRadius)
+ : HalfHeight(InHalfHeight)
+ , Radius(InRadius)
+ {}
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vault)
+ float HalfHeight;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vault)
+ float Radius;
+
+ float GetHalfHeightWithoutHemisphere() const { return HalfHeight - Radius; }
+
+ bool IsValidCapsule() const { return HalfHeight > 0.f && Radius > 0.f; }
+};
+
+/**
+ * Used to create a nested array of animations
+ * TMap where float is vault height
+ */
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVIAnimations
+{
+ GENERATED_BODY()
+
+ FVIAnimations()
+ {}
+
+ UPROPERTY(EditDefaultsOnly, BlueprintReadonly, Category = Vault)
+ TArray Animations;
+
+ bool IsValid() const { return Animations.Num() > 0; }
+};
+
+/**
+ * Used to create a nested array of animations
+ * TMap where float is vault height
+ */
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVIAnimSet
+{
+ GENERATED_BODY()
+
+ FVIAnimSet()
+ {}
+
+ /**
+ * Key: Vault height
+ * Value: Array of animations that can be played at that height
+ */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadonly, Category = Vault)
+ TMap Animations;
+
+ bool IsValid() const { return Animations.Num() > 0; }
+};
+
+/**
+ * Settings to use when tracing for a potential vault attempt
+ */
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVITraceSettings
+{
+ GENERATED_BODY()
+
+ FVITraceSettings()
+ : MaxLedgeHeight(250.f)
+ , MinLedgeHeight(45.f)
+ , ReachDistance(75.f)
+ , ForwardTraceRadius(30.f)
+ , DownwardTraceRadius(30.f)
+ , CollisionFloatHeight(2.4f)
+ , MaxObjectVelocity(0.f)
+ , ObjectChannels({ ECollisionChannel::ECC_WorldStatic, ECollisionChannel::ECC_WorldDynamic })
+ , TraceProfile(TEXT("Vault"))
+ {}
+
+ /** This should be near the highest vault animation you have - motion warping can assist a lot but not completely */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ float MaxLedgeHeight;
+
+ /** This should be the lowest vault animation you have and should probably not be identical to or lower than CMC max step height */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ float MinLedgeHeight;
+
+ /** How far ahead of the character can we grab when looking for a ledge */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ float ReachDistance;
+
+ /** Radius when checking if the surface ahead is walkable (no need to vault it) */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ float ForwardTraceRadius;
+
+ /** Radius when checking if we can stand on the surface ahead (and below) */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ float DownwardTraceRadius;
+
+ /** Characters float 2.4cm off the ground by default */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ float CollisionFloatHeight;
+
+ /** Object can not be vaulted onto if exceeding this velocity. Set to 0 to disable. */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ float MaxObjectVelocity;
+
+ /** Channels for object types that we can vault on (Must be an object channel - eg. WorldStatic; trace channels will not work - eg. Visibility, Camera) */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ TArray> ObjectChannels;
+
+ /** This should be a profile that tests for anything that would stop us moving to our vault location */
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Vault|Settings")
+ FName TraceProfile;
+
+ /** Helper for conversion of ObjectChannels */
+ TArray> GetObjectTypes() const
+ {
+ TArray> Result;
+ for (const TEnumAsByte& CC : ObjectChannels)
+ {
+ Result.Add(UEngineTypes::ConvertToObjectType(CC));
+ }
+
+ return Result;
+ }
+};
+
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVIBoneFBIKData
+{
+ GENERATED_BODY()
+
+public:
+ FVIBoneFBIKData()
+ : BoneName(NAME_None)
+ , InterpRate(150.f)
+ , bEnabled(false)
+ , Location(FVector::ZeroVector)
+ , TargetLocation(FVector::ZeroVector)
+ , bReset(true)
+ {}
+
+ FVIBoneFBIKData(const FName& InBoneName, float InInterpRate = 150.f)
+ : BoneName(InBoneName)
+ , InterpRate(InInterpRate)
+ , bEnabled(false)
+ , Location(FVector::ZeroVector)
+ , TargetLocation(FVector::ZeroVector)
+ , bReset(true)
+ {}
+
+ /** Bone that is moved by FBIK */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vault)
+ FName BoneName;
+
+ /** Rate that bone moves to target location. 0 for no interpolation. */
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Vault)
+ float InterpRate;
+
+ /** Whether this bone has it's FBIK enabled or not */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vault)
+ bool bEnabled;
+
+ /** Location used by anim graph */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vault)
+ FVector Location;
+
+ /** Location to interpolate to */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Vault)
+ FVector TargetLocation;
+
+protected:
+ UPROPERTY()
+ bool bReset;
+
+public:
+ void Update(float DeltaTime)
+ {
+ if (!bEnabled)
+ {
+ return;
+ }
+
+ if (bReset || InterpRate <= 0.f)
+ {
+ Location = TargetLocation;
+ bReset = false;
+ }
+ else
+ {
+ Location = FMath::VInterpConstantTo(Location, TargetLocation, DeltaTime, InterpRate);
+ }
+ }
+
+ /** Enable or update target location */
+ void Enable(const FVector& NewLocation)
+ {
+ bEnabled = true;
+ TargetLocation = NewLocation;
+
+ // Init Location
+ if (Location.IsNearlyZero())
+ {
+ Location = TargetLocation;
+ }
+ }
+
+ void Disable()
+ {
+ // Leave Location intact for blending out
+ bEnabled = false;
+ bReset = true;
+ TargetLocation = FVector::ZeroVector;
+ }
+};
+
+/**
+ * Used by simulated proxies to motion match
+ * Net quantized to 1 decimal point for bandwidth optimization
+ */
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVIRepMotionMatch
+{
+ GENERATED_BODY()
+
+ FVIRepMotionMatch()
+ : Location(FVector::ZeroVector)
+ , Direction(FVector::ZeroVector)
+ {}
+
+ FVIRepMotionMatch(const FVector& InLocation, const FVector& InDirection)
+ : Location(InLocation)
+ , Direction(InDirection)
+ {}
+
+ UPROPERTY(BlueprintReadWrite, Category = Vault)
+ FVector Location;
+
+ UPROPERTY(BlueprintReadWrite, Category = Vault)
+ FVector Direction;
+
+ bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess);
+};
+
+template<>
+struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2
+{
+ enum
+ {
+ WithNetSerializer = true
+ };
+};
+
+/**
+ * Vault info computed locally then sent to the server for use by GA_Vault
+ * Net quantized to 1 decimal point for bandwidth optimization
+ */
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVIVaultInfo
+{
+ GENERATED_BODY()
+
+ FVIVaultInfo()
+ : Location(FVector::ZeroVector)
+ , Direction(FVector::ZeroVector)
+ , Height(0.f)
+ , RandomSeed(0)
+ {}
+
+ UPROPERTY(BlueprintReadOnly, Category = Vault)
+ FVector Location;
+
+ UPROPERTY(BlueprintReadOnly, Category = Vault)
+ FVector Direction;
+
+ UPROPERTY(BlueprintReadOnly, Category = Vault)
+ float Height;
+
+ UPROPERTY(BlueprintReadOnly, Category = Vault)
+ uint8 RandomSeed;
+
+ void SetHeight(float InHeight)
+ {
+ // 1 decimal point of precision
+ Height = RoundFloat(InHeight);
+ }
+
+ static float RoundFloat(float InFloat)
+ {
+ // 1 decimal point of precision
+ return FMath::RoundToFloat(InFloat * 10.f) / 10.f;
+ }
+
+ bool IsValid() const { return Height != 0.f; }
+};
+
+/**
+ * Result of the vault along with the VaultInfo
+ */
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVIVaultResult : public FVIVaultInfo
+{
+ GENERATED_BODY()
+
+ FVIVaultResult()
+ : bSuccess(false)
+ {}
+
+ UPROPERTY(BlueprintReadOnly, Category = Vault)
+ bool bSuccess;
+};
+
+/**
+ * GameplayAbilityTargetData responsible for sending our VaultInfo to the GameplayAbility
+ */
+USTRUCT(BlueprintType)
+struct VAULTIT_API FVIGameplayAbilityTargetData_VaultInfo : public FGameplayAbilityTargetData
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY()
+ FVIVaultInfo VaultInfo;
+
+ const FVIVaultInfo* GetVaultInfo() const
+ {
+ return &VaultInfo;
+ }
+
+ // -------------------------------------
+
+ virtual bool HasOrigin() const override final { return false; }
+ virtual FTransform GetOrigin() const override final { return FTransform::Identity; }
+
+ virtual bool HasEndPoint() const override final { return false; }
+ virtual FVector GetEndPoint() const override final { return FVector::ZeroVector; }
+
+ // -------------------------------------
+
+ virtual UScriptStruct* GetScriptStruct() const override final
+ {
+ return FVIGameplayAbilityTargetData_VaultInfo::StaticStruct();
+ }
+
+ virtual FString ToString() const override final
+ {
+ return TEXT("FVIGameplayAbilityTargetData_VaultInfo");
+ }
+
+ bool NetSerialize(FArchive& Ar, class UPackageMap* Map, bool& bOutSuccess);
+};
+
+template<>
+struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2
+{
+ enum
+ {
+ WithNetSerializer = true // For now this is REQUIRED for FGameplayAbilityTargetDataHandle net serialization to work
+ };
+};
\ No newline at end of file
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VaultIt.h b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VaultIt.h
new file mode 100644
index 00000000..e701e564
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/Public/VaultIt.h
@@ -0,0 +1,15 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Modules/ModuleManager.h"
+
+class FVaultItModule : public IModuleInterface
+{
+public:
+
+ /** IModuleInterface implementation */
+ virtual void StartupModule() override;
+ virtual void ShutdownModule() override;
+};
diff --git a/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/VaultIt.Build.cs b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/VaultIt.Build.cs
new file mode 100644
index 00000000..93230837
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/Source/VaultIt/VaultIt.Build.cs
@@ -0,0 +1,32 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+using UnrealBuildTool;
+
+public class VaultIt : ModuleRules
+{
+ public VaultIt(ReadOnlyTargetRules Target) : base(Target)
+ {
+ PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
+
+ PublicDependencyModuleNames.AddRange(
+ new string[]
+ {
+ "Core",
+ "GameplayAbilities",
+ "GameplayTasks",
+ "GameplayTags",
+ "MotionWarping",
+ }
+ );
+
+
+ PrivateDependencyModuleNames.AddRange(
+ new string[]
+ {
+ "CoreUObject",
+ "Engine",
+ "NetCore",
+ }
+ );
+ }
+}
diff --git a/EndlessVendetta/Plugins/VaultIt/VaultIt.uplugin b/EndlessVendetta/Plugins/VaultIt/VaultIt.uplugin
new file mode 100644
index 00000000..f86378a2
--- /dev/null
+++ b/EndlessVendetta/Plugins/VaultIt/VaultIt.uplugin
@@ -0,0 +1,40 @@
+{
+ "FileVersion": 3,
+ "Version": 1,
+ "VersionName": "1.1.0.0",
+ "FriendlyName": "VaultIt!",
+ "Description": "Multiplayer ready GAS-based vaulting with motion warping & full-body IK & net prediction of the highest caliber",
+ "Category": "Gameplay",
+ "CreatedBy": "Drowning Dragons",
+ "CreatedByURL": "",
+ "DocsURL": "https://github.com/DrowningDragons/VaultIt-Wiki/wiki",
+ "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/7d19b5622d6846edb9881e6c89bce05e",
+ "SupportURL": "https://discord.gg/rk3VRYv",
+ "EngineVersion": "5.1.0",
+ "CanContainContent": true,
+ "Installed": true,
+ "Modules": [
+ {
+ "Name": "VaultIt",
+ "Type": "Runtime",
+ "LoadingPhase": "Default",
+ "PlatformAllowList": [
+ "Win64"
+ ]
+ }
+ ],
+ "Plugins": [
+ {
+ "Name": "GameplayAbilities",
+ "Enabled": true
+ },
+ {
+ "Name": "ControlRig",
+ "Enabled": true
+ },
+ {
+ "Name": "MotionWarping",
+ "Enabled": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp
index c95a5e7e..fb600020 100644
--- a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp
@@ -9,7 +9,6 @@
#include "Perception/AIPerceptionStimuliSourceComponent.h"
#include "Perception/AISense_Sight.h"
#include "BehaviorTree/BlackboardComponent.h"
-#include "../Telemetry.h"
#include
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp
index 1170079d..7ef3ff9d 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp
@@ -48,7 +48,7 @@ void ABountyClass::SpawnCheckpoints()
// Activate the first checkpoint and listen for its completion
BountyCheckpoints[0]->Active = true;
- BountyCheckpoints[0]->SpawnWaypoint();
+ BountyCheckpoints[0]->SpawnWaypoint(BountyTitle);
BountyCheckpoints[0]->CheckpointActivated();
BountyCheckpoints[0]->CompletedCheckpoint.AddDynamic(this, &ABountyClass::IncrementBountyCheckpoint);
}
@@ -70,7 +70,6 @@ void ABountyClass::IncrementBountyCheckpoint()
BountyCheckpoints[0]->Destroy();
BountyCheckpoints.RemoveAt(0);
UE_LOG(LogTemp, Warning, TEXT(" You've Completed the Bounty!! Well done"));
- Cast(GetWorld()->GetFirstPlayerController()->GetPawn())->CheckpointCompletedUI(FString(""));
return;
}
@@ -87,12 +86,9 @@ void ABountyClass::IncrementBountyCheckpoint()
// Set the new checkpoint in pos 0 to be active and listen for it's completion
BountyCheckpoints[0]->Active = true;
- BountyCheckpoints[0]->SpawnWaypoint();
+ BountyCheckpoints[0]->SpawnWaypoint(BountyTitle);
BountyCheckpoints[0]->CheckpointActivated();
BountyCheckpoints[0]->CompletedCheckpoint.AddDynamic(this, &ABountyClass::IncrementBountyCheckpoint);
-
- Cast(GetWorld()->GetFirstPlayerController()->GetPawn())->CheckpointCompletedUI(BountyCheckpoints[0]->GetCheckpointTip());
-
}
void ABountyClass::CollectRewards_Implementation()
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h
index 88a6c5e7..35b33288 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h
@@ -100,16 +100,7 @@ public:
return BountyCheckpoints[0]->GetWaypointIcon();
}
-
- FString GetCheckpointDescription()
- {
- if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr)
- {
- return FString("No more Bounty checkpoints, check BountyClass.h GetCheckpointDescription()");
- }
-
- return BountyCheckpoints[0]->GetCheckpointDesc();
- }
+
// ----------------------------------------------------------
// Sets default values for this actor's properties
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.cpp
index df618059..0c9d0313 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.cpp
@@ -8,6 +8,7 @@ ACheckpointClass::ACheckpointClass()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
+ BountyTitle = "";
}
@@ -17,23 +18,24 @@ void ACheckpointClass::BeginPlay()
Super::BeginPlay();
}
-void ACheckpointClass::SpawnWaypoint()
+void ACheckpointClass::SpawnWaypoint(const FString& CurrentBountyTitle)
{
if (!IsValid(WaypointActorClass)) return;
+ BountyTitle = CurrentBountyTitle;
FActorSpawnParameters SpawnParams;
SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
WaypointActor = Cast(GetWorld()->SpawnActor(WaypointActorClass, WaypointLoc, GetActorRotation(), SpawnParams));
- WaypointActor->SetupWaypoint(WaypointIcon, CheckpointDescription);
+ WaypointActor->SetupWaypoint(WaypointIcon, BountyTitle);
}
-void ACheckpointClass::UpdateChecpointWaypoint(FString WaypointDesc, FVector WaypointNewLoc)
+void ACheckpointClass::UpdateCheckpointWaypoint(FVector WaypointNewLoc)
{
FActorSpawnParameters SpawnParams;
SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
if (WaypointActor) WaypointActor->Destroy();
WaypointActor = Cast(GetWorld()->SpawnActor(WaypointActorClass, WaypointNewLoc, GetActorRotation(), SpawnParams));
- WaypointActor->SetupWaypoint(WaypointIcon, WaypointDesc);
+ WaypointActor->SetupWaypoint(WaypointIcon, BountyTitle);
}
// Called every frame
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.h
index 854d8588..7a9ada47 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.h
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.h
@@ -5,7 +5,6 @@
#include "CoreMinimal.h"
#include "WaypointActor.h"
#include "EndlessVendetta/EndlessVendettaCharacter.h"
-#include "EndlessVendetta/Telemetry.h"
#include "GameFramework/Actor.h"
#include
#include "CheckpointClass.generated.h"
@@ -17,10 +16,10 @@ class ENDLESSVENDETTA_API ACheckpointClass : public AActor
{
GENERATED_BODY()
+ FString BountyTitle;
+
// ------ Properties set from Editor ------
UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
- FString CheckpointDescription;
- UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
FString CheckpointTip;
UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
FVector WaypointLoc;
@@ -42,7 +41,7 @@ protected:
}
UFUNCTION(BlueprintCallable)
- void UpdateChecpointWaypoint(FString WaypointDesc, FVector WaypointNewLoc);
+ void UpdateCheckpointWaypoint(FVector WaypointNewLoc);
// Called when the game starts or when spawned
virtual void BeginPlay() override;
@@ -54,16 +53,12 @@ public:
UPROPERTY(BlueprintReadOnly, Category = "Checkpoint")
bool Active = false;
- void SpawnWaypoint();
+ void SpawnWaypoint(const FString& BountyTitle);
UFUNCTION(BlueprintImplementableEvent)
void CheckpointActivated();
// ------ Getters for CP Properties ------
- FString GetCheckpointDesc()
- {
- return CheckpointDescription;
- }
FString GetCheckpointTip()
{
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.cpp
new file mode 100644
index 00000000..1b27b8b9
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.cpp
@@ -0,0 +1,27 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "TargetDummy.h"
+
+// Sets default values
+ATargetDummy::ATargetDummy()
+{
+ // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
+ PrimaryActorTick.bCanEverTick = true;
+
+}
+
+// Called when the game starts or when spawned
+void ATargetDummy::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+// Called every frame
+void ATargetDummy::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.h
new file mode 100644
index 00000000..56c492ff
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.h
@@ -0,0 +1,28 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Actor.h"
+#include "TargetDummy.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API ATargetDummy : public AActor
+{
+ GENERATED_BODY()
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Sets default values for this actor's properties
+ ATargetDummy();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void TargetShot();
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp
index f6cc0edd..cab4f924 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp
@@ -3,6 +3,15 @@
#include "MainBountyClass.h"
+void AMainBountyClass::IncrementBountyCheckpoint()
+{
+ Super::IncrementBountyCheckpoint();
+ FString TipToDisplay = "";
+ if (!Completed) TipToDisplay = BountyCheckpoints[0]->GetCheckpointTip();
+ Cast(GetWorld()->GetFirstPlayerController()->GetPawn())->CheckpointCompletedUI(TipToDisplay, Completed);
+}
+
+
void AMainBountyClass::SpawnAmmoDrops()
{
UE_LOG(LogTemp, Display, TEXT("Bought Ammo Drops, but its not implemented yet"));
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
index 96dc99cc..6ec84be1 100644
--- a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
@@ -15,6 +15,8 @@ class ENDLESSVENDETTA_API AMainBountyClass : public ABountyClass
{
GENERATED_BODY()
+ void IncrementBountyCheckpoint() override;
+
protected:
UPROPERTY(EditDefaultsOnly, Category = "Bounty")
TArray> SideBountiesToSpawn;
diff --git a/EndlessVendetta/Source/EndlessVendetta/DroppableWall.cpp b/EndlessVendetta/Source/EndlessVendetta/DroppableWall.cpp
new file mode 100644
index 00000000..dac265c7
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/DroppableWall.cpp
@@ -0,0 +1,27 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "DroppableWall.h"
+
+// Sets default values
+ADroppableWall::ADroppableWall()
+{
+ // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
+ PrimaryActorTick.bCanEverTick = true;
+
+}
+
+// Called when the game starts or when spawned
+void ADroppableWall::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+// Called every frame
+void ADroppableWall::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h b/EndlessVendetta/Source/EndlessVendetta/DroppableWall.h
similarity index 59%
rename from EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h
rename to EndlessVendetta/Source/EndlessVendetta/DroppableWall.h
index add35b97..7716ad6d 100644
--- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h
+++ b/EndlessVendetta/Source/EndlessVendetta/DroppableWall.h
@@ -4,27 +4,28 @@
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
-#include "VisionLinkEnemyLOSTest.generated.h"
+#include "DroppableWall.generated.h"
UCLASS()
-class ENDLESSVENDETTA_API AVisionLinkEnemyLOSTest : public AActor
+class ENDLESSVENDETTA_API ADroppableWall : public AActor
{
GENERATED_BODY()
-
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
- UPROPERTY(EditDefaultsOnly, Category = "Vision Link")
- float SpawnOffset = 0;
-
// Sets default values for this actor's properties
- AVisionLinkEnemyLOSTest();
-
+ ADroppableWall();
+
// Called every frame
virtual void Tick(float DeltaTime) override;
- void TestLOS(TArray EnemiesInLink, AActor* LOS_Actor);
+ UFUNCTION(BlueprintImplementableEvent)
+ void WallToCounterTimeline();
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void DropWallFullyTimeline();
+
};
diff --git a/EndlessVendetta/Source/EndlessVendetta/EVGameInstance.cpp b/EndlessVendetta/Source/EndlessVendetta/EVGameInstance.cpp
new file mode 100644
index 00000000..bdaaddab
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/EVGameInstance.cpp
@@ -0,0 +1,32 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "EVGameInstance.h"
+
+void UEVGameInstance::OnStart()
+{
+ Super::OnStart();
+ GlobalSessionID = FGuid::NewGuid().ToString().Left(5).ToUpper();
+ IsValidSessionID(GlobalSessionID);
+}
+
+void UEVGameInstance::IsValidSessionID(const FString& SessionID)
+{
+ const auto Request = FHttpModule::Get().CreateRequest();
+ Request->SetURL("https://ev.api.philipwhite.dev/api/session/" + SessionID);
+ Request->SetVerb("GET");
+ Request->OnProcessRequestComplete().BindUObject(this, &UEVGameInstance::OnResponseReceived);
+ Request->ProcessRequest();
+}
+
+void UEVGameInstance::OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bConnectedSuccessfully)
+{
+ if (Response->GetResponseCode() == 200)
+ {
+ GLog->Log("Session ID Exists Regenerating");
+ GlobalSessionID = FGuid::NewGuid().ToString().Left(5).ToUpper();
+ IsValidSessionID(GlobalSessionID);
+ return;
+ }
+ GLog->Log("Session ID is Valid");
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/EVGameInstance.h b/EndlessVendetta/Source/EndlessVendetta/EVGameInstance.h
new file mode 100644
index 00000000..ec749839
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/EVGameInstance.h
@@ -0,0 +1,28 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Engine/GameInstance.h"
+#include "Http.h"
+#include "EVGameInstance.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UEVGameInstance : public UGameInstance
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
+ FString GlobalSessionID = "AAAAA";
+
+protected:
+ virtual void OnStart() override;
+
+private:
+ void IsValidSessionID(const FString& SessionID);
+ void OnResponseReceived(FHttpRequestPtr Request, FHttpResponsePtr Response, bool bConnectedSuccessfully);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs b/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs
index 619c70e9..1795e500 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs
@@ -12,7 +12,7 @@ public class EndlessVendetta : ModuleRules
{
"Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "EnhancedInput", "AIModule",
"GameplayTasks", "NavigationSystem", "UMG", "Slate", "SlateCore", "Niagara", "NiagaraCore", "NiagaraShader",
- "HTTP", "Json", "JsonUtilities"
+ "HTTP", "Json", "JsonUtilities", "VaultIt", "MotionWarping", "GameplayAbilities"
});
}
}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
index 30287f35..0e80ae88 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
@@ -7,7 +7,6 @@
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "InteractionInterface.h"
-#include "Telemetry.h"
#include "AI/EnemyCharacter.h"
#include "Engine/DamageEvents.h"
#include "GameFramework/CharacterMovementComponent.h"
@@ -51,6 +50,18 @@ void AEndlessVendettaCharacter::BeginPlay()
// Call the base class
Super::BeginPlay();
+ // Set the fp skeletal mesh for the vault it plugin to use
+ TArray MeshActComps = GetComponentsByClass(USkeletalMeshComponent::StaticClass());
+ for (auto MeshActorComponent : MeshActComps)
+ {
+ USkeletalMeshComponent* MeshSkeletalComp = Cast(MeshActorComponent);
+ if (MeshSkeletalComp->ComponentHasTag("FP_Mesh"))
+ {
+ FP_SkeletalMesh = MeshSkeletalComp;
+ break;
+ }
+ }
+
//Add Input Mapping Context
if (APlayerController* PlayerController = Cast(Controller))
{
@@ -70,14 +81,15 @@ void AEndlessVendettaCharacter::BeginPlay()
}
InventoryComponent = Cast(GetWorld()->GetFirstPlayerController()->GetComponentByClass(UInventoryComponent::StaticClass()));
+ WalkSpeed = CharacterMovement->MaxWalkSpeed;
+ OriginalWalkSpeed = CharacterMovement->MaxWalkSpeed;
+ CurrentStamina = MaxStamina;
}
void AEndlessVendettaCharacter::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
-
WeaponPickUpSystem();
-
MoveGroundSpeed = Cast(GetComponentByClass(UMovementComponent::StaticClass()))->Velocity.Size();
if (MoveGroundSpeed > 0)
@@ -86,8 +98,40 @@ void AEndlessVendettaCharacter::Tick(float DeltaTime)
}
else if (MoveGroundSpeed <= 0)
{
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
bIsPlayerMoving = false;
}
+ if (bPressedJump)
+ {
+ if(CurrentStamina <= 0.0f)
+ {
+ CurrentStamina -= 20.0f;
+ }
+ }
+ //PLAYER STAMINA HANDLING
+ if (MoveGroundSpeed > 0)
+ {
+ if (bIsPlayerSprinting)
+ {
+ CurrentStamina -= FMath::Clamp(StaminaDecreaseRate, 0.0f, 100.0f);
+ if (CurrentStamina <= 0.0f)
+ {
+ bIsPlayerSprinting = false;
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
+ CurrentStamina = 0.0f;
+ CharacterMovement->MaxWalkSpeed = OriginalWalkSpeed;
+ }
+ }
+ }
+ if (!bIsPlayerSprinting)
+ {
+ if(CurrentStamina >= 100.0f)
+ {
+ CurrentStamina = 100.0f;
+ return;
+ }
+ CurrentStamina += FMath::Clamp(StaminaRegenRate, 0.0f, 100.0f);
+ }
}
void AEndlessVendettaCharacter::RegenHealth()
@@ -130,11 +174,13 @@ void AEndlessVendettaCharacter::SetupPlayerInputComponent(class UInputComponent*
if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked(PlayerInputComponent))
{
//Jumping
- EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Triggered, this, &ACharacter::Jump);
+ EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &ACharacter::Jump);
EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
-
+
//Moving
EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::Move);
+ EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::Sprint);
+ EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Completed, this, &AEndlessVendettaCharacter::StopSprint);
//Looking
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::Look);
@@ -167,6 +213,11 @@ void AEndlessVendettaCharacter::SetupPlayerInputComponent(class UInputComponent*
void AEndlessVendettaCharacter::Interact()
{
+ if (PlayerOnShip)
+ {
+ SpaceShip->PlayerInteracting();
+ return;
+ }
FHitResult OutHit;
FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam;
QueryParams.AddIgnoredActor(this);
@@ -190,6 +241,7 @@ void AEndlessVendettaCharacter::Interact()
void AEndlessVendettaCharacter::SetCrouch()
{
+ if (PlayerOnShip) return;
Crouch();
}
@@ -233,6 +285,7 @@ float AEndlessVendettaCharacter::TakeDamage(const float DamageAmount, FDamageEve
void AEndlessVendettaCharacter::ToggleRecon()
{
+ if (PlayerOnShip) return;
if (!GadgetManager->IsValidReconGadget()) return;
if (IsValid(PrimaryWeapon)) EquipPrimary();
@@ -255,6 +308,7 @@ void AEndlessVendettaCharacter::ToggleRecon()
void AEndlessVendettaCharacter::ToggleCombat()
{
+ if (PlayerOnShip) return;
if (!GadgetManager->IsValidCombatGadget()) return;
if (IsValid(PrimaryWeapon)) EquipPrimary();
@@ -279,6 +333,7 @@ void AEndlessVendettaCharacter::ToggleCombat()
//When 1 is pressed it calls EquipPrimary
void AEndlessVendettaCharacter::EquipPrimary()
{
+ if (PlayerOnShip) return;
FActorSpawnParameters spawnParams;
spawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
@@ -330,6 +385,7 @@ void AEndlessVendettaCharacter::EquipPrimary()
void AEndlessVendettaCharacter::EquipSecondary()
{
+ if (PlayerOnShip) return;
FActorSpawnParameters spawnParams;
spawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
@@ -504,6 +560,12 @@ void AEndlessVendettaCharacter::Move(const FInputActionValue& Value)
// input is a Vector2D
FVector2D MovementVector = Value.Get();
+ if (PlayerOnShip)
+ {
+ SpaceShip->MoveShip(MovementVector);
+ return;
+ }
+
if (Controller != nullptr)
{
// add movement
@@ -512,11 +574,65 @@ void AEndlessVendettaCharacter::Move(const FInputActionValue& Value)
}
}
+void AEndlessVendettaCharacter::Sprint()
+{
+ bIsPlayerSprinting = true;
+ if (bIsPlayerSprinting)
+ {
+ if (MoveGroundSpeed > 0)
+ {
+ CharacterMovement->MaxWalkSpeed = SprintSpeed;
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(100);
+ }
+ }
+}
+
+void AEndlessVendettaCharacter::StopSprint()
+{
+ bIsPlayerSprinting = false;
+ if (!bIsPlayerSprinting)
+ {
+ UE_LOG(LogTemp, Display, TEXT("Player stopped sprinting"));
+ CharacterMovement->MaxWalkSpeed = OriginalWalkSpeed;
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
+ }
+}
+
+void AEndlessVendettaCharacter::Jumping()
+{
+ if (CurrentStamina > 10.0f)
+ {
+ bHasPlayerJumped = true;
+ if (bHasPlayerJumped)
+ {
+ Super::Jump();
+ if (!CharacterMovement->IsFalling())
+ {
+ CurrentStamina -= 10.0f;
+ }
+ bHasPlayerJumped = false;
+ }
+ }
+}
+
+void AEndlessVendettaCharacter::StopJump()
+{
+ Super::StopJumping();
+ UE_LOG(LogTemp, Display, TEXT("Player has stopped jumping"));
+ bHasPlayerJumped = false;
+}
+
void AEndlessVendettaCharacter::Look(const FInputActionValue& Value)
{
// input is a Vector2D
FVector2D LookAxisVector = Value.Get();
+ if (PlayerOnShip)
+ {
+ SpaceShip->RotateShip(LookAxisVector);
+ return;
+ }
+
if (Controller != nullptr)
{
// add yaw and pitch input to controller
@@ -561,3 +677,22 @@ void AEndlessVendettaCharacter::UpdateInventorySize(int Cols, int Rows)
UE_LOG(LogTemp, Warning, TEXT("No Vaild Inventory"));
}
}
+
+void AEndlessVendettaCharacter::EnterShip(FTransform TakeoffLoc)
+{
+ PlayFadeScreen();
+ if (IsValid(PrimaryWeapon)) EquipPrimary();
+ if (IsValid(SecondaryWeapon)) EquipSecondary();
+ SpaceShip = GetWorld()->SpawnActor(SpaceShipClass, TakeoffLoc.GetLocation(), TakeoffLoc.Rotator());
+ PlayerOnShip = true;
+}
+
+void AEndlessVendettaCharacter::ExitShip(FTransform ExitLoc)
+{
+ PlayFadeScreen();
+ SetActorLocation(ExitLoc.GetLocation());
+ GetController()->SetControlRotation(ExitLoc.Rotator());
+ SpaceShip->Destroy();
+ PlayerOnShip = false;
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
index 9a14b875..3b1c9641 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
@@ -9,6 +9,8 @@
#include "Components/ArrowComponent.h"
#include "GadgetSystem/GadgetManager.h"
#include "Inventory/InventoryComponent.h"
+#include "Pawn/VICharacter.h"
+#include "SpaceShip/SpaceShip.h"
#include "EndlessVendettaCharacter.generated.h"
@@ -24,11 +26,13 @@ UCLASS(config=Game)
class AEndlessVendettaCharacter : public ACharacter
{
GENERATED_BODY()
-
+
+protected:
/** Pawn mesh: 1st person view (arms; seen only by self) */
- UPROPERTY(VisibleDefaultsOnly, Category=Mesh)
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category=Mesh)
USkeletalMeshComponent* Mesh1P;
-
+
+private:
/** First person camera */
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
UCameraComponent* FirstPersonCameraComponent;
@@ -73,6 +77,9 @@ class AEndlessVendettaCharacter : public ACharacter
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
UInputAction* InteractAction;
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ UInputAction* SprintAction;
+
public:
AEndlessVendettaCharacter();
@@ -83,6 +90,23 @@ public:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
float DefaultHealth = 100.0f;
+ //STAMINA AND SPRINT SPEED
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
+ float MaxStamina = 100;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
+ float CurrentStamina;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
+ float StaminaDecreaseRate = 0.2;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
+ float StaminaRegenRate = 0.05;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Stats")
+ float SprintSpeed = 900;
+
+ //Getting the charMovementComp
+ UCharacterMovementComponent* CharacterMovement = GetCharacterMovement();
+ float WalkSpeed;
+ float OriginalWalkSpeed;
+
AActor* PrimaryWeaponActor;
AActor* SecondaryWeaponActor;
bool bIsPrimaryWeaponCreated = false;
@@ -100,6 +124,9 @@ protected:
FTimerHandle RegenHealthTimerHandle;
void Heal(const float Amount);
+ UFUNCTION(BlueprintImplementableEvent)
+ void PlayFadeScreen();
+
public:
int Money = 2000;
AGadgetManager* GadgetManager;
@@ -107,6 +134,9 @@ public:
bool bIsPlayerMoving = false;
+ UPROPERTY(VisibleAnywhere)
+ bool bIsPlayerSprinting = false;
+
double MoveGroundSpeed;
/** Look Input Action */
@@ -149,6 +179,13 @@ public:
UFUNCTION(BlueprintCallable, Category = "Weapons")
void StopFire();
+ void Sprint();
+ void StopSprint();
+
+ void Jumping();
+ void StopJump();
+ bool bHasPlayerJumped = false;
+
UArrowComponent* ScopedLocationArrow;
UPROPERTY(EditAnywhere, Category = "Dont Touch")
@@ -172,11 +209,17 @@ protected:
void Interact();
protected:
+
+ // Used by vault it plugin to run vaulting animations
+ USkeletalMeshComponent* FP_SkeletalMesh = nullptr;
+
// APawn interface
virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override;
// End of APawn interface
public:
+
+
UFUNCTION(BlueprintCallable, Category = "Stealth")
void SetCrouch();
UFUNCTION(BlueprintCallable, Category = "Stealth")
@@ -198,7 +241,7 @@ public:
void WeaponSwitcher(AActor* Outhit);
UFUNCTION(BlueprintImplementableEvent)
- void CheckpointCompletedUI(const FString& CheckpointDesc);
+ void CheckpointCompletedUI(const FString& CheckpointDesc, bool CompletedBounty = false);
// Returns true if successfully changed to a new gadget, can fail if the target gadget to replace is being used
bool UpdateGadgetType(TSubclassOf NewGadgetClass);
@@ -206,4 +249,14 @@ public:
UInventoryComponent* InventoryComponent;
UFUNCTION(Exec)
void UpdateInventorySize(int Cols, int Rows);
+
+ // Space Ship
+private:
+ bool PlayerOnShip = false;
+ UPROPERTY(EditDefaultsOnly, Category = "Space Ship")
+ TSubclassOf SpaceShipClass;
+ ASpaceShip* SpaceShip;
+public:
+ void ExitShip(FTransform ExitLoc);
+ void EnterShip(FTransform TakeoffLoc);
};
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp
index 9390d136..744fe187 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp
@@ -2,6 +2,7 @@
#include "EndlessVendettaGameMode.h"
#include "EndlessVendettaCharacter.h"
+#include "EVGameInstance.h"
#include "UObject/ConstructorHelpers.h"
#include "EndlessVendetta/AI/EnemyCharacter.h"
#include "EndlessVendetta/AI/AIControlHub.h"
@@ -60,5 +61,5 @@ void AEndlessVendettaGameMode::SendEvent(FString EventKey, FString EventData)
void AEndlessVendettaGameMode::BeginPlay()
{
Super::BeginPlay();
- SessionID = FGuid::NewGuid().ToString().Left(5).ToUpper();
+ SessionID = Cast(GetGameInstance())->GlobalSessionID;
}
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h
index a5fb31f5..5d015623 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h
@@ -14,7 +14,7 @@ class AEndlessVendettaGameMode : public AGameModeBase
public:
AEndlessVendettaGameMode();
-
+
UFUNCTION(Exec, Category = ExecFunctions)
void KillAllEnemies();
@@ -25,7 +25,7 @@ public:
FString TelemetryURLEvents = "https://ev.api.philipwhite.dev/api/event";
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
FString TelemetryURLUsers = "https://ev.api.philipwhite.dev/api/user";
- UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Instanced, Category = "Telemetry")
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
FString SessionID = "AAAAA";
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
FString PlayerGUID = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp
index 1dbe1dd7..eca0e33f 100644
--- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp
@@ -6,7 +6,7 @@
#include "CollisionDebugDrawingPublic.h"
#include "Kismet/KismetMathLibrary.h"
#include "Camera/CameraComponent.h"
-#include "VisionLinkEnemyLOSTest.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
#include "GameFramework/Character.h"
void AVisionLink::BeginPlay()
@@ -47,9 +47,16 @@ void AVisionLink::SendOutPingPulse()
GetWorld()->GetTimerManager().SetTimer(PulseHandle, this, &AVisionLink::SendOutPingPulse, TimeInbetweenPingPulses, false);
PlayPingPulseAnim(TimeInbetweenPingPulses);
- UCameraComponent* PlayerCamComp = Cast(GetWorld()->GetFirstPlayerController()->GetCharacter()->GetComponentByClass(UCameraComponent::StaticClass()));
+ ACharacter* PlayersCharacter = GetWorld()->GetFirstPlayerController()->GetCharacter();
+ UCameraComponent* PlayerCamComp = Cast(PlayersCharacter->GetComponentByClass(UCameraComponent::StaticClass()));
+
+ // Ignored Actors
TArray ActorsToIgnore;
- ActorsToIgnore.Add(GetWorld()->GetFirstPlayerController()->GetCharacter());
+ AEndlessVendettaCharacter* EV_Character = Cast(PlayersCharacter);
+ if ( IsValid(EV_Character) && IsValid(EV_Character->PrimaryWeaponActor)) ActorsToIgnore.Add(EV_Character->PrimaryWeaponActor);
+ if ( IsValid(EV_Character) && IsValid(EV_Character->SecondaryWeaponActor)) ActorsToIgnore.Add(EV_Character->SecondaryWeaponActor);
+ ActorsToIgnore.Add(PlayersCharacter);
+
TestLOS(PlayerCamComp->GetComponentTransform(), ActorsToIgnore);
}
@@ -75,7 +82,7 @@ void AVisionLink::TestLOS(FTransform StartingPos, TArray &ActorsToIgnor
if (!GetWorld()->LineTraceSingleByChannel(outHit, StartingPos.GetLocation(), LT_EndPoint, ECC_Camera, QueryParams)) continue;
AActor* HitActor = outHit.GetActor();
- if (!HitActor->ActorHasTag(FName("Enemy"))) continue;
+ if (!HitActor->ActorHasTag(FName("Enemy")) || HitActor->ActorHasTag("Dead")) continue;
//DrawDebugLine(GetWorld(), outHit.TraceStart, outHit.ImpactPoint, FColor::Blue, false, 3, 0, 3);
ActorsToIgnore.Add(HitActor);
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h
index 2a3b7789..40d5c103 100644
--- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h
@@ -3,7 +3,6 @@
#pragma once
#include "CoreMinimal.h"
-#include "VisionLinkEnemyLOSTest.h"
#include "EndlessVendetta/GadgetSystem/ReconGadget.h"
#include "VisionLink.generated.h"
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp
deleted file mode 100644
index eb11bf58..00000000
--- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-// Fill out your copyright notice in the Description page of Project Settings.
-
-
-#include "VisionLinkEnemyLOSTest.h"
-
-#include "Components/BoxComponent.h"
-#include "Kismet/KismetMathLibrary.h"
-
-// Sets default values
-AVisionLinkEnemyLOSTest::AVisionLinkEnemyLOSTest()
-{
- // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
- PrimaryActorTick.bCanEverTick = true;
-
-}
-
-// Called when the game starts or when spawned
-void AVisionLinkEnemyLOSTest::BeginPlay()
-{
- Super::BeginPlay();
-
-}
-
-// Called every frame
-void AVisionLinkEnemyLOSTest::Tick(float DeltaTime)
-{
- Super::Tick(DeltaTime);
-
-}
-
-void AVisionLinkEnemyLOSTest::TestLOS(TArray EnemiesInLink, AActor* LOSActor)
-{
- // Get all overlapping Actors
- UBoxComponent* CollisionBox = Cast(GetComponentByClass(UBoxComponent::StaticClass()));
- if (!IsValid(CollisionBox))
- {
- Destroy();
- return;
- }
- TArray OverlappingEnemies;
- CollisionBox->GetOverlappingActors(OverlappingEnemies);
- if (OverlappingEnemies.IsEmpty())
- {
- Destroy();
- return;
- }
-
- for (int i = 0; i < OverlappingEnemies.Num(); i++)
- {
- // Overlapping Enemies Array should only contain enemies which aren't already in the link
- if (!OverlappingEnemies[i]->ActorHasTag(FName("Enemy")) || EnemiesInLink.Contains(OverlappingEnemies[i]->GetUniqueID()))
- {
- UE_LOG(LogTemp, Warning, TEXT("enemy name: %s"), *OverlappingEnemies[i]->GetName());
- OverlappingEnemies.RemoveAt(i);
- }
- }
- if (OverlappingEnemies.IsEmpty())
- {
- Destroy();
- return;
- }
-
- /*for (AActor* Enemy : OverlappingEnemies)
- {
- FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(LOSActor->GetActorLocation(), Enemy->GetActorLocation());
- UE_LOG(LogTemp, Warning, TEXT("Look at Rotation: %f"), LookAtRotation.Yaw);
- }*/
-
- Destroy();
-
-
-}
-
-
diff --git a/EndlessVendetta/Source/EndlessVendetta/MyVICharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/MyVICharacter.cpp
new file mode 100644
index 00000000..2f688de5
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/MyVICharacter.cpp
@@ -0,0 +1,49 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "MyVICharacter.h"
+#include "GAS/VIAbilitySystemComponent.h"
+#include "Pawn/VIPawnVaultComponent.h"
+#include "MotionWarpingComponent.h"
+
+
+AMyVICharacter::AMyVICharacter(const FObjectInitializer& OI)
+ : Super(OI)
+{
+ VaultComponent = CreateDefaultSubobject(TEXT("PawnVaulting"));
+ MotionWarpingComponent = CreateDefaultSubobject(TEXT("MotionWarping"));
+}
+
+void AMyVICharacter::BeginPlay()
+{
+ Super::BeginPlay();
+
+ // Init simulated proxy
+ if (AbilitySystem && GetLocalRole() == ROLE_SimulatedProxy)
+ {
+ // Will never have a valid controller
+ AbilitySystem->InitAbilityActorInfo(this, this);
+ }
+}
+
+void AMyVICharacter::PossessedBy(AController* NewController)
+{
+ Super::PossessedBy(NewController);
+
+ // Init authority/standalone
+ if (AbilitySystem)
+ {
+ AbilitySystem->InitAbilityActorInfo(this, this);
+ }
+}
+
+void AMyVICharacter::OnRep_Controller()
+{
+ Super::OnRep_Controller();
+
+ // Init local client
+ if (AbilitySystem)
+ {
+ AbilitySystem->InitAbilityActorInfo(this, this);
+ }
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/MyVICharacter.h b/EndlessVendetta/Source/EndlessVendetta/MyVICharacter.h
new file mode 100644
index 00000000..11dd1a29
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/MyVICharacter.h
@@ -0,0 +1,35 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "MyVICharacterAbilityBase.h"
+#include "MyVICharacter.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AMyVICharacter : public AMyVICharacterAbilityBase
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY(EditDefaultsOnly, Category = Vault)
+ FVIAnimSet VaultAnimSet;
+
+ UPROPERTY(EditDefaultsOnly, Category = Vault)
+ FVITraceSettings VaultTraceSettings;
+
+ AMyVICharacter(const FObjectInitializer& OI);
+
+ virtual void BeginPlay() override;
+ virtual void PossessedBy(AController* NewController) override;
+ virtual void OnRep_Controller() override;
+
+ virtual UVIPawnVaultComponent* GetPawnVaultComponent_Implementation() const override { return VaultComponent; }
+ virtual UMotionWarpingComponent* GetMotionWarpingComponent_Implementation() const override { return MotionWarpingComponent; }
+
+ virtual FVIAnimSet GetVaultAnimSet_Implementation() const override { return VaultAnimSet; }
+ virtual FVITraceSettings GetVaultTraceSettings_Implementation() const override { return VaultTraceSettings; }
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/MyVICharacterAbilityBase.cpp b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterAbilityBase.cpp
new file mode 100644
index 00000000..c8da0950
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterAbilityBase.cpp
@@ -0,0 +1,30 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "MyVICharacterAbilityBase.h"
+#include "GAS/VIAbilitySystemComponent.h"
+
+AMyVICharacterAbilityBase::AMyVICharacterAbilityBase(const FObjectInitializer& OI)
+// : Super(OI)
+{
+ AbilitySystem = CreateDefaultSubobject(TEXT("AbilitySystem"));
+ AbilitySystem->SetIsReplicated(true);
+ AbilitySystem->SetReplicationMode(EGameplayEffectReplicationMode::Mixed);
+ AbilitySystemReplicationMode = (EVIGameplayEffectReplicationMode)(uint8)AbilitySystem->ReplicationMode;
+}
+
+#if WITH_EDITOR
+void AMyVICharacterAbilityBase::PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent)
+{
+ Super::PostEditChangeProperty(PropertyChangedEvent);
+
+ if (PropertyChangedEvent.GetPropertyName().IsEqual(GET_MEMBER_NAME_CHECKED(AMyVICharacterAbilityBase, AbilitySystemReplicationMode)))
+ {
+ AbilitySystem->SetReplicationMode((EGameplayEffectReplicationMode)(uint8)AbilitySystemReplicationMode);
+ }
+}
+#endif // WITH_EDITOR
+
+UAbilitySystemComponent* AMyVICharacterAbilityBase::GetAbilitySystemComponent() const
+{
+ return AbilitySystem;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/MyVICharacterAbilityBase.h b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterAbilityBase.h
new file mode 100644
index 00000000..50e7e3d4
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterAbilityBase.h
@@ -0,0 +1,54 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "AbilitySystemInterface.h"
+#include "MyVICharacterBase.h"
+#include "MyVICharacterAbilityBase.generated.h"
+
+class UVIAbilitySystemComponent;
+
+/**
+ * Adds a UVIAbilitySystemComponent to your character base
+ * Allows switching replication mode in Blueprint for the sake of AI using Minimal instead of Mixed
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AMyVICharacterAbilityBase : public AMyVICharacterBase, public IAbilitySystemInterface
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY(BlueprintReadOnly, Category = Abilities)
+ UVIAbilitySystemComponent* AbilitySystem;
+
+protected:
+ /**
+ * Used by blueprints to allow changing replication mode which is usually
+ * only accessible via C++
+ *
+ * Recommended as follows:
+ * For player characters use Mixed
+ * For AI characters use Minimal
+ */
+ UPROPERTY(EditDefaultsOnly, Category = Abilities)
+ EVIGameplayEffectReplicationMode AbilitySystemReplicationMode;
+
+public:
+ AMyVICharacterAbilityBase(const FObjectInitializer& OI);
+
+#if WITH_EDITOR
+ virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
+#endif // WITH_EDITOR
+
+protected:
+ // *********************************************** //
+ // ******** Begin IAbilitySystemInterface ******** //
+ // *********************************************** //
+
+ virtual UAbilitySystemComponent* GetAbilitySystemComponent() const override;
+
+ // *********************************************** //
+ // ********* End IAbilitySystemInterface ********* //
+ // *********************************************** //
+};
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/MyVICharacterBase.cpp b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterBase.cpp
new file mode 100644
index 00000000..8127dea2
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterBase.cpp
@@ -0,0 +1,322 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#include "EndlessVendetta/MyVICharacterBase.h"
+#include "Pawn/VICharacterBase.h"
+#include "Net/UnrealNetwork.h"
+#include "GameFramework/CharacterMovementComponent.h"
+#include "Pawn/VIPawnVaultComponent.h"
+#include "MotionWarpingComponent.h"
+#include "VIBlueprintFunctionLibrary.h"
+
+void AMyVICharacterBase::BeginPlay()
+{
+ Super::BeginPlay();
+
+ VaultComponent = IVIPawnInterface::Execute_GetPawnVaultComponent(this);
+ MotionWarpingComponent = IVIPawnInterface::Execute_GetMotionWarpingComponent(this);
+}
+
+void AMyVICharacterBase::CheckJumpInput(float DeltaTime)
+{
+ const bool bIsVaulting = IsVaulting();
+
+ // Server update simulated proxies with correct vaulting state
+ if (GetLocalRole() == ROLE_Authority && GetNetMode() != NM_Standalone)
+ {
+ bRepIsVaulting = bIsVaulting;
+ }
+
+ // Try to vault from local input
+ if (IsLocallyControlled() && VaultComponent)
+ {
+ // Disable jump if vaulting
+ if (VaultComponent->bPressedVault)
+ {
+ bPressedJump = false;
+ }
+
+ // Possibly execute vault
+ if (GetCharacterMovement())
+ {
+ VaultComponent->CheckVaultInput(DeltaTime, GetCharacterMovement()->MovementMode);
+ }
+ else
+ {
+ VaultComponent->CheckVaultInput(DeltaTime);
+ }
+ }
+
+ // Pick up changes in vaulting state to change movement mode
+ // to something other than flying (required for root motion on Z)
+ if (bWasVaulting && !bIsVaulting)
+ {
+ StopVaultAbility();
+ }
+
+ // Call super so we actually jump if we're meant to
+ Super::CheckJumpInput(DeltaTime);
+
+ // Cache end of frame
+ bWasVaulting = bIsVaulting;
+}
+
+void AMyVICharacterBase::GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const
+{
+ Super::GetLifetimeReplicatedProps(OutLifetimeProps);
+
+ DOREPLIFETIME_CONDITION(AMyVICharacterBase, bRepIsVaulting, COND_SimulatedOnly);
+ DOREPLIFETIME_CONDITION(AMyVICharacterBase, RepMotionMatch, COND_SimulatedOnly);
+}
+
+void AMyVICharacterBase::Jump()
+{
+ // If missing critical components then jump and exit
+ if (!VaultComponent || !GetCharacterMovement())
+ {
+ UE_LOG(LogTemp, Warning, TEXT("no vault comp or character movement"));
+ Super::Jump();
+ return;
+ }
+
+ // Either jump or vault, determined by VaultComponent::EVIJumpKeyPriority
+ if (VaultComponent->Jump(GetCharacterMovement()->GetGravityZ(), CanJump(), GetCharacterMovement()->IsFalling()))
+ {
+ UE_LOG(LogTemp, Warning, TEXT("gravity Z: %f"), GetCharacterMovement()->GetGravityZ());
+ // Jump normally
+ Super::Jump();
+ }
+ else
+ {
+ UE_LOG(LogTemp, Warning, TEXT("try to vault"));
+ // Jump key essentially presses the vault input
+ VaultComponent->Vault();
+ }
+}
+
+void AMyVICharacterBase::StopJumping()
+{
+ Super::StopJumping();
+
+ // Release vault input if the jump key pressed vault instead
+ if (VaultComponent)
+ {
+ VaultComponent->StopJumping();
+ }
+}
+
+void AMyVICharacterBase::StartVaultAbility_Implementation()
+{
+ // Called by GA_Vault
+ // Need to be in flying mode to have root motion on Z axis
+ if (GetCharacterMovement() && GetLocalRole() > ROLE_SimulatedProxy)
+ {
+ GetCharacterMovement()->SetMovementMode(MOVE_Flying);
+ }
+}
+
+void AMyVICharacterBase::StopVaultAbility()
+{
+ // Called by CheckJumpInput()
+ // Exiting flying mode
+ // This may put is straight into falling if we aren't properly grounded, which is fine
+ if (GetCharacterMovement() && GetLocalRole() > ROLE_SimulatedProxy)
+ {
+ GetCharacterMovement()->SetMovementMode(GetCharacterMovement()->GetGroundMovementMode());
+ }
+
+ OnStopVaultAbility();
+}
+
+void AMyVICharacterBase::OnRep_MotionMatch()
+{
+ // Simulated proxies update their sync points here, sent from the server during GA_Vault
+ MotionWarpingComponent->AddOrUpdateWarpTargetFromLocationAndRotation(TEXT("VaultSyncPoint"), RepMotionMatch.Location, RepMotionMatch.Direction.Rotation());
+}
+
+bool AMyVICharacterBase::IsVaulting() const
+{
+ // Simulated proxies use the value provided by server
+ if (GetLocalRole() == ROLE_SimulatedProxy)
+ {
+ return bRepIsVaulting;
+ }
+
+ // Local and authority uses gameplay tags for a predicted result
+ if (VaultComponent)
+ {
+ return VaultComponent->IsVaulting();
+ }
+
+ return false;
+}
+
+// *********************************************** //
+// ******** Begin Pawn Vaulting Interface ******** //
+// *********************************************** //
+
+UVIPawnVaultComponent* AMyVICharacterBase::GetPawnVaultComponent_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetPawnVaultComponent not implemented for { %s }. Cannot Vault."), *GetName()));
+ return nullptr;
+}
+
+UMotionWarpingComponent* AMyVICharacterBase::GetMotionWarpingComponent_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetMotionWarpingComponent not implemented for { %s }. Cannot Vault."), *GetName()));
+ return nullptr;
+}
+
+FVIAnimSet AMyVICharacterBase::GetVaultAnimSet_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetVaultAnimSet not implemented for { %s }. Cannot Vault."), *GetName()));
+ return FVIAnimSet();
+}
+
+FVITraceSettings AMyVICharacterBase::GetVaultTraceSettings_Implementation() const
+{
+ // You need to override this
+ UVIBlueprintFunctionLibrary::MessageLogError(FString::Printf(TEXT("AVICharacterBase::GetVaultTraceSettings not implemented for { %s }. Using default trace settings."), *GetName()), false);
+ return FVITraceSettings();
+}
+
+FVector AMyVICharacterBase::GetVaultDirection_Implementation() const
+{
+ // Use input vector if available
+ if (GetCharacterMovement() && !GetCharacterMovement()->GetCurrentAcceleration().IsNearlyZero())
+ {
+ return GetCharacterMovement()->GetCurrentAcceleration();
+ }
+
+ // Use character facing direction if not providing input
+ return GetActorForwardVector();
+}
+
+bool AMyVICharacterBase::CanVault_Implementation() const
+{
+ // Vaulting must finish before starting another vault attempt
+ if (IsVaulting())
+ {
+ UE_LOG(LogTemp, Warning, TEXT("is already vaulting"));
+ return false;
+ }
+
+ // Invalid components
+ if (!VaultComponent || !GetCharacterMovement())
+ {
+ UE_LOG(LogTemp, Warning, TEXT("invalid componets for vaulting"));
+ return false;
+ }
+
+ // Animation instance is required to play vault montage
+ if (!IsValid(FP_SkeletalMesh) || !IsValid(FP_SkeletalMesh->GetAnimInstance()))
+ {
+ UE_LOG(LogTemp, Warning, TEXT("Animation instance is required to play vault montage"));
+ return false;
+ }
+
+ // Authority not initialized (this isn't set on clients)
+ if (HasAuthority() && !VaultComponent->bVaultAbilityInitialized)
+ {
+ UE_LOG(LogTemp, Warning, TEXT("Authority not initialized (this isn't set on clients), hence cant vault"));
+ return false;
+ }
+
+ // Exit if character is in a state they cannot vault from
+ if (GetCharacterMovement()->IsMovingOnGround() || GetCharacterMovement()->IsFalling() || GetCharacterMovement()->IsSwimming())
+ {
+ if (GetCharacterMovement()->IsMovingOnGround() && !VaultComponent->bCanVaultFromGround)
+ {
+ UE_LOG(LogTemp, Warning, TEXT("cant vault cuz on the ground and cant vault from ground"));
+ return false;
+ }
+
+ if (GetCharacterMovement()->IsFalling() && !VaultComponent->bCanVaultFromFalling)
+ {
+ UE_LOG(LogTemp, Warning, TEXT("cant vault cuz is falling and cant vault from falling"));
+ return false;
+ }
+
+ if (GetCharacterMovement()->IsSwimming() && !VaultComponent->bCanVaultFromSwimming)
+ {
+ UE_LOG(LogTemp, Warning, TEXT("cant vault from swimming"));
+ return false;
+ }
+ }
+ else
+ {
+ UE_LOG(LogTemp, Warning, TEXT("cant vault cuz isnt either swimming, walking on the ground or falling"));
+ return false;
+ }
+
+ // Can't vault while crouching
+ if (!VaultComponent->bCanVaultFromCrouching && GetCharacterMovement()->IsCrouching())
+ {
+ UE_LOG(LogTemp, Warning, TEXT("cant vault cuz is crouching"));
+ return false;
+ }
+
+ UE_LOG(LogTemp, Warning, TEXT("actually can vault"));
+ // Passed all conditions
+ return true;
+}
+
+void AMyVICharacterBase::OnLocalPlayerVault_Implementation(const FVector& Location, const FVector& Direction)
+{
+ // LocalPlayer just stores the data in the same place for convenience, ease of use, memory reduction, etc
+ RepMotionMatch = FVIRepMotionMatch(Location, Direction);
+}
+
+void AMyVICharacterBase::GetVaultLocationAndDirection_Implementation(FVector& OutLocation, FVector& OutDirection) const
+{
+ // Because LocalPlayer stores in the same place, no need for any testing as they all use RepMotionMatch to store this
+
+ // This is only currently used for FBIK tracing
+ OutLocation = RepMotionMatch.Location;
+ OutDirection = RepMotionMatch.Direction;
+}
+
+void AMyVICharacterBase::ReplicateMotionMatch_Implementation(const FVIRepMotionMatch& MotionMatch)
+{
+ // GA_Vault has directed server to update it's RepMotionMatch property so that it will
+ // be replicated to simulated proxies with 1 decimal point of precision (net quantization)
+ RepMotionMatch = MotionMatch;
+}
+
+bool AMyVICharacterBase::IsWalkable_Implementation(const FHitResult& HitResult) const
+{
+ // Surface we hit can be walked on or not
+ return GetCharacterMovement() && GetCharacterMovement()->IsWalkable(HitResult);
+}
+
+bool AMyVICharacterBase::CanAutoVaultInCustomMovementMode_Implementation() const
+{
+ return true;
+
+ // Example usage commented out
+
+ /*
+
+ if (GetCharacterMovement())
+ {
+ switch (GetCharacterMovement()->CustomMovementMode)
+ {
+ case 0:
+ return false;
+ case 1: // Some example custom mode where auto vault can work
+ return true;
+ case 2:
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ */
+}
+
+// *********************************************** //
+// ********* End Pawn Vaulting Interface ********* //
+// *********************************************** //
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/MyVICharacterBase.h b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterBase.h
new file mode 100644
index 00000000..40ae3f7f
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/MyVICharacterBase.h
@@ -0,0 +1,118 @@
+// Copyright (c) 2019-2022 Drowning Dragons Limited. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EndlessVendettaCharacter.h"
+#include "VITypes.h"
+#include "Pawn/VIPawnInterface.h"
+#include "MyVICharacterBase.generated.h"
+
+class UMotionWarpingComponent;
+class UVIPawnVaultComponent;
+
+/**
+ * An incomplete character base class
+ * Needs to inherit from IAbilitySystemInterface and implement a UVIAbilitySystemComponent
+ * @see: AVICharacterAbilityBase where this is done for you
+ *
+ * Requires multiple overrides which will cause errors if not correctly performed
+ */
+UCLASS(abstract)
+class ENDLESSVENDETTA_API AMyVICharacterBase : public AEndlessVendettaCharacter, public IVIPawnInterface
+{
+ GENERATED_BODY()
+
+public:
+ /**
+ * Motion Warping Component used for vaulting
+ */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Character)
+ UMotionWarpingComponent* MotionWarpingComponent;
+
+ /**
+ * Pawn Vault Component used for core vaulting logic
+ *
+ * This is added in Blueprint and must be returned via
+ * the IVIPawnInterface::GetPawnVaultComponent function
+ */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Character)
+ UVIPawnVaultComponent* VaultComponent;
+
+protected:
+ /** Simulated proxies use this to update their vaulting state based on server values */
+ UPROPERTY(Replicated, BlueprintReadWrite, Category = Vault)
+ bool bRepIsVaulting;
+
+ /** Used to detect changes in vaulting state and call StopVaultAbility() */
+ UPROPERTY()
+ bool bWasVaulting;
+
+ /**
+ * Simulated proxies use this to reproduce motion matching results provided
+ * by server in the GA_Vault gameplay ability
+ *
+ * Local players use this as a cache for FBIK testing (returned via GetVaultLocationAndDirection)
+ *
+ * Net Serialized to one decimal point of precision
+ */
+ UPROPERTY(ReplicatedUsing="OnRep_MotionMatch", BlueprintReadWrite, Category = Vault)
+ FVIRepMotionMatch RepMotionMatch;
+
+public:
+ virtual void BeginPlay() override;
+
+ virtual void CheckJumpInput(float DeltaTime) override;
+
+ virtual void GetLifetimeReplicatedProps(TArray& OutLifetimeProps) const override;
+
+public:
+ virtual void Jump() override;
+ virtual void StopJumping() override;
+
+ /** Called from gameplay ability when vault stops */
+ UFUNCTION(BlueprintCallable, Category = Vault)
+ void StopVaultAbility();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = Vault)
+ void OnStopVaultAbility();
+
+protected:
+ UFUNCTION()
+ void OnRep_MotionMatch();
+
+public:
+ /**
+ * @return True if vaulting
+ * Correct value must be returned based on net role here
+ * Simulated proxies return bRepIsVaulting
+ * Server & Authority must return CMC bIsVaulting
+ */
+ UFUNCTION(BlueprintPure, Category = Vault)
+ virtual bool IsVaulting() const;
+
+ // *********************************************** //
+ // *********** Begin IVIPawnInterface ************ //
+ // *********************************************** //
+
+ // Read VIPawnInterface.h for detailed descriptions of these functions or look
+ // inside their functions themselves
+
+ virtual UVIPawnVaultComponent* GetPawnVaultComponent_Implementation() const override;
+ virtual UMotionWarpingComponent* GetMotionWarpingComponent_Implementation() const override;
+ virtual USkeletalMeshComponent* GetMeshForVaultMontage_Implementation() const override { return FP_SkeletalMesh; }
+ virtual FVIAnimSet GetVaultAnimSet_Implementation() const override;
+ virtual FVITraceSettings GetVaultTraceSettings_Implementation() const override;
+ virtual FVector GetVaultDirection_Implementation() const override;
+ virtual bool CanVault_Implementation() const override;
+ virtual void StartVaultAbility_Implementation() override;
+ virtual void OnLocalPlayerVault_Implementation(const FVector& Location, const FVector& Direction) override;
+ virtual void GetVaultLocationAndDirection_Implementation(FVector& OutLocation, FVector& OutDirection) const override;
+ virtual void ReplicateMotionMatch_Implementation(const FVIRepMotionMatch& MotionMatch) override;
+ virtual bool IsWalkable_Implementation(const FHitResult& HitResult) const override;
+ virtual bool CanAutoVaultInCustomMovementMode_Implementation() const override;
+
+ // *********************************************** //
+ // ************* End IVIPawnInterface ************ //
+ // *********************************************** //
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.cpp b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.cpp
new file mode 100644
index 00000000..c8cfc038
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.cpp
@@ -0,0 +1,53 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "LandingZone.h"
+
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "Kismet/GameplayStatics.h"
+
+// Sets default values
+ALandingZone::ALandingZone()
+{
+ // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
+ PrimaryActorTick.bCanEverTick = true;
+
+}
+
+void ALandingZone::UpdateAllLandingZones(bool Landing)
+{
+ TArray AllLandingZones;
+ UGameplayStatics::GetAllActorsOfClass(GetWorld(), ALandingZone::StaticClass(), AllLandingZones);
+ for (auto LZ_Actor : AllLandingZones)
+ {
+ ALandingZone* LZ = Cast(LZ_Actor);
+ Landing ? LZ->HideWaypoint() : LZ->ShowWaypoint();
+ }
+}
+
+void ALandingZone::Interact()
+{
+ Takeoff();
+}
+
+void ALandingZone::InteractPrompt()
+{
+
+}
+
+void ALandingZone::Land()
+{
+ AEndlessVendettaCharacter* PlayerChar = Cast(GetWorld()->GetFirstPlayerController()->GetPawn());
+ if (!IsValid(PlayerChar)) return;
+ UpdateAllLandingZones(true);
+ PlayerChar->ExitShip(LZ_ExitTransform);
+}
+
+void ALandingZone::Takeoff()
+{
+ AEndlessVendettaCharacter* PlayerChar = Cast(GetWorld()->GetFirstPlayerController()->GetPawn());
+ if (!IsValid(PlayerChar)) return;
+ UpdateAllLandingZones(false);
+ PlayerChar->EnterShip(LZ_TakeoffTransform);
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.h b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.h
new file mode 100644
index 00000000..94314505
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/LandingZone.h
@@ -0,0 +1,52 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EndlessVendetta/InteractionInterface.h"
+#include "GameFramework/Actor.h"
+#include "LandingZone.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API ALandingZone : public AActor, public IInteractionInterface
+{
+ GENERATED_BODY()
+
+ UPROPERTY(EditAnywhere, Category = "Landing Zone")
+ FTransform LZ_ExitTransform;
+ UPROPERTY(EditAnywhere, Category = "Landing Zone")
+ FTransform LZ_TakeoffTransform;
+
+ // Hides or shows key aesthetic features of LZ's based on if the player is landing or not
+ void UpdateAllLandingZones(bool Landing);
+
+
+
+protected:
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Landing Zone")
+ bool IsHomeBase_LZ = false;
+
+ // Allows player to enter their ship through a LZ
+ void Interact() override;
+ void InteractPrompt() override;
+
+public:
+ // Sets default values for this actor's properties
+ ALandingZone();
+
+ // Waypoint will display something along the lines of Press F to Land
+ UFUNCTION(BlueprintImplementableEvent)
+ void SuggestLandingWidget();
+
+ // Ran when a player takes off from any LZ in the world
+ UFUNCTION(BlueprintImplementableEvent)
+ void ShowWaypoint();
+ // Ran when player lands at any LZ in the world
+ UFUNCTION(BlueprintImplementableEvent)
+ void HideWaypoint();
+
+ // Updates all LZ's, then runs exit ship func on player and passes the exit transform
+ void Land();
+ // Updates all LZ's, then runs enter ship func on player passing the correct takeoff transform
+ void Takeoff();
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.cpp b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.cpp
new file mode 100644
index 00000000..5eb4610a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.cpp
@@ -0,0 +1,86 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "SpaceShip.h"
+
+#include "Components/ArrowComponent.h"
+
+// Sets default values
+ASpaceShip::ASpaceShip()
+{
+ // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
+ PrimaryActorTick.bCanEverTick = true;
+}
+
+void ASpaceShip::SightCheck()
+{
+ FHitResult OutHit;
+ FCollisionObjectQueryParams ObjectQueryParams;
+ ObjectQueryParams.AddObjectTypesToQuery(ECollisionChannel::ECC_GameTraceChannel2);
+ FVector LT_Start = SeatComponent->GetComponentLocation();
+ FVector LT_End = LT_Start + (SeatComponent->GetForwardVector() * 50000);
+ GetWorld()->LineTraceSingleByObjectType(OutHit, LT_Start, LT_End, ObjectQueryParams);
+ ALandingZone* LZ = Cast(OutHit.GetActor());
+ if (!IsValid(LZ)) return;
+ Potential_LZ = LZ;
+ LZ->SuggestLandingWidget();
+}
+
+
+// Called when the game starts or when spawned
+void ASpaceShip::BeginPlay()
+{
+ Super::BeginPlay();
+
+ PlayersCharacter = GetWorld()->GetFirstPlayerController()->GetCharacter();
+ PlayersController = PlayersCharacter->GetController();
+ TArray SeatComps = GetComponentsByTag(UArrowComponent::StaticClass(), FName("Seat"));
+ SeatComponent = Cast(SeatComps[0]);
+}
+
+// Called every frame
+void ASpaceShip::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+ PlayersCharacter->SetActorLocation(SeatComponent->GetComponentLocation());
+ PlayersController->SetControlRotation(GetActorRotation());
+
+ SightCheck();
+}
+
+// Called to bind functionality to input
+void ASpaceShip::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
+{
+ Super::SetupPlayerInputComponent(PlayerInputComponent);
+
+}
+
+void ASpaceShip::PlayerInteracting()
+{
+ if (IsValid(Potential_LZ)) Potential_LZ->Land();
+}
+
+
+void ASpaceShip::MoveShip(FVector2D MovementVector)
+{
+ // Get ships direction vectors, and ignore their pitch
+ FVector ForwardVector = GetActorForwardVector();
+ ForwardVector.Z = 0;
+ FVector RightVector = GetActorRightVector();
+ RightVector.Y += RightVector.Z;
+ RightVector.Z = 0;
+ AddMovementInput(ForwardVector, MovementVector.Y, true);
+ AddMovementInput(RightVector, MovementVector.X, true);
+}
+
+void ASpaceShip::RotateShip(FVector2D LookAxisVector)
+{
+ FRotator shipRotator = GetActorRotation();
+ shipRotator.Yaw += LookAxisVector.X;
+ shipRotator.Pitch -= LookAxisVector.Y;
+ shipRotator.Pitch = shipRotator.Pitch < -30 ? -30 : shipRotator.Pitch;
+ shipRotator.Pitch = shipRotator.Pitch > 30 ? 30 : shipRotator.Pitch;
+ SetActorRotation(shipRotator);
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.h b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.h
new file mode 100644
index 00000000..78f0ed03
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/SpaceShip/SpaceShip.h
@@ -0,0 +1,44 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "LandingZone.h"
+#include "GameFramework/Character.h"
+
+#include "SpaceShip.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API ASpaceShip : public ACharacter
+{
+ GENERATED_BODY()
+
+ ACharacter* PlayersCharacter;
+ AController* PlayersController;
+ UArrowComponent* SeatComponent;
+
+ ALandingZone* Potential_LZ;
+
+ void SightCheck();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Sets default values for this pawn's properties
+ ASpaceShip();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ // Called to bind functionality to input
+ virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
+
+ void PlayerInteracting();
+
+ void MoveShip(FVector2D MovementVector);
+
+ void RotateShip(FVector2D LookAxisVector);
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/Telemetry.cpp b/EndlessVendetta/Source/EndlessVendetta/Telemetry.cpp
deleted file mode 100644
index 196fcc0c..00000000
--- a/EndlessVendetta/Source/EndlessVendetta/Telemetry.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-// Fill out your copyright notice in the Description page of Project Settings.
-
-
-#include "Telemetry.h"
-#include "Misc/Guid.h"
-
-void ATelemetry::SendEvent(FString EventKey, FString EventData)
-{
- const FString EventID = FGuid::NewGuid().ToString();
- const FString EventTime = FDateTime::Now().ToString();
- const auto Request = FHttpModule::Get().CreateRequest();
- Request->SetURL(TelemetryURLEvents);
- Request->SetVerb("POST");
- Request->SetHeader("Content-Type", "application/json");
- Request->SetHeader("Accept", "application/json");
- Request->SetContentAsString( "{\"SessionID\":\"" + SessionID + "\",\"PlayerGUID\":\"" + PlayerGUID + "\",\"EventID\":\"" + EventID + "\",\"Timestamp\":\"" + EventTime + "\",\"EventKey\":\"" + EventKey + "\",\"EventData\":\"" + EventData + "\"}" );
- Request->OnProcessRequestComplete().BindLambda([](FHttpRequestPtr request, FHttpResponsePtr response, bool success)
- {
- GLog->Log("Telemetry Event Response: " + response->GetContentAsString());
- });
- Request->ProcessRequest();
-}
-
-void ATelemetry::BeginPlay()
-{
- Super::BeginPlay();
- SessionID = FGuid::NewGuid().ToString().Left(5).ToUpper();
-}
diff --git a/EndlessVendetta/Source/EndlessVendetta/Telemetry.h b/EndlessVendetta/Source/EndlessVendetta/Telemetry.h
deleted file mode 100644
index 15cbdc69..00000000
--- a/EndlessVendetta/Source/EndlessVendetta/Telemetry.h
+++ /dev/null
@@ -1,33 +0,0 @@
-// Fill out your copyright notice in the Description page of Project Settings.
-
-#pragma once
-
-#include "CoreMinimal.h"
-#include "GameFramework/GameState.h"
-#include "Http.h"
-#include "Telemetry.generated.h"
-
-/**
- *
- */
-UCLASS()
-class ENDLESSVENDETTA_API ATelemetry : public AGameState
-{
- GENERATED_BODY()
-
-public:
- UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
- FString TelemetryURLEvents = "https://ev.api.philipwhite.dev/api/event";
- UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
- FString TelemetryURLUsers = "https://ev.api.philipwhite.dev/api/user";
- UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
- FString SessionID = "AAAAA";
- UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Telemetry")
- FString PlayerGUID = "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee";
-
- UFUNCTION(BlueprintCallable, Category = "Telemetry")
- void SendEvent(FString EventKey, FString EventData);
-
-protected:
- virtual void BeginPlay() override;
-};
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp
index d5069806..9d14975d 100644
--- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp
@@ -7,12 +7,13 @@
#include "EndlessVendetta/EndlessVendettaCharacter.h"
#include "Kismet/KismetMathLibrary.h"
#include "Components/CapsuleComponent.h"
-#include "EndlessVendetta/Telemetry.h"
#include "Kismet/GameplayStatics.h"
#include "Engine/DamageEvents.h"
#include "EndlessVendetta/AI/EnemyCharacter.h"
#include
+#include "EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.h"
+
// Sets default values
ABaseWeaponClass::ABaseWeaponClass()
@@ -193,6 +194,7 @@ void ABaseWeaponClass::Fire()
{
tempWeaponDamage = WeaponDamage;
}
+ if (ATargetDummy* TargetDummy = Cast(outHit.GetActor())) TargetDummy->TargetShot();
if (!Cast(outHit.GetActor())) return;
Cast(outHit.GetActor())->TakeDamage(tempWeaponDamage, FPointDamageEvent(), GetWorld()->GetFirstPlayerController(), this);
}
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.cpp
index a4a8cf61..275a5440 100644
--- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.cpp
@@ -3,6 +3,7 @@
#include "ShotgunClass.h"
#include "EndlessVendetta/AI/EnemyCharacter.h"
+#include "EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.h"
#include "Engine/DamageEvents.h"
AShotgunClass::AShotgunClass()
@@ -46,6 +47,7 @@ void AShotgunClass::Fire()
{
tempWeaponDamage = WeaponDamage;
}
+ if (ATargetDummy* TargetDummy = Cast(outHit.GetActor())) TargetDummy->TargetShot();
if (!Cast(outHit.GetActor())) return;
Cast(outHit.GetActor())->TakeDamage(tempWeaponDamage, FPointDamageEvent(), GetWorld()->GetFirstPlayerController(), this);
}
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp
index 43f17bc9..5d6f8a4f 100644
--- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp
@@ -4,6 +4,7 @@
#include "SniperClass.h"
#include "EndlessVendetta/EndlessVendettaCharacter.h"
#include "EndlessVendetta/AI/AICharacter.h"
+#include "EndlessVendetta/BountySystem/ControlsTraining/TargetDummy.h"
#include "Engine/DamageEvents.h"
#include "Kismet/GameplayStatics.h"
@@ -66,6 +67,7 @@ void ASniperClass::Fire()
{
tempWeaponDamage = WeaponDamage;
}
+ if (ATargetDummy* TargetDummy = Cast(outHit.GetActor())) TargetDummy->TargetShot();
if (!Cast(outHit.GetActor())) return;
Cast(outHit.GetActor())->TakeDamage(tempWeaponDamage, FPointDamageEvent(), GetWorld()->GetFirstPlayerController(), this);
}
diff --git a/readme.md b/readme.md
index e6e97760..43d60662 100644
--- a/readme.md
+++ b/readme.md
@@ -4,4 +4,19 @@
-Icons by [Icons8](https://icons8.com/)
\ No newline at end of file
+Icons by [Icons8](https://icons8.com/)
+
+## Design Doc
+https://docs.google.com/presentation/d/18K_XKPOnZg56S7NocoEVEdA8lVHvtSVWkflCJFtDmsE/edit?usp=sharing
+
+## Endless Vendetta Script
+https://docs.google.com/document/d/1MvQ3F871koZ53Iz9kEm1RQPiGyirKYcUlOa3ygn4et8/edit?usp=sharing
+
+## Storyboard
+https://docs.google.com/presentation/d/19U0EaM-FMOQF1PJK32SKJUJZpXn9ee6TqFE8gCitA64/edit?usp=sharing
+
+## Asset List
+https://docs.google.com/document/d/1Fdbr4cpkdt6jJFpZQmIbvP3FGk25JDIMfuRHyolwX_Y/edit?usp=sharing
+
+## Dialogue tree
+https://drive.google.com/file/d/11lsDzHkY9VMklJm8PkwArHKXqH1wdvxN/view?usp=sharing