diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/discord-ij.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/discord-ij.xml
new file mode 100644
index 00000000..b2c4e3f1
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/discord-ij.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ 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
new file mode 100644
index 00000000..6c0b8635
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta.dir/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/.gitignore b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/.gitignore
new file mode 100644
index 00000000..f4076847
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/.gitignore
@@ -0,0 +1,13 @@
+# 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/.idea/encodings.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/encodings.xml
new file mode 100644
index 00000000..df87cf95
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/indexLayout.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/indexLayout.xml
new file mode 100644
index 00000000..7b08163c
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/vcs.xml b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/vcs.xml
new file mode 100644
index 00000000..6c0b8635
--- /dev/null
+++ b/EndlessVendetta/.idea/.idea.EndlessVendetta/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/EndlessVendetta/Config/DefaultEditorPerProjectUserSettings.ini b/EndlessVendetta/Config/DefaultEditorPerProjectUserSettings.ini
index 220a5519..094343ea 100644
--- a/EndlessVendetta/Config/DefaultEditorPerProjectUserSettings.ini
+++ b/EndlessVendetta/Config/DefaultEditorPerProjectUserSettings.ini
@@ -1,2 +1,196 @@
[ContentBrowser]
-ContentBrowserTab1.SelectedPaths=/Game/FirstPerson
\ No newline at end of file
+ContentBrowserTab1.SelectedPaths=/Game/FirstPerson
+
+[/Script/UnrealEd.LevelEditorPlaySettings]
+PlayFromHerePlayerStartClassName=/Script/Engine.PlayerStartPIE
+GameGetsMouseControl=False
+UseMouseForTouch=False
+ShowMouseControlLabel=True
+MouseControlLabelPosition=LabelAnchorMode_TopLeft
+ViewportGetsHMDControl=False
+ShouldMinimizeEditorOnVRPIE=True
+bShouldMinimizeEditorOnNonVRPIE=False
+bEmulateStereo=False
+AutoRecompileBlueprints=True
+EnableGameSound=True
+SoloAudioInFirstPIEClient=False
+EnablePIEEnterAndExitSounds=False
+PlayInEditorSoundQualityLevel=0
+bUseNonRealtimeAudioDevice=False
+bOnlyLoadVisibleLevelsInPIE=False
+bPreferToStreamLevelsInPIE=False
+bPromoteOutputLogWarningsDuringPIE=False
+NewWindowWidth=1280
+NewWindowHeight=720
+NewWindowPosition=(X=-1,Y=-1)
+CenterNewWindow=False
+PIEAlwaysOnTop=False
+DisableStandaloneSound=False
+AdditionalLaunchParameters=
+BuildGameBeforeLaunch=PlayOnBuild_Default
+LaunchConfiguration=LaunchConfig_Default
+PackFilesForLaunch=NoPak
+bAutoCompileBlueprintsOnLaunch=True
+bLaunchSeparateServer=False
+PlayNetMode=PIE_Standalone
+RunUnderOneProcess=True
+PlayNetDedicated=False
+PlayNumberOfClients=1
+PrimaryPIEClientIndex=0
+ServerPort=17777
+ClientWindowWidth=640
+AutoConnectToServer=True
+RouteGamepadToSecondWindow=False
+CreateAudioDeviceForEveryPlayer=False
+ClientWindowHeight=480
+ServerMapNameOverride=
+AdditionalServerGameOptions=
+AdditionalLaunchOptions=
+bShowServerDebugDrawingByDefault=True
+ServerDebugDrawingColorTintStrength=0.000000
+ServerDebugDrawingColorTint=(R=0.000000,G=0.000000,B=0.000000,A=1.000000)
+AdditionalServerLaunchParameters=
+ServerFixedFPS=0
+NetworkEmulationSettings=(bIsNetworkEmulationEnabled=False,EmulationTarget=Server,CurrentProfile="Custom",OutPackets=(MinLatency=0,MaxLatency=0,PacketLossPercentage=0),InPackets=(MinLatency=0,MaxLatency=0,PacketLossPercentage=0))
+LastSize=(X=0,Y=0)
+LastExecutedLaunchDevice=Windows@MARCELSPC
+LastExecutedLaunchName=MARCELSPC
+LastExecutedLaunchModeType=LaunchMode_OnDevice
+LastExecutedPlayModeLocation=PlayLocation_DefaultPlayerStart
+LastExecutedPlayModeType=PlayMode_InViewPort
+LastExecutedPIEPreviewDevice=
+-LaptopScreenResolutions=(Description="Apple MacBook Air 11",Width=1366,Height=768,AspectRatio="16:9",bCanSwapAspectRatio=true)
+-LaptopScreenResolutions=(Description="Apple MacBook Air 13\"",Width=1440,Height=900,AspectRatio="16:10",bCanSwapAspectRatio=true)
+-LaptopScreenResolutions=(Description="Apple MacBook Pro 13\"",Width=1280,Height=800,AspectRatio="16:10",bCanSwapAspectRatio=true)
+-LaptopScreenResolutions=(Description="Apple MacBook Pro 13\" (Retina)",Width=2560,Height=1600,AspectRatio="16:10",bCanSwapAspectRatio=true)
+-LaptopScreenResolutions=(Description="Apple MacBook Pro 15\"",Width=1440,Height=900,AspectRatio="16:10",bCanSwapAspectRatio=true)
+-LaptopScreenResolutions=(Description="Apple MacBook Pro 15\" (Retina)",Width=2880,Height=1800,AspectRatio="16:10",bCanSwapAspectRatio=true)
+-LaptopScreenResolutions=(Description="Generic 14-15.6\" Notebook",Width=1366,Height=768,AspectRatio="16:9",bCanSwapAspectRatio=true)
++LaptopScreenResolutions=(Description="Apple MacBook Air 11",Width=1366,Height=768,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
++LaptopScreenResolutions=(Description="Apple MacBook Air 13\"",Width=1440,Height=900,AspectRatio="16:10",bCanSwapAspectRatio=True,ProfileName="")
++LaptopScreenResolutions=(Description="Apple MacBook Pro 13\"",Width=1280,Height=800,AspectRatio="16:10",bCanSwapAspectRatio=True,ProfileName="")
++LaptopScreenResolutions=(Description="Apple MacBook Pro 13\" (Retina)",Width=2560,Height=1600,AspectRatio="16:10",bCanSwapAspectRatio=True,ProfileName="")
++LaptopScreenResolutions=(Description="Apple MacBook Pro 15\"",Width=1440,Height=900,AspectRatio="16:10",bCanSwapAspectRatio=True,ProfileName="")
++LaptopScreenResolutions=(Description="Apple MacBook Pro 15\" (Retina)",Width=2880,Height=1800,AspectRatio="16:10",bCanSwapAspectRatio=True,ProfileName="")
++LaptopScreenResolutions=(Description="Generic 14-15.6\" Notebook",Width=1366,Height=768,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
+-MonitorScreenResolutions=(Description="19\" monitor",Width=1440,Height=900,AspectRatio="16:10",bCanSwapAspectRatio=true)
+-MonitorScreenResolutions=(Description="20\" monitor",Width=1600,Height=900,AspectRatio="16:9",bCanSwapAspectRatio=true)
+-MonitorScreenResolutions=(Description="22\" monitor",Width=1680,Height=1050,AspectRatio="16:10",bCanSwapAspectRatio=true)
+-MonitorScreenResolutions=(Description="21.5-24\" monitor",Width=1920,Height=1080,AspectRatio="16:9",bCanSwapAspectRatio=true)
+-MonitorScreenResolutions=(Description="27\" monitor",Width=2560,Height=1440,AspectRatio="16:9",bCanSwapAspectRatio=true)
++MonitorScreenResolutions=(Description="19\" monitor",Width=1440,Height=900,AspectRatio="16:10",bCanSwapAspectRatio=True,ProfileName="")
++MonitorScreenResolutions=(Description="20\" monitor",Width=1600,Height=900,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
++MonitorScreenResolutions=(Description="22\" monitor",Width=1680,Height=1050,AspectRatio="16:10",bCanSwapAspectRatio=True,ProfileName="")
++MonitorScreenResolutions=(Description="21.5-24\" monitor",Width=1920,Height=1080,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
++MonitorScreenResolutions=(Description="27\" monitor",Width=2560,Height=1440,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
+-PhoneScreenResolutions=(Description="Apple iPhone 5S",Width=320,Height=568,AspectRatio="~16:9",bCanSwapAspectRatio=true,ProfileName="iPhone5S")
+-PhoneScreenResolutions=(Description="Apple iPhone 6",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone6")
+-PhoneScreenResolutions=(Description="Apple iPhone 6+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone6Plus")
+-PhoneScreenResolutions=(Description="Apple iPhone 6S",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone6S")
+-PhoneScreenResolutions=(Description="Apple iPhone 6S+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone6SPlus")
+-PhoneScreenResolutions=(Description="Apple iPhone 7",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone7")
+-PhoneScreenResolutions=(Description="Apple iPhone 7+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone7Plus")
+-PhoneScreenResolutions=(Description="Apple iPhone 8",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone8")
+-PhoneScreenResolutions=(Description="Apple iPhone 8+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhone8Plus")
+-PhoneScreenResolutions=(Description="Apple iPhone X",Width=375,Height=812,AspectRatio="19.5:9",bCanSwapAspectRatio=true,ProfileName="iPhoneX")
+-PhoneScreenResolutions=(Description="Apple iPhone XS",Width=375,Height=812,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhoneXS")
+-PhoneScreenResolutions=(Description="Apple iPhone XS Max",Width=414,Height=896,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhoneXSMax")
+-PhoneScreenResolutions=(Description="Apple iPhone XR",Width=414,Height=896,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="iPhoneXR")
+-PhoneScreenResolutions=(Description="HTC One",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_High")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S4",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_Low")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S6",Width=1440,Height=2560,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_Mali_T7xx")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S7",Width=1440,Height=2560,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_High")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S8 (Mali)",Width=1080,Height=2220,AspectRatio="18.5:9",bCanSwapAspectRatio=true,ProfileName="Android_Mali_G71")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S8 (Adreno)",Width=1080,Height=2220,AspectRatio="18.5:9",bCanSwapAspectRatio=true,ProfileName="Android_Adreno5xx")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S9 (Mali)",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=true,ProfileName="Android_High")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S9 (Adreno)",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=true,ProfileName="Android_High")
+-PhoneScreenResolutions=(Description="Samsung Galaxy Note 9 (Mali)",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=true,ProfileName="Android_High")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S10 (Adreno)",Width=1440,Height=3040,AspectRatio="19:9",bCanSwapAspectRatio=true,ProfileName="Android_Adreno6xx")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S10 (Mali)",Width=1440,Height=3040,AspectRatio="19:9",bCanSwapAspectRatio=true,ProfileName="Android_Mali_G76")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S10e (Adreno)",Width=1080,Height=2280,AspectRatio="19:9",bCanSwapAspectRatio=true,ProfileName="Android_Adreno6xx")
+-PhoneScreenResolutions=(Description="Samsung Galaxy S10e (Mali)",Width=1080,Height=2280,AspectRatio="19:9",bCanSwapAspectRatio=true,ProfileName="Android_Mali_G76")
+-PhoneScreenResolutions=(Description="Google Pixel",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_Mid")
+-PhoneScreenResolutions=(Description="Google Pixel XL",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_Mid")
+-PhoneScreenResolutions=(Description="Google Pixel 2",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_Mid")
+-PhoneScreenResolutions=(Description="Google Pixel 2 XL",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_Mid")
+-PhoneScreenResolutions=(Description="Google Pixel 3",Width=1080,Height=2160,AspectRatio="18:9",bCanSwapAspectRatio=true,ProfileName="Android_Mid")
+-PhoneScreenResolutions=(Description="Google Pixel 3 XL",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=true,ProfileName="Android_Mid")
+-PhoneScreenResolutions=(Description="Razer Phone",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=true,ProfileName="Android_Mid")
++PhoneScreenResolutions=(Description="Apple iPhone 5S",Width=320,Height=568,AspectRatio="~16:9",bCanSwapAspectRatio=True,ProfileName="iPhone5S")
++PhoneScreenResolutions=(Description="Apple iPhone 6",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone6")
++PhoneScreenResolutions=(Description="Apple iPhone 6+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone6Plus")
++PhoneScreenResolutions=(Description="Apple iPhone 6S",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone6S")
++PhoneScreenResolutions=(Description="Apple iPhone 6S+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone6SPlus")
++PhoneScreenResolutions=(Description="Apple iPhone 7",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone7")
++PhoneScreenResolutions=(Description="Apple iPhone 7+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone7Plus")
++PhoneScreenResolutions=(Description="Apple iPhone 8",Width=375,Height=667,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone8")
++PhoneScreenResolutions=(Description="Apple iPhone 8+",Width=414,Height=736,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhone8Plus")
++PhoneScreenResolutions=(Description="Apple iPhone X",Width=375,Height=812,AspectRatio="19.5:9",bCanSwapAspectRatio=True,ProfileName="iPhoneX")
++PhoneScreenResolutions=(Description="Apple iPhone XS",Width=375,Height=812,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhoneXS")
++PhoneScreenResolutions=(Description="Apple iPhone XS Max",Width=414,Height=896,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhoneXSMax")
++PhoneScreenResolutions=(Description="Apple iPhone XR",Width=414,Height=896,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="iPhoneXR")
++PhoneScreenResolutions=(Description="HTC One",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_High")
++PhoneScreenResolutions=(Description="Samsung Galaxy S4",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_Low")
++PhoneScreenResolutions=(Description="Samsung Galaxy S6",Width=1440,Height=2560,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_Mali_T7xx")
++PhoneScreenResolutions=(Description="Samsung Galaxy S7",Width=1440,Height=2560,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_High")
++PhoneScreenResolutions=(Description="Samsung Galaxy S8 (Mali)",Width=1080,Height=2220,AspectRatio="18.5:9",bCanSwapAspectRatio=True,ProfileName="Android_Mali_G71")
++PhoneScreenResolutions=(Description="Samsung Galaxy S8 (Adreno)",Width=1080,Height=2220,AspectRatio="18.5:9",bCanSwapAspectRatio=True,ProfileName="Android_Adreno5xx")
++PhoneScreenResolutions=(Description="Samsung Galaxy S9 (Mali)",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=True,ProfileName="Android_High")
++PhoneScreenResolutions=(Description="Samsung Galaxy S9 (Adreno)",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=True,ProfileName="Android_High")
++PhoneScreenResolutions=(Description="Samsung Galaxy Note 9 (Mali)",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=True,ProfileName="Android_High")
++PhoneScreenResolutions=(Description="Samsung Galaxy S10 (Adreno)",Width=1440,Height=3040,AspectRatio="19:9",bCanSwapAspectRatio=True,ProfileName="Android_Adreno6xx")
++PhoneScreenResolutions=(Description="Samsung Galaxy S10 (Mali)",Width=1440,Height=3040,AspectRatio="19:9",bCanSwapAspectRatio=True,ProfileName="Android_Mali_G76")
++PhoneScreenResolutions=(Description="Samsung Galaxy S10e (Adreno)",Width=1080,Height=2280,AspectRatio="19:9",bCanSwapAspectRatio=True,ProfileName="Android_Adreno6xx")
++PhoneScreenResolutions=(Description="Samsung Galaxy S10e (Mali)",Width=1080,Height=2280,AspectRatio="19:9",bCanSwapAspectRatio=True,ProfileName="Android_Mali_G76")
++PhoneScreenResolutions=(Description="Google Pixel",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_Mid")
++PhoneScreenResolutions=(Description="Google Pixel XL",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_Mid")
++PhoneScreenResolutions=(Description="Google Pixel 2",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_Mid")
++PhoneScreenResolutions=(Description="Google Pixel 2 XL",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_Mid")
++PhoneScreenResolutions=(Description="Google Pixel 3",Width=1080,Height=2160,AspectRatio="18:9",bCanSwapAspectRatio=True,ProfileName="Android_Mid")
++PhoneScreenResolutions=(Description="Google Pixel 3 XL",Width=1440,Height=2960,AspectRatio="18.5:9",bCanSwapAspectRatio=True,ProfileName="Android_Mid")
++PhoneScreenResolutions=(Description="Razer Phone",Width=1080,Height=1920,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="Android_Mid")
+-TabletScreenResolutions=(Description="iPad Pro 12.9-inch (3rd gen.)",Width=1024,Height=1366,AspectRatio="~3:4",bCanSwapAspectRatio=true,ProfileName="iPadPro3_129")
+-TabletScreenResolutions=(Description="iPad Pro 12.9-inch (2nd gen.)",Width=1024,Height=1366,AspectRatio="~3:4",bCanSwapAspectRatio=true,ProfileName="iPadPro2_129")
+-TabletScreenResolutions=(Description="iPad Pro 11-inch",Width=834,Height=1194,AspectRatio="5:7",bCanSwapAspectRatio=true,ProfileName="iPadPro11")
+-TabletScreenResolutions=(Description="iPad Pro 10.5-inch",Width=834,Height=1112,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPadPro105")
+-TabletScreenResolutions=(Description="iPad Pro 12.9-inch",Width=1024,Height=1366,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPadPro129")
+-TabletScreenResolutions=(Description="iPad Pro 9.7-inch",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPadPro97")
+-TabletScreenResolutions=(Description="iPad (6th gen.)",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPad6")
+-TabletScreenResolutions=(Description="iPad (5th gen.)",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPad5")
+-TabletScreenResolutions=(Description="iPad Air 3",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPadAir3")
+-TabletScreenResolutions=(Description="iPad Air 2",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPadAir2")
+-TabletScreenResolutions=(Description="iPad Mini 5",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPadMini5")
+-TabletScreenResolutions=(Description="iPad Mini 4",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=true,ProfileName="iPadMini4")
+-TabletScreenResolutions=(Description="LG G Pad X 8.0",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=true)
+-TabletScreenResolutions=(Description="Asus Zenpad 3s 10",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=true)
+-TabletScreenResolutions=(Description="Huawei MediaPad M3",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=true)
+-TabletScreenResolutions=(Description="Microsoft Surface RT",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=true)
+-TabletScreenResolutions=(Description="Microsoft Surface Pro",Width=1080,Height=1920,AspectRatio="9:16",bCanSwapAspectRatio=true)
++TabletScreenResolutions=(Description="iPad Pro 12.9-inch (3rd gen.)",Width=1024,Height=1366,AspectRatio="~3:4",bCanSwapAspectRatio=True,ProfileName="iPadPro3_129")
++TabletScreenResolutions=(Description="iPad Pro 12.9-inch (2nd gen.)",Width=1024,Height=1366,AspectRatio="~3:4",bCanSwapAspectRatio=True,ProfileName="iPadPro2_129")
++TabletScreenResolutions=(Description="iPad Pro 11-inch",Width=834,Height=1194,AspectRatio="5:7",bCanSwapAspectRatio=True,ProfileName="iPadPro11")
++TabletScreenResolutions=(Description="iPad Pro 10.5-inch",Width=834,Height=1112,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPadPro105")
++TabletScreenResolutions=(Description="iPad Pro 12.9-inch",Width=1024,Height=1366,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPadPro129")
++TabletScreenResolutions=(Description="iPad Pro 9.7-inch",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPadPro97")
++TabletScreenResolutions=(Description="iPad (6th gen.)",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPad6")
++TabletScreenResolutions=(Description="iPad (5th gen.)",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPad5")
++TabletScreenResolutions=(Description="iPad Air 3",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPadAir3")
++TabletScreenResolutions=(Description="iPad Air 2",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPadAir2")
++TabletScreenResolutions=(Description="iPad Mini 5",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPadMini5")
++TabletScreenResolutions=(Description="iPad Mini 4",Width=768,Height=1024,AspectRatio="3:4",bCanSwapAspectRatio=True,ProfileName="iPadMini4")
++TabletScreenResolutions=(Description="LG G Pad X 8.0",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=True,ProfileName="")
++TabletScreenResolutions=(Description="Asus Zenpad 3s 10",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=True,ProfileName="")
++TabletScreenResolutions=(Description="Huawei MediaPad M3",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=True,ProfileName="")
++TabletScreenResolutions=(Description="Microsoft Surface RT",Width=768,Height=1366,AspectRatio="9:16",bCanSwapAspectRatio=True,ProfileName="")
++TabletScreenResolutions=(Description="Microsoft Surface Pro",Width=1080,Height=1920,AspectRatio="9:16",bCanSwapAspectRatio=True,ProfileName="")
+-TelevisionScreenResolutions=(Description="720p (HDTV, Blu-ray)",Width=1280,Height=720,AspectRatio="16:9",bCanSwapAspectRatio=true)
+-TelevisionScreenResolutions=(Description="1080i, 1080p (HDTV, Blu-ray)",Width=1920,Height=1080,AspectRatio="16:9",bCanSwapAspectRatio=true)
+-TelevisionScreenResolutions=(Description="4K Ultra HD",Width=3840,Height=2160,AspectRatio="16:9",bCanSwapAspectRatio=true)
+-TelevisionScreenResolutions=(Description="4K Digital Cinema",Width=4096,Height=2160,AspectRatio="1.90:1",bCanSwapAspectRatio=true)
++TelevisionScreenResolutions=(Description="720p (HDTV, Blu-ray)",Width=1280,Height=720,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
++TelevisionScreenResolutions=(Description="1080i, 1080p (HDTV, Blu-ray)",Width=1920,Height=1080,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
++TelevisionScreenResolutions=(Description="4K Ultra HD",Width=3840,Height=2160,AspectRatio="16:9",bCanSwapAspectRatio=True,ProfileName="")
++TelevisionScreenResolutions=(Description="4K Digital Cinema",Width=4096,Height=2160,AspectRatio="1.90:1",bCanSwapAspectRatio=True,ProfileName="")
+DeviceToEmulate=
+PIESafeZoneOverride=(Left=0.000000,Top=0.000000,Right=0.000000,Bottom=0.000000)
+
diff --git a/EndlessVendetta/Config/DefaultEngine.ini b/EndlessVendetta/Config/DefaultEngine.ini
index b419691f..89d6c838 100644
--- a/EndlessVendetta/Config/DefaultEngine.ini
+++ b/EndlessVendetta/Config/DefaultEngine.ini
@@ -4,16 +4,18 @@
+EditProfiles=(Name="Trigger",CustomResponses=((Channel=Projectile, Response=ECR_Ignore)))
[/Script/EngineSettings.GameMapsSettings]
-EditorStartupMap=/Game/FirstPerson/Maps/FirstPersonMap.FirstPersonMap
+EditorStartupMap=/Game/Levels/TrainingFacility.TrainingFacility
LocalMapOptions=
-TransitionMap=
+TransitionMap=None
bUseSplitscreen=True
TwoPlayerSplitscreenLayout=Horizontal
ThreePlayerSplitscreenLayout=FavorTop
+FourPlayerSplitscreenLayout=Grid
+bOffsetPlayerGamepadIds=False
GameInstanceClass=/Script/Engine.GameInstance
-GameDefaultMap=/Game/FirstPerson/Maps/FirstPersonMap.FirstPersonMap
-ServerDefaultMap=/Engine/Maps/Entry
-GlobalDefaultGameMode=/Script/EndlessVendetta.EndlessVendettaGameMode
+GameDefaultMap=/Game/Levels/TrainingFacility.TrainingFacility
+ServerDefaultMap=/Engine/Maps/Entry.Entry
+GlobalDefaultGameMode=/Game/FirstPerson/GunMechanicWorld.GunMechanicWorld_C
GlobalDefaultServerGameMode=None
[/Script/Engine.RendererSettings]
@@ -23,9 +25,10 @@ r.DynamicGlobalIlluminationMethod=1
r.Mobile.EnableNoPrecomputedLightingCSMShader=1
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True
r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=true
-
-
r.Shadow.Virtual.Enable=1
+r.DefaultFeature.AutoExposure=False
+r.DefaultFeature.AutoExposure.Method=1
+r.DefaultFeature.AutoExposure.Bias=1.000000
[/Script/WindowsTargetPlatform.WindowsTargetSettings]
DefaultGraphicsRHI=DefaultGraphicsRHI_DX12
@@ -56,8 +59,6 @@ CompressionQualityModifier=1.000000
AutoStreamingThreshold=0.000000
SoundCueCookQualityIndex=-1
-
-
[/Script/HardwareTargeting.HardwareTargetingSettings]
TargetedHardwareClass=Desktop
AppliedTargetedHardwareClass=Desktop
@@ -67,6 +68,8 @@ AppliedDefaultGraphicsPerformance=Maximum
[/Script/Engine.Engine]
+ActiveGameNameRedirects=(OldGameName="TP_FirstPerson",NewGameName="/Script/EndlessVendetta")
+ActiveGameNameRedirects=(OldGameName="/Script/TP_FirstPerson",NewGameName="/Script/EndlessVendetta")
++ActiveGameNameRedirects=(OldGameName="/Script/TP_ThirdPerson",NewGameName="/Script/EndlessVendetta")
++ActiveGameNameRedirects=(OldGameName="TP_ThirdPerson",NewGameName="/Script/EndlessVendetta")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonProjectile",NewClassName="EndlessVendettaProjectile")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonGameMode",NewClassName="EndlessVendettaGameMode")
+ActiveClassRedirects=(OldClassName="TP_FirstPersonCharacter",NewClassName="EndlessVendettaCharacter")
@@ -85,3 +88,11 @@ ConnectionType=USBOnly
bUseManualIPAddress=False
ManualIPAddress=
+
+[CoreRedirects]
++PropertyRedirects=(OldName="/Script/EndlessVendetta.BaseWeaponClass.player",NewName="/Script/EndlessVendetta.BaseWeaponClass.playerInWorld")
+
+[/Script/NavigationSystem.RecastNavMesh]
+AgentMaxStepHeight=73.434059
+AgentMaxSlope=64.648003
+
diff --git a/EndlessVendetta/Config/DefaultGame.ini b/EndlessVendetta/Config/DefaultGame.ini
index b8c1ba99..90035037 100644
--- a/EndlessVendetta/Config/DefaultGame.ini
+++ b/EndlessVendetta/Config/DefaultGame.ini
@@ -8,3 +8,105 @@ ProjectID=F76B45A3432BFC257E879A9C2ADA0BA9
[StartupActions]
bAddPacks=True
InsertPack=(PackSource="StarterContent.upack",PackName="StarterContent")
+
+[/Script/UnrealEd.ProjectPackagingSettings]
+Build=IfProjectHasCode
+BuildConfiguration=PPBC_Development
+BuildTarget=
+LaunchOnTarget=
+StagingDirectory=(Path="")
+FullRebuild=False
+ForDistribution=False
+IncludeDebugFiles=False
+BlueprintNativizationMethod=Disabled
+bIncludeNativizedAssetsInProjectGeneration=False
+bExcludeMonolithicEngineHeadersInNativizedCode=False
+UsePakFile=True
+bUseIoStore=True
+bUseZenStore=False
+bMakeBinaryConfig=False
+bGenerateChunks=False
+bGenerateNoChunks=False
+bChunkHardReferencesOnly=False
+bForceOneChunkPerFile=False
+MaxChunkSize=0
+bBuildHttpChunkInstallData=False
+HttpChunkInstallDataDirectory=(Path="")
+WriteBackMetadataToAssetRegistry=Disabled
+bCompressed=True
+PackageCompressionFormat=Oodle
+bForceUseProjectCompressionFormatIgnoreHardwareOverride=False
+PackageAdditionalCompressionOptions=
+PackageCompressionMethod=Kraken
+PackageCompressionLevel_DebugDevelopment=4
+PackageCompressionLevel_TestShipping=5
+PackageCompressionLevel_Distribution=7
+PackageCompressionMinBytesSaved=1024
+PackageCompressionMinPercentSaved=5
+bPackageCompressionEnableDDC=False
+PackageCompressionMinSizeToConsiderDDC=0
+HttpChunkInstallDataVersion=
+IncludePrerequisites=True
+IncludeAppLocalPrerequisites=False
+bShareMaterialShaderCode=True
+bDeterministicShaderCodeOrder=False
+bSharedMaterialNativeLibraries=True
+ApplocalPrerequisitesDirectory=(Path="")
+IncludeCrashReporter=False
+InternationalizationPreset=English
+-CulturesToStage=en
++CulturesToStage=en
+LocalizationTargetCatchAllChunkId=0
+bCookAll=False
+bCookMapsOnly=False
+bSkipEditorContent=False
+bSkipMovies=False
+-IniKeyDenylist=KeyStorePassword
+-IniKeyDenylist=KeyPassword
+-IniKeyDenylist=rsa.privateexp
+-IniKeyDenylist=rsa.modulus
+-IniKeyDenylist=rsa.publicexp
+-IniKeyDenylist=aes.key
+-IniKeyDenylist=SigningPublicExponent
+-IniKeyDenylist=SigningModulus
+-IniKeyDenylist=SigningPrivateExponent
+-IniKeyDenylist=EncryptionKey
+-IniKeyDenylist=DevCenterUsername
+-IniKeyDenylist=DevCenterPassword
+-IniKeyDenylist=IOSTeamID
+-IniKeyDenylist=SigningCertificate
+-IniKeyDenylist=MobileProvision
+-IniKeyDenylist=IniKeyDenylist
+-IniKeyDenylist=IniSectionDenylist
++IniKeyDenylist=KeyStorePassword
++IniKeyDenylist=KeyPassword
++IniKeyDenylist=rsa.privateexp
++IniKeyDenylist=rsa.modulus
++IniKeyDenylist=rsa.publicexp
++IniKeyDenylist=aes.key
++IniKeyDenylist=SigningPublicExponent
++IniKeyDenylist=SigningModulus
++IniKeyDenylist=SigningPrivateExponent
++IniKeyDenylist=EncryptionKey
++IniKeyDenylist=DevCenterUsername
++IniKeyDenylist=DevCenterPassword
++IniKeyDenylist=IOSTeamID
++IniKeyDenylist=SigningCertificate
++IniKeyDenylist=MobileProvision
++IniKeyDenylist=IniKeyDenylist
++IniKeyDenylist=IniSectionDenylist
+-IniSectionDenylist=HordeStorageServers
+-IniSectionDenylist=StorageServers
++IniSectionDenylist=HordeStorageServers
++IniSectionDenylist=StorageServers
++MapsToCook=(FilePath="/Game/Levels/TrainingFacility")
++MapsToCook=(FilePath="/Game/Levels/NewMiamiTemp")
++DirectoriesToAlwaysCook=(Path="/Interchange/Functions")
++DirectoriesToAlwaysCook=(Path="/Interchange/gltf")
++DirectoriesToAlwaysCook=(Path="/Interchange/Materials")
++DirectoriesToAlwaysCook=(Path="/Interchange/Pipelines")
++DirectoriesToAlwaysCook=(Path="/Interchange/Utilities")
+PerPlatformBuildConfig=()
+PerPlatformTargetFlavorName=()
+PerPlatformBuildTarget=()
+
diff --git a/EndlessVendetta/Config/DefaultInput.ini b/EndlessVendetta/Config/DefaultInput.ini
index 1bf5f902..aec1fc5c 100644
--- a/EndlessVendetta/Config/DefaultInput.ini
+++ b/EndlessVendetta/Config/DefaultInput.ini
@@ -93,6 +93,7 @@ bEnableLegacyInputScales=True
bEnableMotionControls=True
bFilterInputByPlatformUser=False
bShouldFlushPressedKeysOnViewportFocusLost=True
+bEnableDynamicComponentInputBinding=True
bAlwaysShowTouchInterface=False
bShowConsoleOnFourFingerTap=True
bEnableGestureRecognizer=False
@@ -101,6 +102,18 @@ DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown
DefaultViewportMouseLockMode=LockOnCapture
FOVScale=0.011110
DoubleClickTime=0.200000
++ActionMappings=(ActionName="Jump",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=Gamepad_FaceButton_Bottom)
++ActionMappings=(ActionName="Jump",bShift=False,bCtrl=False,bAlt=False,bCmd=False,Key=SpaceBar)
++AxisMappings=(AxisName="Look Up / Down Gamepad",Scale=1.000000,Key=Gamepad_RightY)
++AxisMappings=(AxisName="Look Up / Down Mouse",Scale=-1.000000,Key=MouseY)
++AxisMappings=(AxisName="Move Forward / Backward",Scale=1.000000,Key=Gamepad_LeftY)
++AxisMappings=(AxisName="Move Forward / Backward",Scale=-1.000000,Key=S)
++AxisMappings=(AxisName="Move Forward / Backward",Scale=1.000000,Key=W)
++AxisMappings=(AxisName="Move Right / Left",Scale=-1.000000,Key=A)
++AxisMappings=(AxisName="Move Right / Left",Scale=1.000000,Key=D)
++AxisMappings=(AxisName="Move Right / Left",Scale=1.000000,Key=Gamepad_LeftX)
++AxisMappings=(AxisName="Turn Right / Left Gamepad",Scale=1.000000,Key=Gamepad_RightX)
++AxisMappings=(AxisName="Turn Right / Left Mouse",Scale=1.000000,Key=MouseX)
DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput
DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent
DefaultTouchInterface=/Engine/MobileResources/HUD/DefaultVirtualJoysticks.DefaultVirtualJoysticks
diff --git a/EndlessVendetta/Content/AI/Animation/ABP_EnemyAI.uasset b/EndlessVendetta/Content/AI/Animation/ABP_EnemyAI.uasset
new file mode 100644
index 00000000..8bec07af
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/ABP_EnemyAI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f250360312306fd5bc396216262309ad5bd9fd4067a8e419436c723769e7b54e
+size 667137
diff --git a/EndlessVendetta/Content/AI/Animation/Manny_Equip_Pistol_Standing.uasset b/EndlessVendetta/Content/AI/Animation/Manny_Equip_Pistol_Standing.uasset
new file mode 100644
index 00000000..8c725230
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/Manny_Equip_Pistol_Standing.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78ff71f04ca3d808134e44ac42ac50e5fbfbe39bd20925a9c5dc057eed7c75c8
+size 253530
diff --git a/EndlessVendetta/Content/AI/Animation/Manny_Idle_Pistol.uasset b/EndlessVendetta/Content/AI/Animation/Manny_Idle_Pistol.uasset
new file mode 100644
index 00000000..59173068
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/Manny_Idle_Pistol.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a39c86e55f03b75141203686a39a84c01226477ce4a6f70483fa89640a7da17
+size 738812
diff --git a/EndlessVendetta/Content/AI/Animation/Manny_Idle_Rifle_Hip.uasset b/EndlessVendetta/Content/AI/Animation/Manny_Idle_Rifle_Hip.uasset
new file mode 100644
index 00000000..1eb03ca4
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/Manny_Idle_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:99e8dcda2135c4285d89bc58060a87a30fc8a5c9bced6582e93cb08ac35f7e07
+size 738975
diff --git a/EndlessVendetta/Content/AI/Animation/Manny_Reload_Pistol.uasset b/EndlessVendetta/Content/AI/Animation/Manny_Reload_Pistol.uasset
new file mode 100644
index 00000000..07a40b21
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/Manny_Reload_Pistol.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:191804b74de404fa9340c8a6c3114d9474ad2b8963b5e95343738ef4a7ada1b9
+size 244392
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Beta_HighLimbsGeoSG3.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Beta_HighLimbsGeoSG3.uasset
new file mode 100644
index 00000000..492b9d29
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Beta_HighLimbsGeoSG3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6e9a55241aeac4511e04e6897161a8008d8a1dfd71341e810774ad01733e949
+size 8221
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Beta_Joints_MAT1.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Beta_Joints_MAT1.uasset
new file mode 100644
index 00000000..686e5aad
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Beta_Joints_MAT1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:400822c6169767919cee9931c981dc53a9a7cc324523ac35401b35ca2a757231
+size 7919
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Idle.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Idle.uasset
new file mode 100644
index 00000000..82e71dd5
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Idle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:431170d40409a034712c3a0196d64cd0ef3ca8332d10ccd12894ee0f01df9490
+size 231151
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Run.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Run.uasset
new file mode 100644
index 00000000..20813090
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Run.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f23f8175281ab23fd16b54a12aa38b7131103fce2b47975e370ef5fc936fb10
+size 101277
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Run_Aimed.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Run_Aimed.uasset
new file mode 100644
index 00000000..a4401ff8
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Run_Aimed.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42eb9aec068ad3ad3ae2d04f51859c09cb17459eeb6b1a742ab6f3ac79aad327
+size 135059
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Walk.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Walk.uasset
new file mode 100644
index 00000000..b89d0eef
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/Pistol_Walk.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:474548471b727ba03bd058bf22011525907669d857229b40e44de2db0d532592
+size 145698
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/XBot_IK.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/XBot_IK.uasset
new file mode 100644
index 00000000..c7a53a50
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/XBot_IK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52ffd7e82d9224a957ea9e1c79a9d6733ea635f9f8ea03983a88f5f877cf4418
+size 54852
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot.uasset
new file mode 100644
index 00000000..2514207e
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d3fbaa18de1f35dc2949e6fe18c333cb123540e29468796117400da3ec41cc91
+size 6285036
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Anim_Take_001.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Anim_Take_001.uasset
new file mode 100644
index 00000000..7d03227a
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Anim_Take_001.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db1cf86add9cd60cd9fbe0ecb2eb1a16abfba8092a7e2eb62c9b4c6c73e1a574
+size 292442
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Anim_mixamo_com.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Anim_mixamo_com.uasset
new file mode 100644
index 00000000..46a20968
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Anim_mixamo_com.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53d2a128a6dc2f03e23b1b33f1060c4e6669560128ddd2f3dea038bb000c57f8
+size 35048
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_PhysicsAsset.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_PhysicsAsset.uasset
new file mode 100644
index 00000000..65bddb6d
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_PhysicsAsset.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e39b18c90977b99ea9a3c0888e17a6557bfd290baab82d047a348ec27173e335
+size 29621
diff --git a/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Skeleton.uasset b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Skeleton.uasset
new file mode 100644
index 00000000..949fe466
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/PistolLocomotion/X_Bot_Skeleton.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44b05937a0e19bbeb507575e09f6c0ad356b87c0585974789e3df240752a8fd0
+size 28227
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_DeEquip_Rifle_Standing.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_DeEquip_Rifle_Standing.uasset
new file mode 100644
index 00000000..babf83b9
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_DeEquip_Rifle_Standing.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e3314315a243454d292c64d3f70068d52abcb0d08fba0d77aea6198cd458417
+size 157439
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_DeEquip_Rifle_Standing/Driving_Manny_DeEquip_Rifle_Standing.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_DeEquip_Rifle_Standing/Driving_Manny_DeEquip_Rifle_Standing.uasset
new file mode 100644
index 00000000..47349248
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_DeEquip_Rifle_Standing/Driving_Manny_DeEquip_Rifle_Standing.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a3bdc136b0821d88aad8c7a06bba6113032638aec9a8918ae1ed72b088d90a2
+size 304789
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Equip_Rifle_Standing.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Equip_Rifle_Standing.uasset
new file mode 100644
index 00000000..5951a783
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Equip_Rifle_Standing.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5383aae4cb8b17674e348409c8877be2ab24728b08a9b9e0d32a2b78c07a1a2a
+size 253557
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Fire_Rifle_Hip.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Fire_Rifle_Hip.uasset
new file mode 100644
index 00000000..0c0904fc
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Fire_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3cb4fc7883fcad5362e13fcfaf49525bdd06afc24520f6743c28b5c34ae255bf
+size 91116
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Idle_Rifle_Hip.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Idle_Rifle_Hip.uasset
new file mode 100644
index 00000000..2b127414
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Idle_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b96e59f0a1636d62bf5718372479bd9a76b19ec6537ba276b84b9802fe89ae0a
+size 738992
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Jog_Fwd_Rifle.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Jog_Fwd_Rifle.uasset
new file mode 100644
index 00000000..50aeec0a
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Jog_Fwd_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1c1b87aa6405968d4b7ebb43986496c130266f0d21e1280a00ef8d440151f9a8
+size 222610
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Reload_Rifle_Hip.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Reload_Rifle_Hip.uasset
new file mode 100644
index 00000000..3daef74d
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Reload_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d34264b45f51a7fc7372f0335d87713ae0b3557ef888156bcc0fe9d353e2716
+size 300032
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Sprint_Fwd_Rifle.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Sprint_Fwd_Rifle.uasset
new file mode 100644
index 00000000..71f54f29
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/Manny_Sprint_Fwd_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6fb29a72238dd154f7f4b200a91978a918b393bdbdc82b3fffca4df693e1e6d8
+size 169140
diff --git a/EndlessVendetta/Content/AI/Animation/RifleLocomotion/RifleWalkRun.uasset b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/RifleWalkRun.uasset
new file mode 100644
index 00000000..ff45589c
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Animation/RifleLocomotion/RifleWalkRun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36ce2f86fc6cf21eae00c7c594e2943cdabfbbf60553e6276f1dc05ec7215300
+size 9109
diff --git a/EndlessVendetta/Content/AI/Companion/Generic/BB_GenericCompanion.uasset b/EndlessVendetta/Content/AI/Companion/Generic/BB_GenericCompanion.uasset
new file mode 100644
index 00000000..13d036c4
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Companion/Generic/BB_GenericCompanion.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20197ccd89d5871cd395eac1941f9d29344e76e457d5ebd1200fd271f2ced360
+size 2627
diff --git a/EndlessVendetta/Content/AI/Companion/Generic/BT_GenericCompanion.uasset b/EndlessVendetta/Content/AI/Companion/Generic/BT_GenericCompanion.uasset
new file mode 100644
index 00000000..6fb83025
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Companion/Generic/BT_GenericCompanion.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a51c6e09ee9b960ab6f095ef348e94881cf58c2594520303790718cdbd2b12d
+size 10480
diff --git a/EndlessVendetta/Content/AI/Companion/Generic/CompanionCharacter.uasset b/EndlessVendetta/Content/AI/Companion/Generic/CompanionCharacter.uasset
new file mode 100644
index 00000000..756cb54f
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Companion/Generic/CompanionCharacter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81819e2798f36f0fba8aa19cc63f66025941404eef5b0bab1cce20b9fc9bc63e
+size 33153
diff --git a/EndlessVendetta/Content/AI/Companion/Generic/EQS_FindCoverNearPlayer.uasset b/EndlessVendetta/Content/AI/Companion/Generic/EQS_FindCoverNearPlayer.uasset
new file mode 100644
index 00000000..6f4e7c66
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Companion/Generic/EQS_FindCoverNearPlayer.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c7b6be5f989ea63aac50260d68dd846abb7a4a421a8d3fa81d193204c6514c68
+size 24886
diff --git a/EndlessVendetta/Content/AI/EQSB_Enemy.uasset b/EndlessVendetta/Content/AI/EQSB_Enemy.uasset
new file mode 100644
index 00000000..39744dd3
--- /dev/null
+++ b/EndlessVendetta/Content/AI/EQSB_Enemy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9fafb5ea724311d8a706eb8f12493e004ab343735895a80be1811e2caa95f64
+size 18966
diff --git a/EndlessVendetta/Content/AI/EQSB_Player.uasset b/EndlessVendetta/Content/AI/EQSB_Player.uasset
new file mode 100644
index 00000000..65abdba4
--- /dev/null
+++ b/EndlessVendetta/Content/AI/EQSB_Player.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:92ebb9e1566806ef68b6d274fa0a1ebd629b71d24c87c36024db0720213cdc8b
+size 17638
diff --git a/EndlessVendetta/Content/AI/EQS_Test.uasset b/EndlessVendetta/Content/AI/EQS_Test.uasset
new file mode 100644
index 00000000..d6184a2f
--- /dev/null
+++ b/EndlessVendetta/Content/AI/EQS_Test.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d7fcae1638292db5530edb7c1a864ecfedc45f339b8bbf85f86a78754f1ac4a
+size 24150
diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BB_BasicEnemy.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BB_BasicEnemy.uasset
new file mode 100644
index 00000000..6d6bc456
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Enemy/Basic/BB_BasicEnemy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1aff4919ba640ff5f41aabd18e3f45977e9d63d434f7e93cdab5d84b3b7df8f6
+size 6288
diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BP_AIControlHub.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BP_AIControlHub.uasset
new file mode 100644
index 00000000..22898b43
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Enemy/Basic/BP_AIControlHub.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ef50faf065f81655d520a752397bdbba2865e4c96e537947d4cdd3c78508f1e6
+size 21271
diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BP_BasicEnemyCharacter.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BP_BasicEnemyCharacter.uasset
new file mode 100644
index 00000000..0f87096b
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Enemy/Basic/BP_BasicEnemyCharacter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:346694815d27351a11689716978cc2e0ab8c95dd696d0424da732423e1ea0cec
+size 88074
diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BP_PatrolPath.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BP_PatrolPath.uasset
new file mode 100644
index 00000000..6f508524
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Enemy/Basic/BP_PatrolPath.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:29562c22635b352e858f43519d92020839358b09afd4a5138f4eba660bd10143
+size 23184
diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset
new file mode 100644
index 00000000..f96b7e46
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Enemy/Basic/BT_BasicEnemy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:949609799d11457e6150250a14eb15ebcf32753bc180188cd508a395ad4e68ed
+size 69012
diff --git a/EndlessVendetta/Content/AI/Enemy/Basic/EQS_EnemyFindCover.uasset b/EndlessVendetta/Content/AI/Enemy/Basic/EQS_EnemyFindCover.uasset
new file mode 100644
index 00000000..ae3f1455
--- /dev/null
+++ b/EndlessVendetta/Content/AI/Enemy/Basic/EQS_EnemyFindCover.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e53cfdf2c62f71a8e9cf4533df7a333c33ddec1b9b830b7c85434c2dad50b3c
+size 11760
diff --git a/EndlessVendetta/Content/AnimStarterPack/Aim_Space_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Aim_Space_Hip.uasset
new file mode 100644
index 00000000..2dbdd0fa
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Aim_Space_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2c16e6eace2fc8327df2fcbc7cf54c50a5161dcdb00375a91623cdf6cbc24ae
+size 188546
diff --git a/EndlessVendetta/Content/AnimStarterPack/Aim_Space_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Aim_Space_Ironsights.uasset
new file mode 100644
index 00000000..de35bc98
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Aim_Space_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b7bae25f911f397715577099f1737e20c5ef0eeb705c32316ed4139117e95f4
+size 188243
diff --git a/EndlessVendetta/Content/AnimStarterPack/BS_CrouchWalk.uasset b/EndlessVendetta/Content/AnimStarterPack/BS_CrouchWalk.uasset
new file mode 100644
index 00000000..a8f156d6
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/BS_CrouchWalk.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ff0b12b2467d3ba0b80336401662b6906e4844b2350a436a17d78e0e9cd6265
+size 103283
diff --git a/EndlessVendetta/Content/AnimStarterPack/BS_Jog.uasset b/EndlessVendetta/Content/AnimStarterPack/BS_Jog.uasset
new file mode 100644
index 00000000..9cdb8ba4
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/BS_Jog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2ea9fa690d60831caffcafd82d994c3f60baa442404951c86c491120a0f81489
+size 101424
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Idle_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Idle_Rifle_Hip.uasset
new file mode 100644
index 00000000..1f00a491
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Idle_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:69a34d7fa650f93fa067e010b3acd9cbef8374e17307d4de7603695f7f27bc4d
+size 274931
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Idle_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Idle_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..fb752aff
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Idle_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a61ee8829cee45361ee69296563272b282f60ce542dfd2155ad2d97662c9ff6b
+size 273362
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Bwd_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Bwd_Rifle_Hip.uasset
new file mode 100644
index 00000000..3aaefdbf
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Bwd_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:160bbfe193cf1d3b3a3969488e015750fb52597408c9b1aec1054c80c10282c6
+size 164111
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Bwd_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Bwd_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..a50a2efa
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Bwd_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a839e3356baa6a299feba099a1a963ea18ac19e02fdb94de8e3b15f8fd9d2b71
+size 162475
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Fwd_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Fwd_Rifle_Hip.uasset
new file mode 100644
index 00000000..0bbeb8dd
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Fwd_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:451b09121c8b153e8c037db4aaff096c827df4b4bf579684161463bb95e6ce76
+size 162779
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Fwd_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Fwd_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..373e3ea0
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Fwd_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c4f95ed8fb9042b8ac6d7c2bbb6849c47952b5ce278ef6b80bb4e5d0ab143ad
+size 161486
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Lt_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Lt_Rifle_Hip.uasset
new file mode 100644
index 00000000..096d305c
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Lt_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:684a76e4bc017b76c4a2d152f3cf4408a037e6c541494ab044d2c276c0222dad
+size 162832
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Lt_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Lt_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..6bed8ac7
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Lt_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4b17ad64131d8655dff3bf0f6d943e83c906f3b71adc44a7b498fbe6a3eec23
+size 161801
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Rt_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Rt_Rifle_Hip.uasset
new file mode 100644
index 00000000..9d554411
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Rt_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e0543e60def9006f8ea84b1392c7761aaca48af42ce8d209d3a8fe7a4d40cdd
+size 163011
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Rt_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Rt_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..c709bb7e
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_Walk_Rt_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f153046369c877511b96de889d75989228c7320a7580d282c6cc7d28d1341b0f
+size 161951
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_to_Stand_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_to_Stand_Rifle_Hip.uasset
new file mode 100644
index 00000000..7471a03d
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_to_Stand_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d81b911926f77953e6b46cfde3e2ef3be13c6edad2dff8ec0a1bcad0812db1cc
+size 124784
diff --git a/EndlessVendetta/Content/AnimStarterPack/Crouch_to_Stand_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Crouch_to_Stand_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..4a202a91
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Crouch_to_Stand_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d05d2af612368838060c2cc5cfc694b7df6103467b42a984848b3939b278178e
+size 123072
diff --git a/EndlessVendetta/Content/AnimStarterPack/Death_1.uasset b/EndlessVendetta/Content/AnimStarterPack/Death_1.uasset
new file mode 100644
index 00000000..9296967d
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Death_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a409188568d20a3f97ad3ee1d72b55f9a32e21de0b39d08e13261e891bf1f2c
+size 181646
diff --git a/EndlessVendetta/Content/AnimStarterPack/Death_2.uasset b/EndlessVendetta/Content/AnimStarterPack/Death_2.uasset
new file mode 100644
index 00000000..c8c79647
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Death_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c2bcdc686e0064034395caa24788e1f68b53e9f2513debcc424bb6ecb8a0243
+size 178337
diff --git a/EndlessVendetta/Content/AnimStarterPack/Death_3.uasset b/EndlessVendetta/Content/AnimStarterPack/Death_3.uasset
new file mode 100644
index 00000000..8f8ec341
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Death_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5a1136840a33b85b355882f3f1a9c1fe72e5238cd01971ea309236de310dd687
+size 199405
diff --git a/EndlessVendetta/Content/AnimStarterPack/Death_Ironsights_1.uasset b/EndlessVendetta/Content/AnimStarterPack/Death_Ironsights_1.uasset
new file mode 100644
index 00000000..9415085d
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Death_Ironsights_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d795e63d710e58b16dcff560305530eff5b23f1985a16d82133743d619ef28d2
+size 195153
diff --git a/EndlessVendetta/Content/AnimStarterPack/Death_Ironsights_2.uasset b/EndlessVendetta/Content/AnimStarterPack/Death_Ironsights_2.uasset
new file mode 100644
index 00000000..cbb29b7a
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Death_Ironsights_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eb4cfbc5804df5527f6b39289e9629cc42ed461a5daa3566a885f8c46901da31
+size 177351
diff --git a/EndlessVendetta/Content/AnimStarterPack/Equip_Pistol_Standing.uasset b/EndlessVendetta/Content/AnimStarterPack/Equip_Pistol_Standing.uasset
new file mode 100644
index 00000000..4540ada8
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Equip_Pistol_Standing.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f71b8e27bb0bf658808e30cf1d374fe980d695e4c23f4d720350e01714f5bfc
+size 195932
diff --git a/EndlessVendetta/Content/AnimStarterPack/Equip_Rifle_Standing.uasset b/EndlessVendetta/Content/AnimStarterPack/Equip_Rifle_Standing.uasset
new file mode 100644
index 00000000..ddd6e183
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Equip_Rifle_Standing.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce1901a59b4c8263a75c96c7a59db1aaf6d41e0a6e810726930b69e43f531f35
+size 193980
diff --git a/EndlessVendetta/Content/AnimStarterPack/Fire_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Fire_Rifle_Hip.uasset
new file mode 100644
index 00000000..7a5dd2c6
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Fire_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fecee6bc8acfcb9504d8263e76205e08cda10811e0061d2510c5ca690eaaaac8
+size 112330
diff --git a/EndlessVendetta/Content/AnimStarterPack/Fire_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Fire_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..44543138
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Fire_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9dc6e9aaf143d9899babd94f15b2fe8844f7b9263691991fc4041ba2141de3e5
+size 111380
diff --git a/EndlessVendetta/Content/AnimStarterPack/Fire_Shotgun_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Fire_Shotgun_Hip.uasset
new file mode 100644
index 00000000..dd42cbe0
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Fire_Shotgun_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b4e014e4b8e6bd8d4c09d79ed000c522ee2f5aabf1771d0dfbc0a603f9562f76
+size 144387
diff --git a/EndlessVendetta/Content/AnimStarterPack/Fire_Shotgun_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Fire_Shotgun_Ironsights.uasset
new file mode 100644
index 00000000..4dca0198
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Fire_Shotgun_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d3943744c98170bb5a3717e016c610a432e77cda94adcee85c64df4159bc6563
+size 141701
diff --git a/EndlessVendetta/Content/AnimStarterPack/Hit_React_1.uasset b/EndlessVendetta/Content/AnimStarterPack/Hit_React_1.uasset
new file mode 100644
index 00000000..0de7d83e
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Hit_React_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a067fa97220ca3a7f56199f6b58ddf888f66e5359694ffcc64eef7fb7e321148
+size 132820
diff --git a/EndlessVendetta/Content/AnimStarterPack/Hit_React_2.uasset b/EndlessVendetta/Content/AnimStarterPack/Hit_React_2.uasset
new file mode 100644
index 00000000..ef0abe31
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Hit_React_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc51b2d6721967b118bccc1031191e22633bab2987a004a6a873163f8e130a11
+size 133658
diff --git a/EndlessVendetta/Content/AnimStarterPack/Hit_React_3.uasset b/EndlessVendetta/Content/AnimStarterPack/Hit_React_3.uasset
new file mode 100644
index 00000000..001604f8
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Hit_React_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:841411f30371cca90309c453e77030eac9d0c79ece652b12a0292606d2a8c2f8
+size 133138
diff --git a/EndlessVendetta/Content/AnimStarterPack/Hit_React_4.uasset b/EndlessVendetta/Content/AnimStarterPack/Hit_React_4.uasset
new file mode 100644
index 00000000..7b6227f9
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Hit_React_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba62f4a8c2e151da1b3a7a161c03f09027de537dd6c1f0a218985fee57a367b5
+size 133343
diff --git a/EndlessVendetta/Content/AnimStarterPack/Idle_Pistol.uasset b/EndlessVendetta/Content/AnimStarterPack/Idle_Pistol.uasset
new file mode 100644
index 00000000..1b4a59b0
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Idle_Pistol.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3b2e3a0279ac45993ee978461ea6018cd7590818dc5be7c6f76b441150bd272
+size 276217
diff --git a/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip.uasset
new file mode 100644
index 00000000..41c7ab69
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c10957e249c797e2c392394fb6d8b506859e8dd0f52e41e871a5a46fa2c3757b
+size 277628
diff --git a/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip_Break1.uasset b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip_Break1.uasset
new file mode 100644
index 00000000..36c77875
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip_Break1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:99b18185d81daa06179666ba694e283447327f96e1addde7dd3bdad16df91bd1
+size 250239
diff --git a/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip_Break2.uasset b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip_Break2.uasset
new file mode 100644
index 00000000..b42534bf
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Hip_Break2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7585cb067b2ec15c54111fe07ab3643b8b4187837fcd6c6ca349ba86a106b9ac
+size 270515
diff --git a/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..48504af3
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Idle_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf32e388be17f181b63f9a716498250554399e397ee674b7067b4944ef1b97d1
+size 276375
diff --git a/EndlessVendetta/Content/AnimStarterPack/Jog_Bwd_Rifle.uasset b/EndlessVendetta/Content/AnimStarterPack/Jog_Bwd_Rifle.uasset
new file mode 100644
index 00000000..81c27a3f
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Jog_Bwd_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d48f2e65466394884c1ea37cea6ea3932b42d7427031e02af9284fa6b3de322c
+size 149391
diff --git a/EndlessVendetta/Content/AnimStarterPack/Jog_Fwd_Rifle.uasset b/EndlessVendetta/Content/AnimStarterPack/Jog_Fwd_Rifle.uasset
new file mode 100644
index 00000000..8d76e5cb
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Jog_Fwd_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5da5653211aea7a780411b8708cba355f7b53e8238605fd1d2236ddae7282e4
+size 147577
diff --git a/EndlessVendetta/Content/AnimStarterPack/Jog_Lt_Rifle.uasset b/EndlessVendetta/Content/AnimStarterPack/Jog_Lt_Rifle.uasset
new file mode 100644
index 00000000..49b334e1
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Jog_Lt_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e84008fc6f5098cd8f7630e8c5d3e488e160f1c0c3b3e4acfc3bc2601d1e2b5e
+size 141543
diff --git a/EndlessVendetta/Content/AnimStarterPack/Jog_Rt_Rifle.uasset b/EndlessVendetta/Content/AnimStarterPack/Jog_Rt_Rifle.uasset
new file mode 100644
index 00000000..3e10797a
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Jog_Rt_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9eb8c252b7588e55e8a8e7e7dfaba994b8e34adfaecc791c0f4a7a6ac827c34f
+size 149973
diff --git a/EndlessVendetta/Content/AnimStarterPack/Jump_From_Jog.uasset b/EndlessVendetta/Content/AnimStarterPack/Jump_From_Jog.uasset
new file mode 100644
index 00000000..c3d89f2f
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Jump_From_Jog.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca0a9b84f1480830b0af36131a398c40c3f9e8e9af7d5e504414409562eda1c6
+size 128514
diff --git a/EndlessVendetta/Content/AnimStarterPack/Jump_From_Stand.uasset b/EndlessVendetta/Content/AnimStarterPack/Jump_From_Stand.uasset
new file mode 100644
index 00000000..96e03772
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Jump_From_Stand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1f0f83dd792890d9d570953c876b04b246c990eec5db6dd0927be53ca3197e0
+size 142552
diff --git a/EndlessVendetta/Content/AnimStarterPack/Jump_From_Stand_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Jump_From_Stand_Ironsights.uasset
new file mode 100644
index 00000000..46ef9eff
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Jump_From_Stand_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:384b0fb456ff269192ba0511b67900bab17c15788d38c7c895309f2563456ea0
+size 142359
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_Death_1.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_Death_1.uasset
new file mode 100644
index 00000000..9a36ce16
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_Death_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:147e8c24a64c3686c73a53f8f1956017561a169cf05526416e481baccb7d3354
+size 121931
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_Death_2.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_Death_2.uasset
new file mode 100644
index 00000000..df9e2051
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_Death_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:16f6a8538a6228bc60791693af025aa25d962f24df2448490cbbde7020a4b280
+size 196912
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_Fire_1.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_Fire_1.uasset
new file mode 100644
index 00000000..fc4b559a
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_Fire_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:707a955e73dda4b6e6b9d6a6336395ccb050eafcad778d2273d0bd8fb87b1dda
+size 99855
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_Fire_2.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_Fire_2.uasset
new file mode 100644
index 00000000..ad9c189e
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_Fire_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf39f77398a9f605de2a4f508dc0f6b39ab4ea7c2d5038a7189eb6f5f0ed6ae0
+size 100442
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_Idle.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_Idle.uasset
new file mode 100644
index 00000000..3668a53a
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_Idle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:885f88eb6499754ea3d141b3fa142a0486953292ceda229f2458fd284926e688
+size 336195
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_Reload_Rifle.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_Reload_Rifle.uasset
new file mode 100644
index 00000000..b59a8e70
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_Reload_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53fdab9e9454038df1bb90100ef815f01f42e5dc5a96496242864d18ff917271
+size 239624
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_Reload_Shotgun.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_Reload_Shotgun.uasset
new file mode 100644
index 00000000..91b898a8
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_Reload_Shotgun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0709c07b3e348b8b53464345c2c33207b6e086197aa62451760270effe267eaf
+size 282360
diff --git a/EndlessVendetta/Content/AnimStarterPack/Prone_To_Stand.uasset b/EndlessVendetta/Content/AnimStarterPack/Prone_To_Stand.uasset
new file mode 100644
index 00000000..1891effe
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Prone_To_Stand.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3c6d1837237e2cdf2681bcaa4455990c0cde1eac0ac817eae1a5560a6f2eb069
+size 161933
diff --git a/EndlessVendetta/Content/AnimStarterPack/Reload_Pistol.uasset b/EndlessVendetta/Content/AnimStarterPack/Reload_Pistol.uasset
new file mode 100644
index 00000000..78b2f801
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Reload_Pistol.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:340d0cf6315a946ab0490f0edb27a6715f0d02453df1233981a36adc9c27ed97
+size 178832
diff --git a/EndlessVendetta/Content/AnimStarterPack/Reload_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Reload_Rifle_Hip.uasset
new file mode 100644
index 00000000..d1b2f9de
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Reload_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1a0e8d0c4f59bd262699f273af214ed43d0a2a3e6cb6c923ca59e2c8da70f8bf
+size 201655
diff --git a/EndlessVendetta/Content/AnimStarterPack/Reload_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Reload_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..0f10a18c
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Reload_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c7020c92423742122ae2d7d3b28c31e8c4e438d48c817caa8c0cb0b568d92a3
+size 202183
diff --git a/EndlessVendetta/Content/AnimStarterPack/Reload_Shotgun_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Reload_Shotgun_Hip.uasset
new file mode 100644
index 00000000..8bb0486c
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Reload_Shotgun_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3475283122e464da7b204544bcdc25da55576bc2a1386958761ce9a66f1b6290
+size 294511
diff --git a/EndlessVendetta/Content/AnimStarterPack/Reload_Shotgun_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Reload_Shotgun_Ironsights.uasset
new file mode 100644
index 00000000..b89e21c5
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Reload_Shotgun_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:611c363a51b13fd38a4b281ca710c80a54a199a6339545ac0d13eaef58cdf381
+size 293729
diff --git a/EndlessVendetta/Content/AnimStarterPack/Showcase.umap b/EndlessVendetta/Content/AnimStarterPack/Showcase.umap
new file mode 100644
index 00000000..11a6abeb
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Showcase.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95581ef8fd87b23fd7185a0e6acbd380b19a212a5c65c7d1b336f73026d5120b
+size 585213
diff --git a/EndlessVendetta/Content/AnimStarterPack/Sprint_Fwd_Rifle.uasset b/EndlessVendetta/Content/AnimStarterPack/Sprint_Fwd_Rifle.uasset
new file mode 100644
index 00000000..4b52199a
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Sprint_Fwd_Rifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57e70cbbf2bef3836da8a7a6bfba21a241665d23b1bc15bb4afa9fdf390553f5
+size 150598
diff --git a/EndlessVendetta/Content/AnimStarterPack/Stand_To_Prone.uasset b/EndlessVendetta/Content/AnimStarterPack/Stand_To_Prone.uasset
new file mode 100644
index 00000000..4381d652
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Stand_To_Prone.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e655c0c2591aca79a102dbefa6a5601842ace7c50bc5d95754759a2d3996f35
+size 168564
diff --git a/EndlessVendetta/Content/AnimStarterPack/Stand_to_Crouch_Rifle_Hip.uasset b/EndlessVendetta/Content/AnimStarterPack/Stand_to_Crouch_Rifle_Hip.uasset
new file mode 100644
index 00000000..f5967c97
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Stand_to_Crouch_Rifle_Hip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bfaa7ffa204083bc240b6206cf29a65db644286cede481d9fc7ec925c3b0192
+size 127675
diff --git a/EndlessVendetta/Content/AnimStarterPack/Stand_to_Crouch_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Stand_to_Crouch_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..37eb4c82
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Stand_to_Crouch_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:804097d045f7d027f079b131c69b975e9754d7400fab2fb564f2a8a293e0a452
+size 127794
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4ASP_HeroTPP_AnimBlueprint.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4ASP_HeroTPP_AnimBlueprint.uasset
new file mode 100644
index 00000000..3e1a3f08
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4ASP_HeroTPP_AnimBlueprint.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe65460d053b0435b1dbc73806b568700d43dae34356262f59b9ae16e29005bd
+size 667920
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/M_UE4Man_Body.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/M_UE4Man_Body.uasset
new file mode 100644
index 00000000..8f56c584
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/M_UE4Man_Body.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e7dc2aac13bc396d864d48966ced83f016de6252ac57b8459897a35ecd25edc
+size 136551
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/M_UE4Man_ChestLogo.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/M_UE4Man_ChestLogo.uasset
new file mode 100644
index 00000000..67593ff2
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/M_UE4Man_ChestLogo.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8801d51f97a4dfc56658c363eb0ed5e130477ee4ac557747cfa05296266c222b
+size 93350
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset
new file mode 100644
index 00000000..11dc0f10
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_GlossyBlack_Latex_UE4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95f2c723b40140562c0444e4d2f70733a258456b2a0262a7336d0e5e3791aa45
+size 102542
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset
new file mode 100644
index 00000000..bb28da9e
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72bda1590e3bfcad57591bf50b8d8ae097c4f850fb52e0c23a4c2b6840b90760
+size 98451
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset
new file mode 100644
index 00000000..c96d31e4
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_Plastic_Shiny_Beige_LOGO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8d10cd7b5142d353af6bd24570012579f3f1beb308963bc98e0fcdc3f901c77e
+size 99691
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset
new file mode 100644
index 00000000..630e7511
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/ML_SoftMetal_UE4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5cb52705080f12d988a392e714b28dc70ec8b822fa5f8e46fa8eef9165f9f9c5
+size 102371
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Aluminum01.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Aluminum01.uasset
new file mode 100644
index 00000000..cdd5192c
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Aluminum01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45e7b43dea85d3711ef6808fad9bb858e8f3f9a0d9826a8bf09021e1fb3ea815
+size 434410
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset
new file mode 100644
index 00000000..ad40a411
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Aluminum01_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a262e93cfdd3be852153233ee2c2aedb77d43c3e0b50829ebb6bf0f68a6651d5
+size 405256
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset
new file mode 100644
index 00000000..c8689d67
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac61a9228475e0cf244927c3d34de1fa13a7f780484f6f2b5e7d5bd1ff4dba68
+size 470771
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset
new file mode 100644
index 00000000..080f1b97
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Materials/MaterialLayers/T_ML_Rubber_Blue_01_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:133271aa7e759618764af75f8ceec83f9bf54796bf7039cce6973e6998b2f9e6
+size 362117
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin.uasset
new file mode 100644
index 00000000..73286950
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e559f8b1e8cb28d67209da38221aaeab6c11b84f923adca0c7ed7d35f194c46
+size 3774704
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin_PhysicsAsset.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin_PhysicsAsset.uasset
new file mode 100644
index 00000000..4ab164c0
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/SK_Mannequin_PhysicsAsset.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04d2c0af2f6704b68837b3b319446ed434ee46883c1b941f830fdebb88b3ab9b
+size 26064
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/UE4_Mannequin_Skeleton.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/UE4_Mannequin_Skeleton.uasset
new file mode 100644
index 00000000..1c59f65d
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Mesh/UE4_Mannequin_Skeleton.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:761f089534b0ab816720025e598c7bd5b157a41ae7b95b70f14b7c8b1d915a2f
+size 11140
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4Man_Logo_N.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4Man_Logo_N.uasset
new file mode 100644
index 00000000..c4b62f0d
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4Man_Logo_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b43184512611058b0346db0fbfe0a462a6907fa633fdda1c5347e357fc6ab806
+size 161770
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_LOGO_CARD.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_LOGO_CARD.uasset
new file mode 100644
index 00000000..faad1e83
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_LOGO_CARD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f80139b3e5b3ca64233cfc172a67cf81fc664f8d1a992328ea30dee940cc1cb2
+size 95173
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin_MAT_MASKA.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin_MAT_MASKA.uasset
new file mode 100644
index 00000000..62972963
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin_MAT_MASKA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8c7a994e8f33fad29cc5b487b443fd63e0d7fdccba4e25ec767bd37e61062ff
+size 274906
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin__normals.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin__normals.uasset
new file mode 100644
index 00000000..e3787d7f
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin__normals.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d438f828c2bbc041ba3a24c6dc74ce2cd64c2c86fabae1865dde87750c3872a
+size 5481078
diff --git a/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin_occlusion_Mobile.uasset b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin_occlusion_Mobile.uasset
new file mode 100644
index 00000000..d06bddea
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/UE4_Mannequin/Textures/UE4_Mannequin_occlusion_Mobile.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:34f645adb6574f4959b783854c7e5ab4058b481150886637cd2a93de355a4d9e
+size 362358
diff --git a/EndlessVendetta/Content/AnimStarterPack/Ue4ASP_Character.uasset b/EndlessVendetta/Content/AnimStarterPack/Ue4ASP_Character.uasset
new file mode 100644
index 00000000..2a128a1d
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Ue4ASP_Character.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8873b80d47adf2b3d83ea7bec65a2144d85cfbbc73ee811cf2a0b81e3edfbb32
+size 295665
diff --git a/EndlessVendetta/Content/AnimStarterPack/Walk_Bwd_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Walk_Bwd_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..62d5f1de
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Walk_Bwd_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5698df9de8f4738fa3807319c167ff6c68d4fc36385d0adc5f099e9d16847744
+size 161122
diff --git a/EndlessVendetta/Content/AnimStarterPack/Walk_Fwd_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Walk_Fwd_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..00494420
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Walk_Fwd_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f4a78f3a7a995b2199b46abfd72e3f4d2268e0b8c3a9b1df3f7df28a3caa6109
+size 158106
diff --git a/EndlessVendetta/Content/AnimStarterPack/Walk_Lt_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Walk_Lt_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..4096a6b7
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Walk_Lt_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff97db22bc1c7191cfa4028d478ce392d56ad093d9a3da9de01d112830684845
+size 159464
diff --git a/EndlessVendetta/Content/AnimStarterPack/Walk_Rt_Rifle_Ironsights.uasset b/EndlessVendetta/Content/AnimStarterPack/Walk_Rt_Rifle_Ironsights.uasset
new file mode 100644
index 00000000..4d9d0a33
--- /dev/null
+++ b/EndlessVendetta/Content/AnimStarterPack/Walk_Rt_Rifle_Ironsights.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05aede850c4a0e64e844434acd82eec224482ea69e371edc32bff7e7ae34da87
+size 160150
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/M_placeholder.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/M_placeholder.uasset
index 82165576..dda6e49e 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/M_placeholder.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/M_placeholder.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cb91e2e9e338cd78311f4464de3645ac1bba08117715942aaa53e20f702d9679
-size 7597
+oid sha256:f65a6858e0ed048505c2974da8413c4f72db355ffd86b755a0f331ba256d745f
+size 7668
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Bed01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Bed01.uasset
index b7a8e022..8dfab0c1 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Bed01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Bed01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6fcb43487faf257a1d6bd07ee96a648ca53488eaad3edd5a3b3ab8c07e3ae536
-size 17747
+oid sha256:78649458180a4491b40592e6a9a9e8447adea855c1cd85f81787ed7fe5969280
+size 17909
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Desk01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Desk01.uasset
index d74bf6c6..2cf30861 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Desk01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Desk01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:a91f4e1494cb343bf7ab5c80888a3a1d89fe21198ef5280482273eb8d9ba7530
-size 17924
+oid sha256:4fa2682740cc099fe7bbb329a3948b067f131bfb383ab0549b8d3d9d1ef5ba31
+size 18087
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_SmallTable01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_SmallTable01.uasset
index 58ef35d5..5122e1e2 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_SmallTable01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_SmallTable01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:24ef74b38ec69cbe179147bd5ac8a53362dfe3169b4d83ebe0ef0d1848f743cd
-size 17243
+oid sha256:65c189f60265e279660472e3aabd26eb5023432f3e5b3d96849f50b142dcd2f1
+size 17434
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Wardrobe01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Wardrobe01.uasset
index 8cec9dc1..199f6a07 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Wardrobe01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/Sm_Wardrobe01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:279be05fb4b4a84ff360ec933a43ef2791643c8840c724691ea6976ae9d4856a
-size 20162
+oid sha256:a0f5675deaee197aaf1285dc476c5e79bd1869f7ee0849730d6b60c082f5d4b6
+size 20300
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_01.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_01.uasset
index c3247c06..312d3df1 100644
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_01.uasset
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/ceiling_light_01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:3a16b5ac8a123ccdef03e84e7a8c157105ac0555025cd255bd0fc434b4929174
-size 77971
+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 48941aac..131c8fd3 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:0a5db94e42c4f95c46317c8c0d33f9e703e2663e913256b53639f35a73579e65
-size 60093
+oid sha256:d9d4e019da7d00128cde856d843ae897f2b736df10062104a1ac5affb9ed9514
+size 60674
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lamp_01_low.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lamp_01_low.uasset
new file mode 100644
index 00000000..73cd72fc
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lamp_01_low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:653ee052d66a21a30c5bb07760842ea64b9fbbe411002d66f0e547ef6541ee51
+size 147847
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
new file mode 100644
index 00000000..3971eb7b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_blue.uasset
@@ -0,0 +1,3 @@
+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_or.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_or.uasset
deleted file mode 100644
index 47e782f6..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_or.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6e9799da9d3e9a9354a2d3d932e07a22a16d39621240b0a0433c26959a2f9b48
-size 13493
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
new file mode 100644
index 00000000..83901062
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_orange.uasset
@@ -0,0 +1,3 @@
+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_ye.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_ye.uasset
deleted file mode 100644
index 61a3c050..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_ye.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1e3777c983b68523e9aacf1882fa9f72ac87396cd57c5d1335b17fd52630c363
-size 13456
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
new file mode 100644
index 00000000..60ec8b55
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_01/ceiling_light_01_yellow.uasset
@@ -0,0 +1,3 @@
+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__or.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02__or.uasset
deleted file mode 100644
index a3559f09..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02__or.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:06d7604fc47f789a68caf62e5e723fee0eed791eff11ecde616e08d80a8f483e
-size 12921
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
new file mode 100644
index 00000000..8602e81d
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_blue.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..b1382af5
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c92bebc7db09fbb27c03761f6af0dd62ce8ca17452f00bbe0cabd323d2ee445
+size 12940
diff --git a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_ye.uasset b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_ye.uasset
deleted file mode 100644
index 83bef317..00000000
--- a/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_ye.uasset
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:31c3bd49836535919ddcc5a500b5bceb7b1b1b1fcb340971c7d8f299582c0c51
-size 13440
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
new file mode 100644
index 00000000..ae5752d4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/ceiling_light_02/ceiling_light_02_yellow.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..87cad22b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Emissive.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..7a389d79
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_Normal.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..10d0d518
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..bc1bc696
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_blue.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..885a0e66
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_low_bl_BaseColor.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..80cefc50
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_or_BaseColor.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..dc4e5627
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9fcef7a201c488bc9cd8f9813a4cfc3fa3676a208165a89b2283535f7ff1791
+size 14872
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
new file mode 100644
index 00000000..66fb8b40
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_ye_BaseColor.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..2282d53b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/lamp_01/lamp_01_yellow.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..9a6097b4
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Emissive.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..bd829f1d
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_Normal.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..578589cb
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_OcclusionRoughnessMetallic.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..bcc4bfcc
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..41f17095
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_blue.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..97ecaa66
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..55d2c399
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2295e68c48bd267787b230f5c29c8a0ce8086be23137fad2991c1c271512b305
+size 13778
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
new file mode 100644
index 00000000..33c8ec13
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..a83c116b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_01/wall_light_01_yellow.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..494d99c3
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_blue.uasset
@@ -0,0 +1,3 @@
+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
new file mode 100644
index 00000000..c55beb4f
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..e80bc95b
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..31ad84d7
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..30d8b7cd
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..c75d6471
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/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: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
new file mode 100644
index 00000000..ca007ade
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_orange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:07348e8c5c9dea07f9098309510423d0e3b4d8ffa0127dbc4abbb11384c75244
+size 12531
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
new file mode 100644
index 00000000..6566b537
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/lights_textures/wall_light_02/wall_light_02_yellow.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b50508c266304da631863c88ebcc1de70d3b4eb203d17177771cd131d2b2503
+size 12130
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
new file mode 100644
index 00000000..b626c899
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_01_low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ea23db589feffd0755395c58370215e3743692b84621cf8369317642e8f67c7
+size 67451
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
new file mode 100644
index 00000000..8b22913a
--- /dev/null
+++ b/EndlessVendetta/Content/Assets/Objects/Tutorial-Level/wall_light_02_low.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:347ed2add1339ad754a3eba4dfd91a54c2198eae315718ae100bc93e67b0a0d3
+size 39154
diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector.uasset
new file mode 100644
index 00000000..1b888d58
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/BountyDirector.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb8e5904b3c1342d8d6620e5d8d57475d1c42ad4bd07d3f4854238eb7b3b2775
+size 2478
diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/BountyDirector.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/BountyDirector.uasset
new file mode 100644
index 00000000..2bf1b703
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/BountyDirector/BountyDirector.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cb434bd86f5440300a97827c0043b25f804e7648ac189615a90fb0ba61978060
+size 22149
diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.jpg b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.jpg
new file mode 100644
index 00000000..692b7017
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:624ea13a3e1e8d4559e91aa407830dcabd703fb21a7a9a3ab1f6bd26637463db
+size 238472
diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset
new file mode 100644
index 00000000..4299270e
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/BountyDirector/PC_Background.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc51145854d6759b4f32c669b1cbed0c62e07401e1ed6d309c5ab7d4e1b7f01f
+size 247653
diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_PC_Display.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_PC_Display.uasset
new file mode 100644
index 00000000..5e266442
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_PC_Display.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:acab50641ebfd8ec73bda00d7ce661f23e7773e4b88863de1982b34b52ebc114
+size 1026639
diff --git a/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_StaticPCBG.uasset b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_StaticPCBG.uasset
new file mode 100644
index 00000000..02a4c8b4
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/BountyDirector/WBP_StaticPCBG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1fd8cfefdb9488ee066675e784fe4fe0ec31f689d82741b5cc8d5cfdbf0b64e4
+size 29059
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/CP_MB.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/CP_MB.uasset
new file mode 100644
index 00000000..822f2d62
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/CP_MB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4630de4ea95731ea1488ab3b135b07396a1dd842f9909c6380d2a7934c2aa8d7
+size 63981
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/MB_TestBounty.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/MB_TestBounty.uasset
new file mode 100644
index 00000000..0309cf1b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/MainBounty/MB_TestBounty.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bee98bbd8e50e208c8f9ee6c2a8560f183a2bba774f090b183ab236ba7ebd22
+size 38649
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_1.uasset
new file mode 100644
index 00000000..79086246
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd5b80d48c39e4dbd4f62dafaecb54ec5c7fa2a1d12dfbdd1f9be85cc74b368a
+size 64021
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_2.uasset
new file mode 100644
index 00000000..30c128aa
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d27935ca0589d21ab1e7ca9ebd3de80fa4666c43fdc239cbe4cd13358ecb5d71
+size 64015
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_3.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_3.uasset
new file mode 100644
index 00000000..7804ed1b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/CP_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:127a3c5d1ddd972ed32552a4e0e61f4d72d94ed978d98ad9eec8933e2711c6c0
+size 64009
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_1.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_1.uasset
new file mode 100644
index 00000000..d88016a5
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e89aba9e6af5b1bd48b5b2b48242eb1d057a63f552b22ea6122091a81556d9d6
+size 22765
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_2.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_2.uasset
new file mode 100644
index 00000000..f61482fd
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8ae78ca79d0f944fd9ae21df42c30f3993f595e6a750455a5960cd0e4b890143
+size 22827
diff --git a/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_3.uasset b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_3.uasset
new file mode 100644
index 00000000..f575b5b1
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TestBounties/FavourSystemBountyTest/SideBounties/SB_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:736bb99394a031e33b1a14f712b0ad0b6540cc047153933347b449746f46ffc5
+size 22761
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BP_WeaponTable.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BP_WeaponTable.uasset
new file mode 100644
index 00000000..fd66d6d4
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BP_WeaponTable.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00bbbb9790870bbe08879eec576c3c57f0eca6162cfe7063cb2f2a0c10b87a93
+size 29602
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ElimTutorialTarget.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ElimTutorialTarget.uasset
new file mode 100644
index 00000000..5883a4f1
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ElimTutorialTarget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:727b8060f6720e1de8c6cc5aa95de4e3d2c18b4b6df469c5f1661679379f3054
+size 143152
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_EnterBountySimulationFacility.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_EnterBountySimulationFacility.uasset
new file mode 100644
index 00000000..a42c2499
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_EnterBountySimulationFacility.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09f78d33c2a88b48b438f3382f6db685a54203b9036a09f80f768b17e0c9d77d
+size 74030
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ExitBountySimulationFacility.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ExitBountySimulationFacility.uasset
new file mode 100644
index 00000000..478f5860
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/BountySimulation/CP_ExitBountySimulationFacility.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3e7b67b89169f8856643fa54ad3ee70088d8e57278dda3eae8a67cebae80fc4d
+size 49564
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_IntroCinematic.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_IntroCinematic.uasset
new file mode 100644
index 00000000..9baa8118
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_IntroCinematic.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:66f9f7016f0fb3d431f16dc9ec1c045a7123a20d7001bb1094c5d43fd7cfcb3b
+size 60949
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_ParkourTutorial.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_ParkourTutorial.uasset
new file mode 100644
index 00000000..5d9c77b0
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_ParkourTutorial.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:760080e3e99953e11230e2d0611fe20c01daa1e6ea7ef3dd4c5923beb8fbc6a9
+size 38487
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_PickUpWeapon.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_PickUpWeapon.uasset
new file mode 100644
index 00000000..9d450f09
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/CP_PickUpWeapon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:285081531c73e061d3e6bc5def297852b57b5e3622c3e947cc0b8ceed5752f85
+size 61443
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/BP_CQCRange.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/BP_CQCRange.uasset
new file mode 100644
index 00000000..942a2ae0
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/BP_CQCRange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:96f0a512c232f3f8d44a79dde7fd6da8d34a02581ac068f010f9ffdaf7bba755
+size 101077
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/BP_LongRange.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/BP_LongRange.uasset
new file mode 100644
index 00000000..12a9aaa2
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/BP_LongRange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8f3d90b13b51423a6cba2d48c8b722b3659b7a14f4bcb6ac730a20df8339b1a
+size 112942
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/CP_CheckOutCQCRange.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/CP_CheckOutCQCRange.uasset
new file mode 100644
index 00000000..0fdaf894
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/CP_CheckOutCQCRange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fccc1eabe3bc902abe338f8980b6f249f2578be80c1c8096a5232a132ba42c6
+size 148461
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/CP_CheckOutLongRange.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/CP_CheckOutLongRange.uasset
new file mode 100644
index 00000000..8ed828fc
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/FiringRanges/CP_CheckOutLongRange.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76ea44d21affaf349e16f27cb6cb3684c9c14ae417f1096846b45711de2a8a3e
+size 156411
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_GadgetTutorial.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_GadgetTutorial.uasset
new file mode 100644
index 00000000..35556abe
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_GadgetTutorial.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0c9c1c5174be17340a5c1af17f65ebad2f56450fb8194dd1aee554d703ac68ed
+size 2754
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_InfiniteHealthEnemy.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_InfiniteHealthEnemy.uasset
new file mode 100644
index 00000000..3ac4ffc8
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_InfiniteHealthEnemy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff0184855d0b831ff073d507262a1297f3fd676f49a4ec28ded918fbb8896069
+size 42127
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_Recon.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_Recon.uasset
new file mode 100644
index 00000000..6f1b328e
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_Recon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86a649d86566076f0904ef7792d413399eedea9e074a4d60603396c5ea3734fb
+size 2763
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_ReconWorkbench.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_ReconWorkbench.uasset
new file mode 100644
index 00000000..546a248e
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/BP_ReconWorkbench.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:191a1e2ab132262fdd234e16a45508f0bff1cc081c977e49cffba1c4017bb052
+size 2801
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/BP_CombatWorkbench.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/BP_CombatWorkbench.uasset
new file mode 100644
index 00000000..faa2e306
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/BP_CombatWorkbench.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f506b5b0ad3d818c7bb6bd8f82a1fb7c632e92eb3dfedf4ae0e49401b6a6f060
+size 23514
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/CP_CombatTraining.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/CP_CombatTraining.uasset
new file mode 100644
index 00000000..af179740
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/CP_CombatTraining.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9f7376ac38e90dacafa36fd1b16bbf2227d0b577ba5ad53d43ce0d8df47bbf07
+size 46961
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/GT_OverloadModule.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/GT_OverloadModule.uasset
new file mode 100644
index 00000000..7ab35daf
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Combat/GT_OverloadModule.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3f7370adadacaa691397522121b6c975e922c007eba7b08420598f3cb906fdb
+size 143122
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.png b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.png
new file mode 100644
index 00000000..befb3dc2
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d45db118dff139dba8afcbb4bccae0415e6ce9522753bc8dc321947309b987a4
+size 39589
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.uasset
new file mode 100644
index 00000000..1f6752b4
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/GadgetTutorialIcon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1aee6585c4133154fec11fcd690c3526714b66b588b9376faa7747e52abf4dea
+size 39732
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/BP_ReconWorkbench.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/BP_ReconWorkbench.uasset
new file mode 100644
index 00000000..20b5b980
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/BP_ReconWorkbench.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e7084fab6eb5149aef1ebd8b44303477718dd4b17e59faea6c7800ed62e0847
+size 23596
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/CP_GoDownstairs.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/CP_GoDownstairs.uasset
new file mode 100644
index 00000000..a545465a
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/CP_GoDownstairs.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d0cfa2881e250992ba5cc2fff1a9597d00531cb2732df8405f6b53d76ab675a7
+size 38882
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/CP_ReconTraining.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/CP_ReconTraining.uasset
new file mode 100644
index 00000000..c32db353
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/CP_ReconTraining.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:52fa6f6a84ca059b3f9b57959ee3cfa352d0feb833b8a5d1603bae568c4d4d7d
+size 46993
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/GT_RingModule.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/GT_RingModule.uasset
new file mode 100644
index 00000000..c361a44b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/GT_RingModule.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:029257b219ada12742b0a16af98a8904c477cd27345d9997c9a3fc79d1327117
+size 144242
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/GT_VisionLink.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/GT_VisionLink.uasset
new file mode 100644
index 00000000..2ca83102
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/Recon/GT_VisionLink.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:535cd7f074418223d517abe6748a7c40749000dcfa9ecb5e17d7d1c378b5360e
+size 214724
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/WBP_GadgetMenu.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/WBP_GadgetMenu.uasset
new file mode 100644
index 00000000..69d96971
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/GadgetTutorial/WBP_GadgetMenu.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:810d2dfb5cf17a33620f773ada8e2d7972ad795139900d78e326fdae5af35239
+size 119297
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/WBP_EnterSimulationCutscene.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/WBP_EnterSimulationCutscene.uasset
new file mode 100644
index 00000000..faf0e8c8
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/WBP_EnterSimulationCutscene.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42595da531f4db98b51bb2fdb8f617a91fd9de728df25a64f47b7200947f884c
+size 86733
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/WBP_HiredCutscene.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/WBP_HiredCutscene.uasset
new file mode 100644
index 00000000..3abe2366
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Checkpoints/WBP_HiredCutscene.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ddfa2b5455c745aaf63af8000945f2696d2248d6f059347bd4c2dd927910baed
+size 104895
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/BedroomEnemy/BE_TF_Bedroom.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/BedroomEnemy/BE_TF_Bedroom.uasset
new file mode 100644
index 00000000..282d52f2
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/BedroomEnemy/BE_TF_Bedroom.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1df06845b2be99973a0567e9bbd4b05f87ff4ac270bd78e78d030f41996826dc
+size 106375
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/BedroomEnemy/PP_TF_Bedroom.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/BedroomEnemy/PP_TF_Bedroom.uasset
new file mode 100644
index 00000000..68f70e77
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/BedroomEnemy/PP_TF_Bedroom.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df5a2500d27329e8de757164387d7d8f8b63b58119bb7ad63898a34cd053c653
+size 13034
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/DiningRoomEnemy/BE_TF_Dining.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/DiningRoomEnemy/BE_TF_Dining.uasset
new file mode 100644
index 00000000..313cc740
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/DiningRoomEnemy/BE_TF_Dining.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b8abac0ac05cf183bc4a7d6a6b54dad56a476d41b49db54a85933b704b0b10a8
+size 106926
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/DiningRoomEnemy/PP_TF_DiningRoom.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/DiningRoomEnemy/PP_TF_DiningRoom.uasset
new file mode 100644
index 00000000..58c88511
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/DiningRoomEnemy/PP_TF_DiningRoom.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8b98d4f4b418d7e056899dc8153137c700342c0325dfc4d9bf126d84af445ca
+size 13061
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/LivingRoomEnemy/BE_TF_Living.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/LivingRoomEnemy/BE_TF_Living.uasset
new file mode 100644
index 00000000..3876306c
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/LivingRoomEnemy/BE_TF_Living.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:96bf3bc05b1d4a6a76556282cf0817abee6af85a9bc4f10af94c323e10e6b06a
+size 106920
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/LivingRoomEnemy/PP_TF_LivingRoom.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/LivingRoomEnemy/PP_TF_LivingRoom.uasset
new file mode 100644
index 00000000..65e00893
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/LivingRoomEnemy/PP_TF_LivingRoom.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:966e6cbe348de1734c26bbf2dfadc4238378765a962a155cb7aae81295fd83bb
+size 13061
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/BE_TF_Outside.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/BE_TF_Outside.uasset
new file mode 100644
index 00000000..65966bd4
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/BE_TF_Outside.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec0a4d9f721fa3407d9977d6e47e742426d1e49f5f2c40ee5167d153ea6e9058
+size 106934
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF.uasset
new file mode 100644
index 00000000..12e36731
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc837363528efff7871b4dfcbdc89052ce58dee49ff3ab8fb3bfe7b95be9a05a
+size 2682
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF_OutBack.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF_OutBack.uasset
new file mode 100644
index 00000000..4bd16431
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF_OutBack.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:406ab0ed0c686c21a00dda4b3d6e268eacf6bfc911cc5fbfc6615897e6e7f4ee
+size 2674
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF_Outside.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF_Outside.uasset
new file mode 100644
index 00000000..6cd3336f
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/OutsidePatrolEnemy/PP_TF_Outside.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:731235fa24a1937da6099c8925abd34bbf99d4a1a6334c993c89f7a4b3114f0f
+size 13791
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/RoamingEnemy/BE_TF_Roaming.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/RoamingEnemy/BE_TF_Roaming.uasset
new file mode 100644
index 00000000..8b8d13cd
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/RoamingEnemy/BE_TF_Roaming.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0567198a616343a45aef20d4be70b57a7eefefb6c54668645ce397186e27bf6
+size 106932
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/RoamingEnemy/PP_TF_Roaming.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/RoamingEnemy/PP_TF_Roaming.uasset
new file mode 100644
index 00000000..67602f41
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/RoamingEnemy/PP_TF_Roaming.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:062d6ee93303344368b3401d4a0bd412fa1d1af6cc95a81607453054cc697d67
+size 13100
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/TargetEnemy/BE_TF_Target.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/TargetEnemy/BE_TF_Target.uasset
new file mode 100644
index 00000000..1b25edbb
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/TargetEnemy/BE_TF_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a3d210a0ff91d671754196ced646a4128ea967f531e2c1c27201fbf9eba9c7f
+size 107795
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/TargetEnemy/PP_TF_Target.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/TargetEnemy/PP_TF_Target.uasset
new file mode 100644
index 00000000..b7adcb40
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/TargetEnemy/PP_TF_Target.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:496b55e0f80f2e6208269215944632df3161f025bc5888e294cf92b6deb13a2b
+size 12985
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/UpstairsPatrolEnemy/BE_TF_Upstairs.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/UpstairsPatrolEnemy/BE_TF_Upstairs.uasset
new file mode 100644
index 00000000..787e0913
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/UpstairsPatrolEnemy/BE_TF_Upstairs.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae60e9cb9b9afd7fe56aae046399dfd98ea8db80ecacffc4d278e262452ddb45
+size 106997
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/UpstairsPatrolEnemy/PP_TF_Upstairs.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/UpstairsPatrolEnemy/PP_TF_Upstairs.uasset
new file mode 100644
index 00000000..9c71a224
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/Enemies/UpstairsPatrolEnemy/PP_TF_Upstairs.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e2f2065e357769a2642143c21eae5fea45a3a60dfe59706f944d18ffe930b205
+size 13071
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.jpg
new file mode 100644
index 00000000..2da0efd2
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:30e6209982fa8d90b95ddbac1e4005a662c5a6331c9619931f8f953f8fef93dd
+size 505928
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.uasset
new file mode 100644
index 00000000..aaf6e2dd
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f0a7a523b9dc5a9fd685258cfe8bc60991d2b239148d8c017972673ba0746022
+size 520107
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.jpg
new file mode 100644
index 00000000..7630befc
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a70c0dcccc333e43e723ef5fbe6abd6e09254ce544cb2ced647df871b85088bb
+size 180033
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.uasset
new file mode 100644
index 00000000..2d8edcfb
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF10.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2b2eceefa723dc5a79b3448b1277eb03ad31fe713a73ae42884960402ea2429c
+size 190143
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.jpg
new file mode 100644
index 00000000..211a6d11
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0ce94e92859f4d3f38b4524959d26ffaee36292eef0ec5bd2d93acc65ec88c80
+size 189799
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.uasset
new file mode 100644
index 00000000..b4141b1a
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF11.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:071579af66b333f7354cdc3ee309285fe452adc58f847709ffd2dc1b01f41c81
+size 199883
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.jpg
new file mode 100644
index 00000000..fc1653fa
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad40612c0a6ec1b4422941da055a5e48c5cc1e8940c37967d2ac4e74503bdcea
+size 267458
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.uasset
new file mode 100644
index 00000000..10871996
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF12.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c6659b1d9be99fffeb3adbbc370e72134d7171ec8fced2fd201cb05ca37879a1
+size 278003
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.jpg
new file mode 100644
index 00000000..49fc5a1c
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b10efe495ca0136dfb2eabcdd4cb4fd76a81946fe9d127860bf823d496ac194f
+size 206195
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.uasset
new file mode 100644
index 00000000..a1bc0b4a
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF13.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e74bd8508b9be1aa54bbc732c981019da67048cc1ce66fb6ae73ed5291a89974
+size 216041
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.jpg
new file mode 100644
index 00000000..3a19ff04
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0f99f0d9581ca0bc2cec663bab828c9d99c6fb1f345301037dfbb4d8a96440e
+size 197616
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.uasset
new file mode 100644
index 00000000..9d046e2d
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF14.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca232afedbe4180964c5d88d58652e813ab13d21983d3180c8b3efe2db92ebd4
+size 207080
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.jpg
new file mode 100644
index 00000000..88d0ca70
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c3226503b477885b4be221bcb040d17124a3b27649a150d672aa6322cc768bc5
+size 255456
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.uasset
new file mode 100644
index 00000000..c2e466ef
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF15.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:27db0081fd42181a7b3029147cd9b60241ca34d5344895b42fb55b3c3736a7fc
+size 265249
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.jpg
new file mode 100644
index 00000000..db819407
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f2e161bdae9612209d94c804472a255d16f3f30d257a7e7b0bdc9b53a3f18fe3
+size 276320
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.uasset
new file mode 100644
index 00000000..0ad00735
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF16.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5bb79f197937f86b99e5a6b78bb4d2a9ae213001c6bb5af8c4fae53aaf267b6f
+size 287298
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.jpg
new file mode 100644
index 00000000..f3fac2b8
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a3651fc2c201fbaab5b6470ae0b03eecf0e4a931d8c40cd588f7c730a4a96b0
+size 87428
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.uasset
new file mode 100644
index 00000000..ecc7f33b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF17.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:56e3150d658610c8de5bb8ccf6d9c3ff6b36c0589e075a8ee7ad9d4bef669861
+size 93869
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.jpg
new file mode 100644
index 00000000..4385cf5b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b0eaadf0aa1ccc154a31da10d5824f0d834ece9189d67d9ffa81534f014ac6c7
+size 212382
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.uasset
new file mode 100644
index 00000000..2a91232e
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF18.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d349b3119d1681d78deddd0ee588beea88885d6f22cf243cd62a3fe5ecc17c9
+size 222864
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.jpg
new file mode 100644
index 00000000..d5853209
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c18c13050885545575822e12278b6e24de4cb6d6f9e998fb868c22d8f83f7688
+size 338154
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.uasset
new file mode 100644
index 00000000..d5945eb4
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF19.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b95798ae92d9799996e45f036fc693a2677b1c109aa4ad47c9915c5468cc552e
+size 349128
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.jpg
new file mode 100644
index 00000000..2ff430ae
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:29db786aac1ce176be86878c8fbac89b29b8a2cb6892ce615d2288f6483321c2
+size 500729
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.uasset
new file mode 100644
index 00000000..ff886d39
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cdd7ef44fa54e4d6fc107c80a5a1b9fbf7eaa388d499c159301ed2104925dc4d
+size 514322
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.jpg
new file mode 100644
index 00000000..b5388717
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e8195c7e1155a58dcf96e13cccba2cf2fc62a4d59a19648b6c3e67caa8fc7c33
+size 269403
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.uasset
new file mode 100644
index 00000000..7fa3ddde
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF20.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:daa532eeb32993dd1609b8c7dd4c1317a55e16041a8c7522202e79f3fa05b7c7
+size 279708
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.jpg
new file mode 100644
index 00000000..2e7cb0e5
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3fe6f5b7980fb586aee8dcda0d64f936c2b4f8c2dfbf77af334d8a4d5121f663
+size 254886
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.uasset
new file mode 100644
index 00000000..b20f2df5
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF21.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:214afb1bf6af99da3b9a6cd363d54ebbeaf9e60e72969ef6ce67dc4d4e5f6143
+size 264982
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.jpg
new file mode 100644
index 00000000..e3cefae2
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:66fc81385e3ed3c60c92518871f22fab822b22e0dee595a758c3a56f0ab1682d
+size 192507
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.uasset
new file mode 100644
index 00000000..2785d428
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF22.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ecf3107ed78b41ad8a06501fc8822b97472e1bc17b51a3e38789e4abb212c30
+size 201408
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.jpg
new file mode 100644
index 00000000..26e63f8c
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8cb67401f2bdd6de8dcefa165a5f9aa54c1be530053959f9d7fdaab5471cf9e3
+size 224057
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.uasset
new file mode 100644
index 00000000..665bc512
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF23.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d968ba779c0a08c5e29149afe3055046d287cc37dfe5946409ac83a062d0fc95
+size 233871
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.jpg
new file mode 100644
index 00000000..c10c07ee
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c5780adb92fb4d4073d087000a929a9bf562879d54355a64430cb855c9ff71bb
+size 233492
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.uasset
new file mode 100644
index 00000000..e0e5fc91
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF24.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c50495df45378664166ad5468b3b2f6f1229d1abfc385ea148c5ef8c3e129f5c
+size 243459
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.jpg
new file mode 100644
index 00000000..07e5a1ef
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f5a3cf86f2c029fe650a153693aba88358495fc6f572cbfc28c6d48c44dac6f
+size 214186
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.uasset
new file mode 100644
index 00000000..9cf119e2
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:08b93cdc713cad71806aa5c7ea8bab313b47c15b92a24d9180ae0efc6e040648
+size 223835
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.jpg
new file mode 100644
index 00000000..3abd1ff3
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0304a498c81f1bf86467882f81480426d8e92126b9036ef0ad5d6947a0ae1acd
+size 146352
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.uasset
new file mode 100644
index 00000000..160a480e
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a9d69f271f131e122068d8e9e01c015d8bde01335387e8747da96f6a9524a56a
+size 154151
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.jpg
new file mode 100644
index 00000000..322f1a55
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:30d48c3431570c7ee4d927c0fbdfd6e3d2def70fa1e2c35a60a9ce039176bed4
+size 187436
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.uasset
new file mode 100644
index 00000000..f50ed79a
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:de56af9d93500dd96005a6f362986c71431d04bb08cc95209d575302b059200c
+size 196683
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.jpg
new file mode 100644
index 00000000..7c33b4b8
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e66210f2c9f7916f9419c60772e459eef98c770ecb5ea848aa13b01acead4e56
+size 220680
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.uasset
new file mode 100644
index 00000000..1b6be2b3
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d795b0936261bd5a166c0e22670071610b45c08f4751017b6ddb2a89a66ab747
+size 230592
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.jpg
new file mode 100644
index 00000000..7447d443
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49abe230a7dac45c574f0876b05b55dfdc195786e8059e99830def819f346bfe
+size 223805
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.uasset
new file mode 100644
index 00000000..9fda58ed
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7c06f98e8fe37c5fdda89a159aa06651d1f86291cfa291a4d69fdba21cb5a14e
+size 234019
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.jpg
new file mode 100644
index 00000000..89fdcb8b
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aee18e65f532253475f415be35b15ec5ca3ebc57f1d1012a7244ea5a0c5e19bb
+size 214541
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.uasset
new file mode 100644
index 00000000..abad250e
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75b42558116e853a22943f952546a557ff75e2cf8b4f8b0afa3c240187145618
+size 224994
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.jpg
new file mode 100644
index 00000000..947fe05f
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bfd01e970b5e52dd7aa94411a12b24ba5e06df11459e7a7872b565c00bb76fa8
+size 240882
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.uasset
new file mode 100644
index 00000000..d4260014
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/IntroF9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:132738939e45cfe9982439bd1b391d363850cb7c803d405c9894683d7d591d75
+size 251621
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.jpg b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.jpg
new file mode 100644
index 00000000..94dd13b9
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:840bd7e2cd3410b614e54f31a6800a637a3883a7d3d92b4d87d3d4142432a307
+size 140696
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.uasset
new file mode 100644
index 00000000..037ee9ee
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/PlayersHomeShipImage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2613e30fdd451c4c60be7acee8b6c0ca4ca11ac55b81c6a3649bc87e827b9e42
+size 148252
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/WBP_IntroCutscene.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/WBP_IntroCutscene.uasset
new file mode 100644
index 00000000..9423ea04
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/IntroCutscene/WBP_IntroCutscene.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d72553065b7759af8b25f2f70ded6db41e0f89f9d67aa11a19a9850ceca2562
+size 133720
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/MB_TutorialFacility.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/MB_TutorialFacility.uasset
new file mode 100644
index 00000000..24c72606
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/MB_TutorialFacility.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f832cb5ec5d4dfc2edd473b4cfd0ac80019547d5f2d1125b4a71942de584bb76
+size 16169
diff --git a/EndlessVendetta/Content/BountySystem/TutorialFacility/TrainingFacilityBountyDirector.uasset b/EndlessVendetta/Content/BountySystem/TutorialFacility/TrainingFacilityBountyDirector.uasset
new file mode 100644
index 00000000..35ada0bc
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/TutorialFacility/TrainingFacilityBountyDirector.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1e75c64d6be90e7099664b99af6b8faab033decb1e269ab3e9f472e0e0fc2eb
+size 22314
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/BP_Waypoint.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/BP_Waypoint.uasset
new file mode 100644
index 00000000..ba8534c6
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/BP_Waypoint.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04143e23cb9403f9ae001e7ab261a6c90a890df16f81eb00c35ae1e7305ed249
+size 49046
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.png b/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.png
new file mode 100644
index 00000000..61ddbe03
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f99a94e75ec8bbb52399da3df66d97452a3028a8503a1945ba03b9618ff979d8
+size 258434
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.uasset
new file mode 100644
index 00000000..272cca49
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/TempMainBountyIcon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d0aecd15ed5150cad733053745a0db554ffe01be74a9763eb0fb24f1a639b48f
+size 211777
diff --git a/EndlessVendetta/Content/BountySystem/Waypoint/WBP_WaypointWidget.uasset b/EndlessVendetta/Content/BountySystem/Waypoint/WBP_WaypointWidget.uasset
new file mode 100644
index 00000000..09b70476
--- /dev/null
+++ b/EndlessVendetta/Content/BountySystem/Waypoint/WBP_WaypointWidget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b07b293876d399dfdce186c99573c335e2e2e509856f7a67a2a463569b4f23d
+size 30404
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Animations/Jog_Fwd.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Animations/Jog_Fwd.uasset
new file mode 100644
index 00000000..b915e8e3
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Animations/Jog_Fwd.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81b4dd2a00331ba3086ce06a8673667359183399c5fb1ab924060e2c84720691
+size 203111
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_Latex_Black.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_Latex_Black.uasset
new file mode 100644
index 00000000..4d2cc648
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_Latex_Black.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa87ecdbb722402bdb4decef1a53487d6b74789076cb7aa51a4521553f478a89
+size 13710
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_ShinyPlastic_Beige.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_ShinyPlastic_Beige.uasset
new file mode 100644
index 00000000..26c98f45
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_ShinyPlastic_Beige.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b544f3c62bdc242ceb673eb94a30a1bb881ea3b126d849e8e969ea6b30c25772
+size 10382
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_ShinyPlastic_Beige_Logo.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_ShinyPlastic_Beige_Logo.uasset
new file mode 100644
index 00000000..71812b72
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_ShinyPlastic_Beige_Logo.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff2747888cb753414087d94c0aaa824e88aae93ca25584419a1ace2de31bb048
+size 11197
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_SoftMetal.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_SoftMetal.uasset
new file mode 100644
index 00000000..3fbbe601
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/Layers/ML_SoftMetal.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28ffa6db34aa484d7f36d872c88b5628a5a9aff7279c1e0d819fb20fe29459ed
+size 14647
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/M_MannequinUE4_Body.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/M_MannequinUE4_Body.uasset
new file mode 100644
index 00000000..ab712a1e
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/M_MannequinUE4_Body.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4042ac871e2df59386ec9b28ce4c8436753e92ba1e0c69b8ba1b75220a386e96
+size 28440
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/M_MannequinUE4_ChestLogo.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/M_MannequinUE4_ChestLogo.uasset
new file mode 100644
index 00000000..86a96e3a
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Materials/M_MannequinUE4_ChestLogo.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:03e96660ce9ddd947d06b73332cc5e3ce76339f937d2cd7ef5396e20a1bdd968
+size 11162
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin.uasset
new file mode 100644
index 00000000..f5959314
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:add4a29562eefee1f38203b6377e56cdb62ad5f109776e845d05e4050552926c
+size 5583495
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_PhysicsAsset.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_PhysicsAsset.uasset
new file mode 100644
index 00000000..063f9350
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_PhysicsAsset.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c8e0bf4f4a7a8702be683d64e382e0994d56a24f6ef94a0e13d0d3504df9e490
+size 46446
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_Skeleton.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_Skeleton.uasset
new file mode 100644
index 00000000..5ee88a5f
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Meshes/SK_Mannequin_Skeleton.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44ad784e4e3635f78abc34c3f266522218994b20714ddda144bbcbaa5972c4ed
+size 22962
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/IK_UE4_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/IK_UE4_Mannequin.uasset
new file mode 100644
index 00000000..80b681c2
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/IK_UE4_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce8694572ad9b6bf3f7b4bfb00f12aba5d5253d65389475ebcc8f9d8d43c37b2
+size 68924
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/RTG_UE4Manny_UE5Manny.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/RTG_UE4Manny_UE5Manny.uasset
new file mode 100644
index 00000000..4c60e88d
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/RTG_UE4Manny_UE5Manny.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:592717cabe08dd57e5ee625c860879be13a18932f8654fe73ee0bbaee063caf6
+size 23985
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/RTG_UE5Manny_UE4Manny.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/RTG_UE5Manny_UE4Manny.uasset
new file mode 100644
index 00000000..11f762ef
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Rigs/RTG_UE5Manny_UE4Manny.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b34deb079185dedefe04151a3c824a6981b25e12c65f89e7bcd120c68d0f7cac
+size 19357
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Aluminum01.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Aluminum01.uasset
new file mode 100644
index 00000000..0909fde5
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Aluminum01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf805e02f583024a7f5a40f4b2a249809ce711a46de5c84bcd74609b73fed351
+size 395400
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Aluminum01_N.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Aluminum01_N.uasset
new file mode 100644
index 00000000..7eceba11
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Aluminum01_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:582564da5dbbe8e30e6d65babae05ff22edce4a0bc8833f95180b505f0837447
+size 404289
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Rubber_Blue_01_D.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Rubber_Blue_01_D.uasset
new file mode 100644
index 00000000..e18a52aa
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Rubber_Blue_01_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:64a3293fbe4df89c9040bc8d5e9cc6cebc945715ca1c8dc62a7682acc526a524
+size 429026
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Rubber_Blue_01_N.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Rubber_Blue_01_N.uasset
new file mode 100644
index 00000000..e9845353
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_ML_Rubber_Blue_01_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c84157238dd3d148b4f51e44a46f82d5dfd714beaa67c4c9c2998bdc7ec3365
+size 358524
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UE4_Mannequin_MAT_MASKA.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UE4_Mannequin_MAT_MASKA.uasset
new file mode 100644
index 00000000..5e4c2a3a
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UE4_Mannequin_MAT_MASKA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec1d27963fc08f75eeee585f78d96ffbd8727bfe86c7c1fe0e7e2a2dd57d5a26
+size 211489
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UE4_Mannequin__normals.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UE4_Mannequin__normals.uasset
new file mode 100644
index 00000000..8fd335bb
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UE4_Mannequin__normals.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:354c99110df3d84a5cf4bb01de49d994a5c674c9788bd4b5fc779bf3030c54cf
+size 5427488
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UELogo_Mask.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UELogo_Mask.uasset
new file mode 100644
index 00000000..6c32cbeb
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UELogo_Mask.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a6f7d178353537343355bd9e8021951aac860c189c1393f57777df90c720466a
+size 41868
diff --git a/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UELogo_N_TGA.uasset b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UELogo_N_TGA.uasset
new file mode 100644
index 00000000..3236d1f5
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequin_UE4/Textures/T_UELogo_N_TGA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5a30f20159eb0e91b89c5f36aa9e6699b4c1a2af7328296c3fd77c392e10b2c7
+size 56343
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/ABP_Manny.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/ABP_Manny.uasset
new file mode 100644
index 00000000..9e5b15dc
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/ABP_Manny.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:698ad59b091eadff740a7ed78bb18cfad875fa3143d2ae614e0317d5e9680a79
+size 368180
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/ABP_Quinn.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/ABP_Quinn.uasset
new file mode 100644
index 00000000..ae1cbadb
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/ABP_Quinn.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cd84317778ba8ee13b7addf2bd11988a07c38cffbebb129562a25785e5215abb
+size 39313
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/BS_MM_WalkRun.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/BS_MM_WalkRun.uasset
new file mode 100644
index 00000000..c1625d56
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/BS_MM_WalkRun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17534cfadb0ecbfec9556f6b116d3cc4276b2d8ea5b451062ba3919c5ce24a6c
+size 8993
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Fall_Loop.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Fall_Loop.uasset
new file mode 100644
index 00000000..391c2456
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Fall_Loop.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:732b4cb73137a34d510f774b0ab63934bf2ee5532b0333d401fa450f88e44010
+size 698209
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Idle.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Idle.uasset
new file mode 100644
index 00000000..00049a8b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Idle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3d03e57ab6829b8f60cf19ba1ee5e0ac82e37e5429427edaad472fb473f71d1c
+size 897634
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Jump.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Jump.uasset
new file mode 100644
index 00000000..360bd01b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Jump.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:771ad470861e3bec955b22c889d2b9acb844a6ae91565b0e647c7adace39878b
+size 290962
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Land.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Land.uasset
new file mode 100644
index 00000000..f5e0d2cf
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Land.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:24f34cf736992c09b7502185c3d71ef1c79278fb558dacc91fa494ecfe452fe5
+size 300335
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Run_Fwd.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Run_Fwd.uasset
new file mode 100644
index 00000000..84ca0780
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Run_Fwd.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aff51ddb72b98d9cd2f4c1351f132dfcfde83d905f4f37d1f35b793b26c95b96
+size 293237
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_T_Pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_T_Pose.uasset
new file mode 100644
index 00000000..16d22893
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_T_Pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b7e4d1ff30352e296f446e77eed841ad7d5344430c5f7141fd09aad7e0af2c3
+size 30458
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Walk_Fwd.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Walk_Fwd.uasset
new file mode 100644
index 00000000..5e734eb1
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Walk_Fwd.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:226e6affa1682ddf630a2e7759bc8b08dae033490a0449400af18a97941440c4
+size 382783
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Walk_InPlace.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Walk_InPlace.uasset
new file mode 100644
index 00000000..18e06808
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Manny/MM_Walk_InPlace.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55a005cf4d673d8fcef1b93e2be270b8c47a8a82b7cbf895a915d27710d4a40b
+size 609238
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/BS_MF_Unarmed_WalkRun.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/BS_MF_Unarmed_WalkRun.uasset
new file mode 100644
index 00000000..83e9ffb9
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/BS_MF_Unarmed_WalkRun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6974eb2d3d4f246d91f0cfea6b4400aed38c722b67dc9ca8c15c9bc4a14e193
+size 9025
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Idle.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Idle.uasset
new file mode 100644
index 00000000..56a8a863
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Idle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98c6ee27d23ad13b69cd51e466058ff8f75e55ec69ab78911d43eb2d54151022
+size 919278
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Run_Fwd.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Run_Fwd.uasset
new file mode 100644
index 00000000..a022266f
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Run_Fwd.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:069b7d70641be0a4f2c0d9f0cb4662c796da0f2969c6f1297ae3e22dd3479026
+size 431040
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Walk_Fwd.uasset b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Walk_Fwd.uasset
new file mode 100644
index 00000000..a334b558
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Animations/Quinn/MF_Walk_Fwd.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a277d4a34033b8e5b336eace9857a4abf1f255a2a4687fa1709b5a5a464ea137
+size 449906
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/CA_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/CA_Mannequin.uasset
new file mode 100644
index 00000000..33b7e4d0
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/CA_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5564d59ac367f94d06d6eafc8eafbc1144eec525ebcaf0bd20c3effd400bcf8b
+size 4812
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/ChromaticCurve.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/ChromaticCurve.uasset
new file mode 100644
index 00000000..b66dfadb
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/ChromaticCurve.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:32f26545999f01c55f8900c2d491d4cb39f3c545b061225deee2c8b70e760b70
+size 6306
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/MF_Diffraction.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/MF_Diffraction.uasset
new file mode 100644
index 00000000..fbe47aaf
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/MF_Diffraction.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1248c9176bcd4693cab74b63249bd9f0434758dda1c4f4b5c53da5e2a2b91ec2
+size 32183
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/MF_logo3layers.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/MF_logo3layers.uasset
new file mode 100644
index 00000000..96a2e85d
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/MF_logo3layers.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d1f542fd354f8ff82fb685318e3665da4e9a9207add267de9ce6cf8779b5e147
+size 56603
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/ML_BaseColorFallOff.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/ML_BaseColorFallOff.uasset
new file mode 100644
index 00000000..2c791171
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Functions/ML_BaseColorFallOff.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:242a332a47b300d429e94147a7ffd38ed09b5c2467dede5e90525494af7c5e18
+size 13437
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_01.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_01.uasset
new file mode 100644
index 00000000..4c76d434
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2492fbdc6d6af64af264159aeab1b4ed6fc859e2adbd1be4aef59dd8221c7d49
+size 21590
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_02.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_02.uasset
new file mode 100644
index 00000000..8027144f
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Manny/MI_Manny_02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e6b0c28b5f10768f406776c4fc9d853eb915efdcff8e79465e96aff8c11872b
+size 24853
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_01.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_01.uasset
new file mode 100644
index 00000000..b486efd6
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_01.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc66db2c2b3f8f37191aad8bc59bbdecda0a19a03a995c602df3b2d8cb3f19e9
+size 19667
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_02.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_02.uasset
new file mode 100644
index 00000000..7f69c8ab
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/Instances/Quinn/MI_Quinn_02.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46e73fecdb44bdf4bbbd661ee36798f7956f76360594023cb51b96f92ca4c01c
+size 25230
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Materials/M_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequins/Materials/M_Mannequin.uasset
new file mode 100644
index 00000000..8c4ba136
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Materials/M_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c19c44d3a63f9975bb2e777d37d44341cf24907674c36cca79c558383406f0d5
+size 83079
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Meshes/Mannequin_LODSettings.uasset b/EndlessVendetta/Content/Characters/Mannequins/Meshes/Mannequin_LODSettings.uasset
new file mode 100644
index 00000000..b342d7b2
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Meshes/Mannequin_LODSettings.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae6203ccee7839e886951796d05315fe1dd9b9aa44c8a60a9525d5ccd905d5b6
+size 18996
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Manny.uasset b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Manny.uasset
new file mode 100644
index 00000000..9f1f7d25
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Manny.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f1df1a6b3db170cd80f14c40653fbc9a692af00f7abd575872d9cd8a707e05c6
+size 34534883
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset
new file mode 100644
index 00000000..efc750c9
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc39b456f2700d3f7aa0dfa99432424c78464b723a143bdf337dcc96867aaab9
+size 18527372
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Quinn.uasset b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Quinn.uasset
new file mode 100644
index 00000000..113ac4e3
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Quinn.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0fdd468262ff66fd30eb55f7bac167063959e5d9dbfa36abf853a5d77616a59
+size 36495654
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset
new file mode 100644
index 00000000..0a0d0d11
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01031c54550174f0a09f13787b128229316afa699302577044e13b6c71d830ed
+size 19371553
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset
new file mode 100644
index 00000000..a0fc035a
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a2e61b60ca2547527c3d59cc6ec11fa92e877d31ca568fc26d7d785295980ee
+size 157784
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/ABP_Manny_PostProcess.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/ABP_Manny_PostProcess.uasset
new file mode 100644
index 00000000..dd58011c
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/ABP_Manny_PostProcess.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f58d1ac6047ec45bf31bec1071a5afc0e9dde9d50849bd8e74ca1c4271495c8
+size 463451
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/ABP_Quinn_PostProcess.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/ABP_Quinn_PostProcess.uasset
new file mode 100644
index 00000000..2bb81b55
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/ABP_Quinn_PostProcess.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2f57ba4350e61b3a5fac6cff45c3d21b81d0ab289765dac797b150b8bac98f34
+size 463249
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_BasicFootIK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_BasicFootIK.uasset
new file mode 100644
index 00000000..aec51178
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_BasicFootIK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fbadeebb79924bf3524773237abee268d810d698eb4ad6b8651149339aab59b1
+size 656245
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset
new file mode 100644
index 00000000..f58f7655
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d6092d8eb4a158e99568dffe0f036a5310b03d5a917e3b58529c7d5fd4088ce
+size 16036573
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset
new file mode 100644
index 00000000..98e02048
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d1abd304377e26c3c7e5a3b7488c522b118cc62ba0f574e9a63ec2e6ca22ac6
+size 2267523
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/IK_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/IK_Mannequin.uasset
new file mode 100644
index 00000000..c35c1aba
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/IK_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:edd623de3bde5afa06348d226eb98ba4f7d66c962ad7c93b4d25feef5de4b124
+size 143479
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset
new file mode 100644
index 00000000..72b36116
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0b163ae42f4717b12d4a9ab0c6b9da218e2d0d64e891b508e81586ac2a3adee
+size 289285
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_anim.uasset
new file mode 100644
index 00000000..3c14e35b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ec42316c0d0e642867721ab1ac8b58452ee537c9dde5e4d4389d745ccc44e9a6
+size 141452
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.uasset
new file mode 100644
index 00000000..44ba84b0
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:26f5c00f4b1a7000505a233e217aa55c5e32b0473128b7cb96f34051dc330da5
+size 207430
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_anim.uasset
new file mode 100644
index 00000000..bd39dac7
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:afe97fa82d46c150d56573b1d1c3d59fbac288f498c3de5fecedd8ac64c2263a
+size 141462
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_pose.uasset
new file mode 100644
index 00000000..13f26224
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_calf_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fb5783ac00efbfb039007568246d1ac33d36da09eec69e3cf0d01e1f96d13fe
+size 207430
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_anim.uasset
new file mode 100644
index 00000000..31710ace
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b4292d4d3cc8c3a23c0d2ea80461f9c05379a22e97c94094a1c4e342e6f0fa9
+size 141484
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_pose.uasset
new file mode 100644
index 00000000..18cd5507
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:56c0e188c3d854c92956755b9c89b8cb6cdb75f1bc4aac655f0d5f6524fb8160
+size 205732
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_anim.uasset
new file mode 100644
index 00000000..d7cc7354
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9263821d96862a7121442b54bcaff72775c4758fb2218747bd3540207aa0fecd
+size 141486
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_pose.uasset
new file mode 100644
index 00000000..8fe32e58
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_clavicle_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:20d21639ca1cd7876ba408a4e6603f66d3d4c9a65d2bbf7c76b59f28e4d020e3
+size 206334
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_anim.uasset
new file mode 100644
index 00000000..46f2b70a
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5d2ef5f757409ad457660e4388272646155d5bcdfecc4705b85b41d338835c6
+size 129460
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_pose.uasset
new file mode 100644
index 00000000..e022eeda
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9b0c29406e6b6a8074edb2b2d1107d62972059ccae5c0bfe3dc6d99d932f00ed
+size 132176
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_anim.uasset
new file mode 100644
index 00000000..b347990b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f872db9323bc78b01d91dea5e406cfa348ef10aeed5b9e66a97ddc87b58704e
+size 129462
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_pose.uasset
new file mode 100644
index 00000000..f35a3146
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_foot_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0313dfda857c8a37ae26a104bee21803eb49acc138a18fd7a6864320d025ef40
+size 132176
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_anim.uasset
new file mode 100644
index 00000000..b2d1b800
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0ad7d36e92954cf783be7be2c7ce8e2e6b3b4376645985a6a772b5890977c381
+size 135460
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_pose.uasset
new file mode 100644
index 00000000..05550aaa
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1d40437f02274fec5ff3cad47fa3e1cb2997db9397507823c299f0749e1c5f0
+size 169206
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_anim.uasset
new file mode 100644
index 00000000..64537c2b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e52609e89b719e493df4ed2a196996db3c4dfff4b20a83f68a747099f31827c9
+size 135462
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_pose.uasset
new file mode 100644
index 00000000..0cd5c370
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_hand_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c9b7b4ce565d7c55919dfeea6b785e2704cba7cc2ca8ad786145739a7eac36bc
+size 169206
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_anim.uasset
new file mode 100644
index 00000000..3653416b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a1761fa57b6504be33ac4c346839446698f20fcc8942a36574ae579e99d6311b
+size 203916
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_pose.uasset
new file mode 100644
index 00000000..9009fa14
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a75265541e206479aabe98ede22dad0ae72aedd9b43fa8c33741422f4c5ec38
+size 361644
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_anim.uasset
new file mode 100644
index 00000000..68f69cbf
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7bad38ef33364282ad783d13ff05ac64235fbd94f735f7970aa690f302927139
+size 165486
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_pose.uasset
new file mode 100644
index 00000000..ad01a2d9
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_lowerarm_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02a9cb1c077531f9bc0acd2f5868d25d42e7f1edaf21d29b0a89a67f277bb2d2
+size 361644
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_anim.uasset
new file mode 100644
index 00000000..6abd3af2
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46328ac897d55c35ed2c5f7d28443c963b6e4ed348adaf74980b1b7e64514975
+size 195468
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_pose.uasset
new file mode 100644
index 00000000..30332d0b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac1fba41bdc8d3832f26bee507b7f83d2e51051cae58ecbea0a1e73f3d1e8198
+size 557972
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_anim.uasset
new file mode 100644
index 00000000..a18ad76e
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b17348bde6d9bd17838698331f08c1babf8a120aab05553ddcbf658cef3d6caf
+size 195470
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_pose.uasset
new file mode 100644
index 00000000..c673e13f
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_thigh_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3bd106c4cf63362f741611edf562149e7d928c4e12a5debac2a27265bc315775
+size 557972
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_anim.uasset
new file mode 100644
index 00000000..e4c5ebe7
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59995bd0fd055a0c29809abcec8ab593a4cfb517a8c52d09b56870ad46a6a431
+size 207486
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_pose.uasset
new file mode 100644
index 00000000..91540fe4
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b56619a8bff783926b5bc17770f90ca5b6dae18cfce0cfde29c69db26df8c968
+size 641633
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_anim.uasset
new file mode 100644
index 00000000..cef74d71
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:55a49a9b5f1d55df4733f651d7110c677fff421e8ccf317a7b5604d46380df9c
+size 207488
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_pose.uasset
new file mode 100644
index 00000000..00174b75
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Manny/Manny_upperarm_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed2b9dab16c319539175975f14ed906f2e442ebb3705a0f1bfb932b8b2752eec
+size 630195
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_anim.uasset
new file mode 100644
index 00000000..41247fa5
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:315c606d481e66842161f6d640843049c1bb8fad801817cdc01b5347459fe663
+size 190030
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_pose.uasset
new file mode 100644
index 00000000..7c0c6644
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5ee7e7490da8bc5da27bee03d313475c546418b9aa15186cc1e342ac314d1599
+size 245188
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_anim.uasset
new file mode 100644
index 00000000..54c61deb
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46a6c2f1c8b50afe1849072f062ead508a2f570682f1b21b2e85334776c5f315
+size 228099
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_pose.uasset
new file mode 100644
index 00000000..c7c29305
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_calf_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eaf41bdfdbbcde2f668b07dd932baac1b5517312d04d75b77dce1e82272b31b4
+size 245269
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_anim.uasset
new file mode 100644
index 00000000..89f006aa
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:def1eceb6484991a242bd5bd4bf2c9c1b857861ff5b981ee916a23d4db023b4b
+size 222063
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_pose.uasset
new file mode 100644
index 00000000..da6c387c
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2225dbb5778c1529862086865e86272e574cc993ac0a48cb1c0cc28fafb27c1
+size 205936
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_anim.uasset
new file mode 100644
index 00000000..3fc197f5
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97a0673daaa10512b94608a6ff11d82914e0812760b75ea7e86c3b43c0b4c97b
+size 183734
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_pose.uasset
new file mode 100644
index 00000000..7c90b800
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_clavicle_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aba097887d167f4b9277338de16c7feb689882acb393b32a0ac176d27f62e2b8
+size 205980
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_anim.uasset
new file mode 100644
index 00000000..500df25c
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6995c1603c3553af502c2ef04f6fb685d9183f0668266c6562f16238e08f80fb
+size 171708
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_pose.uasset
new file mode 100644
index 00000000..16a952aa
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98e401355f6f5bdba83fc2e84ecd9d7e5128f1d6f0c585f368b9d971da58273c
+size 132123
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_anim.uasset
new file mode 100644
index 00000000..b79204b7
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:91500b65453319b136c33e0b3edb161adf1030a5c3c30c8602390f1725af65b3
+size 171710
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_pose.uasset
new file mode 100644
index 00000000..a1b9497d
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_foot_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d4af5fd34572deb49a2335651c0a311e4db80ed2394c6c1ad633735fa1cf5e44
+size 132123
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_anim.uasset
new file mode 100644
index 00000000..30a8ffb1
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b0b0e92c4297c40bf94f63ccebd938acc49fc4b1ce45f1680fa533c5ea923cc
+size 177708
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_pose.uasset
new file mode 100644
index 00000000..01c81058
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c7c66da3c6a7b2801d9ada447fff4a2593a4b6054a178141f1eae26e21e4b3a7
+size 169153
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_anim.uasset
new file mode 100644
index 00000000..635dce77
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c6128ed9b666f06dde9df5e3d647aff8994b07ad1b4b36fedf693726d63ce138
+size 158608
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_pose.uasset
new file mode 100644
index 00000000..622cc1b4
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_hand_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:973ad5984394de84cfbe2dd3021f7f64f8c4c2e85b6573866382df76c0d9d2f3
+size 169153
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_anim.uasset
new file mode 100644
index 00000000..5a95d707
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ecd03a972b3109a14840c924efe7d5f6b486ad3e7764773d33eacfb8032bea64
+size 194631
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_pose.uasset
new file mode 100644
index 00000000..f2c2239e
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:106aa8dc6d3493474f24e4d3240212c3c24428249d5f09f078c65d0372cc3d4d
+size 399529
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_anim.uasset
new file mode 100644
index 00000000..d830514c
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:93be05fdf4241bdc152877416175f804bd2e1976d7588919192316bd7b21e936
+size 194633
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_pose.uasset
new file mode 100644
index 00000000..a9791658
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_lowerarm_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:610877f087e4e77eba703036159d4abc95b52a1f196b7a317da97963e7477455
+size 399529
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_anim.uasset
new file mode 100644
index 00000000..d39f2031
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ae59b67795d102845bd680e15d74a9b70688315a0ca489232f56cc9005de5597
+size 218614
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_pose.uasset
new file mode 100644
index 00000000..591b42b9
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04d95febf97f6a4d406c53efc6551eb20b378c8a91fef18c151b92a8b3df1abb
+size 557618
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_anim.uasset
new file mode 100644
index 00000000..0062c43c
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b808aa71712168bf1905b91a238f152347579523c2eeec52401b67bf6de6ad27
+size 218616
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_pose.uasset
new file mode 100644
index 00000000..49e65e6b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_thigh_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76f65a5466dd4cd84abd48bef6245bb84930f7b8efff23807a88d4b23df3c1b3
+size 557618
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_anim.uasset
new file mode 100644
index 00000000..81727ce1
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1de49cf76ee2b6e93936cad3a1ace2bb849e3cd84a24bb84e566abde3a035758
+size 206632
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_pose.uasset
new file mode 100644
index 00000000..782027a6
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_l_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d72952cdf9066cd84e1e5ea11cc2f6a754b0e79f8f037e1f2c8fc8c86ddb408f
+size 485440
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_anim.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_anim.uasset
new file mode 100644
index 00000000..a756ff3b
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_anim.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d1fd8bad84e7c6c45884137870261dc78789def4c72683b3775790722d1894d
+size 206634
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_pose.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_pose.uasset
new file mode 100644
index 00000000..ed588fcc
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/Poses/Quinn/Quinn_upperarm_r_pose.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee8b8e737a19894faf44176bcd5aca3405b3a1879eeea792ebdb0c534691cf1c
+size 488450
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Rigs/RTG_Mannequin.uasset b/EndlessVendetta/Content/Characters/Mannequins/Rigs/RTG_Mannequin.uasset
new file mode 100644
index 00000000..88c8cd29
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Rigs/RTG_Mannequin.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:710754e06ca383f6333958aea11321463736f5ffe6b1f82dfcf79896e2a5228b
+size 23721
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_ASAOPMASK_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_ASAOPMASK_MSK.uasset
new file mode 100644
index 00000000..110ab264
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_ASAOPMASK_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac817a2d33aa0cd0a8695b9fba9a925a1c71cfbe6de32986a51e6acb1ca598c0
+size 3612605
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset
new file mode 100644
index 00000000..0875d1de
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8036d465bf677ee48f2c45bb50911cbd085a3d5208959e0b70377bb8d9bc26a6
+size 18514168
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_CCRCCPlastic_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_CCRCCPlastic_MSK.uasset
new file mode 100644
index 00000000..83b1a1f5
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_CCRCCPlastic_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a3502ef8e4e68f4968b52510cf1fbf2fc0ccc1eb8d7c1e1afeb350d650c2e8ab
+size 10271972
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset
new file mode 100644
index 00000000..eb17abe4
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc929bd4eb67ba8610069c601709062d142cca925eedc40c89a940037650b524
+size 5740376
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MSR_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MSR_MSK.uasset
new file mode 100644
index 00000000..f3414989
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MSR_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b54209191bfa9dc3c8e195661e0d7807a24f039a3010d54f04e984f63669881c
+size 11038184
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_N.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_N.uasset
new file mode 100644
index 00000000..6168d144
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b90b6df5b96b505495be378ecb268a17640ba88b40cfe5b0fc764aac26a07c40
+size 7198251
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_Tan.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_Tan.uasset
new file mode 100644
index 00000000..ed6ba96d
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_Tan.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:251a25a1ac777fddadd2845c84edca5b4ce15b749e9f46d8169c001b9be9c4ea
+size 1357770
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_ASAOPMASK_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_ASAOPMASK_MSK.uasset
new file mode 100644
index 00000000..66c12c4f
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_ASAOPMASK_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:51d2a2a0683e0c5654d4c5c724e8360c83e4ffe5181ae740872ca3fc0533e85a
+size 8341381
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset
new file mode 100644
index 00000000..779cd912
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0361a08e270d688814e73adf503937c3012771b0a939f839a06f7c6c8d5269c3
+size 21139527
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_CCRCCPlastic_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_CCRCCPlastic_MSK.uasset
new file mode 100644
index 00000000..acd53f15
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_CCRCCPlastic_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:651eac4091121b27a09f3b13110ec307e9bd815f9a6e573618d051c24387de46
+size 13144043
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset
new file mode 100644
index 00000000..4c97af82
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:42864bd62f0f0d9510453038ff284cc1c1fc09630af8da0cb496e0563a2ffacb
+size 9033544
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MSR_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MSR_MSK.uasset
new file mode 100644
index 00000000..264d3731
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MSR_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb66b07e8c8621bf361a9d18f97c668677e51164b5892c2577c94703531482e8
+size 13677610
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset
new file mode 100644
index 00000000..709611b0
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:790e9d4e061af061c727d118634801c4834b46e119dd1917ffe5d18f6601d53f
+size 7269335
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_Tan.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_Tan.uasset
new file mode 100644
index 00000000..fd9ae9fe
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_Tan.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:187e5fb0047bcc653c7a6e014c49e3d6582e955a3c034579cfb756c80b68dc53
+size 2153790
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_BN.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_BN.uasset
new file mode 100644
index 00000000..cd4420a3
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_BN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:267382e5ca6dcb468e63545e09778b0e16dbd7652cb6d735b487cff1990e809f
+size 16108599
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_D.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_D.uasset
new file mode 100644
index 00000000..a9ba5478
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:792f234ebadad1dc45153c9b1987326d3a4da485d88cf8b1234e3395f5165070
+size 4711156
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_MSR_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_MSR_MSK.uasset
new file mode 100644
index 00000000..d692b9fc
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_MSR_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e765500d0458a2b4612541ae714281afc376b1d4758403017eb1ca6bc6892de9
+size 11656141
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_N.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_N.uasset
new file mode 100644
index 00000000..2c453f37
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8266e8da977f915cbd75329eb02feee571f92067ee749b45099c290519bf20b
+size 5217676
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_Tan.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_Tan.uasset
new file mode 100644
index 00000000..552a695a
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01ID_Tan.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57d9b50418e742ee22fc67783d9db3afb5027c3ef943753e4137742a692b4e01
+size 1104627
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_ASAOMASK_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_ASAOMASK_MSK.uasset
new file mode 100644
index 00000000..044d1f5f
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_ASAOMASK_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5583b02c8b943d60f91f5d9bb59466c9fb1ab3aa811d599c54a20f2a19661b2
+size 5834834
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_CCRCCPlastic_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_CCRCCPlastic_MSK.uasset
new file mode 100644
index 00000000..de237dd6
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_CCRCCPlastic_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2134af63f2d5037e8fcab8e4f50593d62c731f4a8af43bdbd7c2613debea0cbb
+size 12399926
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_BN.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_BN.uasset
new file mode 100644
index 00000000..d47e6fdf
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_BN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa063b2ea5c44fbc95b17b6a6c093c39a6bbbee1082137c42cbf23b311c75cef
+size 19706883
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_D.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_D.uasset
new file mode 100644
index 00000000..779799d9
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40f579c2a83087c90b7f36744a15798194e9ecbe7c6560d0da2903653ed17723
+size 6732524
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_MSR_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_MSR_MSK.uasset
new file mode 100644
index 00000000..282d0b60
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_MSR_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:98195f96efbfcf97ddf05c69f2f04388a5e5aefa22d2c9d771f37b22aba8fc2a
+size 13169771
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_N.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_N.uasset
new file mode 100644
index 00000000..be613344
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:637241dcbbff574ea1032881f60ddb007ce4a33a61864c6b0d3b3b7aa392d0d9
+size 5217676
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_Tan.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_Tan.uasset
new file mode 100644
index 00000000..9b9edc4f
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02ID_Tan.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bcb445b1af4f07ce1b59ab3c8c25af3da7eb1f9c019559b0fd9172c31f38fa5f
+size 1758494
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_ASAOMASK_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_ASAOMASK_MSK.uasset
new file mode 100644
index 00000000..977a24f8
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_ASAOMASK_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53b15563df73f76b904d67eec1f7f7ad3c27166bdb1aa21d99c7f9eec0116d60
+size 6901973
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_CCRCCPlastic_MSK.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_CCRCCPlastic_MSK.uasset
new file mode 100644
index 00000000..717049b2
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_CCRCCPlastic_MSK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe4e287b727a2b1d18f26557d1569111eda715219f8c73bd96cb74ff87c2cb8c
+size 13427858
diff --git a/EndlessVendetta/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset b/EndlessVendetta/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset
new file mode 100644
index 00000000..51bc9085
--- /dev/null
+++ b/EndlessVendetta/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0571397248a1f4acc7607d1e53676cbb154e3c9c8a19d570915d76b70caaf99c
+size 69960
diff --git a/EndlessVendetta/Content/FPWeapon/Materials/M_FPGunPistol.uasset b/EndlessVendetta/Content/FPWeapon/Materials/M_FPGunPistol.uasset
new file mode 100644
index 00000000..1872dca9
--- /dev/null
+++ b/EndlessVendetta/Content/FPWeapon/Materials/M_FPGunPistol.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:abb955fc6a17250b071cde3d7a9c1403826533ff48906851ff00c5205df1607d
+size 30077
diff --git a/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset b/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset
index 69ba91c0..c6396a47 100644
--- a/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset
+++ b/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:eec8c05a75e7932e3834cbc1cd1b112f29171212b871fa1552f458ceb1b65948
-size 8000
+oid sha256:f9c7063e48c0b3c23194a6a2fc3625da96d20bbd92fece19210001cf0cac8964
+size 8568
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset
index 701e0537..8e4ecbd1 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:bedfc53528df762af9be906a8707ddff7568baf324a5d7df56d6bdfe1575ee3d
-size 23020
+oid sha256:722ad362b974f8cd884e1852c963e27f75f4ed6f285759adbd3c3571b1f477c0
+size 57740
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_PC.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_PC.uasset
new file mode 100644
index 00000000..0422e8b5
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_PC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:64c5c7438cb4287bc4df51b9393981eb8155dc5f14525c600d6725960dce6bfd
+size 108419
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_PickUp_Rifle.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_PickUp_Rifle.uasset
index c40095d8..a8f825b9 100644
--- a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_PickUp_Rifle.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_PickUp_Rifle.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:91c5ce4a3278b69b5104cd1d2972be90b80fc199098202556009b1d28b52fe38
-size 32842
+oid sha256:118d852be72576a513c2a8c719e1d94450907a5dc00f27dd98914deb48a18c09
+size 21604
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/AssaultRifles/BP_ARTEST1.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/AssaultRifles/BP_ARTEST1.uasset
new file mode 100644
index 00000000..777ad054
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/AssaultRifles/BP_ARTEST1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00849c635d8e843e1520e12a92f95fd99d9b29e670718919dc847fa283ecc3c9
+size 40704
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/AssaultRifles/BP_BaseAssaultRifle.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/AssaultRifles/BP_BaseAssaultRifle.uasset
new file mode 100644
index 00000000..14593b0f
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/AssaultRifles/BP_BaseAssaultRifle.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f9481ef86ac85568b121922e82b67586cd754928de5fa47e2c8ef57066b514b3
+size 40119
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
new file mode 100644
index 00000000..af5ea1b4
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5e1e829f4770985384af4baf7f94ed5089f11e12ec69b2ec09fb5f193a1ab960
+size 124465
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_GunCameraShake.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_GunCameraShake.uasset
new file mode 100644
index 00000000..cc04228d
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_GunCameraShake.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4358c8520e164b973fae2ae1a18307f0eb691ecfd94b433cbda1052b8b2751fa
+size 7209
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Images/crosshair.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Images/crosshair.uasset
new file mode 100644
index 00000000..aeb09d75
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Images/crosshair.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:110eea3093bb784d7c237753fcd6f029cc8d3b388991f886a9752d6960195e14
+size 12511
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Images/fadenkreuz-transparent-crosshair-slayer-god-hates-us-all-album-cover-11562902578sasayvkjg8.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Images/fadenkreuz-transparent-crosshair-slayer-god-hates-us-all-album-cover-11562902578sasayvkjg8.uasset
new file mode 100644
index 00000000..2caf2972
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Images/fadenkreuz-transparent-crosshair-slayer-god-hates-us-all-album-cover-11562902578sasayvkjg8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df1398829f499b8a95bd2a912851aa613d1b26519496f1bc38a58db91c2a7730
+size 62044
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Pistols/BP_BasePistolWeapon.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Pistols/BP_BasePistolWeapon.uasset
new file mode 100644
index 00000000..f54627fd
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Pistols/BP_BasePistolWeapon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5aebaef6e44e3ebd6edf9b98ada3bdc65e43a0e7372ac8545eee7d3f5f535e21
+size 125647
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Shotguns/BP_BaseShotgun.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Shotguns/BP_BaseShotgun.uasset
new file mode 100644
index 00000000..ca208dae
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Shotguns/BP_BaseShotgun.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:329bb4534943e949f235c44d9782f62012b4e728fa4a566615a718a2ae0f1bde
+size 124581
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset
new file mode 100644
index 00000000..34390329
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c4edd4b9c090f7fd40cb88de61fd3f0a2cf27d5b2e959e8a1189e705df6a9707
+size 125077
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset
new file mode 100644
index 00000000..8506b4d5
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12a2bf04dd00e6b7507070952dc3382734b02f049bd6a73a24f066b802071ca6
+size 64438
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_WeaponStatsPrompt.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_WeaponStatsPrompt.uasset
new file mode 100644
index 00000000..3c992595
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_WeaponStatsPrompt.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b4ab6367925f65273a78ac37e31eea98096d127474edeb245b8ec54d07e5dbb3
+size 186618
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WeaonRecoil/AssaultRecoilPattern.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WeaonRecoil/AssaultRecoilPattern.uasset
new file mode 100644
index 00000000..e0afe7ed
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WeaonRecoil/AssaultRecoilPattern.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:136afa1f1b4d7d302c0824edcbaeff1061de8ca41532af1ff390294a8baeda7a
+size 2033
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_CheckpointCompleted.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_CheckpointCompleted.uasset
new file mode 100644
index 00000000..3ef7c033
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_CheckpointCompleted.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:845fc89fb83a130aea8498c87ed41fadd3de14e00ac010bcd5843b5a19c29f8f
+size 58154
diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Crosshair.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Crosshair.uasset
new file mode 100644
index 00000000..b36651a3
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Blueprints/WBP_Crosshair.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f29a879021fde175da0f45dcffaa1e4b4765574bb429977dc552cd51b2ad899a
+size 24819
diff --git a/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.png b/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.png
new file mode 100644
index 00000000..bde1e40f
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3b2e2cb02f945bc07f0c011c7a5381c6c6dd004a700c77cfdad6e4f7cecc64dc
+size 135953
diff --git a/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.uasset b/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.uasset
new file mode 100644
index 00000000..2c5487a6
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/BluryOrangeHUDOutline.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:70a1e8adb61b189a8a9551e3104fda9ef0734eb0bfbffedc540d6b18dde1cc17
+size 91110
diff --git a/EndlessVendetta/Content/FirstPerson/GunMechanicWorld.uasset b/EndlessVendetta/Content/FirstPerson/GunMechanicWorld.uasset
new file mode 100644
index 00000000..921b01db
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/GunMechanicWorld.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f01d66661ebe4dc7038e9105e8c156e3186fdaeafea8e59cfbcbc7dde0741029
+size 19619
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Combat.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Combat.uasset
new file mode 100644
index 00000000..a78a79b7
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Combat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0176878a0aaf82e74063ae28ae1e67a94529e1daebcfe824c63b28da5534fd0b
+size 1360
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Crouch.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Crouch.uasset
new file mode 100644
index 00000000..9572838e
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Crouch.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:89e10b0349f4813e2c47bd905ee012e34d04b54d8e793ab70c6f813652b06cc9
+size 1360
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_EquipPrimaryWeapon.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_EquipPrimaryWeapon.uasset
new file mode 100644
index 00000000..62f17b30
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_EquipPrimaryWeapon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e8920145a0a5f7ac0f10a98d15f35f28926503ff5d3ea093c79a07688b92bfdf
+size 1707
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_EquipSecondaryWeapon.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_EquipSecondaryWeapon.uasset
new file mode 100644
index 00000000..3c045634
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_EquipSecondaryWeapon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8f05f0bf87ed32cb40eac24d420dc279e2e808df4358300d3f3b839530267584
+size 1717
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_GunAimIn.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_GunAimIn.uasset
new file mode 100644
index 00000000..e3118a9f
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_GunAimIn.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8b9f2db74a440d4cbe20066719467311b6d43de3676027ec2162fc39a2c7ac85
+size 1370
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Interact.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Interact.uasset
new file mode 100644
index 00000000..ef199a6b
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Interact.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:56e5fddda3b901b313fde855f6615339551cedbc06032712cda370c384bab101
+size 1370
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Inventory.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Inventory.uasset
new file mode 100644
index 00000000..385c9c5f
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Inventory.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ab49ececebc9a9d1d7038a1901d08caef22732ffc625ab37a8f71f54846a4809
+size 1375
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Recon.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Recon.uasset
new file mode 100644
index 00000000..aa886642
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Recon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fc86691c4b8b22416ce275bedd78c738d4b9ee2ddcb59ea7c130933c15a290dd
+size 1355
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Reload.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Reload.uasset
new file mode 100644
index 00000000..803128c2
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Reload.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eab7ab2c34f8fe941f0964ebe97c974bbcd4bf68ad27a0f489a65b6cc2c6ddb2
+size 1643
diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Shoot.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Shoot.uasset
index 108736e1..0186b774 100644
--- a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Shoot.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_Shoot.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:e1d44dcf8506d3f89055e8f440e10943ff7f436e1bc5ec345c2a79069e2327d4
-size 1598
+oid sha256:d92be41146c90185585f7a2de5a18d31a688d2cc8dfb22b24b9a7a92dbfd1ce1
+size 1355
diff --git a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset
index 81354aec..6f199667 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:6faeeff3129efe33b48bd11297efb307a7bbcc6c98d6fc8da4742c0759a7e2ea
-size 12793
+oid sha256:750ab013f24a45539806fd40e9cd2a328ff31b40c5d3edcce0676fb3bf6935ee
+size 18664
diff --git a/EndlessVendetta/Content/FirstPerson/Input/IMC_Weapons.uasset b/EndlessVendetta/Content/FirstPerson/Input/IMC_Weapons.uasset
index e1400043..0f7cd254 100644
--- a/EndlessVendetta/Content/FirstPerson/Input/IMC_Weapons.uasset
+++ b/EndlessVendetta/Content/FirstPerson/Input/IMC_Weapons.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cbc3f6b581c994996d42e89d377343eb9699442117748a71f9ead311d203992b
+oid sha256:24bf0d5a1ecce706cf33ff99e0ba7c1e0601dea5433ffd1f61732d522c9f4488
size 4115
diff --git a/EndlessVendetta/Content/FirstPerson/Maps/FirstPersonMap.umap b/EndlessVendetta/Content/FirstPerson/Maps/FirstPersonMap.umap
index 18ab88e2..54eb07cc 100644
--- a/EndlessVendetta/Content/FirstPerson/Maps/FirstPersonMap.umap
+++ b/EndlessVendetta/Content/FirstPerson/Maps/FirstPersonMap.umap
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:50dc7643805f79735dcfd5446b36ff8ddea8adeda4b88438744192186c26f707
-size 19238
+oid sha256:89c980519d00e643fc39c075bf791f256c5cbedde3f1714c9b8dc549b66f747d
+size 19936
diff --git a/EndlessVendetta/Content/FirstPerson/Maps/GunMechanicTester.umap b/EndlessVendetta/Content/FirstPerson/Maps/GunMechanicTester.umap
new file mode 100644
index 00000000..9b60a76e
--- /dev/null
+++ b/EndlessVendetta/Content/FirstPerson/Maps/GunMechanicTester.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:317895349b964df99a6a8316ea5f4664ebf4127af8e56f543893d36cc49afbfe
+size 19651
diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset
index c514eab5..44d21afa 100644
--- a/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset
+++ b/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:175427d440d7f510cbbfa4630c82a677a83348f3b3b5cc555e09a7b03cf2e4ee
-size 473991
+oid sha256:bd95413d072ec5535444d09946cfb0ec3f4f6392ff5712e60fa521c845b23cdc
+size 478510
diff --git a/EndlessVendetta/Content/Gadgets/BP_DeadEnemy.uasset b/EndlessVendetta/Content/Gadgets/BP_DeadEnemy.uasset
new file mode 100644
index 00000000..934ef0f7
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/BP_DeadEnemy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:45e0a403f0bfb807fb6b6b3fe987c02e2f1f79af908507e8071a0c6259d64ed1
+size 28624
diff --git a/EndlessVendetta/Content/Gadgets/BP_GadgetTestEnemy.uasset b/EndlessVendetta/Content/Gadgets/BP_GadgetTestEnemy.uasset
new file mode 100644
index 00000000..48b9b41e
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/BP_GadgetTestEnemy.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a3c55e1fa7f6cecc3cf312e04498d0b8d9bfdfaac710b43392a61dfd34399fd
+size 29209
diff --git a/EndlessVendetta/Content/Gadgets/BP_Grenade.uasset b/EndlessVendetta/Content/Gadgets/BP_Grenade.uasset
new file mode 100644
index 00000000..b1f7c397
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/BP_Grenade.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0973ba2e3915d82c77975bb8899e2edebcca3eac00001b2d43dc28e63c7070a0
+size 48239
diff --git a/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/BP_OM_Explosive.uasset b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/BP_OM_Explosive.uasset
new file mode 100644
index 00000000..7a2cb36f
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/BP_OM_Explosive.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0294c0bf210acc1dbff59e7259400d9dd1c0f2a6674c2a130a5a24dd7e8d6c9d
+size 49878
diff --git a/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/CG_OverloadModule.uasset b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/CG_OverloadModule.uasset
new file mode 100644
index 00000000..ac45c725
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/CG_OverloadModule.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a0ac6bb1c776390adbc9e10c1a9e9c6629c4f69eea6d3720d502a3b7807abf0
+size 110595
diff --git a/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.png b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.png
new file mode 100644
index 00000000..75c24735
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5edf9d42aa5282afec2532e9e5998f185722431e0a28318194705b15b38dfd14
+size 225535
diff --git a/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.uasset b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.uasset
new file mode 100644
index 00000000..9f2d7e12
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/OM_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f275cf27038f08969c74d019dc74731cd60776e4e9ce940a5ef083740934f7e8
+size 244041
diff --git a/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/WBP_OM_ScreenWidget.uasset b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/WBP_OM_ScreenWidget.uasset
new file mode 100644
index 00000000..f48c5af0
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/CombatGadgets/OverloadModule/WBP_OM_ScreenWidget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2ca74a9a4b471019294bae3731c5b9d96eedd3ef09a2c877a7b0966457437f6c
+size 260939
diff --git a/EndlessVendetta/Content/Gadgets/GM_GadgetManager.uasset b/EndlessVendetta/Content/Gadgets/GM_GadgetManager.uasset
new file mode 100644
index 00000000..3a71ffb5
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/GM_GadgetManager.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e05b0025b98476924070ad8a2492e16ce32fb434b63e82b53a509c63f6e0962a
+size 22228
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/BP_RingingPhone.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/BP_RingingPhone.uasset
new file mode 100644
index 00000000..c2168845
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/BP_RingingPhone.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7b98c1ddcdd17636cb29a010217910419c7674894cef53127e723f4298fb714d
+size 47866
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RG_RingModule.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RG_RingModule.uasset
new file mode 100644
index 00000000..e5b9faad
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RG_RingModule.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:163e6c220966ca84c1c7e3f9ae176fe99bb0f7b8b364403ad5cf42f0272a87f0
+size 108688
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.png b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.png
new file mode 100644
index 00000000..b99788f0
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2dbb36f50568ec3e11397930be8509d0e2132f0fbd1c67c235cb6539bb90736f
+size 15138
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.uasset
new file mode 100644
index 00000000..e8226353
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/RM_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31f38b67634e9abe78242aac142e76eafee10d6101d5189f13a941b1a9bffb4d
+size 27381
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_1.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_1.uasset
new file mode 100644
index 00000000..e6ba3ca4
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d35033628bd5db17cb99027efbab8c2dd473e5388fb32d34558e11e7f338c73d
+size 3852614
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_2.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_2.uasset
new file mode 100644
index 00000000..ec55125b
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0ea010e84dc996169f39e921770477b79303bccf4bb40972f258106064245e6e
+size 3386251
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_4.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_4.uasset
new file mode 100644
index 00000000..93fcaa59
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8386a474ed43859781c4a531ccb1236ba402a03b4f1927ed7b5d5079f1980661
+size 3390670
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_1.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_1.uasset
new file mode 100644
index 00000000..d69e0e6a
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00265bc01e803ae78c9486a50cdb2fe60b93de0d265a599dec052b079cc724c8
+size 4272
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_2.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_2.uasset
new file mode 100644
index 00000000..a81042d9
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8b96750f088380206ae1d2efbe770b4257e226e91e25931200a75e0816087dc
+size 4272
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_4.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_4.uasset
new file mode 100644
index 00000000..526aa997
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingTone_Cue_4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:324f88c110dc7f51d064e81abab62461b423fa3fd69926a9e5c7a03d34e143e3
+size 4272
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingtone_3.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingtone_3.uasset
new file mode 100644
index 00000000..50d48159
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingtone_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81979a2046a7663ac4f084d2824198b887b891f2dfb2d497ba58ebf5bf89d166
+size 4030169
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingtone_Cue_3.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingtone_Cue_3.uasset
new file mode 100644
index 00000000..6d4ddfdd
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/Ringtones/TempRingtone_Cue_3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7858b2bb4d57c53a0fa054ba19bda0f09e8c7b6bb797785be5c0e91a3ab9cb41
+size 4272
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/WBP_RM_ScreenWidget.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/WBP_RM_ScreenWidget.uasset
new file mode 100644
index 00000000..747ddfc3
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/RingModule/WBP_RM_ScreenWidget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ffd72773986cdacf62029cebebc6b25f8a581d0270358c303b8a968c6bfd23da
+size 254397
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/BP_Ping.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/BP_Ping.uasset
new file mode 100644
index 00000000..4b2eeb98
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/BP_Ping.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d550ef5403fa8eb4429aa8a02bf20ee8861165cdfec6f86783634750e14c7ad2
+size 64620
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.png b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.png
new file mode 100644
index 00000000..6e12b0fe
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9e0e7b01c20546d33776b7e9ab7b48c2e81a79c07558f92ed0ef035ad729cd2a
+size 66320
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.uasset
new file mode 100644
index 00000000..60b1fbff
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/PingImage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71d15ce6872f9185621eabe6eb24774f8014dfddbc4e89e6c6961f662d269445
+size 74727
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/WBP_Ping.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/WBP_Ping.uasset
new file mode 100644
index 00000000..18281d37
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Ping/WBP_Ping.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11ba552af3b2c39dcfae07749f63f56e4f87b1bcc38306d9a7f51d037e20e5d5
+size 54205
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/RG_VisionLink.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/RG_VisionLink.uasset
new file mode 100644
index 00000000..aea6e927
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/RG_VisionLink.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:576cf6674035552a043dab60a2173beec40cf65683d138ad0df40f66fd48370b
+size 108618
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.png b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.png
new file mode 100644
index 00000000..d40a89cc
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:163d14a68f1e9ec9560929fb14cd1f1a9fae3eaaceb55729ba8bd94926f9ac1a
+size 7315
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.uasset
new file mode 100644
index 00000000..c4a60031
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/VL_Icon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95440712c856cd34fe77906b6c4fc85647181e6d06277829c741e41167abae08
+size 20322
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.png b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.png
new file mode 100644
index 00000000..66c7ba77
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:527675573f05b7640baddcab7340a398e3daa8a170ef6b43d0e8ce4b22594c1c
+size 60971
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.uasset
new file mode 100644
index 00000000..8db47e99
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/VisionLinkViewPortBG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67d9f11bc227f55da0c8ed5642e838600c464ad28dd6ff960cf8d89e3e4d2156
+size 45631
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/WBP_VisionLinkViewPort.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/WBP_VisionLinkViewPort.uasset
new file mode 100644
index 00000000..2fe7eeaa
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/Viewport/WBP_VisionLinkViewPort.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a0df7d8ccd875abeaaa1f439439dc1a8dd8fb765c09cbaf506743dcfede51538
+size 199275
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WBP_VisionLinkWatchFace.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WBP_VisionLinkWatchFace.uasset
new file mode 100644
index 00000000..f4473218
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WBP_VisionLinkWatchFace.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc8393479c593c48fd8db154aa11f6ac9f5f6d5cd03ee4d93f2754556653dccb
+size 161556
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.png b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.png
new file mode 100644
index 00000000..b7f30e16
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd09031c00b4f5c7775a880706b149a33d8c6137dc79cf156722c6197791198d
+size 15063
diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.uasset
new file mode 100644
index 00000000..4e03bf1b
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/WatchFace/WatchFaceBGImage.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9aa56bafa97642804de02c9e00f3a77e0794167d534174993b616e8761757153
+size 19863
diff --git a/EndlessVendetta/Content/Gadgets/TestGadgets/CG_ExampleCombat.uasset b/EndlessVendetta/Content/Gadgets/TestGadgets/CG_ExampleCombat.uasset
new file mode 100644
index 00000000..154f762a
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/TestGadgets/CG_ExampleCombat.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5647c792435713b3b313153fd4a9985e6f0a69adca680e12c8e309ff35ee89b9
+size 29363
diff --git a/EndlessVendetta/Content/Gadgets/TestGadgets/IA_UseGadget.uasset b/EndlessVendetta/Content/Gadgets/TestGadgets/IA_UseGadget.uasset
new file mode 100644
index 00000000..6ff56db6
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/TestGadgets/IA_UseGadget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:612640a4303e85695119bd2552ac09775debae2b5f0e4c04317f4b7bcf45680b
+size 1363
diff --git a/EndlessVendetta/Content/Gadgets/TestGadgets/IMC_Gadget.uasset b/EndlessVendetta/Content/Gadgets/TestGadgets/IMC_Gadget.uasset
new file mode 100644
index 00000000..bab4f88c
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/TestGadgets/IMC_Gadget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c0a91a49b1c3887fd037daaa0033990d9f49625e36b765e196d5f5765a8638a
+size 2477
diff --git a/EndlessVendetta/Content/Gadgets/TestGadgets/RC_ExampleRecon.uasset b/EndlessVendetta/Content/Gadgets/TestGadgets/RC_ExampleRecon.uasset
new file mode 100644
index 00000000..7630574b
--- /dev/null
+++ b/EndlessVendetta/Content/Gadgets/TestGadgets/RC_ExampleRecon.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d162dc461b9db3b93d49bf5d7abe2a0b1a96faba906ab9faef43bb9fed45ca5
+size 29969
diff --git a/EndlessVendetta/Content/Inventory/M_Base.uasset b/EndlessVendetta/Content/Inventory/M_Base.uasset
new file mode 100644
index 00000000..ff9c03b9
--- /dev/null
+++ b/EndlessVendetta/Content/Inventory/M_Base.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46f740304c399e9d98a0a1744f320928201179685c6de52013d02fde640b0aa5
+size 21988
diff --git a/EndlessVendetta/Content/Inventory/M_Base_Rot.uasset b/EndlessVendetta/Content/Inventory/M_Base_Rot.uasset
new file mode 100644
index 00000000..ad45269b
--- /dev/null
+++ b/EndlessVendetta/Content/Inventory/M_Base_Rot.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3dc387e928b76f39cdbad7961e09b77c848b2d6df0348a0f4052bdc98976a659
+size 18207
diff --git a/EndlessVendetta/Content/Inventory/MyBaseItem.uasset b/EndlessVendetta/Content/Inventory/MyBaseItem.uasset
new file mode 100644
index 00000000..024d162f
--- /dev/null
+++ b/EndlessVendetta/Content/Inventory/MyBaseItem.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:789627d1177e0ef93075f0ca5a5b27156b16dfce514a80c543108f133a70b7d2
+size 6587
diff --git a/EndlessVendetta/Content/Inventory/UI/UI_Inventory.uasset b/EndlessVendetta/Content/Inventory/UI/UI_Inventory.uasset
new file mode 100644
index 00000000..3b397eac
--- /dev/null
+++ b/EndlessVendetta/Content/Inventory/UI/UI_Inventory.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02676d43ab06d6fe84a89f2c8c147415615e84ab3474cb59e75888dae53f5711
+size 96823
diff --git a/EndlessVendetta/Content/Inventory/UI/UI_InventoryGrid.uasset b/EndlessVendetta/Content/Inventory/UI/UI_InventoryGrid.uasset
new file mode 100644
index 00000000..fc14eb3f
--- /dev/null
+++ b/EndlessVendetta/Content/Inventory/UI/UI_InventoryGrid.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8cce77e4317282a52477d49365a307a4673915f14b6013ee32ed2ef26800fa37
+size 563097
diff --git a/EndlessVendetta/Content/Inventory/UI/UI_ItemWidget.uasset b/EndlessVendetta/Content/Inventory/UI/UI_ItemWidget.uasset
new file mode 100644
index 00000000..c6979830
--- /dev/null
+++ b/EndlessVendetta/Content/Inventory/UI/UI_ItemWidget.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ffcc3dbb5d6cafefa035c2e86c1fe4579fee9ce62abced4d4d86216caaf620f2
+size 147282
diff --git a/EndlessVendetta/Content/Inventory/zeldamus.uasset b/EndlessVendetta/Content/Inventory/zeldamus.uasset
new file mode 100644
index 00000000..840e1137
--- /dev/null
+++ b/EndlessVendetta/Content/Inventory/zeldamus.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5616afc778197366258235add689576f3323e03e78a5ec49000fbac40dd6674b
+size 745780
diff --git a/EndlessVendetta/Content/LevelPrototyping/Materials/M_Concrete.uasset b/EndlessVendetta/Content/LevelPrototyping/Materials/M_Concrete.uasset
index b736fc53..a20b7988 100644
--- a/EndlessVendetta/Content/LevelPrototyping/Materials/M_Concrete.uasset
+++ b/EndlessVendetta/Content/LevelPrototyping/Materials/M_Concrete.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f82aae23b3e53d90b0591c9235422e2c017b3ab772e027e1716fe0aac09a83a1
-size 13263
+oid sha256:d5692f37e17b40b81fe2957ab5c5b1911f96fff8f89d93ca6435eab7919707a0
+size 13312
diff --git a/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_BaseColor.uasset b/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_BaseColor.uasset
index 670a7953..76618f47 100644
--- a/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_BaseColor.uasset
+++ b/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_BaseColor.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:afbf0b8a0b4a42008dc0a9110d1dacfcda4b62d391568de0f9cf720191bbac84
-size 1645261
+oid sha256:9b0dbb428642c1b0e58836ea2209e1582299c1f2e1da0862199dafa7dd308e3e
+size 1645445
diff --git a/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_Normal.uasset b/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_Normal.uasset
index 358c7c15..02659af3 100644
--- a/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_Normal.uasset
+++ b/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_Normal.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:7c65f7761aed5143a2449a2a4911dcc920a848f6cb4762b1a066f26318be8f18
-size 2960090
+oid sha256:7f4f79671afa46c75ed303f899d08cc6ceeba8c196a609bf431987f6298e4492
+size 2960274
diff --git a/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_OcclusionRoughnessMetallic.uasset b/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_OcclusionRoughnessMetallic.uasset
index fcb2ac67..bcefe216 100644
--- a/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_OcclusionRoughnessMetallic.uasset
+++ b/EndlessVendetta/Content/LevelPrototyping/Materials/Panel_Concrete_OcclusionRoughnessMetallic.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:797990c3f21eb6c8703ad1d9aefe0077019aa2fac3499cb2054aa77870cba8ef
-size 352560
+oid sha256:f4a0db0198e019e1fe271f4c96b469b23505c66536b0f5db30d69abfb527c6d3
+size 352744
diff --git a/EndlessVendetta/Content/Levels/BountySystemTestLevel.umap b/EndlessVendetta/Content/Levels/BountySystemTestLevel.umap
new file mode 100644
index 00000000..d3a27dd4
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/BountySystemTestLevel.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:08b2531ae6806a5368e1a7a237d570a505db2ebeacac6f84152ce3d5578eb2ba
+size 19390
diff --git a/EndlessVendetta/Content/Levels/EnemyAITest.umap b/EndlessVendetta/Content/Levels/EnemyAITest.umap
new file mode 100644
index 00000000..f0f1c07a
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/EnemyAITest.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97f28af544501872195bdf14fd3a58f7d347a193661e85581c1561a5ef397a48
+size 19695
diff --git a/EndlessVendetta/Content/Levels/FirstPersonMap.umap b/EndlessVendetta/Content/Levels/FirstPersonMap.umap
new file mode 100644
index 00000000..b55a585b
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/FirstPersonMap.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:23d2e3f9308eca1cb84f2561c48860f0c51b5e8c51a7257dff11988d2e1b5724
+size 2116
diff --git a/EndlessVendetta/Content/Levels/GadgetSystemTestLevel.umap b/EndlessVendetta/Content/Levels/GadgetSystemTestLevel.umap
new file mode 100644
index 00000000..ee781591
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/GadgetSystemTestLevel.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:38cb9c3d251f43819b4908c0a95aff93c8c3185de87ef7051cf426b33797f636
+size 108254
diff --git a/EndlessVendetta/Content/Levels/NewMiamiTemp.umap b/EndlessVendetta/Content/Levels/NewMiamiTemp.umap
new file mode 100644
index 00000000..3b8d0ca0
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/NewMiamiTemp.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3006f6fb9769c48880863300d73a5a8b6fff1ea6b8e64ca2d115c3a66e33735f
+size 105819
diff --git a/EndlessVendetta/Content/Levels/TrainingFacility.umap b/EndlessVendetta/Content/Levels/TrainingFacility.umap
new file mode 100644
index 00000000..96d1e37e
--- /dev/null
+++ b/EndlessVendetta/Content/Levels/TrainingFacility.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:62157039ed6eedf1be5cc14450e620e5df74fac88d040047ee7ad0f45f5adb60
+size 607293
diff --git a/EndlessVendetta/Content/Ships/BP_HomeShip.uasset b/EndlessVendetta/Content/Ships/BP_HomeShip.uasset
new file mode 100644
index 00000000..2fcb8256
--- /dev/null
+++ b/EndlessVendetta/Content/Ships/BP_HomeShip.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5adf54f06d91186e171b05251396919a7994ee9c88964a4a49a4743058b2df8b
+size 38469
diff --git a/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset b/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset
index 7857a318..c2a34afc 100644
--- a/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset
+++ b/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9f30117b76896d48b443b9e2ec86efcc94f33e53645c91797601c5ea38040c69
-size 14831
+oid sha256:4c0ecf0ac0702cc2bd355ec050232a61c49e10f102448efbeb735a51824adef6
+size 14948
diff --git a/EndlessVendetta/Content/StarterContent/Audio/Collapse01.uasset b/EndlessVendetta/Content/StarterContent/Audio/Collapse01.uasset
index 5e3ff30e..725f0165 100644
--- a/EndlessVendetta/Content/StarterContent/Audio/Collapse01.uasset
+++ b/EndlessVendetta/Content/StarterContent/Audio/Collapse01.uasset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:85c827023ee4b466228ec65e92b4b4a0415a106de041ac1c2cab481a2a5dfa8d
-size 348532
+oid sha256:4815d000df3f59003c8490408559e3a0c3c714fab5deaac914d3085d5bfed65c
+size 353935
diff --git a/EndlessVendetta/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset b/EndlessVendetta/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset
new file mode 100644
index 00000000..53b74e99
--- /dev/null
+++ b/EndlessVendetta/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:77ea60d528f8dedb8a1e810e8c41b193fb6ad35a25855fe4790784e42d7f7847
+size 34232
diff --git a/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Jump.uasset b/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Jump.uasset
new file mode 100644
index 00000000..f259a9a3
--- /dev/null
+++ b/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Jump.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be70c0d8a764ac67ce853e9bf07a97332996c27bcbf49e0ffafe0c3c13711c51
+size 1307
diff --git a/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Look.uasset b/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Look.uasset
new file mode 100644
index 00000000..66b846e8
--- /dev/null
+++ b/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Look.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f31e273949de9b9798743f238b895cd422d9b14e77f73e11d993ff3527bbb735
+size 1454
diff --git a/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Move.uasset b/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Move.uasset
new file mode 100644
index 00000000..7b57d9b6
--- /dev/null
+++ b/EndlessVendetta/Content/ThirdPerson/Input/Actions/IA_Move.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8ece438a653b29d1c64011ef11d4bd05245413994ecf4ad80ef4da1694b666f
+size 1454
diff --git a/EndlessVendetta/Content/ThirdPerson/Input/IMC_Default.uasset b/EndlessVendetta/Content/ThirdPerson/Input/IMC_Default.uasset
new file mode 100644
index 00000000..2b0033cc
--- /dev/null
+++ b/EndlessVendetta/Content/ThirdPerson/Input/IMC_Default.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:658cd92edd5950a4c65ab878682bde4ee787adf1b0d1c3d529fc9f43bcfe0830
+size 12793
diff --git a/EndlessVendetta/Content/ThirdPerson/Maps/ThirdPersonMap.umap b/EndlessVendetta/Content/ThirdPerson/Maps/ThirdPersonMap.umap
new file mode 100644
index 00000000..29ccb762
--- /dev/null
+++ b/EndlessVendetta/Content/ThirdPerson/Maps/ThirdPersonMap.umap
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea0979f98e1f73562e66dd20db6bbfef467cf1a2d7da7d9111ea81fab98ff211
+size 18857
diff --git a/EndlessVendetta/Content/UI/UI_Material_SeeThroughWalls.uasset b/EndlessVendetta/Content/UI/UI_Material_SeeThroughWalls.uasset
new file mode 100644
index 00000000..06d1c788
--- /dev/null
+++ b/EndlessVendetta/Content/UI/UI_Material_SeeThroughWalls.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3439980aab6831afe77137df063f00b63258da0e3ba5c3c8b84a00e86c48bbf9
+size 15025
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/A/OW/M2M9BG6AWDJW3UNODUVGA2.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/A/OW/M2M9BG6AWDJW3UNODUVGA2.uasset
new file mode 100644
index 00000000..d2ed851f
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/A/OW/M2M9BG6AWDJW3UNODUVGA2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e389d4fdd420c3db3068711fe04fd3fa8d65bdb13895ef085fc9deb499078797
+size 5288
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/B/EL/ZUCMIANGP54V86XN0JR5Y6.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/B/EL/ZUCMIANGP54V86XN0JR5Y6.uasset
new file mode 100644
index 00000000..a5caac61
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/B/EL/ZUCMIANGP54V86XN0JR5Y6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce6567235fd97e70957e706942ac503a48630467d721fee98bbfa4eb26a8b294
+size 27307
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/D/KO/5NABXAV1RIRN3HX2KXBHV8.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/D/KO/5NABXAV1RIRN3HX2KXBHV8.uasset
new file mode 100644
index 00000000..ee2444db
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/FirstPersonMap/D/KO/5NABXAV1RIRN3HX2KXBHV8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1ea76fc172df362aee30e4018ebac61f97f005f127b25e628b6befb851e332c6
+size 10457
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/25/17SUOAG1ZXCXS8NCT6BX1J.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/25/17SUOAG1ZXCXS8NCT6BX1J.uasset
new file mode 100644
index 00000000..7c8720d9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/25/17SUOAG1ZXCXS8NCT6BX1J.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:772087796135600b11d143dec0c8996663a3f6185c09c7d50e09e235b06a8ff4
+size 4791
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/GK/2Y8SXHNN2DD2HWUFT5W8WJ.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/GK/2Y8SXHNN2DD2HWUFT5W8WJ.uasset
new file mode 100644
index 00000000..eefd8c77
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/GK/2Y8SXHNN2DD2HWUFT5W8WJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db94b82619e2d3184e577effce11d85cd85c4085e59d3aed9dc9223f33bc0c24
+size 4502
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/IZ/XQW4EUO3VZ41RD1M86T11D.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/IZ/XQW4EUO3VZ41RD1M86T11D.uasset
new file mode 100644
index 00000000..061cd85a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/IZ/XQW4EUO3VZ41RD1M86T11D.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28ffaa0dfb2279028ea95ca7fe6117646211631961efb80ea958393a8595b96d
+size 4791
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/X0/A8AJ030WDFS3UX0CDW7NQT.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/X0/A8AJ030WDFS3UX0CDW7NQT.uasset
new file mode 100644
index 00000000..3dbc6545
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/X0/A8AJ030WDFS3UX0CDW7NQT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:91f151f31ecf16ac36949ff0dc58e7978690b14334ab19dcf8027e38c6e8c393
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/CZ/T22L35O6ZL5DC7H1KAS12V.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/CZ/T22L35O6ZL5DC7H1KAS12V.uasset
new file mode 100644
index 00000000..728f0e59
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/CZ/T22L35O6ZL5DC7H1KAS12V.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e0ec1b5b73477f139a5d856e771bd2f669107ac5ff461949b66e592da9e07d37
+size 5290
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/EX/M4NUWNTSMSB30D92R0JNVH.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/EX/M4NUWNTSMSB30D92R0JNVH.uasset
new file mode 100644
index 00000000..572e71f7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/EX/M4NUWNTSMSB30D92R0JNVH.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:29caa0da6bdd9417b18be98e65a66216d98444b61dbf953eb500de819c3bd79d
+size 4614
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/ZI/R1ZA0YHAVRKP938ICPJNTS.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/ZI/R1ZA0YHAVRKP938ICPJNTS.uasset
new file mode 100644
index 00000000..bffedc24
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/1/ZI/R1ZA0YHAVRKP938ICPJNTS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ff14ad93ec55ab54346e62619514158d4678cfee8c6a4209e442121fa6c526aa
+size 4729
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/2/OY/NWUJZZF3O1FRAXABLHEC7A.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/2/OY/NWUJZZF3O1FRAXABLHEC7A.uasset
new file mode 100644
index 00000000..d0b38dd7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/2/OY/NWUJZZF3O1FRAXABLHEC7A.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d048f3006b00b67988036379aac8d53857a86cca76875ec474ad9514e9d7ec46
+size 4862
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/2/ZT/CS7AJMMD9W67X2ZP1JTMDY.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/2/ZT/CS7AJMMD9W67X2ZP1JTMDY.uasset
new file mode 100644
index 00000000..c2d59190
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/2/ZT/CS7AJMMD9W67X2ZP1JTMDY.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb1e64afb18b4af3a116d28b4fe40b5d323f39e7ab3980a45fbd8116187653dd
+size 4789
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/3/2S/VMP9PWZPQHZL0PQ6M3P46T.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/3/2S/VMP9PWZPQHZL0PQ6M3P46T.uasset
new file mode 100644
index 00000000..ca4f715d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/3/2S/VMP9PWZPQHZL0PQ6M3P46T.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0daaff5f052e6904f6480a0b8a098dda84245d0938e2eb34681cbe0553a0943d
+size 4863
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/MA/A156FPMZYSJI32UUV5KAUD.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/MA/A156FPMZYSJI32UUV5KAUD.uasset
new file mode 100644
index 00000000..48cde451
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/MA/A156FPMZYSJI32UUV5KAUD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d0762dbc6e2e881d2d49b47d833c54c27bb49f133f658f8165d92ce4646e333
+size 4729
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/O7/Y27SOAR2KGMJHHHD7QG9W3.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/O7/Y27SOAR2KGMJHHHD7QG9W3.uasset
new file mode 100644
index 00000000..a6d592c0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/O7/Y27SOAR2KGMJHHHD7QG9W3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fa2295694fced0a5cc7b080338a5b2ce91a4ebb5d4890316be1f97634f9c4672
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/P4/6UW1DVWYFFIZTMUG9V8YCE.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/P4/6UW1DVWYFFIZTMUG9V8YCE.uasset
new file mode 100644
index 00000000..bfcc37b3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/P4/6UW1DVWYFFIZTMUG9V8YCE.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bdef15fb4b4c6e554d6f589a302f9d7fc94fa89f737d6fc5bd0ba7b8655944a6
+size 4669
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/SX/ZQBKEDB8JW6BYC09LYGEGM.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/SX/ZQBKEDB8JW6BYC09LYGEGM.uasset
new file mode 100644
index 00000000..6c063ebf
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/SX/ZQBKEDB8JW6BYC09LYGEGM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3001b834af86196fa34a8a49bdfb1fd0312e4d98adec67150ff821172326b029
+size 4614
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/WG/SUVM1JZ0PVCC7SNBKLONYJ.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/WG/SUVM1JZ0PVCC7SNBKLONYJ.uasset
new file mode 100644
index 00000000..1561f0ea
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/WG/SUVM1JZ0PVCC7SNBKLONYJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02796000b6265968a6b8ffae771f4812693ee26f02eeec837b542009bd1322da
+size 3667
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/YT/5VDYD721E8OB69DHUVNW4O.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/YT/5VDYD721E8OB69DHUVNW4O.uasset
new file mode 100644
index 00000000..613ed0c9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/4/YT/5VDYD721E8OB69DHUVNW4O.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6473828270e4cab01ef58d338bac0f29fd17a9799240829a0a7a8105829db28d
+size 4863
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/1H/2QRFI3J5JT02V2G1QP4P99.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/1H/2QRFI3J5JT02V2G1QP4P99.uasset
new file mode 100644
index 00000000..39871f58
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/1H/2QRFI3J5JT02V2G1QP4P99.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:56271e75ce388bac1e70abc1085fcf019d41a311ac70ff84ed3f7bbec53aa6ec
+size 6426
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/66/WQ2W64S04PNZLE92TJRS11.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/66/WQ2W64S04PNZLE92TJRS11.uasset
new file mode 100644
index 00000000..bf328d07
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/66/WQ2W64S04PNZLE92TJRS11.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c0a6632bc47ea3532b227a9c73be3abf44ba8c13524f182a86eac6206d0b1b9
+size 4615
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/AC/1Z9VIJ2JRVY0MQQ44OF11V.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/AC/1Z9VIJ2JRVY0MQQ44OF11V.uasset
new file mode 100644
index 00000000..45dca1c2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/AC/1Z9VIJ2JRVY0MQQ44OF11V.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:db8a881ef81bbe3d2523d1342e2c6167330c82c631a73da2e5ebf14d4b947924
+size 4731
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/C2/79BVTOH23GR8N0SWG6GWWW.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/C2/79BVTOH23GR8N0SWG6GWWW.uasset
new file mode 100644
index 00000000..ecca0351
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/C2/79BVTOH23GR8N0SWG6GWWW.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:328fd51d3c7fefdbdda511f05cb29f849da14631cab1e07a5d7da3c01450ba25
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/DI/05W7546RV25UV9MUAZJUW8.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/DI/05W7546RV25UV9MUAZJUW8.uasset
new file mode 100644
index 00000000..e6f47978
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/DI/05W7546RV25UV9MUAZJUW8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c8a526d758028a5796590075ec8f3a3547fa1bd7e534d09ce96ef1bc39f4e4b
+size 4789
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/XV/QS5R65LII0DY9AY8BZX62U.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/XV/QS5R65LII0DY9AY8BZX62U.uasset
new file mode 100644
index 00000000..7bba47a9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/5/XV/QS5R65LII0DY9AY8BZX62U.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b48a16b8b6333b89850703fc602a5e9559b70797977af0fe3aaa71884c7ca0ed
+size 4728
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/0M/M2D0X7GYI4FK051TQ36XEU.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/0M/M2D0X7GYI4FK051TQ36XEU.uasset
new file mode 100644
index 00000000..57b5b2f9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/0M/M2D0X7GYI4FK051TQ36XEU.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:604f2b1a4e7d98e8ebb0cbd3ca6d77a6330db9af1f245c4c30dd157f4184eca8
+size 4863
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/1X/M9YEJR335ZC5O8CL7YMOHP.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/1X/M9YEJR335ZC5O8CL7YMOHP.uasset
new file mode 100644
index 00000000..eb164855
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/1X/M9YEJR335ZC5O8CL7YMOHP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6ad254157b98fa2f4b255e4b553c078efbf6e1bd2f3e4bff473c79b774ff91a4
+size 4789
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/2C/Q7P1X4BLFUTW8VRW3P7RIB.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/2C/Q7P1X4BLFUTW8VRW3P7RIB.uasset
new file mode 100644
index 00000000..0eb7832b
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/2C/Q7P1X4BLFUTW8VRW3P7RIB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c4c589fbdfb25dbacfef760367c2290c24030b1ebbdebd9700f3df55e1ea630
+size 4791
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/TX/BTC9S0W28D5I25IOL56715.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/TX/BTC9S0W28D5I25IOL56715.uasset
new file mode 100644
index 00000000..01662c33
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/TX/BTC9S0W28D5I25IOL56715.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:132a3e687f7729d821313a19996f7ec6d6e423a6fc5adb3035cc427c8333d7f3
+size 4742
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/XS/WL0ZK548OH4TTOZX0S761Y.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/XS/WL0ZK548OH4TTOZX0S761Y.uasset
new file mode 100644
index 00000000..d321c2d9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/XS/WL0ZK548OH4TTOZX0S761Y.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9573fa0ad445694cf7b7cd8da62fe41785b828dc0285a311d019238c537731e9
+size 4896
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/YZ/8IO3NK6CAJNBOCZAR2BZPG.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/YZ/8IO3NK6CAJNBOCZAR2BZPG.uasset
new file mode 100644
index 00000000..5c2307a8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/6/YZ/8IO3NK6CAJNBOCZAR2BZPG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a87ed8f1f5fe8a44a98efa0ebe6035b2ca4b3d18b2b31385bf26ac82454b56af
+size 4789
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/B5/TD7932XGOMQQH3EN17E3ZB.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/B5/TD7932XGOMQQH3EN17E3ZB.uasset
new file mode 100644
index 00000000..6352cf1a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/B5/TD7932XGOMQQH3EN17E3ZB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a588b9debbb5cb4b0993f0a2c70154f1b3a64ef5f3e30bf098654b99b6d6c912
+size 4617
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/BL/5QFMPQA4LA59B0C1K7VEUO.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/BL/5QFMPQA4LA59B0C1K7VEUO.uasset
new file mode 100644
index 00000000..fba7167a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/BL/5QFMPQA4LA59B0C1K7VEUO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:04956fe8b0d34aedf19481f08808a9511672cecf78fff03a25286afb6d9e0989
+size 3673
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/VS/TBSU6BHEHN191N9FG8A6XN.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/VS/TBSU6BHEHN191N9FG8A6XN.uasset
new file mode 100644
index 00000000..34849915
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/VS/TBSU6BHEHN191N9FG8A6XN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b166a03dba174d55220b56cde59bb17914ac485c6b2b4055d1c99ad6d6d3da7
+size 6183
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/GE/SFWEJY7HPPETIYTKPNF2PM.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/GE/SFWEJY7HPPETIYTKPNF2PM.uasset
new file mode 100644
index 00000000..d4ccc8e7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/GE/SFWEJY7HPPETIYTKPNF2PM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d088e9ded09de57825efd00a1dfd9dfcf70ecf41bf52cfbb22e6a6923a61eb8f
+size 4612
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/HC/5I57CIXRPQ6ES1G8NUV4AG.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/HC/5I57CIXRPQ6ES1G8NUV4AG.uasset
new file mode 100644
index 00000000..fa5251b8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/HC/5I57CIXRPQ6ES1G8NUV4AG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0e2042529db332f272a83fb75c975b0b746a93b65b7c59ebec1322a6a6a4a6f3
+size 3882
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/I6/GW76OI4EC3GFQC5NOD09UZ.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/I6/GW76OI4EC3GFQC5NOD09UZ.uasset
new file mode 100644
index 00000000..e1a57512
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/I6/GW76OI4EC3GFQC5NOD09UZ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d8236b7774ea3bc2df89973ae76d388c267a477e2bc429be2b6251abd3f256eb
+size 3653
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/IZ/57UNOHSEA89PDKIFF498WP.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/IZ/57UNOHSEA89PDKIFF498WP.uasset
new file mode 100644
index 00000000..6537afc1
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/IZ/57UNOHSEA89PDKIFF498WP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:195d6b5599f369be818715ee9736c4f93b34d51b5a275454ed4bb2c6dff4d984
+size 4789
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/OE/2U43UZHFR9OAOPQP4TQBB4.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/OE/2U43UZHFR9OAOPQP4TQBB4.uasset
new file mode 100644
index 00000000..6de004d9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/OE/2U43UZHFR9OAOPQP4TQBB4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da4966141ff18d3a6ab047b056fbd366fae00ad0b857fb0e7e21202e5029e1d8
+size 4791
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/OX/CSW98GYLISUMWC9Q0DOGEL.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/OX/CSW98GYLISUMWC9Q0DOGEL.uasset
new file mode 100644
index 00000000..c5979f74
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/OX/CSW98GYLISUMWC9Q0DOGEL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:53266eb9f08b264b3a9db089cda463a9ebd396367e568011a16dc85004b326be
+size 4731
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/PC/IBGC4ILAFO0EI86PK0LA5R.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/PC/IBGC4ILAFO0EI86PK0LA5R.uasset
new file mode 100644
index 00000000..87df4385
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/PC/IBGC4ILAFO0EI86PK0LA5R.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44170b8a086a754d9e5fd6816b30c3d11bc1566d767a565ad45237864185512f
+size 12522
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/RL/6H17UR2CPP4I0BW6W3N1FP.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/RL/6H17UR2CPP4I0BW6W3N1FP.uasset
new file mode 100644
index 00000000..06199b95
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/8/RL/6H17UR2CPP4I0BW6W3N1FP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e3cd19f4063687eb134743c5aceef5d12d07604ddc4fcf77d1639b3e5d827b05
+size 4514
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/UY/QODPAS7H93ZRX0HZSVXGFI.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/UY/QODPAS7H93ZRX0HZSVXGFI.uasset
new file mode 100644
index 00000000..e615df1d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/UY/QODPAS7H93ZRX0HZSVXGFI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a172d6f6a9e3e3960b61096ed6405dd64c5743d1c6bf77bda4f3644919eea40a
+size 4766
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/V0/K6EQUGOEAMS93X1F5D1MHF.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/V0/K6EQUGOEAMS93X1F5D1MHF.uasset
new file mode 100644
index 00000000..a1c6b01e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/V0/K6EQUGOEAMS93X1F5D1MHF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9ce2aa5690a328158325c461e7a5340a842c1ca48c77a1a0910e31d070c091f4
+size 4729
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/VR/NNCUWMLACWHDW29WII4SD7.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/VR/NNCUWMLACWHDW29WII4SD7.uasset
new file mode 100644
index 00000000..6a2c1c54
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/VR/NNCUWMLACWHDW29WII4SD7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a352e5ac99d32233102874586a68a2db307013046a7f9f6c7dee3030a830be37
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/VS/DCB65WIYSZJZJOCI6WSJ9Q.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/VS/DCB65WIYSZJZJOCI6WSJ9Q.uasset
new file mode 100644
index 00000000..3af2dbba
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/VS/DCB65WIYSZJZJOCI6WSJ9Q.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dc0ce36ca9b14bb6f9b4b82209d1f4195687b2a4e64e10908ba9d760d2fe8283
+size 4677
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/W0/UE1P9W899X3GCWVKMDDSGK.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/W0/UE1P9W899X3GCWVKMDDSGK.uasset
new file mode 100644
index 00000000..c44aed95
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/9/W0/UE1P9W899X3GCWVKMDDSGK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c7d568d84d5ef1400bac810a93a13b9c6392d2a1daafcd89c102aaf048540025
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/A/61/IQXXIOWP1L9O63YAABFG27.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/A/61/IQXXIOWP1L9O63YAABFG27.uasset
new file mode 100644
index 00000000..b0bb4c10
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/A/61/IQXXIOWP1L9O63YAABFG27.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:be3da3da4cc97d2f91b8dd035ac121485d0adc76e07ea0ef50f30837bc309462
+size 4731
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/A/S6/727VECD7OCUDIZ2GHRBJJ3.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/A/S6/727VECD7OCUDIZ2GHRBJJ3.uasset
new file mode 100644
index 00000000..043c1384
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/A/S6/727VECD7OCUDIZ2GHRBJJ3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e5f7f07c79a66cedbc507b0f685429d46d4af28e33621bbad4db575d16908384
+size 4766
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/B/LW/P5662X206J8FK010FEDYJH.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/B/LW/P5662X206J8FK010FEDYJH.uasset
new file mode 100644
index 00000000..18c91a74
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/B/LW/P5662X206J8FK010FEDYJH.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7ff30bcf6f78115ab555efca0b66c0f721e67ac028440835f4206f9c5a9aea1f
+size 4731
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/05/HA4J5CS0609L7XWM1WR2F7.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/05/HA4J5CS0609L7XWM1WR2F7.uasset
new file mode 100644
index 00000000..517d6f97
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/05/HA4J5CS0609L7XWM1WR2F7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eaa7c4a2c74573f6188bf9e4387a80b302b6fbafe128e8cb2a698a74dcdce5d5
+size 4617
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/BN/CVBE6G5FCQBP7JH4WABUQD.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/BN/CVBE6G5FCQBP7JH4WABUQD.uasset
new file mode 100644
index 00000000..00bca627
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/BN/CVBE6G5FCQBP7JH4WABUQD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a8c8a0a9339cb5b646e24a50e6ad75ee7a1f42c2dfd9a796e6566e12cc178ad
+size 4726
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/O1/KOEM67VWDH98WGOAJBI4E2.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/O1/KOEM67VWDH98WGOAJBI4E2.uasset
new file mode 100644
index 00000000..c283936d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/C/O1/KOEM67VWDH98WGOAJBI4E2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1b06fbd6495607b48f5588b850821d47e150309705a9e1e441047fa112583ef8
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/F4/GUJDQQXQ025WJJ6RLE0SSF.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/F4/GUJDQQXQ025WJJ6RLE0SSF.uasset
new file mode 100644
index 00000000..d2305d87
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/F4/GUJDQQXQ025WJJ6RLE0SSF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9adbfc289e3c12328c60346a2be7212627f7039f4b981bb3d1667bce98e2bb03
+size 4789
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/KR/WJ92O3G9AE40MUVIPW466O.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/KR/WJ92O3G9AE40MUVIPW466O.uasset
new file mode 100644
index 00000000..b4b5a7a0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/KR/WJ92O3G9AE40MUVIPW466O.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e65faeb7c028363dc6ea103f12f3482b8c2f7f4ac1f9c7105bdaf4bd8132283
+size 4759
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/P4/4NNEH19QJ3ARXX12O9TPD1.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/P4/4NNEH19QJ3ARXX12O9TPD1.uasset
new file mode 100644
index 00000000..3270c30a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/P4/4NNEH19QJ3ARXX12O9TPD1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:845d6f6da7e9aae85f618875158a2e29fc35eb04e0cfb40740f5ae8350d5e5da
+size 4617
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/PI/JNOQ11LVO9MVMU7H8GL3D7.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/PI/JNOQ11LVO9MVMU7H8GL3D7.uasset
new file mode 100644
index 00000000..051dd363
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/PI/JNOQ11LVO9MVMU7H8GL3D7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36141b38a7562ac85281cb7bf6ef96c2de58aabc5af2f6a7d2da1b1d1b0c78cb
+size 4726
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/V3/7KJ2D3EDU8FL3HZEPRM5FK.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/V3/7KJ2D3EDU8FL3HZEPRM5FK.uasset
new file mode 100644
index 00000000..2cb2d663
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/D/V3/7KJ2D3EDU8FL3HZEPRM5FK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da709a0f422af8d01b7b449c8033dbe4df951cc9348af4d5a63441af4bd42119
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/6M/TFDPLCSP2249C7MMH6Q6IJ.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/6M/TFDPLCSP2249C7MMH6Q6IJ.uasset
new file mode 100644
index 00000000..2c71f1c2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/6M/TFDPLCSP2249C7MMH6Q6IJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a862a44cdf94e3167c6363d616cee7b94db044c26e447ca7bc35917a6df3fe1e
+size 4610
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/7O/DU906LIBS2H7DIXZOXTLI5.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/7O/DU906LIBS2H7DIXZOXTLI5.uasset
new file mode 100644
index 00000000..76c533ec
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/7O/DU906LIBS2H7DIXZOXTLI5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:05ffc30cc78438cf473263d6c484f94f97f171750f21993ad8ae249c92a1587c
+size 4768
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/CF/03RTKZM37AOGZ60H864CDB.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/CF/03RTKZM37AOGZ60H864CDB.uasset
new file mode 100644
index 00000000..69e94ea3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/CF/03RTKZM37AOGZ60H864CDB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a62286ccd54254e959243a70f36f6a487c98c853ff584dbcade3709a72f393e1
+size 2470
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/F0/WXXA0FYBUVM9150G6DL079.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/F0/WXXA0FYBUVM9150G6DL079.uasset
new file mode 100644
index 00000000..fe7e2271
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/F0/WXXA0FYBUVM9150G6DL079.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d2d7cae3562b1a8e70bb189432d5e5b5684f3dd4961c9203c946a0d7c2d1e883
+size 2518
diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/I2/594QUZU1UVGU5T002GJSWF.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/I2/594QUZU1UVGU5T002GJSWF.uasset
new file mode 100644
index 00000000..e3eb69b2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/E/I2/594QUZU1UVGU5T002GJSWF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad1ba263bc6beb6df6704bc9dbdd290fbbdf0cc7b46534f9ca0a1982a10e302e
+size 4035
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/35/GNWDM49ITFAL99MAPU63KW.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/35/GNWDM49ITFAL99MAPU63KW.uasset
new file mode 100644
index 00000000..f3727df6
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/35/GNWDM49ITFAL99MAPU63KW.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b1e97718185deed3628398f359d1a192db85830f3c92ee0a48d5b6f72ed3aa27
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/9Q/BGN44FCVKAUBI74L0PVJFH.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/9Q/BGN44FCVKAUBI74L0PVJFH.uasset
new file mode 100644
index 00000000..2be1cdc9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/9Q/BGN44FCVKAUBI74L0PVJFH.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:71b64dfa91b49a183aa417117f119b337f29d42bce45289965db69b32b76978c
+size 4596
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/N7/I6SI61JAJULQZ8KSYNC7V4.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/N7/I6SI61JAJULQZ8KSYNC7V4.uasset
new file mode 100644
index 00000000..4e23e931
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/0/N7/I6SI61JAJULQZ8KSYNC7V4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9cecec1b3f8ce3dfec6c2709e1418978cd5d719c1062ad5e37f6680e8871fe4e
+size 4775
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/1/OG/60Y1DLNNKXGJ816DWXWR4K.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/1/OG/60Y1DLNNKXGJ816DWXWR4K.uasset
new file mode 100644
index 00000000..8a4237f0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/1/OG/60Y1DLNNKXGJ816DWXWR4K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:36e178d04426aa3e95de5fe1aa9e1aca57e8251e9923add81957248992e85833
+size 4773
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/1/WB/Q6U5CZJDM49ZZNLD2B3UZ4.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/1/WB/Q6U5CZJDM49ZZNLD2B3UZ4.uasset
new file mode 100644
index 00000000..df4a45a5
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/1/WB/Q6U5CZJDM49ZZNLD2B3UZ4.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:eeef04e445c50c3e53e213f3153ec535b36bc6397fa99e0bc3b0802ed820a196
+size 4498
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/0X/FHOYQRCBJ9TSY34PR9YG9K.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/0X/FHOYQRCBJ9TSY34PR9YG9K.uasset
new file mode 100644
index 00000000..ec892978
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/0X/FHOYQRCBJ9TSY34PR9YG9K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a8341222c00795e6c7a8d378f249f3575589539229c271519348fd72d9896b7
+size 4019
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/EG/J1DWWT3IWLXFAZ4ST6V4ZS.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/EG/J1DWWT3IWLXFAZ4ST6V4ZS.uasset
new file mode 100644
index 00000000..909d830d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/EG/J1DWWT3IWLXFAZ4ST6V4ZS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:74b0fa5e10f6d25fdcd091a4754ae28353053bb66e7f2480f5ab160846bf4be1
+size 4594
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/KW/P7HO2KS2H3F9KY2UWEMFSW.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/KW/P7HO2KS2H3F9KY2UWEMFSW.uasset
new file mode 100644
index 00000000..aa92c9a4
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/KW/P7HO2KS2H3F9KY2UWEMFSW.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5df5c017c3ae8e66034b98e7bda11c5539ace60a7b6ebca0c5d2df1e7df327f8
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/OE/7WS9WIEXMH5U64C0ZXVHDG.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/OE/7WS9WIEXMH5U64C0ZXVHDG.uasset
new file mode 100644
index 00000000..3d6f1823
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/OE/7WS9WIEXMH5U64C0ZXVHDG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8802432593f8e5db500b17aaddd8ffa6667f8428a43921e74020a41ee792df1
+size 4775
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/U9/CEJXWHF4HZOWAJH0Z9DVXF.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/U9/CEJXWHF4HZOWAJH0Z9DVXF.uasset
new file mode 100644
index 00000000..4f82a862
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/U9/CEJXWHF4HZOWAJH0Z9DVXF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a30219e61435d2a0b638f57ad1a724caa4ce8c5de97940443f43c630160d8b3
+size 4847
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/UJ/OE9CR46TEW4L20164ZOYX9.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/UJ/OE9CR46TEW4L20164ZOYX9.uasset
new file mode 100644
index 00000000..97ecaea3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/2/UJ/OE9CR46TEW4L20164ZOYX9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:59a498180c2d57f773d606e7cfbafce5622f5bc5769bc044c2bb205c49d7a7b0
+size 4880
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/0N/O2LCQ39RFAI1HX77K8TT52.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/0N/O2LCQ39RFAI1HX77K8TT52.uasset
new file mode 100644
index 00000000..3e4143f7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/0N/O2LCQ39RFAI1HX77K8TT52.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:83620ce3f94dd5aabb7cd42c1215c3372d8b4c42b08f9229f9ceeb79344fd96c
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/4F/8S26VJON8I4V3TGO6PH8SW.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/4F/8S26VJON8I4V3TGO6PH8SW.uasset
new file mode 100644
index 00000000..5fc33af2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/4F/8S26VJON8I4V3TGO6PH8SW.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:44087fa6b7f3de690d493409baa7da7049eb85822bc6cb06b41cdb284e994359
+size 4743
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/MG/Q97N1TH047UOIJQK4OEQ5P.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/MG/Q97N1TH047UOIJQK4OEQ5P.uasset
new file mode 100644
index 00000000..5e38b19d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/MG/Q97N1TH047UOIJQK4OEQ5P.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:264292b2b52f10f2e57869e2d40f2d2fa458574d144e69142b943d8c66a0f61a
+size 4773
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/XR/86ZFQ3D80QB5U0HXZMZRGT.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/XR/86ZFQ3D80QB5U0HXZMZRGT.uasset
new file mode 100644
index 00000000..80b9f64c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/3/XR/86ZFQ3D80QB5U0HXZMZRGT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e2d7bedbfe607cdf91529ac872ca1ba931b49221223dbce71fdd6aaf148ab02d
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/80/Z3VOE7HM87EM9Q66BHOTNC.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/80/Z3VOE7HM87EM9Q66BHOTNC.uasset
new file mode 100644
index 00000000..8e2c42c0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/80/Z3VOE7HM87EM9Q66BHOTNC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49450719bb5f72be9c82cb53ac0b7ee22a0935eefc31961557398b967ae48b8e
+size 4773
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/G9/R30GSAVEHD5O8OMLN42SQH.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/G9/R30GSAVEHD5O8OMLN42SQH.uasset
new file mode 100644
index 00000000..159ef7c7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/G9/R30GSAVEHD5O8OMLN42SQH.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7fa8d449239d03325948b2524a156b1fccf27c1bca0d4307cc0bef8e8a35f661
+size 4773
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/LR/K1RHQ8GO0CIBCOJ2CQ7VBC.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/LR/K1RHQ8GO0CIBCOJ2CQ7VBC.uasset
new file mode 100644
index 00000000..f91d353e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/LR/K1RHQ8GO0CIBCOJ2CQ7VBC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a03bfafbbabd6bc905cf9ac7b04975e41a14708842800cfa5f493f6891399e2
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/ML/607V0BD8JKYMIZZNQFWT2P.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/ML/607V0BD8JKYMIZZNQFWT2P.uasset
new file mode 100644
index 00000000..e9541db7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/ML/607V0BD8JKYMIZZNQFWT2P.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a6ed00a7fdedef013163bc3c365e5898c483ad349d5edc918ad6f8acd6d6103
+size 4486
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/TC/55207AXCWRBDEIQMVAL73E.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/TC/55207AXCWRBDEIQMVAL73E.uasset
new file mode 100644
index 00000000..24f7e651
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/TC/55207AXCWRBDEIQMVAL73E.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e3df538e65dcdfe19ea78c3737258e6af6313fe93102e1678236b347c48b71d6
+size 2502
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/Y1/CVW9DVNZATUQ7W422U0IDZ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/Y1/CVW9DVNZATUQ7W422U0IDZ.uasset
new file mode 100644
index 00000000..b8472760
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/4/Y1/CVW9DVNZATUQ7W422U0IDZ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a8c38b64a2707875c03514fb65aa2910471978ff1f57d33257880a273596834a
+size 3651
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/5/0F/NWBXM8ZFAWQ9K0C9AYA4E9.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/5/0F/NWBXM8ZFAWQ9K0C9AYA4E9.uasset
new file mode 100644
index 00000000..379b934d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/5/0F/NWBXM8ZFAWQ9K0C9AYA4E9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0513a2fdf9c45342e7156ae7e467334b779cad0408d1cdfb41b7068b07db048f
+size 4601
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/5/W2/NP5W2WCJMUV9NOZ8VBFC5X.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/5/W2/NP5W2WCJMUV9NOZ8VBFC5X.uasset
new file mode 100644
index 00000000..25dccee5
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/5/W2/NP5W2WCJMUV9NOZ8VBFC5X.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41b16314ef8a65243eb88ed7856756d019db3717683cff520b717765f6e4d2af
+size 4773
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/1E/Z18X6DQ1RLUHH8APD8MK7W.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/1E/Z18X6DQ1RLUHH8APD8MK7W.uasset
new file mode 100644
index 00000000..74674679
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/1E/Z18X6DQ1RLUHH8APD8MK7W.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5719a0f764ec0381598f793f7caf06b0e81bfe62774ee18631cc96fa03ea6dc4
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/9B/3CEIJDHVWAVHQMIEAN91R7.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/9B/3CEIJDHVWAVHQMIEAN91R7.uasset
new file mode 100644
index 00000000..bb21c666
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/9B/3CEIJDHVWAVHQMIEAN91R7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:78294ec7406cd39bc8930d0f73db1aefca736d05e6ddf7d960433cf2740dfcd5
+size 4847
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/AF/I5Q6J2LIS5W4WR5VI62AUG.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/AF/I5Q6J2LIS5W4WR5VI62AUG.uasset
new file mode 100644
index 00000000..229ef4fb
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/AF/I5Q6J2LIS5W4WR5VI62AUG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d233615b6d9a06acd2dbe3653f5b456e1be7556ed8a62284ee23ec1c7cfd1f31
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/AK/W7ZHA42P7DRNS3O3QN8BSU.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/AK/W7ZHA42P7DRNS3O3QN8BSU.uasset
new file mode 100644
index 00000000..616c1f84
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/AK/W7ZHA42P7DRNS3O3QN8BSU.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a035b11357b9e0e22046672f13d5723a4a1c57a2d6dc701134594951a7ad2fa0
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/PD/CPMXMJW3VW3GEW6AKWR5GJ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/PD/CPMXMJW3VW3GEW6AKWR5GJ.uasset
new file mode 100644
index 00000000..79eb40aa
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/6/PD/CPMXMJW3VW3GEW6AKWR5GJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9520e2c292dd45a4d34d86b5bc5bbf7b74385ecd62a5408085f6d8cdd673a980
+size 4661
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/55/DJOXM0EW53J6H228XSA0N1.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/55/DJOXM0EW53J6H228XSA0N1.uasset
new file mode 100644
index 00000000..8ffd9a97
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/55/DJOXM0EW53J6H228XSA0N1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:102d2e672a9a7bb71d03b9b6a5516bf2c2e114b107104589998f760e0e22c11f
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/6H/PL136XXOA5LKR53PXV3BUN.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/6H/PL136XXOA5LKR53PXV3BUN.uasset
new file mode 100644
index 00000000..b394dfa9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/6H/PL136XXOA5LKR53PXV3BUN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40a80e94c218ce2e5aa484dd715f5b7212a4d0f76eb2544bbbd37b2e00cc3ea2
+size 4846
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/HR/WN4SY5WWOIF8QI91SK7CTH.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/HR/WN4SY5WWOIF8QI91SK7CTH.uasset
new file mode 100644
index 00000000..5f303842
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/HR/WN4SY5WWOIF8QI91SK7CTH.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:228a818727a5d46b1bceba92eb75fc0138eaddec1aed7ac710bed1efd4e1d95c
+size 2454
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/K9/0J1KOMY2RH63G5MV4DPJZ1.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/K9/0J1KOMY2RH63G5MV4DPJZ1.uasset
new file mode 100644
index 00000000..d1e79cf3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/7/K9/0J1KOMY2RH63G5MV4DPJZ1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b74d53dc3396b7bf64aec6498eeb0d2b0847bf474f51d0207dc837b7454d1aea
+size 4773
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/9I/F6ZJ66HW9CDSFFSIQKWXDI.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/9I/F6ZJ66HW9CDSFFSIQKWXDI.uasset
new file mode 100644
index 00000000..df741df0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/9I/F6ZJ66HW9CDSFFSIQKWXDI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76df75214f9ae0ccdfdb7fa0a947e7c60b074df3bddec657df6394504e27fa87
+size 4599
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/E9/H5X3629C3DOMFX077AZFMW.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/E9/H5X3629C3DOMFX077AZFMW.uasset
new file mode 100644
index 00000000..2ce669ec
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/E9/H5X3629C3DOMFX077AZFMW.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c13c418a6e5ef1f3fb2f2cbe7e3fc3e0dffb84f107d0febfd399d677108875da
+size 4710
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/IE/ULZSRX1AMEI6J5HUXG0SSV.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/IE/ULZSRX1AMEI6J5HUXG0SSV.uasset
new file mode 100644
index 00000000..449033ee
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/IE/ULZSRX1AMEI6J5HUXG0SSV.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d9a649a73a9849dd0b38d19f50dc89ab1258982c07b784970b78d34d9100e66c
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/IM/FJ6HRZ9HXPG7XMNJXX9XE0.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/IM/FJ6HRZ9HXPG7XMNJXX9XE0.uasset
new file mode 100644
index 00000000..fd18ac04
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/IM/FJ6HRZ9HXPG7XMNJXX9XE0.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6a6d9636f6401f5b548255d956ca34f5c159817691951cfc805160a7403ea270
+size 4710
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/OV/F9IKRV0GCX552V3AOWFU4C.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/OV/F9IKRV0GCX552V3AOWFU4C.uasset
new file mode 100644
index 00000000..42665482
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/OV/F9IKRV0GCX552V3AOWFU4C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4d4c47a3b5b5623450b037ad152de90a2d548e5d38942ffcb61f9ba415655032
+size 4775
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/TB/7E3XSFVKXJH71BWPQK7DE7.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/TB/7E3XSFVKXJH71BWPQK7DE7.uasset
new file mode 100644
index 00000000..d161de91
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/TB/7E3XSFVKXJH71BWPQK7DE7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:851b94848f43a4cd6bad00686a04305d4fbc9b6cb68b346f7aa78bc111d8dce4
+size 3657
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/TM/XCQ9IRO5QUOT8DURISJJX0.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/TM/XCQ9IRO5QUOT8DURISJJX0.uasset
new file mode 100644
index 00000000..3590e68f
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/8/TM/XCQ9IRO5QUOT8DURISJJX0.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c35efd60e7d360558b5189aa81060ef9af187ea1153c54565b3437d31df98f0
+size 4598
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/9/22/540LIYPKX7RW44ULUEHGHE.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/9/22/540LIYPKX7RW44ULUEHGHE.uasset
new file mode 100644
index 00000000..376c9810
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/9/22/540LIYPKX7RW44ULUEHGHE.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5b7f296da12963ba4910485a6492c067dc454e77a28dadaff20d44d697059ae0
+size 4598
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/9/J0/NAURUIYIL4FWMCLRWUDE1X.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/9/J0/NAURUIYIL4FWMCLRWUDE1X.uasset
new file mode 100644
index 00000000..8fbae906
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/9/J0/NAURUIYIL4FWMCLRWUDE1X.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:02ae5a0f6f1b670c8cd9259880fd62bed9db13b75e30109a8eea4ffe2c3bca28
+size 5371
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/A/F8/VBWZ0ZW0LJXN6633VM36TB.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/A/F8/VBWZ0ZW0LJXN6633VM36TB.uasset
new file mode 100644
index 00000000..e04c23c3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/A/F8/VBWZ0ZW0LJXN6633VM36TB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:87c0c75e225c71ba0ea0a65874e5b863944c41e02bba7d2af2fde1a84aadc72d
+size 4712
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/A/I4/GYPPACX2Q6XUN509PQXXUB.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/A/I4/GYPPACX2Q6XUN509PQXXUB.uasset
new file mode 100644
index 00000000..f6c04b0c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/A/I4/GYPPACX2Q6XUN509PQXXUB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6321bd12e6718e0dc77b2d83ab64ce337d9ccbae036c04ffca4440bd2151a4a8
+size 4847
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/B/99/HIHVSRNPR1359HYG9VQ4S9.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/B/99/HIHVSRNPR1359HYG9VQ4S9.uasset
new file mode 100644
index 00000000..f6552999
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/B/99/HIHVSRNPR1359HYG9VQ4S9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86824e8bff939dab04f169c970d8516dbbc8c1462b531b9d0d385e6ee646d351
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/B/M4/WDZ38E5FQFNLQ3W08AD74K.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/B/M4/WDZ38E5FQFNLQ3W08AD74K.uasset
new file mode 100644
index 00000000..4820ed56
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/B/M4/WDZ38E5FQFNLQ3W08AD74K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:10e9c8b331c7e39000e9e1be1e8497cf20e21321591f282fbb088f9c39d03291
+size 4750
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/C8/V93JCJG5GNPG3OANIVPEU2.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/C8/V93JCJG5GNPG3OANIVPEU2.uasset
new file mode 100644
index 00000000..09957a2e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/C8/V93JCJG5GNPG3OANIVPEU2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:62e247610e993dae8a228e98be8fd5d5b7d0cae3470f00274b7b4edf7c90c035
+size 4653
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/IY/1DYGNRS7MUF1969G9AKFEQ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/IY/1DYGNRS7MUF1969G9AKFEQ.uasset
new file mode 100644
index 00000000..be7af589
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/IY/1DYGNRS7MUF1969G9AKFEQ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:426622e0d16acd8195c950af262884c25b5878785435d57188a8f0067194c447
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/N1/E7M6U3RRQJ0NKZWADRZU2F.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/N1/E7M6U3RRQJ0NKZWADRZU2F.uasset
new file mode 100644
index 00000000..df604f34
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/N1/E7M6U3RRQJ0NKZWADRZU2F.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:68858de7c5f528fefe1d4332ecb6d02bbb53a59f6ecb51c4c2f2d3920bf33ca5
+size 5710
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/R8/1FYI4WVBKRV7XPNB9SF85N.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/R8/1FYI4WVBKRV7XPNB9SF85N.uasset
new file mode 100644
index 00000000..2997e54c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/R8/1FYI4WVBKRV7XPNB9SF85N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b38458ec107ff72a0770fe43aeaab2f8b9f5e93c0b6ff9ae3efbca63dc251b3a
+size 4775
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/TJ/KML81PLR61JZQ25ZCRTOHM.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/TJ/KML81PLR61JZQ25ZCRTOHM.uasset
new file mode 100644
index 00000000..3c8f1a1c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/TJ/KML81PLR61JZQ25ZCRTOHM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:825d2d3a4266fc8c9cb3caab90f332e327fb9a1d5ad4dcaecafc55cb41e30b92
+size 12506
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/X1/J1KYK53FD26XTDA5AYVCA5.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/X1/J1KYK53FD26XTDA5AYVCA5.uasset
new file mode 100644
index 00000000..a82f4d9e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/C/X1/J1KYK53FD26XTDA5AYVCA5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4e1f4dd6dad0f55fcc1c479d0cd59fcd1e2845f2276a65652e47169a636b31f5
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/C5/GO9F5BX1OG0G37W9TQNCJF.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/C5/GO9F5BX1OG0G37W9TQNCJF.uasset
new file mode 100644
index 00000000..2ac08f13
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/C5/GO9F5BX1OG0G37W9TQNCJF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cdb84f5781f4fd2c47400bb270d794a6d16ec858bf9af297471446d9620d75fd
+size 3637
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/JF/YGMLISQYZUYCOFWGX11BA5.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/JF/YGMLISQYZUYCOFWGX11BA5.uasset
new file mode 100644
index 00000000..ffdb22d9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/JF/YGMLISQYZUYCOFWGX11BA5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b3a2799d8af52c79cbc5e178653d65bac68fde63e7fa18436ac0cbfbaffd04df
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/KB/OJ5NYYQG4LT79W8I5I6MS3.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/KB/OJ5NYYQG4LT79W8I5I6MS3.uasset
new file mode 100644
index 00000000..03b63281
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/D/KB/OJ5NYYQG4LT79W8I5I6MS3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ea74791fd8856cbebbe60ca5574563dea9998ae98cf3ea204d691c99e2193d0b
+size 4750
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/13/WANY5DUXOHAN9B8VO419ZD.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/13/WANY5DUXOHAN9B8VO419ZD.uasset
new file mode 100644
index 00000000..070cfeaf
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/13/WANY5DUXOHAN9B8VO419ZD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:37a8f63c87e5e66bd83953c692b83605d10a046f85ede974f253cd50523bdab6
+size 5274
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/72/2Q6FTG9QBV70Q6RY0KMH00.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/72/2Q6FTG9QBV70Q6RY0KMH00.uasset
new file mode 100644
index 00000000..220c2524
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/72/2Q6FTG9QBV70Q6RY0KMH00.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b8255d19a25b2a422f2bc6bc5bf38f3f910b89f0701a8353d77d08d228d2c1f
+size 4752
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/C9/PUEF3SDZX6YW93741SQAXO.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/C9/PUEF3SDZX6YW93741SQAXO.uasset
new file mode 100644
index 00000000..f8cdee67
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/C9/PUEF3SDZX6YW93741SQAXO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f753a2468824b16930329099d1d086f24f83cd972c27c9538d6fbf1564f3473
+size 4601
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/F1/UO65QKXRP70QKOKHZSMZ1F.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/F1/UO65QKXRP70QKOKHZSMZ1F.uasset
new file mode 100644
index 00000000..40c2ae15
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/F1/UO65QKXRP70QKOKHZSMZ1F.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b7952a3fc61719f0b4a6ab11a7975136e58873cd15c51ccaf3de7f55ff27af84
+size 3866
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/MX/T78JL0KEIV77Y3QP6GYB54.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/MX/T78JL0KEIV77Y3QP6GYB54.uasset
new file mode 100644
index 00000000..f1f517bc
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/MX/T78JL0KEIV77Y3QP6GYB54.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:09a9cf559b65797287c43acf8f41b8a709a0c7fa18f3295c14f4a6465cf06f6a
+size 4601
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/XX/PPC77XHOJNZW9PWV5OHH00.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/XX/PPC77XHOJNZW9PWV5OHH00.uasset
new file mode 100644
index 00000000..44d364a0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/BountySystemTestLevel/E/XX/PPC77XHOJNZW9PWV5OHH00.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1a7a355d2b9e10bd064b3f8d6a8e5989c3f5f61e7e601b95f418d179740baade
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/E1/IQFW07RTPNSMRH29XIEJ6K.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/E1/IQFW07RTPNSMRH29XIEJ6K.uasset
new file mode 100644
index 00000000..d26e7cc7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/E1/IQFW07RTPNSMRH29XIEJ6K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0adcbba9dd12519aa193fd0cedb65bf17ec9209792a3d4bb10ddadb55a0dd098
+size 4652
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/GX/GIS7MZ67XR2J3PFEU2JQAQ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/GX/GIS7MZ67XR2J3PFEU2JQAQ.uasset
new file mode 100644
index 00000000..9e4d412a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/GX/GIS7MZ67XR2J3PFEU2JQAQ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ecab7663f508522aa1d8e5784628eaaaf1c77eefda4fa4e60dbe23695dff5455
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/IX/2HJNN09VIUGECAWE7RQF7E.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/IX/2HJNN09VIUGECAWE7RQF7E.uasset
new file mode 100644
index 00000000..a2ce66a3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/IX/2HJNN09VIUGECAWE7RQF7E.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba47531b1f53d15d50cb43c9db404e2b21b884149bbd4075713987a0dc58beeb
+size 4653
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/J9/CJ0EBOCRNQM7JW268TJIYP.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/J9/CJ0EBOCRNQM7JW268TJIYP.uasset
new file mode 100644
index 00000000..85e208b0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/J9/CJ0EBOCRNQM7JW268TJIYP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe2005cbd7d221a5eda1099634d0e3e02b5c0670382719adffb59e9e987795eb
+size 4653
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/K8/6SR44C1CVICPSD9PDDIAZ5.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/K8/6SR44C1CVICPSD9PDDIAZ5.uasset
new file mode 100644
index 00000000..e73fc94e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/K8/6SR44C1CVICPSD9PDDIAZ5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5290040de602d01aebcef81b116f9d6453714d6af102deb8adf92f6c284b852b
+size 4655
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/LR/WD02RYJ2PYZD1AMUAN4FKJ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/LR/WD02RYJ2PYZD1AMUAN4FKJ.uasset
new file mode 100644
index 00000000..901ac284
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/LR/WD02RYJ2PYZD1AMUAN4FKJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ac890528add1456f17ee331724e45541159a0a614a47dea926f24827587fa4d0
+size 4787
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/PE/AU0ZEVM147PGYZYETWYMEJ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/PE/AU0ZEVM147PGYZYETWYMEJ.uasset
new file mode 100644
index 00000000..28eb2456
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/PE/AU0ZEVM147PGYZYETWYMEJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b220824a0f633c07b1cf8893ebf96544fd86ee76a767f7f9e5400fd39acf69ba
+size 3806
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/Q7/0NC9X1M4P0178PJ62HLZBL.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/Q7/0NC9X1M4P0178PJ62HLZBL.uasset
new file mode 100644
index 00000000..5efc5748
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/0/Q7/0NC9X1M4P0178PJ62HLZBL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4bb00ea144b9575f5353f61e24b5f59489aa91c62d3334ad313dd1d90b9e2670
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/4W/TZWKOM776CCB9T1CQESPAC.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/4W/TZWKOM776CCB9T1CQESPAC.uasset
new file mode 100644
index 00000000..4e7af2ed
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/4W/TZWKOM776CCB9T1CQESPAC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b28b6ff61c85777d7999e63a820858db4b2a6153abfebacf97b167a91f3c13be
+size 4541
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/5S/7ID5OVJCB5CTLJKPQKIC1I.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/5S/7ID5OVJCB5CTLJKPQKIC1I.uasset
new file mode 100644
index 00000000..8d448d7e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/5S/7ID5OVJCB5CTLJKPQKIC1I.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:76a12d6a9ec9f46a665ad784c79e2e03a79bb8f35260754a576a904b4c5dd57a
+size 4534
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/6S/A9J1OJI3RV53ISSKR2J5U1.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/6S/A9J1OJI3RV53ISSKR2J5U1.uasset
new file mode 100644
index 00000000..7961b35c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/6S/A9J1OJI3RV53ISSKR2J5U1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7894b05d9639d996719cbf0ac9a30099b2454bc2522868f4c0a81aa95d4d0b39
+size 10399
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/BP/EE03SQQCZJQSEUPRGJPTP0.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/BP/EE03SQQCZJQSEUPRGJPTP0.uasset
new file mode 100644
index 00000000..e530f3e7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/BP/EE03SQQCZJQSEUPRGJPTP0.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:568f2a474a475045288e1552b9be176fa4e6e7a70d1438064f049b957bfedfe8
+size 4541
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/HB/E2H2DJ0IYXZ7YPKWWFF0FG.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/HB/E2H2DJ0IYXZ7YPKWWFF0FG.uasset
new file mode 100644
index 00000000..bbaf2b0e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/HB/E2H2DJ0IYXZ7YPKWWFF0FG.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:762c0e26021fdc42c7904454f6ad9b02f872d0d017788c9fc6ffeacc9a896bce
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/MY/R1JII7B2C24B9CWJXSQ46T.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/MY/R1JII7B2C24B9CWJXSQ46T.uasset
new file mode 100644
index 00000000..2b68f8dc
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/MY/R1JII7B2C24B9CWJXSQ46T.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b9545eb125107d2bb1605930ffe7af4dcb6d51bfa9b503fc829c26163149eba9
+size 4655
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/WZ/18S5NW75OTIRU2HFO79N4M.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/WZ/18S5NW75OTIRU2HFO79N4M.uasset
new file mode 100644
index 00000000..083077d1
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/1/WZ/18S5NW75OTIRU2HFO79N4M.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8cbfb594832690a4d22e750e1c9cdcf01ec3115e1f902390ad3aa83af0733887
+size 4690
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/37/1NHB75E9P7T630GL2K4WWN.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/37/1NHB75E9P7T630GL2K4WWN.uasset
new file mode 100644
index 00000000..193f240e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/37/1NHB75E9P7T630GL2K4WWN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:362a0c728d4c1a65e6bde6f6cc59d26c06e3d2341699251879d4734aaf6125fa
+size 4539
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/9H/UI6E3IHLXCVIV54810ZSUS.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/9H/UI6E3IHLXCVIV54810ZSUS.uasset
new file mode 100644
index 00000000..f32ef151
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/9H/UI6E3IHLXCVIV54810ZSUS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9649867553b90bb4397d8c3901e403a70701d82712475b1cf554331493fe18ea
+size 3591
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/CT/39SOGBQQWQPX5XF5XSIDUZ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/CT/39SOGBQQWQPX5XF5XSIDUZ.uasset
new file mode 100644
index 00000000..f7d69200
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/CT/39SOGBQQWQPX5XF5XSIDUZ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:760dce31c9f18576781d0678cbb982ab4c16127d61b8391d68edd31744ef2e2b
+size 5214
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/D3/R44Z9O6CLM37P3G5IX40CI.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/D3/R44Z9O6CLM37P3G5IX40CI.uasset
new file mode 100644
index 00000000..e64df1d8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/D3/R44Z9O6CLM37P3G5IX40CI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b13181dd37c900800b8063c1e369065d7b0164e0ebacff2a12f9161d27820dbb
+size 4787
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/GF/LRPO23YW2N7WZ21HT3ADU8.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/GF/LRPO23YW2N7WZ21HT3ADU8.uasset
new file mode 100644
index 00000000..97b71e5a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/GF/LRPO23YW2N7WZ21HT3ADU8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1157a301eaf171ced8252f794196b28001e9c2b1e37a1fd453cc4dde6ed6c87b
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/RX/YRPO3KV1HDO96HPZ66IMQI.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/RX/YRPO3KV1HDO96HPZ66IMQI.uasset
new file mode 100644
index 00000000..e503aa04
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/2/RX/YRPO3KV1HDO96HPZ66IMQI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9af8f569b99044bcd458580d5f6b118a4e223cf17c4b8474c25cf0d01113ff29
+size 4683
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/21/OZ7HVAU40P457N2KQYO1Z5.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/21/OZ7HVAU40P457N2KQYO1Z5.uasset
new file mode 100644
index 00000000..77b37b57
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/21/OZ7HVAU40P457N2KQYO1Z5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:173bc0e598c4e789da276f6cd5083232689d81af4baa1e78ef41147b46ae19e0
+size 4538
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/7D/94E51K8PLPK43WRYXU8RL0.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/7D/94E51K8PLPK43WRYXU8RL0.uasset
new file mode 100644
index 00000000..3663e2b6
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/7D/94E51K8PLPK43WRYXU8RL0.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efdf6470ed0556e4edcc55ea713b76456005b0b0166aee0e591d048d59e519bc
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/8B/5GCK7S3AV6GJBA0IACF1XO.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/8B/5GCK7S3AV6GJBA0IACF1XO.uasset
new file mode 100644
index 00000000..d2a18605
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/8B/5GCK7S3AV6GJBA0IACF1XO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:49298a3d050dc63572fe5b0f8443a64c7e521e276c0075e7d694f07aec463dae
+size 4541
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/GB/Q8MDU4O8NVGCNQC48I9E8C.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/GB/Q8MDU4O8NVGCNQC48I9E8C.uasset
new file mode 100644
index 00000000..15cf82ea
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/GB/Q8MDU4O8NVGCNQC48I9E8C.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e308d86ccd87772a9b48f42294078386841e9af06bb1f4e358995138b6ee98d4
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/LK/1HYMG69QSB1R2IKKLMNVLT.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/LK/1HYMG69QSB1R2IKKLMNVLT.uasset
new file mode 100644
index 00000000..74f50cfc
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/3/LK/1HYMG69QSB1R2IKKLMNVLT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:591eb4207c25e0a75f7eddf92f0046f7e72a0cc9ce7ea2100530a5f54e15f353
+size 4426
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/7S/M6H76KT5RYSC8FT08UOYYV.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/7S/M6H76KT5RYSC8FT08UOYYV.uasset
new file mode 100644
index 00000000..45781de8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/7S/M6H76KT5RYSC8FT08UOYYV.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f80c49bb71351e21d6c7fd5d07ba02d4c6ecb893f078ad9fc354c411a261b391
+size 4593
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/DO/KPWW5M0TRW408IVKQNTBX7.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/DO/KPWW5M0TRW408IVKQNTBX7.uasset
new file mode 100644
index 00000000..c43294d7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/DO/KPWW5M0TRW408IVKQNTBX7.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:addf7e6a676b465357631fecd85086cb3282294dd3a60d25ec1a45c44275820b
+size 4786
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/EH/H0RJG09BGRG4TA8B6P9SKL.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/EH/H0RJG09BGRG4TA8B6P9SKL.uasset
new file mode 100644
index 00000000..76ff7bba
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/EH/H0RJG09BGRG4TA8B6P9SKL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3ded950368a5368f3187fcdae9b883ab92a7b57840a28a3613a0024df71d2098
+size 27121
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/NV/0O5K04NGZ280HG3EDN82BS.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/NV/0O5K04NGZ280HG3EDN82BS.uasset
new file mode 100644
index 00000000..0dfebb5c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/4/NV/0O5K04NGZ280HG3EDN82BS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:254992fc3dab572613b2ecd197002613a0772e89822600345f9f9a724bf20770
+size 4438
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/3L/ZL9NLFPHO4RXCMXRLPZ3ST.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/3L/ZL9NLFPHO4RXCMXRLPZ3ST.uasset
new file mode 100644
index 00000000..a0e4b6ce
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/3L/ZL9NLFPHO4RXCMXRLPZ3ST.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54b0926e4be9c9b5f0c3b7857ac67678a44681551b4769b33fe7ec6e4c535261
+size 3787
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/T0/6P1LRRDLZM1EUAF0VJ2A1Z.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/T0/6P1LRRDLZM1EUAF0VJ2A1Z.uasset
new file mode 100644
index 00000000..1cd549c3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/T0/6P1LRRDLZM1EUAF0VJ2A1Z.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1fb000a8d5590b3f45db2cc93f88a1f2a0c33c1d478bb3f415ebb3dea20be866
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/VW/F67BYXWE15N6HDB8XL4DCA.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/VW/F67BYXWE15N6HDB8XL4DCA.uasset
new file mode 100644
index 00000000..c0b27e1c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/6/VW/F67BYXWE15N6HDB8XL4DCA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:516d44740f45c07acc078cab92f42678f200dc676f0b3c465af63ddd2f0bd1b6
+size 4413
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/5X/SGTTTEQNKAZC3W9C8ICWCD.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/5X/SGTTTEQNKAZC3W9C8ICWCD.uasset
new file mode 100644
index 00000000..f6c08eca
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/5X/SGTTTEQNKAZC3W9C8ICWCD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:efe8687b693ae889c18ae026262399acc470a627b44b2c13ffb6c3fda05f96c7
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/ON/O0RSM3NJKRZPH0FXBF9L3S.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/ON/O0RSM3NJKRZPH0FXBF9L3S.uasset
new file mode 100644
index 00000000..7867fd94
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/ON/O0RSM3NJKRZPH0FXBF9L3S.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0dcbcd815a02baed2145105961a0ca02ecf79520c45272314ab6a87f9d46e8e1
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/VD/0FS7NIRZS2R8T57JW12AXA.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/VD/0FS7NIRZS2R8T57JW12AXA.uasset
new file mode 100644
index 00000000..65bcd19a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/7/VD/0FS7NIRZS2R8T57JW12AXA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e7213ce229e3507136525afca1c0617c8adc58c0366a73606d931cc348a10c22
+size 4820
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/7J/5M8HYAJBH6S06KBPPU5V7W.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/7J/5M8HYAJBH6S06KBPPU5V7W.uasset
new file mode 100644
index 00000000..4821f821
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/7J/5M8HYAJBH6S06KBPPU5V7W.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11f32a1fc9c265eaa142b46bb38d5a6ac78f8f236efa0c4b88bc7a3261086b41
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/L7/JWTIPNAQRZ09Y5NAQL5BW8.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/L7/JWTIPNAQRZ09Y5NAQL5BW8.uasset
new file mode 100644
index 00000000..d2d2b2c3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/L7/JWTIPNAQRZ09Y5NAQL5BW8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1394519fdbfca8cd57fe5d14b0c9c08b8711a01baf4dd467320a49fcd95f6096
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/PN/HJTAS89CNH6I0AR0ZCCE4H.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/PN/HJTAS89CNH6I0AR0ZCCE4H.uasset
new file mode 100644
index 00000000..1b18c190
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/8/PN/HJTAS89CNH6I0AR0ZCCE4H.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7004ea5397728a307a687eafb1f55f84a8b5dc6eb5baa7bf867e5600da2e2170
+size 4650
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/45/BRJA5VHIWN6NTS13DYDN08.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/45/BRJA5VHIWN6NTS13DYDN08.uasset
new file mode 100644
index 00000000..c5296a03
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/45/BRJA5VHIWN6NTS13DYDN08.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:46f180e7d001110d9fcb9e2855269222e67b05bb4610fce087bea9ff8e6c1708
+size 4787
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/AG/M50NVM1A6DXOF9R7EHESH6.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/AG/M50NVM1A6DXOF9R7EHESH6.uasset
new file mode 100644
index 00000000..7109c790
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/AG/M50NVM1A6DXOF9R7EHESH6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fff2630cecd7cc45e10370918bc86692ef8c098fc7ffa4a6fdd8517a040bf83b
+size 4655
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/EB/XWFQGB0N0AV29HQ1RZBRTN.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/EB/XWFQGB0N0AV29HQ1RZBRTN.uasset
new file mode 100644
index 00000000..e88336ab
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/EB/XWFQGB0N0AV29HQ1RZBRTN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc4b6a4512cab5257543fa72092fa61e70347811f842a7545e5b60c94443856f
+size 3597
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/JJ/USZ2IG22JXYQ9U9L4R3O9K.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/JJ/USZ2IG22JXYQ9U9L4R3O9K.uasset
new file mode 100644
index 00000000..872903de
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/JJ/USZ2IG22JXYQ9U9L4R3O9K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4c27ca877d66f24ae8e7cd3396b7c6992c931a9e529c15c8fff36c9f49d00796
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/SL/1ABG5W1O6BMZYRRZY742RR.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/SL/1ABG5W1O6BMZYRRZY742RR.uasset
new file mode 100644
index 00000000..f39b6e36
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/SL/1ABG5W1O6BMZYRRZY742RR.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d5d6e77de164077904ab242eafa07691014d6441a34ff827d9e35627448d9fe6
+size 4690
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/TM/SXQEJM0WJTDHS510NE0ARB.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/TM/SXQEJM0WJTDHS510NE0ARB.uasset
new file mode 100644
index 00000000..36704479
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/TM/SXQEJM0WJTDHS510NE0ARB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95461b4e892c7faa9c6f4736e6f5f614e163bbe5666bc3c794aa2373be5e95b5
+size 2394
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/ZA/DT4HPQ7S67F0V9G8T1YCQI.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/ZA/DT4HPQ7S67F0V9G8T1YCQI.uasset
new file mode 100644
index 00000000..2087dece
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/9/ZA/DT4HPQ7S67F0V9G8T1YCQI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:48a4a2eba8060b4e8fc2ef7d45d2cbed7a7fc8c0e1393ed0648d96b407bbb473
+size 4601
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/48/9EYCQL9YALBI37JNE2ATIF.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/48/9EYCQL9YALBI37JNE2ATIF.uasset
new file mode 100644
index 00000000..a4b1370c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/48/9EYCQL9YALBI37JNE2ATIF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fe69e9b9eebbd7006b839ae15d3a5c352ef1814fb149acfe2b59975e6cc1f5eb
+size 5726
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/IY/10597N2XJ21LILF5KIZ5KL.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/IY/10597N2XJ21LILF5KIZ5KL.uasset
new file mode 100644
index 00000000..290014a2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/IY/10597N2XJ21LILF5KIZ5KL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57d2b691962af05ad68bcdac1425a27731afe4da3219fcddd125b7827ffa4033
+size 4715
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/ON/FV27LO60GPVLJOY7YY1WLP.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/ON/FV27LO60GPVLJOY7YY1WLP.uasset
new file mode 100644
index 00000000..8a522426
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/ON/FV27LO60GPVLJOY7YY1WLP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bc5301307680ee70a29d57f281faa21861b37bbd7cdeb71bd8c4d7f78b63c2ee
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/PF/EG3JGUPDQZSATN1FLSWJVL.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/PF/EG3JGUPDQZSATN1FLSWJVL.uasset
new file mode 100644
index 00000000..a67a17b2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/PF/EG3JGUPDQZSATN1FLSWJVL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e9a51f8e53482ec71db4c60a9b83ba86412c2a09b64ceafec97d9eb176ac45e6
+size 3577
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/SX/4TUAQI2F98RL122DKAHM7N.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/SX/4TUAQI2F98RL122DKAHM7N.uasset
new file mode 100644
index 00000000..03ec5516
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/SX/4TUAQI2F98RL122DKAHM7N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2d83a1c4216d4e8663256c26ded9832baa8d603725e6690eba8b702e7286429
+size 2442
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/UU/P4XZ4FDZKD5IXIWK3JDDDK.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/UU/P4XZ4FDZKD5IXIWK3JDDDK.uasset
new file mode 100644
index 00000000..b279c76a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/UU/P4XZ4FDZKD5IXIWK3JDDDK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0825e2d72278674564a97acf017751f5d2ae310ad8c3a0786060fe2c538f37bd
+size 5597
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/WI/254BGPLW3CW799JAYW11ZE.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/WI/254BGPLW3CW799JAYW11ZE.uasset
new file mode 100644
index 00000000..fd44451e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/A/WI/254BGPLW3CW799JAYW11ZE.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c104ec5adca67bcbc822e379a77c64ade6e6dc0fc31f0b5ab7e8a40978dd81d3
+size 4536
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/8R/JBRRKN8XRT8V47MOSZ3XFX.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/8R/JBRRKN8XRT8V47MOSZ3XFX.uasset
new file mode 100644
index 00000000..48da1872
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/8R/JBRRKN8XRT8V47MOSZ3XFX.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bb180ba7ea4720628e20e94d49e9163f003c25a2b273ecaef6cea8138ce045b0
+size 3959
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/AZ/GX8EY01G00J28SE17R0FJV.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/AZ/GX8EY01G00J28SE17R0FJV.uasset
new file mode 100644
index 00000000..c7232ee4
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/AZ/GX8EY01G00J28SE17R0FJV.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57d01115fb5fa73100801d5022a6d72fc6dcc8f5c42e95b93656983f657b2565
+size 6064
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/KC/MH5IV9S2GG4KCWNMZHWKG9.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/KC/MH5IV9S2GG4KCWNMZHWKG9.uasset
new file mode 100644
index 00000000..307b01a9
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/B/KC/MH5IV9S2GG4KCWNMZHWKG9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8a1bfc27ac492ac3fece03c083295664ee62db2315e3fdd9ef5d8484c9cedada
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/C/6W/LBHG7995AIEJVSD5QZYXZS.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/C/6W/LBHG7995AIEJVSD5QZYXZS.uasset
new file mode 100644
index 00000000..55d4bf60
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/C/6W/LBHG7995AIEJVSD5QZYXZS.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:61472c31c9367301e40cb2d598e5bd9de8159a220d509f9638478bfb98dad958
+size 12446
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/D/JE/MPPG27DTK7Y2X2HONLOIS2.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/D/JE/MPPG27DTK7Y2X2HONLOIS2.uasset
new file mode 100644
index 00000000..040b9534
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/D/JE/MPPG27DTK7Y2X2HONLOIS2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8c87a366434e64473d22935b5e9c68acb99184f76d5ed56af04200931155f47d
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/D/OV/MIML8IG26185E7HH7OUYXY.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/D/OV/MIML8IG26185E7HH7OUYXY.uasset
new file mode 100644
index 00000000..ddbda486
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/D/OV/MIML8IG26185E7HH7OUYXY.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:592670f9ea8edf0b9085636742da98af0a88a6031082f803938c48bcf73573c4
+size 5311
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/AO/6CUEZ00H5605BZ34CYJ59J.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/AO/6CUEZ00H5605BZ34CYJ59J.uasset
new file mode 100644
index 00000000..a7898461
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/AO/6CUEZ00H5605BZ34CYJ59J.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:906d272fa13dc2a25be6bf7f61780f5840940b7fb54a40b019b344aaeb94e823
+size 4713
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/CR/DRCNPPN33IO9BDIGKV8CQD.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/CR/DRCNPPN33IO9BDIGKV8CQD.uasset
new file mode 100644
index 00000000..5e9674d4
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/CR/DRCNPPN33IO9BDIGKV8CQD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0828e21397762093d0fd8299b39a1fd593299c2f91cefdeb3e0d9bb21584f8e6
+size 4650
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/FJ/TDFYID5LIFN4RZYNHYR2L3.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/FJ/TDFYID5LIFN4RZYNHYR2L3.uasset
new file mode 100644
index 00000000..f8c46abb
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/FJ/TDFYID5LIFN4RZYNHYR2L3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e7ff25b38356d87268f402d5526e3f3bc3fff044c4365d900754ae17602c562
+size 4655
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/L4/2A3KY5I7FJ21NDC7OURASV.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/L4/2A3KY5I7FJ21NDC7OURASV.uasset
new file mode 100644
index 00000000..7052ebff
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/L4/2A3KY5I7FJ21NDC7OURASV.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed5a847025a37763ddfd4fb22f866159e46913c6647d43bb32104dedbc75e0d4
+size 4538
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/ML/NLOI6RS1TZE6573JN4LJAU.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/ML/NLOI6RS1TZE6573JN4LJAU.uasset
new file mode 100644
index 00000000..e4311471
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/ML/NLOI6RS1TZE6573JN4LJAU.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5443b15f085029068d057876ecccfcf9252b6c9eea827f54c291ee4aa60f8ce
+size 4653
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/PL/ODMT46SVZ8BKVV6CH39RBJ.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/PL/ODMT46SVZ8BKVV6CH39RBJ.uasset
new file mode 100644
index 00000000..1a394921
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/PL/ODMT46SVZ8BKVV6CH39RBJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2a340b2dd31ca10ee57e81b5c7564c0ae38fd58042ffc4803a7358af1e4df412
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/TC/E3CXYQV6UQS02X2RRKCPDE.uasset b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/TC/E3CXYQV6UQS02X2RRKCPDE.uasset
new file mode 100644
index 00000000..99dfa0af
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/Levels/EnemyAITest/E/TC/E3CXYQV6UQS02X2RRKCPDE.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b76dde1f5ce6a46bdc8b4917fcf89fe4ff2976fb86356402dd5f33a0aec26af9
+size 4692
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/43/HYQWORMY4JDQ5X3OKZXFLC.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/43/HYQWORMY4JDQ5X3OKZXFLC.uasset
new file mode 100644
index 00000000..9714987f
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/43/HYQWORMY4JDQ5X3OKZXFLC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b5b66a81c776d90069dce1a1f6b97fd13ebd75bed3eeecef9341b7769eb6c79b
+size 2725
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/FZ/4XWWUGWFDLX56REQRH8Z9W.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/FZ/4XWWUGWFDLX56REQRH8Z9W.uasset
new file mode 100644
index 00000000..4845d086
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/FZ/4XWWUGWFDLX56REQRH8Z9W.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fb6ee8eb772326f09459ce560a30fdf856167c2d63e2d339994dfb2275f2f286
+size 4085
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/SX/SKO7AH9HKZVPN4OMFO4DV3.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/SX/SKO7AH9HKZVPN4OMFO4DV3.uasset
new file mode 100644
index 00000000..be6a8c37
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/0/SX/SKO7AH9HKZVPN4OMFO4DV3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:41069649b9e18e8ef0fa7e499b0685d042dbefb25a4b6ff8cf05768ae9ece1a3
+size 4083
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/0G/HOAJZN9E4DDI6Y1W3JU13K.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/0G/HOAJZN9E4DDI6Y1W3JU13K.uasset
new file mode 100644
index 00000000..0b012161
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/0G/HOAJZN9E4DDI6Y1W3JU13K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7da4960c7166070d1beb553f5830711853b68576eb6e05b3d8cb3c8eb17c412a
+size 4259
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/2J/AQ1PWWT9TBAI7AA470T014.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/2J/AQ1PWWT9TBAI7AA470T014.uasset
new file mode 100644
index 00000000..35f3245d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/2J/AQ1PWWT9TBAI7AA470T014.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6d58df588f04a19b1a7e9d24baaa072479e98424635ce2ad9b04f4a21d7f170f
+size 4259
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/AZ/A7GPT109Y6ZTTJD4A7TXER.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/AZ/A7GPT109Y6ZTTJD4A7TXER.uasset
new file mode 100644
index 00000000..d12dc467
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/AZ/A7GPT109Y6ZTTJD4A7TXER.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f48da921e22f146a0e9a033494f73e7a6e0bdae23560c40541ea73e2c866210f
+size 12412
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/EJ/PGUWWHRTS59S34GKBX0OUI.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/EJ/PGUWWHRTS59S34GKBX0OUI.uasset
new file mode 100644
index 00000000..babc005b
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/EJ/PGUWWHRTS59S34GKBX0OUI.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c09ae2489999de7866bfa0bb0ac8cf702067b14771f37972551555dd042b9d6f
+size 4607
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/HF/YFYBQ72OYLHJQS0TSSXGBV.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/HF/YFYBQ72OYLHJQS0TSSXGBV.uasset
new file mode 100644
index 00000000..d881168b
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/HF/YFYBQ72OYLHJQS0TSSXGBV.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:aebc1a03fc1cc275a3a085a2414b75502cde3b9b7b8e596398c4a5f945bb198b
+size 4554
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/QS/VHQF8JWOATZI5V3ZVY5YTM.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/QS/VHQF8JWOATZI5V3ZVY5YTM.uasset
new file mode 100644
index 00000000..0d4d458c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/QS/VHQF8JWOATZI5V3ZVY5YTM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d1a63a58fa0473b49ca10244c97f73cbc79689bcf463108c880c4e0d9b30c7a3
+size 4554
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/WU/NB37RT5Q32Z8MJWD8BD2SO.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/WU/NB37RT5Q32Z8MJWD8BD2SO.uasset
new file mode 100644
index 00000000..80f7706c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/1/WU/NB37RT5Q32Z8MJWD8BD2SO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7a9b50e79e5ef7ceed9e2d568bd7daf3741a7dc3c6504b48b12d1292f7fd3aed
+size 3746
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/2/66/0OP5U85W4H0R7CHG999ZDN.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/2/66/0OP5U85W4H0R7CHG999ZDN.uasset
new file mode 100644
index 00000000..7b3e79bd
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/2/66/0OP5U85W4H0R7CHG999ZDN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9c63d31b74fb34ccd62f844218e1caea3096a9acfde112bb5edbeda02f86bd18
+size 3300
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/1V/XSFYSB2EC9Z21RQOBXZLMO.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/1V/XSFYSB2EC9Z21RQOBXZLMO.uasset
new file mode 100644
index 00000000..a072f258
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/1V/XSFYSB2EC9Z21RQOBXZLMO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a230044fd78fb50b1f1ed54138edbaa6a634ee5f8f59004ba0e9216fde66be60
+size 4257
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/B1/9G3WNX7WIR7UKI26T9LK5O.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/B1/9G3WNX7WIR7UKI26T9LK5O.uasset
new file mode 100644
index 00000000..715d4452
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/B1/9G3WNX7WIR7UKI26T9LK5O.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:beb985fce505d8b808a4b9ce039e3f1001c7c009a00d3afc85e0b23a0054d8fa
+size 4085
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/HE/U35NZS5A9W1UXP1E3FF2GW.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/HE/U35NZS5A9W1UXP1E3FF2GW.uasset
new file mode 100644
index 00000000..dc2d3b16
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/HE/U35NZS5A9W1UXP1E3FF2GW.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97a41f6a2af00e9b8edb95a77a6320c32078d2528512cbd5b180a86c3f36c6c4
+size 3983
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/OG/KDQDMXAXZXD8VLDDU4K3JL.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/OG/KDQDMXAXZXD8VLDDU4K3JL.uasset
new file mode 100644
index 00000000..e72fa82c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/OG/KDQDMXAXZXD8VLDDU4K3JL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f3cd06524bb4945fb0fa8402ed950f03bef10d76f50f6dd19595da24a1d130a7
+size 5015
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/P3/O43ETCZTFMLWWH1CJ941H2.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/P3/O43ETCZTFMLWWH1CJ941H2.uasset
new file mode 100644
index 00000000..54fe615b
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/3/P3/O43ETCZTFMLWWH1CJ941H2.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2e73c6c7d4d225a7196b2c5906fb34b7dd54ffa8cbcb7504f4a008ca733d16e1
+size 4438
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/5/Q1/5IZD4L3UPM3EEODZK67MH1.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/5/Q1/5IZD4L3UPM3EEODZK67MH1.uasset
new file mode 100644
index 00000000..3d6d8a46
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/5/Q1/5IZD4L3UPM3EEODZK67MH1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:787d45c626e04e33490e0293215d4eaa384f154eec3f9b7ac9611dab25d51b75
+size 4143
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/0D/0WM78RPJCXHX477YOZXKQE.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/0D/0WM78RPJCXHX477YOZXKQE.uasset
new file mode 100644
index 00000000..e0cb5df2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/0D/0WM78RPJCXHX477YOZXKQE.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c21918f264c05666ed09cda482d4d137a7d81cc2a67f747bf6729ae8f7059d2b
+size 4083
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/HF/9H7TKAXH9DD8KI3TIXGI2I.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/HF/9H7TKAXH9DD8KI3TIXGI2I.uasset
new file mode 100644
index 00000000..dc4d993b
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/HF/9H7TKAXH9DD8KI3TIXGI2I.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5d007cc8571f1191319d3e019324a754c466ef54fdff4a881ce2395298c905f
+size 4079
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/NC/UUYHDUFQAXTRRN4RVOPIUF.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/NC/UUYHDUFQAXTRRN4RVOPIUF.uasset
new file mode 100644
index 00000000..2c578d43
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/NC/UUYHDUFQAXTRRN4RVOPIUF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bb5da121c05b7dc1da3c43e9cd7b67630d4d69e64d895adebf4584627f5bda3
+size 4107
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/NP/Z9EK2TXQ1TFO26WFZHWZII.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/NP/Z9EK2TXQ1TFO26WFZHWZII.uasset
new file mode 100644
index 00000000..623f50b7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/NP/Z9EK2TXQ1TFO26WFZHWZII.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:596d164a9c149af87b384d8132b74583aae4fa5b9fb6ff1fe5100efe48fc8689
+size 3364
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/UV/1C6W14EIHMXOXXB657JYKB.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/UV/1C6W14EIHMXOXXB657JYKB.uasset
new file mode 100644
index 00000000..76ed28a8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/6/UV/1C6W14EIHMXOXXB657JYKB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4ae7576eee89d8def30e67ac4590f2349cdb26a1488f1d62670ba643a6aec883
+size 4199
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/7Y/C94R5C0R01QSL2SVHUG3KD.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/7Y/C94R5C0R01QSL2SVHUG3KD.uasset
new file mode 100644
index 00000000..9f8be96f
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/7Y/C94R5C0R01QSL2SVHUG3KD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7eeb2d5c32c92dde7da650f1c0e28b0318fdb2ec320eec6b38ec56e273e00c82
+size 4257
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/H9/GITN2HJQNERMM41FAE68W0.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/H9/GITN2HJQNERMM41FAE68W0.uasset
new file mode 100644
index 00000000..dba34de3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/H9/GITN2HJQNERMM41FAE68W0.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d526e85dd6b00ae1e550a509dd21dc308b3bef198300938e7f3d49540704386a
+size 3601
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/P1/NN84RP20JNUCL0SHI5W2B8.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/P1/NN84RP20JNUCL0SHI5W2B8.uasset
new file mode 100644
index 00000000..3ab3b857
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/8/P1/NN84RP20JNUCL0SHI5W2B8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad7ce57ee4db04d8b34862228a9a8eb0520a9a2016e982df5374e04e81041e85
+size 4137
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/21/WWYX44RDCCS98492P9K9O3.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/21/WWYX44RDCCS98492P9K9O3.uasset
new file mode 100644
index 00000000..51f82820
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/21/WWYX44RDCCS98492P9K9O3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2cc9b152cf0171f0da0147e7e2b1a45a7da803b8585fe0300d795a2bc98843ff
+size 4083
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/6I/RU1L28PS820IOVH625A0DA.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/6I/RU1L28PS820IOVH625A0DA.uasset
new file mode 100644
index 00000000..f4b8136d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/6I/RU1L28PS820IOVH625A0DA.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ad08de5d7e928d08da67e868030cb76230874a9380200f27575dbc6fdc918ebe
+size 4259
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/CI/KST702KSCRZWYV56G3VJBD.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/CI/KST702KSCRZWYV56G3VJBD.uasset
new file mode 100644
index 00000000..356a28da
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/CI/KST702KSCRZWYV56G3VJBD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:13c37cf7da8e54d5a9c733a209b3d84484e3c29a4a81e87f13f5520a51907770
+size 4195
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/MO/72II2GSLK9VS0ULW9SACWH.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/MO/72II2GSLK9VS0ULW9SACWH.uasset
new file mode 100644
index 00000000..39f15c7c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/9/MO/72II2GSLK9VS0ULW9SACWH.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d9ae3c360d130eb5f2824b2235dd3bee7b61c649bd1e3056914b25f63f072d6
+size 4081
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/A/BW/M7Z5RX3O7568TBJFK5R76I.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/A/BW/M7Z5RX3O7568TBJFK5R76I.uasset
new file mode 100644
index 00000000..0cad9208
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/A/BW/M7Z5RX3O7568TBJFK5R76I.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3d9785c14f57af40b7b2ea05a60a6dc5703e8ab9848ab980b0b7673c90524d0e
+size 4197
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/A/IO/07IVU4EY14FMETPGTJULEO.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/A/IO/07IVU4EY14FMETPGTJULEO.uasset
new file mode 100644
index 00000000..038c6450
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/A/IO/07IVU4EY14FMETPGTJULEO.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:dd01191dd97eddc4dd58042d38cf81bdbe6a2c7a7fb325c7ad5a72a8bf2a2601
+size 4145
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/B/CJ/ZQ5BFL59YGMQUT9ZD7CAHJ.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/B/CJ/ZQ5BFL59YGMQUT9ZD7CAHJ.uasset
new file mode 100644
index 00000000..183534ff
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/B/CJ/ZQ5BFL59YGMQUT9ZD7CAHJ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2d36d6d378261d895fd200239df3a51f71d91878886963f5b9c71c72c7afe1f4
+size 4083
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/B/KW/9YH18EUCJFK5CZXL6H3W3R.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/B/KW/9YH18EUCJFK5CZXL6H3W3R.uasset
new file mode 100644
index 00000000..22f568e7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/B/KW/9YH18EUCJFK5CZXL6H3W3R.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2fa993398f6b05dbdafe6d8cfa0444a8b1da501c3b103983d567b2d0c471ed98
+size 3378
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/C/0I/VIQQWOEJKSKV1EK1XGX3EY.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/C/0I/VIQQWOEJKSKV1EK1XGX3EY.uasset
new file mode 100644
index 00000000..798876f2
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/C/0I/VIQQWOEJKSKV1EK1XGX3EY.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97556c67bcf00ebc8dc99200fb036e5ef9d2a7ba1c866932c30de63602eb6612
+size 4195
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/DE/SWSI13675DVYIZ0N4NF7Y3.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/DE/SWSI13675DVYIZ0N4NF7Y3.uasset
new file mode 100644
index 00000000..7f8018a7
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/DE/SWSI13675DVYIZ0N4NF7Y3.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:155efc55358d86b7b7017b683862030b83481f5dbb4551c9d759694bb112232b
+size 4064
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/MM/5416TNIX8GKJW3B714Y6WF.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/MM/5416TNIX8GKJW3B714Y6WF.uasset
new file mode 100644
index 00000000..b4aebb1b
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/MM/5416TNIX8GKJW3B714Y6WF.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:da81cbbe66fd8cc93c6015adbdaf10d79d417f2102d586d230b9434415c50f6a
+size 4257
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/OI/BVNTLHAPOPDXURSVGR63ME.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/OI/BVNTLHAPOPDXURSVGR63ME.uasset
new file mode 100644
index 00000000..f9092d49
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/OI/BVNTLHAPOPDXURSVGR63ME.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1acced0dca47586b090ac74dc77bc38d083f07e68ae10fde10cb860c2befe25e
+size 4257
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/SY/Z4CTQ4LG3YV10EKPD0UE8Q.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/SY/Z4CTQ4LG3YV10EKPD0UE8Q.uasset
new file mode 100644
index 00000000..d1220c4a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/SY/Z4CTQ4LG3YV10EKPD0UE8Q.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:90adcdc364f7f30c5538c5bf8596bea4f66c70068f90990210fc986aeb2ef5ea
+size 849
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/VL/KUT2U1MQ1ND9CXN070OTDM.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/VL/KUT2U1MQ1ND9CXN070OTDM.uasset
new file mode 100644
index 00000000..c7ae24e8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/D/VL/KUT2U1MQ1ND9CXN070OTDM.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b251c0f1d34e124a9c75c2efcb3c74fabcfdf5871b15a68d18df63e89c322fb5
+size 4085
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/E/FR/LBG6LPN5JCL3FMVSI2CK6R.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/E/FR/LBG6LPN5JCL3FMVSI2CK6R.uasset
new file mode 100644
index 00000000..7da1ffd0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/E/FR/LBG6LPN5JCL3FMVSI2CK6R.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e6cbaaaa9a10138be4952b22394cd3107901561e24650e05851f7f327326cc7b
+size 2580
diff --git a/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/E/T8/46ZIBNTTDDR3AOR2XC9VO6.uasset b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/E/T8/46ZIBNTTDDR3AOR2XC9VO6.uasset
new file mode 100644
index 00000000..9bb947b3
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalActors__/ThirdPerson/Maps/ThirdPersonMap/E/T8/46ZIBNTTDDR3AOR2XC9VO6.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4a82e69dbef197b40a16ea06a6b44aff09f7d81ec7c0de80ef77aa7ca47b9197
+size 4197
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/0/37/3XN21XBZV427UIXTUT8H9W.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/0/37/3XN21XBZV427UIXTUT8H9W.uasset
new file mode 100644
index 00000000..85889a04
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/0/37/3XN21XBZV427UIXTUT8H9W.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1504fa2b263e776ab8e1a9fb5108fe45893a98c120f686e960491515ca912f74
+size 2286
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/1/KK/5N51OQ0EA6OYJSFQZZMEN8.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/1/KK/5N51OQ0EA6OYJSFQZZMEN8.uasset
new file mode 100644
index 00000000..0a5dae60
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/1/KK/5N51OQ0EA6OYJSFQZZMEN8.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1cb7cc553e0aabffceddc6ce3cfa95e4f49672cac565d60a3f7055324a3ff160
+size 2290
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/3/PO/7NO7RHQONSP3PXZM34SO4K.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/3/PO/7NO7RHQONSP3PXZM34SO4K.uasset
new file mode 100644
index 00000000..7369763e
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/3/PO/7NO7RHQONSP3PXZM34SO4K.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6e7a188a39e6e8a9d36bca995ff417b8068850986a95262e5d8d8df143855c6b
+size 2298
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/4/0M/WY2357UKBHUI8P5RHRK2DZ.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/4/0M/WY2357UKBHUI8P5RHRK2DZ.uasset
new file mode 100644
index 00000000..e44f8133
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/4/0M/WY2357UKBHUI8P5RHRK2DZ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:40b8a99a5f17375390374165be7325c0c7b41d0733228f3c0ad031410f5bf6c5
+size 2284
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/4/CY/PA7VG9UZWHLZTEZL7VUBI9.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/4/CY/PA7VG9UZWHLZTEZL7VUBI9.uasset
new file mode 100644
index 00000000..20deb822
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/4/CY/PA7VG9UZWHLZTEZL7VUBI9.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8682a7fae586f4559213c1b7911028aba67b9e307197049e1065ee2d6eb92aba
+size 2284
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/5/YT/BWXH8AQGEZZOD1E6ZNPXSC.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/5/YT/BWXH8AQGEZZOD1E6ZNPXSC.uasset
new file mode 100644
index 00000000..783f8418
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/5/YT/BWXH8AQGEZZOD1E6ZNPXSC.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:100ee8544e63be62122c3a7bd70a2d860a522384f77f13712dfe55e3e72971d8
+size 2286
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/7/8N/ZRFPBTO989XQKP7T5RS7KK.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/7/8N/ZRFPBTO989XQKP7T5RS7KK.uasset
new file mode 100644
index 00000000..d6ee501c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/7/8N/ZRFPBTO989XQKP7T5RS7KK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:74973ca24943e6b3c1f032eebf19fbe885ff4bd80c55c19b6b32392c8176baf5
+size 2284
diff --git a/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/D/KZ/6W87MJLX6NJ5XR8ELXDNYK.uasset b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/D/KZ/6W87MJLX6NJ5XR8ELXDNYK.uasset
new file mode 100644
index 00000000..ebfd6ce4
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/FirstPerson/Maps/GunMechanicTester/D/KZ/6W87MJLX6NJ5XR8ELXDNYK.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:00adfd4b0eba1f7ae121b2d50b5022b23fdd698d6d8014eea3bc725d676737e5
+size 2284
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/0/TQ/3ACFHBDWFABKU596RXRO53.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/0/TQ/3ACFHBDWFABKU596RXRO53.uasset
new file mode 100644
index 00000000..0f60fc68
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/0/TQ/3ACFHBDWFABKU596RXRO53.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7d5d4d254a7f11e0a82a85632804ab80103b7a94485e8f6764cc8a71dfbb7cf2
+size 2356
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/1/30/W9Z34RUFOXLO8DC8TGLS52.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/1/30/W9Z34RUFOXLO8DC8TGLS52.uasset
new file mode 100644
index 00000000..6d951b32
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/1/30/W9Z34RUFOXLO8DC8TGLS52.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0cf023f6d69a487faf937e406d8ad0571784576efef2732d587cfd7b0fbc06b0
+size 2356
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/3/VN/8BVAC6SV0C7HY7NQZUMR3A.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/3/VN/8BVAC6SV0C7HY7NQZUMR3A.uasset
new file mode 100644
index 00000000..b0300fc8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/3/VN/8BVAC6SV0C7HY7NQZUMR3A.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:762ed00b866ef1c1c08482a322e6ee4b34869ed2c489d9c3ee5a5a54b594f03e
+size 2358
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/3/X0/UIXBS52CP92S41MZVNKQ5N.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/3/X0/UIXBS52CP92S41MZVNKQ5N.uasset
new file mode 100644
index 00000000..611bccd6
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/3/X0/UIXBS52CP92S41MZVNKQ5N.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7feb47b555948d4b652cbf2844eb4d6a6de101610e116a17a9bc211132970104
+size 2270
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/4/O7/YR3DRO0R6AREA4XTW0JVGN.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/4/O7/YR3DRO0R6AREA4XTW0JVGN.uasset
new file mode 100644
index 00000000..9611b21c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/4/O7/YR3DRO0R6AREA4XTW0JVGN.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:747d3daaa877de9903dddbbce38df48b4d7791c4a19f94a0b40dbabd9ae613a2
+size 2356
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/4/OR/RK9JDE40KKJZQWFMFL26I5.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/4/OR/RK9JDE40KKJZQWFMFL26I5.uasset
new file mode 100644
index 00000000..2bd727dc
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/4/OR/RK9JDE40KKJZQWFMFL26I5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:10215e56b02b528b6db32375c7ad77f3ec95c2b1b96d37fee7f3cae687c10a6b
+size 2356
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/5/3P/SF481C8C6IO4CAHI6873XE.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/5/3P/SF481C8C6IO4CAHI6873XE.uasset
new file mode 100644
index 00000000..2ba42637
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/5/3P/SF481C8C6IO4CAHI6873XE.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f0332abd88de716a1f9a7d2aa75f2a0106e6e05ac04b8752f2bf7ef1f07ac88
+size 2362
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/7/IO/6Y51GE24EVFOHXCG615BY1.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/7/IO/6Y51GE24EVFOHXCG615BY1.uasset
new file mode 100644
index 00000000..d66c978d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/7/IO/6Y51GE24EVFOHXCG615BY1.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:10bc3f7b244305eec4fac0ce6ea3798cc21689af65664c8e0dc1e8b22e47a123
+size 2370
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/D/WD/LGTPJJO55ED5H60IZ3025H.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/D/WD/LGTPJJO55ED5H60IZ3025H.uasset
new file mode 100644
index 00000000..12762e0c
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/BountySystemTestLevel/D/WD/LGTPJJO55ED5H60IZ3025H.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ebb4ae789fd6106278e299904384cfd060a5e59110a0a4091ea77b4b50b81976
+size 2358
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/3/IN/ZX0DKIDX2JX3JZ5AHZ358H.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/3/IN/ZX0DKIDX2JX3JZ5AHZ358H.uasset
new file mode 100644
index 00000000..8bc88b22
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/3/IN/ZX0DKIDX2JX3JZ5AHZ358H.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:90f3861f162a74e62d9638a7bf157726f95488a9b7e87aa5955cdaa81767de3b
+size 2186
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/5/ED/F43HQFUB7DXKRU5ZNLN2HL.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/5/ED/F43HQFUB7DXKRU5ZNLN2HL.uasset
new file mode 100644
index 00000000..b26e8770
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/5/ED/F43HQFUB7DXKRU5ZNLN2HL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:64fdade231bc37c873e650f913074ceecc4b5621ee952f20bdd17ddd3533f3fa
+size 2200
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/6/JT/KDT0MAGCOXR70VASIZOKMP.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/6/JT/KDT0MAGCOXR70VASIZOKMP.uasset
new file mode 100644
index 00000000..0f6ff441
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/6/JT/KDT0MAGCOXR70VASIZOKMP.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3f7fdb0a5971a633719b2967432504edf6409cdca147a1c11b4049d6dd5f4e7c
+size 2186
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/7/0J/97389JWAHOKRK9742IJNUD.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/7/0J/97389JWAHOKRK9742IJNUD.uasset
new file mode 100644
index 00000000..829b8f15
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/7/0J/97389JWAHOKRK9742IJNUD.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ee9c5ac0277bfd791d343120790ab822d742ec64658dbc0ec02a88a1156b7217
+size 2188
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/7/6G/DU9OC4U9R64TY369G0N48F.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/7/6G/DU9OC4U9R64TY369G0N48F.uasset
new file mode 100644
index 00000000..94b8cb09
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/7/6G/DU9OC4U9R64TY369G0N48F.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:99a25acee5c7712ce29bf79274241157a841d8395b4861f048bd9d72508bb87b
+size 2186
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/A/OF/DMAUKRJ7ZVQKZ15OGILSN5.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/A/OF/DMAUKRJ7ZVQKZ15OGILSN5.uasset
new file mode 100644
index 00000000..e67ed7f0
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/A/OF/DMAUKRJ7ZVQKZ15OGILSN5.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b9477e753ec6e98c3ac912e3e03ceae0e9b453adb2bf5d0ab2ac0b15de1740c1
+size 2188
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/C/4M/6DZ06BS46GV23GYW6TYVSW.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/C/4M/6DZ06BS46GV23GYW6TYVSW.uasset
new file mode 100644
index 00000000..093a7b9d
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/C/4M/6DZ06BS46GV23GYW6TYVSW.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57c903a6b521f7b86ec75f8a63d8eab9aceabca2a45d5e06dc8b81fbf4c745f7
+size 2192
diff --git a/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/E/KK/K83LURWABW69BW7GEPNTMB.uasset b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/E/KK/K83LURWABW69BW7GEPNTMB.uasset
new file mode 100644
index 00000000..3dac1372
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/Levels/EnemyAITest/E/KK/K83LURWABW69BW7GEPNTMB.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0ba7aff1929eb1391d4be9aa86c03d2b2eebdf17ccb29b755a0618675ce05df3
+size 2186
diff --git a/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/3/DH/JQTP3L9HHXRN8IUHATI906.uasset b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/3/DH/JQTP3L9HHXRN8IUHATI906.uasset
new file mode 100644
index 00000000..8a4c9e5f
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/3/DH/JQTP3L9HHXRN8IUHATI906.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8502666e004c0b5c35154b7464b441013c705eed34c3ea749f17c36c96558cf7
+size 2011
diff --git a/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/4/4A/NCNZF2U4ZTZ8XZJNF86FNT.uasset b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/4/4A/NCNZF2U4ZTZ8XZJNF86FNT.uasset
new file mode 100644
index 00000000..e425d263
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/4/4A/NCNZF2U4ZTZ8XZJNF86FNT.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5fd467498618623173886f91ea74e8e2a647fb4eb05887dfb71b36602364b49b
+size 2009
diff --git a/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/8/05/U8OLLG133BEQMR58UPHM3P.uasset b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/8/05/U8OLLG133BEQMR58UPHM3P.uasset
new file mode 100644
index 00000000..464a93c4
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/8/05/U8OLLG133BEQMR58UPHM3P.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ce6528560be9a7d4a162f899701bf0117c3aebce4a53ca8b1a4974070bde602b
+size 2009
diff --git a/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/A/KP/VZTB4WP3P1L1F1WL9R6XLZ.uasset b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/A/KP/VZTB4WP3P1L1F1WL9R6XLZ.uasset
new file mode 100644
index 00000000..bececfa8
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/A/KP/VZTB4WP3P1L1F1WL9R6XLZ.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:03f8cff85345b9cd9307106f09dc44109abea9c061343ceac9ad9e118e377132
+size 2015
diff --git a/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/B/AN/0Z4D0BFPHEXAYK76DY0WLL.uasset b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/B/AN/0Z4D0BFPHEXAYK76DY0WLL.uasset
new file mode 100644
index 00000000..f51dfcca
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/B/AN/0Z4D0BFPHEXAYK76DY0WLL.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cf3a8b0b3a498efe6e49e4c5dae12833aefdd9bf87663ee35f6a210e847588b1
+size 2009
diff --git a/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/D/13/KQB15WT334LUGWVAUX80XH.uasset b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/D/13/KQB15WT334LUGWVAUX80XH.uasset
new file mode 100644
index 00000000..790c306a
--- /dev/null
+++ b/EndlessVendetta/Content/__ExternalObjects__/ThirdPerson/Maps/ThirdPersonMap/D/13/KQB15WT334LUGWVAUX80XH.uasset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d98ab61e02eafe51722506d3a0382ad21976f47e2290f539607fb3ba9d71038d
+size 2011
diff --git a/EndlessVendetta/EndlessVendetta.uproject b/EndlessVendetta/EndlessVendetta.uproject
index 02d42dff..340e263e 100644
--- a/EndlessVendetta/EndlessVendetta.uproject
+++ b/EndlessVendetta/EndlessVendetta.uproject
@@ -7,7 +7,13 @@
{
"Name": "EndlessVendetta",
"Type": "Runtime",
- "LoadingPhase": "Default"
+ "LoadingPhase": "Default",
+ "AdditionalDependencies": [
+ "Engine",
+ "AIModule",
+ "CoreUObject",
+ "UMG"
+ ]
}
],
"Plugins": [
diff --git a/EndlessVendetta/Platforms/HoloLens/Config/HoloLensEngine.ini b/EndlessVendetta/Platforms/HoloLens/Config/HoloLensEngine.ini
new file mode 100644
index 00000000..d5ebb91b
--- /dev/null
+++ b/EndlessVendetta/Platforms/HoloLens/Config/HoloLensEngine.ini
@@ -0,0 +1,32 @@
+
+
+[/Script/HoloLensPlatformEditor.HoloLensTargetSettings]
+bBuildForEmulation=False
+bBuildForDevice=True
+bUseNameForLogo=True
+bBuildForRetailWindowsStore=False
+bAutoIncrementVersion=False
+bShouldCreateAppInstaller=False
+AppInstallerInstallationURL=
+HoursBetweenUpdateChecks=0
+bEnablePIXProfiling=False
+TileBackgroundColor=(B=64,G=0,R=0,A=255)
+SplashScreenBackgroundColor=(B=64,G=0,R=0,A=255)
++PerCultureResources=(CultureId="",Strings=(PackageDisplayName="",PublisherDisplayName="",PackageDescription="",ApplicationDisplayName="",ApplicationDescription=""),Images=())
+TargetDeviceFamily=Windows.Holographic
+MinimumPlatformVersion=
+MaximumPlatformVersionTested=10.0.18362.0
+MaxTrianglesPerCubicMeter=500.000000
+SpatialMeshingVolumeSize=20.000000
+CompilerVersion=Default
+Windows10SDKVersion=10.0.18362.0
++CapabilityList=internetClientServer
++CapabilityList=privateNetworkClientServer
++Uap2CapabilityList=spatialPerception
+bSetDefaultCapabilities=False
+SpatializationPlugin=
+SourceDataOverridePlugin=
+ReverbPlugin=
+OcclusionPlugin=
+SoundCueCookQualityIndex=-1
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp
new file mode 100644
index 00000000..6a2debfc
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.cpp
@@ -0,0 +1,103 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "AICharacter.h"
+
+#include "AI_EnemyController.h"
+#include "Components/CapsuleComponent.h"
+#include "Engine/DamageEvents.h"
+#include "GameFramework/CharacterMovementComponent.h"
+#include "Perception/AIPerceptionStimuliSourceComponent.h"
+#include "Perception/AISense_Sight.h"
+#include "BehaviorTree/BlackboardComponent.h"
+#include "Blueprint/AIBlueprintHelperLibrary.h"
+
+
+// Sets default values
+AAICharacter::AAICharacter()
+{
+ // Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
+ PrimaryActorTick.bCanEverTick = true;
+ SetupStimuliSourceComponent();
+}
+
+// Called when the game starts or when spawned
+void AAICharacter::BeginPlay()
+{
+ Super::BeginPlay();
+}
+
+// Called every frame
+void AAICharacter::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
+
+// Called to bind functionality to input
+void AAICharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
+{
+ Super::SetupPlayerInputComponent(PlayerInputComponent);
+}
+
+UBehaviorTree* AAICharacter::GetBehaviorTree() const
+{
+ return BehaviorTree;
+}
+
+float AAICharacter::TakeDamage(const float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
+{
+ CurrentHealth -= DamageAmount;
+ if (CurrentHealth <= 0)
+ {
+ if (!IsValid(this)) return 0.0f;
+ CurrentHealth = 0;
+ UE_LOG(LogTemp, Display, TEXT("%s is dead"), *CharacterName.ToString());
+
+ OnDeath();
+ }
+ return Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
+}
+
+APatrolPath* AAICharacter::GetPatrolPath() const
+{
+ return PatrolPath;
+}
+
+void AAICharacter::SetupStimuliSourceComponent()
+{
+ StimuliSourceComponent = CreateDefaultSubobject(TEXT("Stimuli Source Component"));
+ if (IsValid(StimuliSourceComponent))
+ {
+ StimuliSourceComponent->RegisterForSense(TSubclassOf());
+ StimuliSourceComponent->RegisterWithPerceptionSystem();
+ }
+}
+
+void AAICharacter::OnDeath()
+{
+ /*const AAI_EnemyController* AIController = Cast(GetController());
+ AIController->GetBrainComponent()->StopLogic(" is dead");*/
+ this->Tags.Add(FName("Dead"));
+ //Ragdoll
+ DetachFromControllerPendingDestroy();
+ UCapsuleComponent* CapsuleComp = GetCapsuleComponent();
+ CapsuleComp->SetCollisionEnabled(ECollisionEnabled::NoCollision);
+ CapsuleComp->SetCollisionResponseToAllChannels(ECR_Ignore);
+
+ GetMesh()->SetCollisionProfileName(TEXT("Ragdoll"));
+ SetActorEnableCollision(true);
+
+ GetMesh()->SetAllBodiesSimulatePhysics(true);
+ GetMesh()->SetSimulatePhysics(true);
+ GetMesh()->WakeAllRigidBodies();
+ GetMesh()->bBlendPhysics = true;
+
+ if (UCharacterMovementComponent* CharacterComp = Cast(GetMovementComponent()))
+ {
+ CharacterComp->StopMovementImmediately();
+ CharacterComp->DisableMovement();
+ CharacterComp->SetComponentTickEnabled(false);
+ }
+
+ SetLifeSpan(30.0f);
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.h
new file mode 100644
index 00000000..09d63741
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AICharacter.h
@@ -0,0 +1,62 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "PatrolPath.h"
+#include "BehaviorTree/BehaviorTree.h"
+#include "GameFramework/Character.h"
+#include "AICharacter.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AAICharacter : public ACharacter
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this character's properties
+ AAICharacter();
+
+ UPROPERTY(EditDefaultsOnly, Category = "Stats")
+ float CurrentHealth = 100.0f;
+ UPROPERTY(EditDefaultsOnly, Category = "Stats")
+ float MaxHealth = 100.0f;
+ UPROPERTY(EditDefaultsOnly, Category = "Stats")
+ float DefaultHealth = 100.0f;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Profile")
+ FName CharacterName = "AI Character";
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+ UPROPERTY()
+ class UAIPerceptionStimuliSourceComponent* StimuliSourceComponent;
+ void SetupStimuliSourceComponent();
+
+ virtual void OnDeath();
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ // Called to bind functionality to input
+ virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
+
+ UFUNCTION(BlueprintCallable, Category = "AI")
+ UBehaviorTree* GetBehaviorTree() const;
+
+ UFUNCTION(BlueprintCallable, Category = "Damage Control")
+ virtual float TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
+
+ UFUNCTION()
+ APatrolPath* GetPatrolPath() const;
+
+private:
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ UBehaviorTree* BehaviorTree;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ APatrolPath* PatrolPath;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.cpp
new file mode 100644
index 00000000..6c14c0cc
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.cpp
@@ -0,0 +1,81 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "AIControlHub.h"
+
+#include "EnemyCharacter.h"
+
+
+// Sets default values
+AAIControlHub::AAIControlHub()
+{
+ // 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 AAIControlHub::BeginPlay()
+{
+ Super::BeginPlay();
+
+ for (AEnemyCharacter* EnemyActor : EnemyActors)
+ {
+ EnemyActor->SubscribeToGroupAIEvents(this);
+ }
+}
+
+// Called every frame
+void AAIControlHub::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
+
+void AAIControlHub::IncreaseAlertLevel()
+{
+ AlertLevel = FMath::Clamp(AlertLevel + 1, 0, 3);
+ OnAlertLevelChanged();
+}
+
+void AAIControlHub::DecreaseAlertLevel()
+{
+ AlertLevel = FMath::Clamp(AlertLevel - 1, 0, 3);
+ OnAlertLevelChanged();
+}
+
+void AAIControlHub::SetAlertLevel(int NewAlertLevel)
+{
+ AlertLevel = FMath::Clamp(NewAlertLevel, 0, 3);
+ OnAlertLevelChanged();
+}
+
+int AAIControlHub::GetAlertLevel() const
+{
+ return AlertLevel;
+}
+
+void AAIControlHub::OnAlertLevelChanged()
+{
+ AlertLevelEvent.Broadcast(AlertLevel);
+ if (AlertLevel == 2)
+ {
+ SetPlayerLastKnownLocation();
+ HuntPlayerEvent.Broadcast(PlayerLastKnownLocation);
+ }
+}
+
+void AAIControlHub::SetPlayerLastKnownLocation(FVector Location)
+{
+ if (Location == FVector(0, 0, 0))
+ {
+ PlayerLastKnownLocation = GetWorld()->GetFirstPlayerController()->GetPawn()->GetActorLocation();
+ }
+ else
+ {
+ PlayerLastKnownLocation = Location;
+ }
+}
+
+void AAIControlHub::RemoveEnemyActor(AEnemyCharacter* EnemyActor)
+{
+ EnemyActors.Remove(EnemyActor);
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.h b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.h
new file mode 100644
index 00000000..bbe2e21e
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AIControlHub.h
@@ -0,0 +1,48 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EnemyCharacter.h"
+#include "GameFramework/Actor.h"
+#include "AIControlHub.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AAIControlHub : public AActor
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ AAIControlHub();
+
+ DECLARE_EVENT_OneParam(AAIControlHub, FAlertLevelEvent, int);
+ FAlertLevelEvent AlertLevelEvent;
+ DECLARE_EVENT_OneParam(AAIControlHub, FHuntPlayer, FVector);
+ FHuntPlayer HuntPlayerEvent;
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ void IncreaseAlertLevel();
+ void DecreaseAlertLevel();
+ void SetAlertLevel(int NewAlertLevel);
+ int GetAlertLevel() const;
+ void OnAlertLevelChanged();
+ void SetPlayerLastKnownLocation(FVector Location = FVector(0, 0, 0));
+ void RemoveEnemyActor(AEnemyCharacter* EnemyActor);
+
+private:
+ int AlertLevel = 0;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ TArray EnemyActors;
+
+ UPROPERTY()
+ FVector PlayerLastKnownLocation;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AI_CompanionController.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AI_CompanionController.cpp
new file mode 100644
index 00000000..5ca23fe3
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AI_CompanionController.cpp
@@ -0,0 +1,85 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "AI_CompanionController.h"
+
+#include "AI_EnemyController.h"
+#include "CompanionCharacter.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "Perception/AIPerceptionComponent.h"
+#include "Perception/AISenseConfig_Sight.h"
+
+
+AAI_CompanionController::AAI_CompanionController(FObjectInitializer const& ObjectInitializer)
+{
+ // 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;
+ AAIController::SetGenericTeamId(FGenericTeamId(0));
+ SetupPerceptionSystem();
+}
+
+// Called when the game starts or when spawned
+void AAI_CompanionController::BeginPlay()
+{
+ Super::BeginPlay();
+}
+
+void AAI_CompanionController::OnPossess(APawn* InPawn)
+{
+ Super::OnPossess(InPawn);
+ if (const ACompanionCharacter* CompanionCharacter = Cast(InPawn))
+ {
+ if (UBehaviorTree* const BehaviorTree = CompanionCharacter->GetBehaviorTree())
+ {
+ UBlackboardComponent* TempBlackboardPtr;
+ UseBlackboard(BehaviorTree->BlackboardAsset, TempBlackboardPtr);
+ Blackboard = TempBlackboardPtr;
+ RunBehaviorTree(BehaviorTree);
+ }
+ }
+}
+
+// Called every frame
+void AAI_CompanionController::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
+
+void AAI_CompanionController::SetupPerceptionSystem()
+{
+ SightConfig = CreateDefaultSubobject(TEXT("Sight Config"));
+ if (IsValid(SightConfig))
+ {
+ SetPerceptionComponent(*CreateDefaultSubobject(TEXT("Perception Component")));
+ SightConfig->SightRadius = 2000.0f;
+ SightConfig->LoseSightRadius = 2100.0f;
+ SightConfig->PeripheralVisionAngleDegrees = 70.0f;
+ SightConfig->SetMaxAge(20.0f);
+ SightConfig->AutoSuccessRangeFromLastSeenLocation = 520.0f;
+ SightConfig->DetectionByAffiliation.bDetectEnemies = true;
+ SightConfig->DetectionByAffiliation.bDetectFriendlies = true;
+ SightConfig->DetectionByAffiliation.bDetectNeutrals = true;
+ GetPerceptionComponent()->SetDominantSense(*SightConfig->GetSenseImplementation());
+ GetPerceptionComponent()->OnTargetPerceptionUpdated.AddDynamic(this, &AAI_CompanionController::OnTargetPerceptionUpdated);
+ GetPerceptionComponent()->ConfigureSense(*SightConfig);
+ }
+}
+
+void AAI_CompanionController::OnTargetPerceptionUpdated(AActor* Actor, FAIStimulus const Stimulus)
+{
+ if (AEndlessVendettaCharacter* const PlayerCharacter = Cast(Actor))
+ {
+ // if (Stimulus.WasSuccessfullySensed())
+ // {
+ // GetBlackboardComponent()->SetValueAsObject("TargetPlayer", Actor);
+ // GetBlackboardComponent()->SetValueAsVector("TargetLocation", Stimulus.StimulusLocation);
+ // GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", true);
+ // }
+ // else
+ // {
+ // GetBlackboardComponent()->ClearValue("TargetActor");
+ // GetBlackboardComponent()->ClearValue("TargetLocation");
+ // GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", false);
+ // }
+ }
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AI_CompanionController.h b/EndlessVendetta/Source/EndlessVendetta/AI/AI_CompanionController.h
new file mode 100644
index 00000000..3fb57dc2
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AI_CompanionController.h
@@ -0,0 +1,36 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "AIController.h"
+#include "AI_CompanionController.generated.h"
+
+struct FAIStimulus;
+
+UCLASS()
+class ENDLESSVENDETTA_API AAI_CompanionController : public AAIController
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ explicit AAI_CompanionController(FObjectInitializer const& ObjectInitializer);
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+ virtual void OnPossess(APawn* InPawn) override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+private:
+ class UAISenseConfig_Sight* SightConfig;
+ void SetupPerceptionSystem();
+
+ UFUNCTION()
+ void OnTargetPerceptionUpdated(AActor* Actor, FAIStimulus const Stimulus);
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp
new file mode 100644
index 00000000..6d354168
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.cpp
@@ -0,0 +1,120 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "AI_EnemyController.h"
+
+#include "EnemyCharacter.h"
+#include "BehaviorTree/BlackboardComponent.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "Perception/AIPerceptionComponent.h"
+#include "Perception/AISenseConfig_Hearing.h"
+#include "Perception/AISenseConfig_Sight.h"
+
+
+// Sets default values
+AAI_EnemyController::AAI_EnemyController(FObjectInitializer const& ObjectInitializer)
+{
+ // 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;
+ AAIController::SetGenericTeamId(FGenericTeamId(1));
+ SetupPerceptionSystem();
+}
+
+// Called when the game starts or when spawned
+void AAI_EnemyController::BeginPlay()
+{
+ Super::BeginPlay();
+}
+
+void AAI_EnemyController::OnPossess(APawn* InPawn)
+{
+ Super::OnPossess(InPawn);
+ if (const AEnemyCharacter* EnemyCharacter = Cast(InPawn))
+ {
+ if (UBehaviorTree* const BehaviorTree = EnemyCharacter->GetBehaviorTree())
+ {
+ UBlackboardComponent* TempBlackboardPtr;
+ UseBlackboard(BehaviorTree->BlackboardAsset, TempBlackboardPtr);
+ Blackboard = TempBlackboardPtr;
+ if (IsValid(EnemyCharacter->GetPatrolPath()))
+ {
+ Blackboard->SetValueAsBool("IsPatroling", true);
+ }
+ else
+ {
+ Blackboard->SetValueAsBool("IsPatroling", false);
+ }
+ RunBehaviorTree(BehaviorTree);
+ }
+ }
+}
+
+// Called every frame
+void AAI_EnemyController::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+ if (GetBlackboardComponent()->GetValueAsBool("CanSeePlayer"))
+ {
+ GetBlackboardComponent()->SetValueAsVector("TargetLocation", GetWorld()->GetFirstPlayerController()->GetPawn()->GetActorLocation());
+ }
+}
+
+void AAI_EnemyController::AssignPatrolPathLate()
+{
+ Blackboard->SetValueAsBool("IsPatroling", true);
+}
+
+
+void AAI_EnemyController::SetupPerceptionSystem()
+{
+ SightConfig = CreateDefaultSubobject(TEXT("Sight Config"));
+ SightConfig->SightRadius = 2000.0f;
+ SightConfig->LoseSightRadius = 2100.0f;
+ SightConfig->PeripheralVisionAngleDegrees = 70.0f;
+ SightConfig->SetMaxAge(20.0f);
+ SightConfig->AutoSuccessRangeFromLastSeenLocation = 520.0f;
+ SightConfig->DetectionByAffiliation.bDetectEnemies = true;
+ SightConfig->DetectionByAffiliation.bDetectFriendlies = true;
+ SightConfig->DetectionByAffiliation.bDetectNeutrals = true;
+
+ HearingConfig = CreateDefaultSubobject(TEXT("Hearing Config"));
+ HearingConfig->HearingRange = 2000.0f;
+ HearingConfig->DetectionByAffiliation.bDetectEnemies = true;
+ HearingConfig->DetectionByAffiliation.bDetectFriendlies = true;
+ HearingConfig->DetectionByAffiliation.bDetectNeutrals = true;
+
+ if (!IsValid(SightConfig)) return;
+ if (!IsValid(HearingConfig)) return;
+
+ SetPerceptionComponent(*CreateDefaultSubobject(TEXT("Perception Component")));
+ GetPerceptionComponent()->SetDominantSense(*SightConfig->GetSenseImplementation());
+ GetPerceptionComponent()->OnTargetPerceptionUpdated.AddDynamic(this, &AAI_EnemyController::OnTargetPerceptionUpdated);
+ GetPerceptionComponent()->ConfigureSense(*SightConfig);
+ GetPerceptionComponent()->ConfigureSense(*HearingConfig);
+}
+
+void AAI_EnemyController::OnTargetPerceptionUpdated(AActor* Actor, FAIStimulus const Stimulus)
+{
+ if (AEndlessVendettaCharacter* const PlayerCharacter = Cast(Actor))
+ {
+ if (Stimulus.WasSuccessfullySensed() && Stimulus.Type == SightConfig->GetSenseID())
+ {
+ GetBlackboardComponent()->SetValueAsObject("TargetPlayer", Actor);
+ GetBlackboardComponent()->SetValueAsVector("TargetLocation", Stimulus.StimulusLocation);
+ GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", true);
+ }
+ else if (!Stimulus.WasSuccessfullySensed() && Stimulus.Type == SightConfig->GetSenseID())
+ {
+ GetBlackboardComponent()->ClearValue("TargetActor");
+ GetBlackboardComponent()->ClearValue("TargetLocation");
+ GetBlackboardComponent()->SetValueAsBool("CanSeePlayer", false);
+ }
+
+ if (Stimulus.WasSuccessfullySensed() && Stimulus.Type == HearingConfig->GetSenseID())
+ {
+ GetBlackboardComponent()->SetValueAsObject("TargetPlayer", Actor);
+ GetBlackboardComponent()->SetValueAsVector("InvestigationLocation", Stimulus.StimulusLocation);
+ GetBlackboardComponent()->SetValueAsBool("IsInvestigating", true);
+ }
+ }
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.h b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.h
new file mode 100644
index 00000000..96c8aa8e
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/AI_EnemyController.h
@@ -0,0 +1,40 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "AIController.h"
+#include "Perception/AIPerceptionTypes.h"
+#include "AI_EnemyController.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AAI_EnemyController : public AAIController
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ explicit AAI_EnemyController(FObjectInitializer const& ObjectInitializer);
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+ virtual void OnPossess(APawn* InPawn) override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ UFUNCTION(BlueprintCallable)
+ void AssignPatrolPathLate();
+
+private:
+ UPROPERTY()
+ class UAISenseConfig_Sight* SightConfig;
+ UPROPERTY()
+ class UAISenseConfig_Hearing* HearingConfig;
+ void SetupPerceptionSystem();
+
+ UFUNCTION()
+ void OnTargetPerceptionUpdated(AActor* Actor, FAIStimulus const Stimulus);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.cpp
new file mode 100644
index 00000000..197ba5d5
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.cpp
@@ -0,0 +1,25 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "CompanionCharacter.h"
+
+
+// Sets default values
+ACompanionCharacter::ACompanionCharacter()
+{
+ // Set this character 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 ACompanionCharacter::BeginPlay()
+{
+ Super::BeginPlay();
+ CharacterName = "Companion";
+}
+
+// Called every frame
+void ACompanionCharacter::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.h
new file mode 100644
index 00000000..a9c0aa23
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/CompanionCharacter.h
@@ -0,0 +1,27 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "AICharacter.h"
+#include "BehaviorTree/BehaviorTree.h"
+#include "GameFramework/Character.h"
+#include "CompanionCharacter.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API ACompanionCharacter : public AAICharacter
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this character's properties
+ ACompanionCharacter();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp
new file mode 100644
index 00000000..e56cd24d
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.cpp
@@ -0,0 +1,81 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "EnemyCharacter.h"
+
+#include "AIControlHub.h"
+#include "AIController.h"
+#include "BehaviorTree/BlackboardComponent.h"
+
+
+class UAISense_Sight;
+// Sets default values
+AEnemyCharacter::AEnemyCharacter()
+{
+ // Set this character 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 AEnemyCharacter::BeginPlay()
+{
+ Super::BeginPlay();
+ CharacterName = "Enemy";
+}
+
+void AEnemyCharacter::OnDeath()
+{
+ Super::OnDeath();
+ DelegatedControlHub->AlertLevelEvent.Remove(AlertLevelDelegateHandle);
+ DelegatedControlHub->HuntPlayerEvent.Remove(HuntPlayerDelegateHandle);
+ AlertLevelDelegateHandle.Reset();
+ HuntPlayerDelegateHandle.Reset();
+ DelegatedControlHub->RemoveEnemyActor(this);
+}
+
+// Called every frame
+void AEnemyCharacter::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
+
+void AEnemyCharacter::SubscribeToGroupAIEvents(AAIControlHub* ControlHub)
+{
+ DelegatedControlHub = ControlHub;
+ AlertLevelDelegateHandle = ControlHub->AlertLevelEvent.AddUObject(this, &AEnemyCharacter::SetAlertLevel);
+ HuntPlayerDelegateHandle = ControlHub->HuntPlayerEvent.AddUObject(this, &AEnemyCharacter::HuntPlayer);
+}
+
+void AEnemyCharacter::SetAlertLevel(const int NewAlertLevel) const
+{
+ if (!IsValid(this)) return;
+ if (!IsValid(GetController())) return;
+ Cast(GetController())->GetBlackboardComponent()->SetValueAsInt("AlertLevel", NewAlertLevel);
+}
+
+void AEnemyCharacter::SetLocalAlertLevel(int NewAlertLevel) const
+{
+ if (!IsValid(DelegatedControlHub)) return;
+ DelegatedControlHub->SetAlertLevel(NewAlertLevel);
+}
+
+void AEnemyCharacter::EquipWeapon_Implementation()
+{
+}
+
+void AEnemyCharacter::DeEquipWeapon_Implementation()
+{
+}
+
+void AEnemyCharacter::SetFiring_Implementation(bool IsFiring)
+{
+}
+
+void AEnemyCharacter::HuntPlayer(FVector PlayerLastKnownLocation)
+{
+ if (!IsValid(this)) return;
+ if (!IsValid(GetController())) return;
+ SetAlertLevel(2);
+ EquipWeapon();
+ Cast(GetController())->GetBlackboardComponent()->SetValueAsVector("LastKnownLocation", PlayerLastKnownLocation);
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h
new file mode 100644
index 00000000..eeb034ce
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/EnemyCharacter.h
@@ -0,0 +1,51 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "AICharacter.h"
+#include "BehaviorTree/BehaviorTree.h"
+#include "GameFramework/Character.h"
+#include "EnemyCharacter.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AEnemyCharacter : public AAICharacter
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this character's properties
+ AEnemyCharacter();
+ UPROPERTY(BlueprintReadWrite)
+ bool WeaponRaised = false;
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+ class AAIControlHub* DelegatedControlHub;
+ virtual void OnDeath() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+ UFUNCTION(BlueprintCallable)
+ void SubscribeToGroupAIEvents(class AAIControlHub* ControlHub);
+ void SetLocalAlertLevel(int NewAlertLevel) const;
+
+ //Animation Blueprint Triggers
+ UFUNCTION(BlueprintNativeEvent)
+ void EquipWeapon();
+ virtual void EquipWeapon_Implementation();
+ UFUNCTION(BlueprintNativeEvent)
+ void DeEquipWeapon();
+ virtual void DeEquipWeapon_Implementation();
+ UFUNCTION(BlueprintNativeEvent)
+ void SetFiring(bool IsFiring);
+ virtual void SetFiring_Implementation(bool IsFiring);
+
+private:
+ FDelegateHandle AlertLevelDelegateHandle;
+ FDelegateHandle HuntPlayerDelegateHandle;
+ void SetAlertLevel(int NewAlertLevel) const;
+ void HuntPlayer(FVector PlayerLastKnowLocation);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/PatrolPath.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/PatrolPath.cpp
new file mode 100644
index 00000000..18c7f07a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/PatrolPath.cpp
@@ -0,0 +1,22 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "PatrolPath.h"
+
+
+// Sets default values
+APatrolPath::APatrolPath()
+{
+ // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
+ PrimaryActorTick.bCanEverTick = false;
+}
+
+FVector APatrolPath::GetPatrolPoint(int const Index) const
+{
+ return PatrolPoint[Index];
+}
+
+int APatrolPath::Num() const
+{
+ return PatrolPoint.Num();
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/PatrolPath.h b/EndlessVendetta/Source/EndlessVendetta/AI/PatrolPath.h
new file mode 100644
index 00000000..f9236526
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/PatrolPath.h
@@ -0,0 +1,24 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Actor.h"
+#include "PatrolPath.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API APatrolPath : public AActor
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ APatrolPath();
+
+ FVector GetPatrolPoint(int const Index) const;
+ int Num() const;
+
+private:
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (MakeEditWidget = "true", AllowPrivateAccess = "true"))
+ TArray PatrolPoint;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_ChangeSpeed.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_ChangeSpeed.cpp
new file mode 100644
index 00000000..1ae661ba
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_ChangeSpeed.cpp
@@ -0,0 +1,26 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTService_ChangeSpeed.h"
+
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+#include "GameFramework/CharacterMovementComponent.h"
+
+UBTService_ChangeSpeed::UBTService_ChangeSpeed()
+{
+ bNotifyBecomeRelevant = true;
+ NodeName = TEXT("Change Speed");
+}
+
+void UBTService_ChangeSpeed::OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ Super::OnBecomeRelevant(OwnerComp, NodeMemory);
+ if (const AAI_EnemyController* const EnemyController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (const AEnemyCharacter* const EnemyCharacter = Cast(EnemyController->GetPawn()))
+ {
+ EnemyCharacter->GetCharacterMovement()->MaxWalkSpeed = Speed;
+ }
+ }
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_ChangeSpeed.h b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_ChangeSpeed.h
new file mode 100644
index 00000000..9d8fff7e
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_ChangeSpeed.h
@@ -0,0 +1,23 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Services/BTService_BlackboardBase.h"
+#include "BTService_ChangeSpeed.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTService_ChangeSpeed : public UBTService_BlackboardBase
+{
+ GENERATED_BODY()
+
+ UBTService_ChangeSpeed();
+ virtual void OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+private:
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ float Speed = 600.0f;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_StopAttack.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_StopAttack.cpp
new file mode 100644
index 00000000..d890b9ca
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_StopAttack.cpp
@@ -0,0 +1,24 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTService_StopAttack.h"
+
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTService_StopAttack::UBTService_StopAttack()
+{
+ NodeName = "Stop Attack";
+}
+
+void UBTService_StopAttack::OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ Super::OnBecomeRelevant(OwnerComp, NodeMemory);
+ if (const AAI_EnemyController* const EnemyController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (AEnemyCharacter* const EnemyCharacter = Cast(EnemyController->GetPawn()))
+ {
+ EnemyCharacter->SetFiring(false);
+ }
+ }
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_StopAttack.h b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_StopAttack.h
new file mode 100644
index 00000000..4c00aec2
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Services/BTService_StopAttack.h
@@ -0,0 +1,20 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Services/BTService_BlackboardBase.h"
+#include "BTService_StopAttack.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTService_StopAttack : public UBTService_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ UBTService_StopAttack();
+ virtual void OnBecomeRelevant(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp
new file mode 100644
index 00000000..84e3240e
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.cpp
@@ -0,0 +1,35 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_AttackPlayer.h"
+
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "BehaviorTree/BlackboardComponent.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_AttackPlayer::UBTTask_AttackPlayer(FObjectInitializer const& ObjectInitializer)
+{
+ NodeName = TEXT("Attack Player");
+}
+
+EBTNodeResult::Type UBTTask_AttackPlayer::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const AAI_EnemyController* const AIController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (const UBlackboardComponent* const Blackboard = OwnerComp.GetBlackboardComponent())
+ {
+ FVector const Origin = AIController->GetPawn()->GetActorLocation();
+ FVector const PlayerLocation = Blackboard->GetValueAsVector("TargetLocation");
+ //DrawDebugLine(GetWorld(), Origin, PlayerLocation, FColor::Green, false, 1.f, 0, 1.f);
+
+ if (AEnemyCharacter* const EnemyCharacter = Cast(AIController->GetPawn()))
+ {
+ EnemyCharacter->SetFiring(true);
+
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.h
new file mode 100644
index 00000000..bc228d3d
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_AttackPlayer.h
@@ -0,0 +1,19 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_AttackPlayer.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_AttackPlayer : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+public:
+ explicit UBTTask_AttackPlayer(FObjectInitializer const& ObjectInitializer);
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindCover.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindCover.cpp
new file mode 100644
index 00000000..af60b35c
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindCover.cpp
@@ -0,0 +1,14 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_FindCover.h"
+
+UBTTask_FindCover::UBTTask_FindCover(FObjectInitializer const& ObjectInitializer)
+{
+ NodeName = TEXT("Find Vaild Cover");
+}
+
+EBTNodeResult::Type UBTTask_FindCover::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindCover.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindCover.h
new file mode 100644
index 00000000..8c1fa208
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindCover.h
@@ -0,0 +1,23 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_FindCover.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_FindCover : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+public:
+ explicit UBTTask_FindCover(FObjectInitializer const& ObjectInitializer);
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+private:
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ float SearchRadius = 1000.f;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPathPoint.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPathPoint.cpp
new file mode 100644
index 00000000..1643c153
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPathPoint.cpp
@@ -0,0 +1,34 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_FindPathPoint.h"
+
+#include "BehaviorTree/BlackboardComponent.h"
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_FindPathPoint::UBTTask_FindPathPoint(FObjectInitializer const& ObjectInitializer)
+{
+ NodeName = TEXT("Find Path Point");
+}
+
+EBTNodeResult::Type UBTTask_FindPathPoint::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const AAI_EnemyController* const AIEnemyController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (UBlackboardComponent* const BlackboardComponent = OwnerComp.GetBlackboardComponent())
+ {
+ int const Index = BlackboardComponent->GetValueAsInt(GetSelectedBlackboardKey());
+ if (const AEnemyCharacter* const EnemyCharacter = Cast(AIEnemyController->GetPawn()))
+ {
+ FVector const RelativePatrolPoint = EnemyCharacter->GetPatrolPath()->GetPatrolPoint(Index);
+ FVector const GlobalPointLocation = EnemyCharacter->GetPatrolPath()->GetActorTransform().TransformPosition(RelativePatrolPoint);
+ BlackboardComponent->SetValueAsVector(PatrolPathVectorKey.SelectedKeyName, GlobalPointLocation);
+
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPathPoint.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPathPoint.h
new file mode 100644
index 00000000..e329006a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPathPoint.h
@@ -0,0 +1,24 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_FindPathPoint.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_FindPathPoint : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ explicit UBTTask_FindPathPoint(FObjectInitializer const& ObjectInitializer);
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+private:
+ UPROPERTY(EditAnywhere, Category = "Blackboard", meta=(AllowPrivateAccess = "true"))
+ FBlackboardKeySelector PatrolPathVectorKey;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPlayerLocation.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPlayerLocation.cpp
new file mode 100644
index 00000000..7607af23
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPlayerLocation.cpp
@@ -0,0 +1,39 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_FindPlayerLocation.h"
+
+#include "NavigationSystem.h"
+#include "BehaviorTree/BlackboardComponent.h"
+#include "GameFramework/Character.h"
+
+UBTTask_FindPlayerLocation::UBTTask_FindPlayerLocation(FObjectInitializer const& ObjectInitializer)
+{
+ NodeName = TEXT("Find Player Location");
+}
+
+EBTNodeResult::Type UBTTask_FindPlayerLocation::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const ACharacter* const Player = Cast(GetWorld()->GetFirstPlayerController()->GetPawn()))
+ {
+ if (UBlackboardComponent* const Blackboard = OwnerComp.GetBlackboardComponent())
+ {
+ if (SearchRandom)
+ {
+ FVector const Origin = Player->GetActorLocation();
+ const UNavigationSystemV1* const NavSystem = UNavigationSystemV1::GetCurrent(GetWorld());
+ if (FNavLocation RandomLocation; NavSystem->GetRandomPointInNavigableRadius(Origin, SearchRadius, RandomLocation))
+ {
+ Blackboard->SetValueAsVector(GetSelectedBlackboardKey(), RandomLocation.Location);
+ }
+ }
+ else
+ {
+ Blackboard->SetValueAsVector(GetSelectedBlackboardKey(), Player->GetActorLocation());
+ }
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPlayerLocation.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPlayerLocation.h
new file mode 100644
index 00000000..6161bd90
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindPlayerLocation.h
@@ -0,0 +1,27 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_FindPlayerLocation.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_FindPlayerLocation : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ explicit UBTTask_FindPlayerLocation(FObjectInitializer const& ObjectInitializer);
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+private:
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ float SearchRadius = 150.f;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ bool SearchRandom = false;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindRandomLocation.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindRandomLocation.cpp
new file mode 100644
index 00000000..af11c428
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindRandomLocation.cpp
@@ -0,0 +1,32 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_FindRandomLocation.h"
+
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "NavigationSystem.h"
+#include "BehaviorTree/BlackboardComponent.h"
+
+UBTTask_FindRandomLocation::UBTTask_FindRandomLocation(FObjectInitializer const& ObjectInitializer)
+{
+ NodeName = TEXT("Find Random Location");
+}
+
+EBTNodeResult::Type UBTTask_FindRandomLocation::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const AAI_EnemyController* const AIController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (UBlackboardComponent* const Blackboard = OwnerComp.GetBlackboardComponent())
+ {
+ FVector const Origin = AIController->GetPawn()->GetActorLocation();
+ const UNavigationSystemV1* const NavSystem = UNavigationSystemV1::GetCurrent(GetWorld());
+ if (FNavLocation RandomLocation; NavSystem->GetRandomPointInNavigableRadius(Origin, SearchRadius, RandomLocation))
+ {
+ Blackboard->SetValueAsVector(GetSelectedBlackboardKey(), RandomLocation.Location);
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindRandomLocation.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindRandomLocation.h
new file mode 100644
index 00000000..e3b5df85
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_FindRandomLocation.h
@@ -0,0 +1,24 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_FindRandomLocation.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_FindRandomLocation : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ explicit UBTTask_FindRandomLocation(FObjectInitializer const& ObjectInitializer);
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+private:
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ float SearchRadius = 1000.f;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_IncrementPathIndex.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_IncrementPathIndex.cpp
new file mode 100644
index 00000000..cfc7b788
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_IncrementPathIndex.cpp
@@ -0,0 +1,47 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_IncrementPathIndex.h"
+
+#include "BehaviorTree/BlackboardComponent.h"
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_IncrementPathIndex::UBTTask_IncrementPathIndex(FObjectInitializer const& ObjectInitializer)
+{
+ NodeName = TEXT("Increment Path Index");
+}
+
+EBTNodeResult::Type UBTTask_IncrementPathIndex::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (AAI_EnemyController* const EnemyController = Cast(OwnerComp.GetOwner()))
+ {
+ if (AEnemyCharacter* const EnemyCharacter = Cast(EnemyController->GetPawn()))
+ {
+ if (UBlackboardComponent* const BlackboardComponent = OwnerComp.GetBlackboardComponent())
+ {
+ int const NumberOfPoints = EnemyCharacter->GetPatrolPath()->Num();
+ int const MinIndex = 0;
+ int const MaxIndex = NumberOfPoints - 1;
+ int CurrentIndex = BlackboardComponent->GetValueAsInt(GetSelectedBlackboardKey());
+
+ if (bBiDirectional)
+ {
+ if (CurrentIndex >= MaxIndex && DirectionType == Forward)
+ {
+ DirectionType = Backward;
+ }
+ else if (CurrentIndex == MinIndex && DirectionType == Backward)
+ {
+ DirectionType = Forward;
+ }
+ }
+ BlackboardComponent->SetValueAsInt(GetSelectedBlackboardKey(), (DirectionType == Forward ? ++CurrentIndex : --CurrentIndex) % NumberOfPoints);
+
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_IncrementPathIndex.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_IncrementPathIndex.h
new file mode 100644
index 00000000..0f9c3442
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_IncrementPathIndex.h
@@ -0,0 +1,32 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_IncrementPathIndex.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_IncrementPathIndex : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ explicit UBTTask_IncrementPathIndex(FObjectInitializer const& ObjectInitializer);
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+private:
+ enum EPathFollowType
+ {
+ Forward,
+ Backward
+ };
+
+ EPathFollowType DirectionType = Forward;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ bool bBiDirectional = false;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_LowerWeapon.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_LowerWeapon.cpp
new file mode 100644
index 00000000..a1da277f
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_LowerWeapon.cpp
@@ -0,0 +1,32 @@
+// Fill out your copyright notice in the Description page of PrBTTask_LowerWeapon.h"
+
+#include "BTTask_LowerWeapon.h"
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_LowerWeapon::UBTTask_LowerWeapon()
+{
+ NodeName = "Lower Weapon";
+}
+
+EBTNodeResult::Type UBTTask_LowerWeapon::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const AAI_EnemyController* const AIEnemyController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (AEnemyCharacter* const EnemyCharacter = Cast(AIEnemyController->GetPawn()))
+ {
+ if (!EnemyCharacter->WeaponRaised)
+ {
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ EnemyCharacter->DeEquipWeapon();
+ EnemyCharacter->WeaponRaised = false;
+
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_LowerWeapon.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_LowerWeapon.h
new file mode 100644
index 00000000..103692e7
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_LowerWeapon.h
@@ -0,0 +1,21 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_LowerWeapon.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_LowerWeapon : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ UBTTask_LowerWeapon();
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_RaiseWeapon.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_RaiseWeapon.cpp
new file mode 100644
index 00000000..39bf4684
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_RaiseWeapon.cpp
@@ -0,0 +1,34 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_RaiseWeapon.h"
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_RaiseWeapon::UBTTask_RaiseWeapon()
+{
+ NodeName = "Raise Weapon";
+}
+
+EBTNodeResult::Type UBTTask_RaiseWeapon::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const AAI_EnemyController* const AIEnemyController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (AEnemyCharacter* const EnemyCharacter = Cast(AIEnemyController->GetPawn()))
+ {
+ if (EnemyCharacter->WeaponRaised)
+ {
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+
+ EnemyCharacter->EquipWeapon();
+ EnemyCharacter->WeaponRaised = true;
+
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_RaiseWeapon.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_RaiseWeapon.h
new file mode 100644
index 00000000..4171f066
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_RaiseWeapon.h
@@ -0,0 +1,20 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_RaiseWeapon.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_RaiseWeapon : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ UBTTask_RaiseWeapon();
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetLocalAlertLevel.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetLocalAlertLevel.cpp
new file mode 100644
index 00000000..3cd9990b
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetLocalAlertLevel.cpp
@@ -0,0 +1,26 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_SetLocalAlertLevel.h"
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_SetLocalAlertLevel::UBTTask_SetLocalAlertLevel()
+{
+ NodeName = "Set Local Alert Level";
+}
+
+EBTNodeResult::Type UBTTask_SetLocalAlertLevel::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const AAI_EnemyController* const AIEnemyController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (const AEnemyCharacter* const EnemyCharacter = Cast(AIEnemyController->GetPawn()))
+ {
+ EnemyCharacter->SetLocalAlertLevel(AlertLevel);
+
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetLocalAlertLevel.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetLocalAlertLevel.h
new file mode 100644
index 00000000..770472ed
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_SetLocalAlertLevel.h
@@ -0,0 +1,24 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_SetLocalAlertLevel.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_SetLocalAlertLevel : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ UBTTask_SetLocalAlertLevel();
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+
+private:
+ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AI", meta = (AllowPrivateAccess = "true"))
+ int AlertLevel = 0;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopAttack.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopAttack.cpp
new file mode 100644
index 00000000..29cc1c3e
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopAttack.cpp
@@ -0,0 +1,26 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_StopAttack.h"
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_StopAttack::UBTTask_StopAttack()
+{
+ NodeName = "Stop Attack";
+}
+
+EBTNodeResult::Type UBTTask_StopAttack::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (const AAI_EnemyController* const AIEnemyController = Cast(OwnerComp.GetAIOwner()))
+ {
+ if (AEnemyCharacter* const EnemyCharacter = Cast(AIEnemyController->GetPawn()))
+ {
+ EnemyCharacter->SetFiring(false);
+
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopAttack.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopAttack.h
new file mode 100644
index 00000000..96d68378
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopAttack.h
@@ -0,0 +1,20 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_StopAttack.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_StopAttack : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ UBTTask_StopAttack();
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.cpp b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.cpp
new file mode 100644
index 00000000..8e5cd367
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.cpp
@@ -0,0 +1,27 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BTTask_StopInvestigating.h"
+
+#include "BehaviorTree/BlackboardComponent.h"
+#include "EndlessVendetta/AI/AI_EnemyController.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+UBTTask_StopInvestigating::UBTTask_StopInvestigating()
+{
+ NodeName = TEXT("Stop Investigating");
+}
+
+EBTNodeResult::Type UBTTask_StopInvestigating::ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory)
+{
+ if (AAI_EnemyController* const EnemyController = Cast(OwnerComp.GetOwner()))
+ {
+ if (UBlackboardComponent* const BlackboardComponent = OwnerComp.GetBlackboardComponent())
+ {
+ BlackboardComponent->ClearValue(GetSelectedBlackboardKey());
+ FinishLatentTask(OwnerComp, EBTNodeResult::Succeeded);
+ return EBTNodeResult::Succeeded;
+ }
+ }
+ return EBTNodeResult::Failed;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.h b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.h
new file mode 100644
index 00000000..ff6f37d6
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/AI/Tasks/BTTask_StopInvestigating.h
@@ -0,0 +1,20 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BehaviorTree/Tasks/BTTask_BlackboardBase.h"
+#include "BTTask_StopInvestigating.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UBTTask_StopInvestigating : public UBTTask_BlackboardBase
+{
+ GENERATED_BODY()
+
+public:
+ UBTTask_StopInvestigating();
+ virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent& OwnerComp, uint8* NodeMemory) override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp
new file mode 100644
index 00000000..38d939c9
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.cpp
@@ -0,0 +1,102 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BountyClass.h"
+
+// Sets default values
+ABountyClass::ABountyClass()
+{
+ // 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 ABountyClass::BeginPlay()
+{
+ Super::BeginPlay();
+
+ SpawnCheckpoints();
+
+}
+
+void ABountyClass::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
+void ABountyClass::SpawnCheckpoints()
+{
+ // Spawn all checkpoints associated with this bounty and store them in order
+ FActorSpawnParameters SpawnParameters;
+ SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+
+ for(TSubclassOf CheckpointClass : CheckpointsToSpawn)
+ {
+ if (CheckpointClass == nullptr)
+ {
+ // An unassigned checkpoint class can lead to undefined behaviour, hence the fatal log
+ UE_LOG(LogTemp, Fatal, TEXT("A checkpoint class wasn't set for %s"), *BountyTitle);
+ return;
+ }
+
+ FVector Loc = CheckpointClass.GetDefaultObject()->GetCheckpointSpawnTransform().GetLocation();
+ FRotator Rot = CheckpointClass.GetDefaultObject()->GetCheckpointSpawnTransform().GetRotation().Rotator();
+ ACheckpointClass* SpawnedCheckpoint = Cast(GetWorld()->SpawnActor(CheckpointClass, Loc, Rot, SpawnParameters));
+ BountyCheckpoints.Add(SpawnedCheckpoint);
+ }
+
+ // Activate the first checkpoint and listen for its completion
+ BountyCheckpoints[0]->Active = true;
+ BountyCheckpoints[0]->SpawnWaypoint();
+ BountyCheckpoints[0]->CheckpointActivated();
+ BountyCheckpoints[0]->CompletedCheckpoint.AddDynamic(this, &ABountyClass::IncrementBountyCheckpoint);
+}
+
+void ABountyClass::IncrementBountyCheckpoint()
+{
+ // Broadcast that the first Checkpoint has been completed so that side bounties can be destroyed
+ if (!BountyStarted)
+ {
+ BountyStarted = true;
+ CompletedFirstCheckpoint.Broadcast();
+ }
+
+ // Bounty Completion Condition
+ if (BountyCheckpoints.Num() <= 1)
+ {
+ Completed = true;
+ BountyCheckpoints[0]->Active = false;
+ BountyCheckpoints[0]->Destroy();
+ BountyCheckpoints.RemoveAt(0);
+ UE_LOG(LogTemp, Warning, TEXT(" You've Completed the Bounty!! Well done"));
+ return;
+ }
+
+ if (BountyCheckpoints[0] == nullptr)
+ {
+ UE_LOG(LogTemp, Fatal, TEXT("Missing checkpoint in bounty checkpoints, could've failed to spawn or cast"));
+ return;
+ }
+
+ // Destroy Actor and Shrink Array
+ BountyCheckpoints[0]->Active = false;
+ BountyCheckpoints[0]->Destroy();
+ BountyCheckpoints.RemoveAt(0);
+
+ // 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]->CheckpointActivated();
+ BountyCheckpoints[0]->CompletedCheckpoint.AddDynamic(this, &ABountyClass::IncrementBountyCheckpoint);
+
+}
+
+void ABountyClass::CollectRewards_Implementation()
+{
+ UE_LOG(LogTemp, Warning, TEXT("The player has gained $%d for completing the bounty!"), RewardMoney);
+}
+
+
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h
new file mode 100644
index 00000000..88a6c5e7
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyClass.h
@@ -0,0 +1,128 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "CheckpointClass.h"
+#include "GameFramework/Actor.h"
+#include "BountyClass.generated.h"
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FCompletedFirstCheckpoint);
+
+UCLASS()
+class ENDLESSVENDETTA_API ABountyClass : public AActor
+{
+ GENERATED_BODY()
+
+ // Used to temp store value of incoming replacement checkpoint class
+ TSubclassOf ReplacementCheckpointClass;
+
+ bool BountyStarted = false;
+
+protected:
+ // ------- Properties Set in Editor --------------
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TArray> CheckpointsToSpawn;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ int RewardMoney = 0;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ FString BountyTitle;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ FString BountyDesc;
+ // -----------------------------------------------
+
+ bool Completed = false;
+
+ // Spawned in Checkpoints for this Bounty
+ TArray BountyCheckpoints;
+
+ // Spawns and stores this Bounties Checkpoints in order
+ void SpawnCheckpoints();
+
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+
+public:
+ // Broadcast when first checkpoint from this bounty is completed
+ FCompletedFirstCheckpoint CompletedFirstCheckpoint;
+
+ // ------ Getters for Bounty and Checkpoint Properties ------
+ bool IsCompleted()
+ {
+ return Completed;
+ }
+
+ FString GetBountyTitle()
+ {
+ return BountyTitle;
+ }
+
+ FString GetBountyDesc()
+ {
+ return BountyDesc;
+ }
+
+ int GetBountyrewardMoney()
+ {
+ return RewardMoney;
+ }
+
+ FVector GetCheckpointLocation()
+ {
+ if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr)
+ {
+ return FVector(0, 0, 0);
+ }
+
+ return BountyCheckpoints[0]->GetCheckpointSpawnTransform().GetLocation();
+ }
+
+ FVector GetActiveWaypointLocation()
+ {
+ if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr)
+ {
+ return FVector(0, 0, 0);
+ }
+
+ return BountyCheckpoints[0]->GetWaypointLoc();
+ }
+
+ UTexture2D* GetActiveWaypointIcon()
+ {
+ if (BountyCheckpoints.IsEmpty() || BountyCheckpoints[0] == nullptr)
+ {
+ return nullptr;
+ }
+
+ 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
+ ABountyClass();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ // Called when a checkpoint is completed, handles moving onto next checkpoint and discarding the old one
+ UFUNCTION()
+ virtual void IncrementBountyCheckpoint();
+
+ // Collect Money in C++, any other special reward will be implemented in BP if neccessary
+ UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
+ void CollectRewards();
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp
new file mode 100644
index 00000000..7d884ef8
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.cpp
@@ -0,0 +1,286 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BountyDirector.h"
+
+#include "Blueprint/UserWidget.h"
+#include "Components/ArrowComponent.h"
+
+// Sets default values
+ABountyDirector::ABountyDirector()
+{
+ // 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 every frame
+void ABountyDirector::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+// Called when the game starts or when spawned
+void ABountyDirector::BeginPlay()
+{
+ Super::BeginPlay();
+
+ PlayerChar = Cast(GetWorld()->GetFirstPlayerController()->GetCharacter());
+ if (!IsValid(PlayerChar)) UE_LOG(LogTemp, Fatal, TEXT("Players Character isn't being loaded in BeginPlay() in BountyDirector"));
+
+ // Setup a component for bounties to attach to on the player
+ for (UActorComponent* ActorComp : PlayerChar->GetComponentsByTag(UArrowComponent::StaticClass(), FName("Bounty")))
+ {
+ BountyAttachmentPoint = Cast(ActorComp);
+ if (!IsValid(BountyAttachmentPoint)) UE_LOG(LogTemp, Fatal, TEXT("There's no Bounty Attachment UArrowComponent on Players Char "));
+ break;
+ }
+
+ SpawnBountyAndItsSideBounties();
+}
+
+void ABountyDirector::SpawnBountyAndItsSideBounties()
+{
+ UE_LOG(LogTemp, Warning, TEXT("Spawning Bounty..."));
+
+ if (BountyClassArray.IsEmpty()) return;
+ if (!IsValid(BountyClassArray[CurrentBountyIndex])) UE_LOG(LogTemp, Fatal, TEXT("Missing Bounty at Index: %d"), CurrentBountyIndex);
+
+ // Spawn Main Bounty which the current bounty index is pointing to
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+
+ AActor* BountyActor = GetWorld()->SpawnActor(BountyClassArray[CurrentBountyIndex], PlayerChar->GetActorLocation(), PlayerChar->GetActorRotation(), SpawnParams);
+ const FAttachmentTransformRules AttachmentTransformRules(EAttachmentRule::SnapToTarget, true);
+ BountyActor->AttachToComponent(BountyAttachmentPoint, AttachmentTransformRules);
+
+ ActiveBounty = Cast(BountyActor);
+ if (!IsValid(ActiveBounty)) UE_LOG(LogTemp, Fatal, TEXT("Failed to Cast to Bounty class"));
+
+ // WHEN MARCEL STOPS PLAYING WITH THE CHARACTER, ADD THIS BOUNTY TO PLAYERS ARRAY OF ACTIVE BOUNTIES!!!!!
+ ActiveBounty->CompletedFirstCheckpoint.AddDynamic(this, &ABountyDirector::DestroyActiveSideBounties);
+ ActiveSideBounties.Reset();
+ for (TSubclassOf SideBountyClass : ActiveBounty->GetSideBountiesToSpawn())
+ {
+ if (!IsValid(SideBountyClass)) continue;
+ AActor* SideBountyActor = GetWorld()->SpawnActor(SideBountyClass, PlayerChar->GetActorLocation(), PlayerChar->GetActorRotation(), SpawnParams);
+ SideBountyActor->AttachToComponent(BountyAttachmentPoint, AttachmentTransformRules);
+ ASideBountyClass* SideBounty = Cast(SideBountyActor);
+ if (!IsValid(SideBounty)) UE_LOG(LogTemp, Fatal, TEXT("A SideBounty for %s has been set to a wrong type"), *ActiveBounty->GetBountyTitle());
+ int i = ActiveSideBounties.Add(SideBounty);
+ ActiveSideBounties[i]->CompletedSideBounty.AddDynamic(this, &ABountyDirector::EarnFavours);
+ // ONCE AGAIN WHEN MARCEL STOPS PLAYING WITH THE CHARACTER, ADD THIS SIDE BOUNTY TO PLAYERS ARRAY OF ACTIVE BOUNTIES!!!!!
+ }
+}
+
+void ABountyDirector::UpdateBountyProgression()
+{
+ if (!IsValid(ActiveBounty)) return;
+
+ if (ActiveBounty->IsCompleted()) FinishActiveBounty();
+}
+
+void ABountyDirector::FinishActiveBounty()
+{
+ ActiveBounty->CollectRewards();
+
+ // Destroy old Bounties
+ ActiveBounty->Destroy();
+ DestroyActiveSideBounties();
+
+ // Increment Main and Side Bounty Indexes
+ CurrentBountyIndex++;
+
+ // Game Completion Check
+ if (CurrentBountyIndex >= BountyClassArray.Num())
+ {
+ UE_LOG(LogTemp, Warning, TEXT("Finished all bounties currently available in the game :)"));
+ ActiveBounty = nullptr;
+ return;
+ }
+
+ SpawnBountyAndItsSideBounties();
+}
+
+void ABountyDirector::DestroyActiveSideBounties()
+{
+ for (ASideBountyClass* SideBounty : ActiveSideBounties)
+ {
+ if (!IsValid(SideBounty)) continue;
+
+ // WHEN MARCEL STOPS PLAYING WITH PLAYERS CHARACTER, REMOVE THIS SIDE BOUNTY FROM ACTIVE BOUNTIES
+
+ SideBounty->DestroyCheckpoints();
+ SideBounty->Destroy();
+ }
+}
+
+// ----------- Favour Shop ---------------
+
+void ABountyDirector::EarnFavours(int FavoursEarned)
+{
+ Favours += FavoursEarned;
+}
+
+void ABountyDirector::BuyCustomBountyAlteration_1()
+{
+ if (!IsValid(ActiveBounty)) return;
+ int Cost = ActiveBounty->GetCustomBountyAlteration_1_Cost();
+ if (Cost == 0 || Favours < Cost || ActiveBounty->ActivatedCBA_1) return;
+ Favours -= Cost;
+ PC_Display->UpdateFavourCount(Favours);
+ ActiveBounty->ActivatedCBA_1 = true;
+ ActiveBounty->ActivateCustomBountyAlteration_1();
+}
+
+
+void ABountyDirector::BuyCustomBountyAlteration_2()
+{
+ if (!IsValid(ActiveBounty)) return;
+ int Cost = ActiveBounty->GetCustomBountyAlteration_2_Cost();
+ if (Cost == 0 || Favours < Cost || ActiveBounty->ActivatedCBA_2) return;
+ Favours -= Cost;
+ PC_Display->UpdateFavourCount(Favours);
+ ActiveBounty->ActivatedCBA_2 = true;
+ ActiveBounty->ActivateCustomBountyAlteration_2();
+}
+
+void ABountyDirector::BuyCustomBountyAlteration_3()
+{
+ if (!IsValid(ActiveBounty)) return;
+ int Cost = ActiveBounty->GetCustomBountyAlteration_3_Cost();
+ if (Cost == 0 || Favours < Cost || ActiveBounty->ActivatedCBA_3) return;
+ Favours -= Cost;
+ PC_Display->UpdateFavourCount(Favours);
+ ActiveBounty->ActivatedCBA_3 = true;
+ ActiveBounty->ActivateCustomBountyAlteration_3();
+}
+
+void ABountyDirector::BuyAmmoDrop()
+{
+ if (!IsValid(ActiveBounty)) return;
+ if (Favours < 1 || ActiveBounty->ActivateAmmoDrops) return;
+ Favours--;
+ PC_Display->UpdateFavourCount(Favours);
+ ActiveBounty->ActivateAmmoDrops = true;
+ ActiveBounty->SpawnAmmoDrops();
+}
+
+void ABountyDirector::BuyHealthDrop()
+{
+ if (!IsValid(ActiveBounty)) return;
+ if (Favours < 1 || ActiveBounty->ActivatedHealthDrops) return;
+ Favours--;
+ PC_Display->UpdateFavourCount(Favours);
+ ActiveBounty->ActivatedHealthDrops = true;
+ ActiveBounty->SpawnHealthDrops();
+}
+
+void ABountyDirector::BuyEnemyRadio()
+{
+ if (!IsValid(ActiveBounty)) return;
+ if (Favours < 1 || ActiveBounty->ActivatedRadio) return;
+ Favours--;
+ PC_Display->UpdateFavourCount(Favours);
+ ActiveBounty->ActivatedRadio = true;
+ ActiveBounty->ActivateEnemyRadio();
+}
+
+void ABountyDirector::BuyFavours()
+{
+ if (PlayerChar->Money < FavourCost) return;
+ PlayerChar->Money -= FavourCost;
+ Favours++;
+ PC_Display->UpdateFavourCount(Favours);
+}
+
+// ----------- PC Display ---------------
+
+void ABountyDirector::Interact()
+{
+ UpdateBountyProgression();
+ FInputModeUIOnly InputMode;
+ APlayerController* PlayerController = GetWorld()->GetFirstPlayerController();
+
+ PC_DisplayWidget = CreateWidget(GetWorld(), PC_DisplayWidgetClass);
+ PC_DisplayWidget->AddToViewport(3);
+
+ PlayerController->SetInputMode(InputMode);
+ PlayerController->bShowMouseCursor = true;
+ PlayerController->bEnableClickEvents = true;
+ PlayerController->bEnableMouseOverEvents = true;
+
+ PC_Display = Cast(PC_DisplayWidget);
+ bool GameOver = !IsValid(ActiveBounty);
+ PC_Display->PC_Display_Info.IsGameOver = GameOver;
+ PC_Display->LogoutFromBountyDirectorPC.AddDynamic(this, &ABountyDirector::DestroyBountyDirectorPCWidget);
+
+ if (GameOver)
+ {
+ PC_Display->LoadOS();
+ return;
+ }
+
+ // Info about main bounty
+ PC_Display->PC_Display_Info.MB_Title = GetBountyTitle();
+ PC_Display->PC_Display_Info.MB_Desc = GetBountyDescription();
+ PC_Display->PC_Display_Info.MB_Reward = GetBountyReward();
+
+ // Info about side bounties
+ PC_Display->PC_Display_Info.SB_Title.Reset();
+ PC_Display->PC_Display_Info.SB_Icon.Reset();
+ PC_Display->PC_Display_Info.SB_Desc.Reset();
+ PC_Display->PC_Display_Info.SB_Reward.Reset();
+ for (ASideBountyClass* SideBounty : ActiveSideBounties)
+ {
+ if (!IsValid(SideBounty) || SideBounty->IsCompleted()) continue;
+ PC_Display->PC_Display_Info.SB_Title.Add(SideBounty->GetBountyTitle());
+ PC_Display->PC_Display_Info.SB_Icon.Add(SideBounty->GetActiveWaypointIcon());
+ PC_Display->PC_Display_Info.SB_Desc.Add(SideBounty->GetBountyDesc());
+ PC_Display->PC_Display_Info.SB_Reward.Add(SideBounty->GetRewardInFavours());
+ }
+
+ // Info about main bounty alterations
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Reset();
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Reset();
+
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Add(ActiveBounty->GetCustomBountyAlteration_1_Description());
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Add(ActiveBounty->GetCustomBountyAlteration_2_Description());
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Desc.Add(ActiveBounty->GetCustomBountyAlteration_3_Description());
+
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Add(ActiveBounty->GetCustomBountyAlteration_1_Cost());
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Add(ActiveBounty->GetCustomBountyAlteration_2_Cost());
+ PC_Display->PC_Display_Info.CustomBountyAlteration_Cost.Add(ActiveBounty->GetCustomBountyAlteration_3_Cost());
+
+ PC_Display->PC_Display_Info.PlayersFavourAmount = Favours;
+
+ // Button Delegates
+ PC_Display->BuyCba_1.AddDynamic(this, &ABountyDirector::BuyCustomBountyAlteration_1);
+ PC_Display->BuyCba_2.AddDynamic(this, &ABountyDirector::BuyCustomBountyAlteration_2);
+ PC_Display->BuyCba_3.AddDynamic(this, &ABountyDirector::BuyCustomBountyAlteration_3);
+ PC_Display->BuyAmmoDrop.AddDynamic(this, &ABountyDirector::BuyAmmoDrop);
+ PC_Display->BuyHealthDrop.AddDynamic(this, &ABountyDirector::BuyHealthDrop);
+ PC_Display->BuyRadio.AddDynamic(this, &ABountyDirector::BuyEnemyRadio);
+ PC_Display->BuyFavour.AddDynamic(this, &ABountyDirector::BuyFavours);
+
+ PC_Display->LoadOS();
+}
+
+void ABountyDirector::InteractPrompt()
+{
+
+}
+
+void ABountyDirector::DestroyBountyDirectorPCWidget()
+{
+ if (IsValid(PC_DisplayWidget)) PC_DisplayWidget->RemoveFromParent();
+
+ FInputModeGameOnly InputMode;
+ APlayerController* PlayerController = GetWorld()->GetFirstPlayerController();
+ PlayerController->SetInputMode(InputMode);
+ PlayerController->bShowMouseCursor = false;
+ PlayerController->bEnableClickEvents = false;
+ PlayerController->bEnableMouseOverEvents = false;
+}
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.h
new file mode 100644
index 00000000..3c0f399a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/BountyDirector.h
@@ -0,0 +1,125 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "MainBountyClass.h"
+#include "SideBountyClass.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "EndlessVendetta/InteractionInterface.h"
+#include "EndlessVendetta/UserWidgets/PC_Display.h"
+#include "GameFramework/Actor.h"
+#include "BountyDirector.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API ABountyDirector : public AActor, public IInteractionInterface
+{
+ GENERATED_BODY()
+
+ AEndlessVendettaCharacter* PlayerChar;
+
+ // Scene Component Used to Attach Bounties to
+ UArrowComponent* BountyAttachmentPoint;
+
+ // Ordered Array of Main Bounties
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty Director")
+ TArray> BountyClassArray;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty Director")
+ int FavourCost = 500;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty Director")
+ TSubclassOf PC_DisplayWidgetClass;
+
+ UUserWidget* PC_DisplayWidget;
+
+ UPC_Display* PC_Display;
+
+ int CurrentBountyIndex = 0;
+
+ UPROPERTY(VisibleAnywhere, Category = "Bounty")
+ AMainBountyClass* ActiveBounty;
+
+ UPROPERTY(VisibleAnywhere, Category = "Bounty")
+ TArray ActiveSideBounties;
+
+ // Checks if completed the bounty, and moves onto the next if so
+ void UpdateBountyProgression();
+
+ void SpawnBountyAndItsSideBounties();
+
+ // Collect reward for current Bounty and prepare for the next
+ void FinishActiveBounty();
+
+ // Opens up Bounty Director PC Interface
+ void Interact() override;
+
+ // Prompts player to interact
+ void InteractPrompt() override;
+protected:
+ int Favours = 20;
+
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+ UFUNCTION()
+ void DestroyActiveSideBounties();
+
+ UFUNCTION()
+ void DestroyBountyDirectorPCWidget();
+
+ // Listens for when a side bounty is completed
+ UFUNCTION()
+ void EarnFavours(int FavoursEarned);
+
+// -------- Buy Buttons --------
+ UFUNCTION()
+ void BuyCustomBountyAlteration_1();
+
+ UFUNCTION()
+ void BuyCustomBountyAlteration_2();
+
+ UFUNCTION()
+ void BuyCustomBountyAlteration_3();
+
+ UFUNCTION()
+ void BuyAmmoDrop();
+
+ UFUNCTION()
+ void BuyHealthDrop();
+
+ UFUNCTION()
+ void BuyEnemyRadio();
+
+ UFUNCTION()
+ void BuyFavours();
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ // Sets default values for this actor's properties
+ ABountyDirector();
+
+ // ------ Getters ------
+ FString GetBountyTitle()
+ {
+ return !IsValid(ActiveBounty) ? FString("") : ActiveBounty->GetBountyTitle();
+ }
+
+ UTexture2D* GetBountyIcon()
+ {
+ return !IsValid(ActiveBounty) ? nullptr : ActiveBounty->GetActiveWaypointIcon();
+ }
+
+ FString GetBountyDescription()
+ {
+ return !IsValid(ActiveBounty) ? FString("") : ActiveBounty->GetBountyDesc();
+ }
+
+ int GetBountyReward()
+ {
+ return !IsValid(ActiveBounty) ? 0 : ActiveBounty->GetBountyrewardMoney();
+ }
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CallBPEvent.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CallBPEvent.cpp
new file mode 100644
index 00000000..2765c4a1
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CallBPEvent.cpp
@@ -0,0 +1,9 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "InteractableCP_CallBPEvent.h"
+
+void AInteractableCP_CallBPEvent::Interact()
+{
+ PlayerInteracted();
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CallBPEvent.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CallBPEvent.h
new file mode 100644
index 00000000..99cc5cec
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CallBPEvent.h
@@ -0,0 +1,23 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EndlessVendetta/BountySystem/CheckpointClass.h"
+#include "EndlessVendetta/InteractionInterface.h"
+#include "InteractableCP_CallBPEvent.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AInteractableCP_CallBPEvent : public ACheckpointClass, public IInteractionInterface
+{
+ GENERATED_BODY()
+
+ void Interact() override;
+
+protected:
+ UFUNCTION(BlueprintImplementableEvent)
+ void PlayerInteracted();
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CompleteCP.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CompleteCP.cpp
new file mode 100644
index 00000000..6c6e3aa8
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CompleteCP.cpp
@@ -0,0 +1,9 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "InteractableCP_CompleteCP.h"
+
+void AInteractableCP_CompleteCP::Interact()
+{
+ BroadcastCompletion();
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CompleteCP.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CompleteCP.h
new file mode 100644
index 00000000..ad93548a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckPoints/InteractableCP_CompleteCP.h
@@ -0,0 +1,20 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EndlessVendetta/InteractionInterface.h"
+#include "EndlessVendetta/BountySystem/CheckpointClass.h"
+#include "InteractableCP_CompleteCP.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AInteractableCP_CompleteCP : public ACheckpointClass, public IInteractionInterface
+{
+ GENERATED_BODY()
+
+ void Interact() override;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.cpp
new file mode 100644
index 00000000..5562a2b8
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.cpp
@@ -0,0 +1,51 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "CheckpointClass.h"
+
+// Sets default values
+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;
+
+}
+
+// Called when the game starts or when spawned
+void ACheckpointClass::BeginPlay()
+{
+ Super::BeginPlay();
+}
+
+void ACheckpointClass::SpawnWaypoint()
+{
+ if (!IsValid(WaypointActorClass)) return;
+
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ WaypointActor = Cast(GetWorld()->SpawnActor(WaypointActorClass, WaypointLoc, GetActorRotation(), SpawnParams));
+ WaypointActor->SetupWaypoint(WaypointIcon, CheckpointDescription);
+}
+
+void ACheckpointClass::UpdateChecpointWaypoint(FString WaypointDesc, FVector WaypointNewLoc)
+{
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ if (WaypointActor) WaypointActor->Destroy();
+ WaypointActor = Cast(GetWorld()->SpawnActor(WaypointActorClass, WaypointNewLoc, GetActorRotation(), SpawnParams));
+ WaypointActor->SetupWaypoint(WaypointIcon, WaypointDesc);
+}
+
+// Called every frame
+void ACheckpointClass::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
+void ACheckpointClass::Destroyed()
+{
+ if (WaypointActor) WaypointActor->Destroy();
+}
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.h
new file mode 100644
index 00000000..9c0fa9bf
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/CheckpointClass.h
@@ -0,0 +1,86 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "WaypointActor.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "GameFramework/Actor.h"
+#include "CheckpointClass.generated.h"
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FCompletedCheckpoint);
+
+UCLASS()
+class ENDLESSVENDETTA_API ACheckpointClass : public AActor
+{
+ GENERATED_BODY()
+
+ // ------ Properties set from Editor ------
+ UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
+ FString CheckpointDescription;
+ UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
+ FVector WaypointLoc;
+ UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
+ UTexture2D* WaypointIcon;
+ UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
+ FTransform CheckpointSpawnTransform;
+ UPROPERTY(EditDefaultsOnly, Category = "Checkpoint")
+ TSubclassOf WaypointActorClass;
+
+ AWaypointActor* WaypointActor;
+ // ----------------------------------------
+protected:
+
+ UFUNCTION(BlueprintCallable, Category = "Checkpoint")
+ void BroadcastCompletion()
+ {
+ Cast(GetWorld()->GetFirstPlayerController()->GetPawn())->CheckpointCompletedUI();
+ CompletedCheckpoint.Broadcast();
+ }
+
+ UFUNCTION(BlueprintCallable)
+ void UpdateChecpointWaypoint(FString WaypointDesc, FVector WaypointNewLoc);
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+ virtual void Destroyed() override;
+
+public:
+ FCompletedCheckpoint CompletedCheckpoint;
+
+ UPROPERTY(BlueprintReadOnly, Category = "Checkpoint")
+ bool Active = false;
+
+ void SpawnWaypoint();
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void CheckpointActivated();
+
+ // ------ Getters for CP Properties ------
+ FString GetCheckpointDesc()
+ {
+ return CheckpointDescription;
+ }
+ FVector GetWaypointLoc()
+ {
+ return WaypointLoc;
+ }
+ UTexture2D* GetWaypointIcon()
+ {
+ return WaypointIcon;
+ }
+ FTransform GetCheckpointSpawnTransform()
+ {
+ return CheckpointSpawnTransform;
+ }
+ // ---------------------------------------
+
+ // Sets default values for this actor's properties
+ ACheckpointClass();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp
new file mode 100644
index 00000000..f6cc0edd
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.cpp
@@ -0,0 +1,26 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "MainBountyClass.h"
+
+void AMainBountyClass::SpawnAmmoDrops()
+{
+ UE_LOG(LogTemp, Display, TEXT("Bought Ammo Drops, but its not implemented yet"));
+ // FActorSpawnParameters SpawnParameters;
+ // SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ // for (FTransform Spawn : AmmoDropSpawnTransforms)
+ // {
+ // GetWorld()->SpawnActor(AmmoDropClass, Spawn.GetLocation(), Spawn.GetRotation().Rotator(), SpawnParameters);
+ // }
+}
+
+void AMainBountyClass::SpawnHealthDrops()
+{
+ UE_LOG(LogTemp, Display, TEXT("Bought Health Drops, but its not implemented yet"));
+ // FActorSpawnParameters SpawnParameters;
+ // SpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ // for (FTransform Spawn : HealthDropSpawnTransforms)
+ // {
+ // GetWorld()->SpawnActor(HealthDropClass, Spawn.GetLocation(), Spawn.GetRotation().Rotator(), SpawnParameters);
+ // }
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
new file mode 100644
index 00000000..96dc99cc
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/MainBountyClass.h
@@ -0,0 +1,122 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BountyClass.h"
+#include "SideBountyClass.h"
+#include "MainBountyClass.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AMainBountyClass : public ABountyClass
+{
+ GENERATED_BODY()
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TArray> SideBountiesToSpawn;
+
+ // ---------------- Bounty Alterations ----------------
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TArray CustomBountyAlteration_Description;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TArray CustomBountyAlteration_Cost;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TArray AmmoDropSpawnTransforms;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TSubclassOf AmmoDropClass;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TArray HealthDropSpawnTransforms;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Bounty")
+ TSubclassOf HealthDropClass;
+
+ bool HasEnemyRadio = false;
+
+public:
+ TArray> GetSideBountiesToSpawn()
+ {
+ return SideBountiesToSpawn;
+ }
+
+ // ------------- Custom Bounty Alterations -------------
+ UFUNCTION(BlueprintImplementableEvent, Category = "Bounty")
+ void ActivateCustomBountyAlteration_1();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Bounty")
+ void ActivateCustomBountyAlteration_2();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Bounty")
+ void ActivateCustomBountyAlteration_3();
+
+ bool ActivatedCBA_1 = false;
+ bool ActivatedCBA_2 = false;
+ bool ActivatedCBA_3 = false;
+
+ UFUNCTION(BlueprintCallable, Category = "Bounty")
+ FString GetCustomBountyAlteration_1_Description()
+ {
+ return CustomBountyAlteration_Description.IsEmpty() ? FString("") : CustomBountyAlteration_Description[0];
+ }
+
+ UFUNCTION(BlueprintCallable, Category = "Bounty")
+ FString GetCustomBountyAlteration_2_Description()
+ {
+ return CustomBountyAlteration_Description.Num() <= 1 ? FString("") : CustomBountyAlteration_Description[1];
+ }
+
+ UFUNCTION(BlueprintCallable, Category = "Bounty")
+ FString GetCustomBountyAlteration_3_Description()
+ {
+ return CustomBountyAlteration_Description.Num() <= 2 ? FString("") : CustomBountyAlteration_Description[2];
+ }
+
+ UFUNCTION(BlueprintCallable, Category = "Bounty")
+ int GetCustomBountyAlteration_1_Cost()
+ {
+ return CustomBountyAlteration_Cost.IsEmpty() ? 0 : CustomBountyAlteration_Cost[0];
+ }
+
+ UFUNCTION(BlueprintCallable, Category = "Bounty")
+ int GetCustomBountyAlteration_2_Cost()
+ {
+ return CustomBountyAlteration_Cost.Num() <= 1 ? 0 : CustomBountyAlteration_Cost[1];
+ }
+
+ UFUNCTION(BlueprintCallable, Category = "Bounty")
+ int GetCustomBountyAlteration_3_Cost()
+ {
+ return CustomBountyAlteration_Cost.Num() <= 2 ? 0 : CustomBountyAlteration_Cost[2];
+ }
+ // ------------- Simple Bounty Alterations -------------
+
+ void SpawnAmmoDrops();
+
+ bool ActivateAmmoDrops = false;
+
+ void SpawnHealthDrops();
+
+ bool ActivatedHealthDrops = false;
+
+ void ActivateEnemyRadio()
+ {
+ UE_LOG(LogTemp, Display, TEXT("Bought Radio, but it's not implemented yet"));
+ HasEnemyRadio = true;
+ }
+
+ bool ActivatedRadio = false;
+
+ // Concerned Enemies will call this function, if true, play funny poop voice line and stop enemies from being concerned
+ bool CheckIfHasEnemyRadio()
+ {
+ return HasEnemyRadio;
+ };
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.cpp
new file mode 100644
index 00000000..d28c84e6
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.cpp
@@ -0,0 +1,34 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "SideBountyClass.h"
+
+void ASideBountyClass::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+void ASideBountyClass::IncrementBountyCheckpoint()
+{
+ Super::IncrementBountyCheckpoint();
+
+ if (Completed)
+ {
+ CompletedSideBounty.Broadcast(FavoursEarnedForCompletion);
+ }
+}
+
+void ASideBountyClass::DestroyCheckpoints()
+{
+ for (int i = 0; i < BountyCheckpoints.Num(); i++)
+ {
+ if (BountyCheckpoints[i] == nullptr)
+ {
+ continue;
+ }
+
+ BountyCheckpoints[i]->Destroy();
+ }
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.h
new file mode 100644
index 00000000..758c1e77
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/SideBountyClass.h
@@ -0,0 +1,31 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BountyClass.h"
+#include "SideBountyClass.generated.h"
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FCompletedSideBounty, int, FavoursEarned);
+
+UCLASS()
+class ENDLESSVENDETTA_API ASideBountyClass : public ABountyClass
+{
+ GENERATED_BODY()
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Side Bounty")
+ int FavoursEarnedForCompletion = 1;
+
+ virtual void BeginPlay() override;
+
+public:
+ FCompletedSideBounty CompletedSideBounty;
+
+ virtual void IncrementBountyCheckpoint() override;
+ void DestroyCheckpoints();
+ int GetRewardInFavours()
+ {
+ return FavoursEarnedForCompletion;
+ }
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/WaypointActor.cpp b/EndlessVendetta/Source/EndlessVendetta/BountySystem/WaypointActor.cpp
new file mode 100644
index 00000000..0c9320cb
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/WaypointActor.cpp
@@ -0,0 +1,48 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "WaypointActor.h"
+
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+
+// Sets default values
+AWaypointActor::AWaypointActor()
+{
+ // 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 AWaypointActor::BeginPlay()
+{
+ SetActorTickEnabled(false);
+ Super::BeginPlay();
+
+ SetActorTickInterval(0.05);
+ AActor* PlayerActor = Cast(GetWorld()->GetFirstPlayerController()->GetPawn());
+ PlayersCam = Cast(PlayerActor->GetComponentByClass(UCameraComponent::StaticClass()));
+ ScalingMagnitude = (ScaleAtMaxDist - ScaleAtMinDist) / (MaxDist - MinDist);
+ ScalingY_Intercept = ScaleAtMaxDist - (MaxDist * ScalingMagnitude);
+ if (PlayersCam) SetActorTickEnabled(true);
+}
+
+// Called every frame
+void AWaypointActor::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+ if (!PlayersCam) SetActorTickEnabled(false);
+
+ FVector WaypointLoc = GetActorLocation();
+ FVector PlayerCamLoc = PlayersCam->GetComponentLocation();
+
+ FRotator NewRot = UKismetMathLibrary::FindLookAtRotation(WaypointLoc, PlayerCamLoc);
+ SetActorRotation(NewRot);
+
+ float DistanceToPlayer = FVector::Distance(WaypointLoc, PlayerCamLoc);
+ // S for Scale
+ float S = (DistanceToPlayer * ScalingMagnitude) + ScalingY_Intercept;
+ S = FMath::Clamp(S, ScaleAtMinDist, ScaleAtMaxDist);
+ SetActorScale3D(FVector(1.f, S, S));
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/BountySystem/WaypointActor.h b/EndlessVendetta/Source/EndlessVendetta/BountySystem/WaypointActor.h
new file mode 100644
index 00000000..cc9b5e6a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/BountySystem/WaypointActor.h
@@ -0,0 +1,47 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Camera/CameraComponent.h"
+#include "GameFramework/Actor.h"
+#include "WaypointActor.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AWaypointActor : public AActor
+{
+ GENERATED_BODY()
+
+ UCameraComponent* PlayersCam;
+
+ float ScalingMagnitude;
+
+ float ScalingY_Intercept;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Waypoint Scaling")
+ float MaxDist = 16000.f;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Waypoint Scaling")
+ float ScaleAtMaxDist = 4.f;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Waypoint Scaling")
+ float MinDist = 900.f;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Waypoint Scaling")
+ float ScaleAtMinDist = 0.15;
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Sets default values for this actor's properties
+ AWaypointActor();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void SetupWaypoint(UTexture2D* Icon, const FString& Desc);
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs b/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs
index 55a052ca..3149aa96 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendetta.Build.cs
@@ -8,6 +8,10 @@ public class EndlessVendetta : ModuleRules
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
- PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "EnhancedInput" });
+ PublicDependencyModuleNames.AddRange(new string[]
+ {
+ "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "EnhancedInput", "AIModule",
+ "GameplayTasks", "NavigationSystem", "UMG", "Slate", "SlateCore", "Niagara", "NiagaraCore", "NiagaraShader"
+ });
}
-}
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
index 59310e24..3fb9141f 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp
@@ -1,12 +1,16 @@
// Copyright Epic Games, Inc. All Rights Reserved.
#include "EndlessVendettaCharacter.h"
-#include "EndlessVendettaProjectile.h"
#include "Animation/AnimInstance.h"
#include "Camera/CameraComponent.h"
#include "Components/CapsuleComponent.h"
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
+#include "InteractionInterface.h"
+#include "AI/EnemyCharacter.h"
+#include "GameFramework/CharacterMovementComponent.h"
+#include "Kismet/GameplayStatics.h"
+#include "GameFramework/MovementComponent.h"
//////////////////////////////////////////////////////////////////////////
@@ -16,10 +20,12 @@ AEndlessVendettaCharacter::AEndlessVendettaCharacter()
{
// Character doesnt have a rifle at start
bHasRifle = false;
-
+
+ //Enable Crouching
+ GetCharacterMovement()->GetNavAgentPropertiesRef().bCanCrouch = true;
// Set size for collision capsule
GetCapsuleComponent()->InitCapsuleSize(55.f, 96.0f);
-
+
// Create a CameraComponent
FirstPersonCameraComponent = CreateDefaultSubobject(TEXT("FirstPersonCamera"));
FirstPersonCameraComponent->SetupAttachment(GetCapsuleComponent());
@@ -34,7 +40,6 @@ AEndlessVendettaCharacter::AEndlessVendettaCharacter()
Mesh1P->CastShadow = false;
//Mesh1P->SetRelativeRotation(FRotator(0.9f, -19.19f, 5.2f));
Mesh1P->SetRelativeLocation(FVector(-30.f, 0.f, -150.f));
-
}
void AEndlessVendettaCharacter::BeginPlay()
@@ -50,7 +55,49 @@ void AEndlessVendettaCharacter::BeginPlay()
Subsystem->AddMappingContext(DefaultMappingContext, 0);
}
}
+ AActor* GadgetManagerActor = GetWorld()->SpawnActor(GadgetManagerClass, GetActorLocation(), GetActorRotation());
+ GadgetManager = Cast(GadgetManagerActor);
+ FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
+ GadgetManagerActor->AttachToComponent(GetRootComponent(), AttachmentRules);
+ for (UActorComponent* PlayersCamera : GetComponentsByTag(UCameraComponent::StaticClass(), FName("PlayersCamera")))
+ {
+ GadgetManager->SpawnGadgetsOnBeginPlay(Cast(PlayersCamera));
+ break;
+ }
+}
+void AEndlessVendettaCharacter::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+ WeaponPickUpSystem();
+
+ MoveGroundSpeed = Cast(GetComponentByClass(UMovementComponent::StaticClass()))->Velocity.Size();
+
+ if (MoveGroundSpeed > 0)
+ {
+ bIsPlayerMoving = true;
+ }
+ else if (MoveGroundSpeed <= 0)
+ {
+ bIsPlayerMoving = false;
+ }
+}
+
+void AEndlessVendettaCharacter::WeaponPickUpSystem()
+{
+ FHitResult OutHit;
+ FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam;
+ QueryParams.AddIgnoredActor(this);
+ QueryParams.AddIgnoredActor(PrimaryWeapon);
+ QueryParams.AddIgnoredActor(SecondaryWeapon);
+ FVector LT_Start = FirstPersonCameraComponent->GetComponentLocation();
+ FVector LT_End = LT_Start + (FirstPersonCameraComponent->GetForwardVector() * InteractionRange);
+ if (!GetWorld()->LineTraceSingleByChannel(OutHit, LT_Start, LT_End, ECC_Camera, QueryParams)) return;
+
+ AActor* HitActor = OutHit.GetActor();
+ IInteractionInterface* InteractableActor = Cast(HitActor);
+ if (InteractableActor) InteractableActor->InteractPrompt();
}
//////////////////////////////////////////////////////////////////////////// Input
@@ -69,6 +116,281 @@ void AEndlessVendettaCharacter::SetupPlayerInputComponent(class UInputComponent*
//Looking
EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::Look);
+
+ // Gadget Toggling
+ EnhancedInputComponent->BindAction(ReconAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::ToggleRecon);
+ EnhancedInputComponent->BindAction(CombatAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::ToggleCombat);
+
+ //Weapon Switching
+ EnhancedInputComponent->BindAction(EquipPrimaryWeapon, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::EquipPrimary);
+ EnhancedInputComponent->BindAction(EquipSecondaryWeapon, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::EquipSecondary);
+
+ //Weapon Shooting
+ EnhancedInputComponent->BindAction(TapShootAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::FireCaller);
+ EnhancedInputComponent->BindAction(TapShootAction, ETriggerEvent::Completed, this, &AEndlessVendettaCharacter::StopFire);
+ EnhancedInputComponent->BindAction(GunAimInAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::GunRightClick);
+ EnhancedInputComponent->BindAction(GunAimInAction, ETriggerEvent::Completed, this, &AEndlessVendettaCharacter::StopGunRightClick);
+
+ //Weapon Reloading
+ EnhancedInputComponent->BindAction(GunReloadAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::GunReload);
+
+ //Crouching
+ EnhancedInputComponent->BindAction(CrouchAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::SetCrouch);
+ EnhancedInputComponent->BindAction(CrouchAction, ETriggerEvent::Completed, this, &AEndlessVendettaCharacter::SetUnCrouch);
+
+ //Interacting
+ EnhancedInputComponent->BindAction(InteractAction, ETriggerEvent::Started, this, &AEndlessVendettaCharacter::Interact);
+ }
+}
+
+void AEndlessVendettaCharacter::Interact()
+{
+ FHitResult OutHit;
+ FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam;
+ QueryParams.AddIgnoredActor(this);
+ FVector LT_Start = FirstPersonCameraComponent->GetComponentLocation();
+ FVector LT_End = LT_Start + (FirstPersonCameraComponent->GetForwardVector() * InteractionRange);
+ if(IsValid(PrimaryWeapon))
+ {
+ QueryParams.AddIgnoredActor(PrimaryWeapon);
+ }
+ if(IsValid(SecondaryWeapon))
+ {
+ QueryParams.AddIgnoredActor(SecondaryWeapon);
+ }
+ if (!GetWorld()->LineTraceSingleByChannel(OutHit, LT_Start, LT_End, ECC_Camera, QueryParams)) return;
+ AActor* HitActor = OutHit.GetActor();
+ UE_LOG(LogTemp, Warning, TEXT("Hit actor: %s"), *HitActor->GetName());
+ IInteractionInterface* InteractableActor = Cast(HitActor);
+ if (InteractableActor) InteractableActor->Interact();
+}
+
+
+void AEndlessVendettaCharacter::SetCrouch()
+{
+ Crouch();
+}
+
+void AEndlessVendettaCharacter::SetUnCrouch()
+{
+ UnCrouch();
+}
+
+float AEndlessVendettaCharacter::TakeDamage(const float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser)
+{
+ CurrentHealth -= DamageAmount;
+ if (CurrentHealth <= 0)
+ {
+ CurrentHealth = 0;
+ UE_LOG(LogTemp, Warning, TEXT("Player is dead"));
+ }
+
+ return Super::TakeDamage(DamageAmount, DamageEvent, EventInstigator, DamageCauser);
+}
+
+
+void AEndlessVendettaCharacter::ToggleRecon()
+{
+ if (!GadgetManager->IsValidReconGadget()) return;
+
+ if (IsValid(PrimaryWeapon)) EquipPrimary();
+ if (IsValid(SecondaryWeapon)) EquipSecondary();
+
+ if (GadgetManager->IsReconEquipped())
+ {
+ GadgetManager->TryToUnequipRecon();
+ return;
+ }
+
+ if (GadgetManager->IsValidCombatGadget() && GadgetManager->IsCombatEquipped() && !GadgetManager->TryToUnequipCombat())
+ {
+ // Do nothing if combat is equipped and can't be unequipped at this moment
+ return;
+ }
+
+ GadgetManager->EquipRecon();
+}
+
+void AEndlessVendettaCharacter::ToggleCombat()
+{
+ if(!GadgetManager->IsValidCombatGadget()) return;
+
+ if (IsValid(PrimaryWeapon)) EquipPrimary();
+ if (IsValid(SecondaryWeapon)) EquipSecondary();
+
+ if (GadgetManager->IsCombatEquipped())
+ {
+ GadgetManager->TryToUnequipCombat();
+ return;
+ }
+
+ if (GadgetManager->IsValidReconGadget() && GadgetManager->IsReconEquipped() && !GadgetManager->TryToUnequipRecon())
+ {
+ // Do nothing if recon is equipped and can't be unequipped at the moment
+ return;
+ }
+
+ GadgetManager->EquipCombat();
+}
+
+
+//When 1 is pressed it calls EquipPrimary
+void AEndlessVendettaCharacter::EquipPrimary()
+{
+ if (bIsReloading) return;
+ if (IsValid(PrimaryWeapon))
+ {
+ PrimaryWeapon->Destroy();
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
+ PrimaryWeapon = nullptr;
+ bHasRifle = false;
+ return;
+ }
+
+ if (IsValid(SecondaryWeapon)) EquipSecondary();
+
+ if (GadgetManager->IsValidReconGadget() && GadgetManager->IsReconEquipped() && !GadgetManager->TryToUnequipRecon()) return;
+ if (GadgetManager->IsValidCombatGadget() && GadgetManager->IsCombatEquipped() && !GadgetManager->TryToUnequipCombat()) return;
+
+
+ FActorSpawnParameters spawnParams;
+ spawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
+
+ bHasRifle = true;
+ //Creating a new actor object called PrimaryWeapon that is based off primaryweaponClass
+ AActor* PrimaryWeaponActor = GetWorld()->SpawnActor(PrimaryWeaponClass, spawnParams);
+ PrimaryWeaponActor->AttachToComponent(Mesh1P, AttachmentRules, FName("GripPoint"));
+ //Changing PrimaryWeaponActor to ABaseWeaponClass type instead of actor and storing it into PrimaryWeapon which is a ABaseClass Object
+ //We do this because we need to check if PrimaryWeapon is equipped and we want primaryweapon to be ABaseWeapon type and not a generic AActor
+ PrimaryWeapon = Cast(PrimaryWeaponActor);
+ GetWorldTimerManager().ClearTimer(PrimaryWeapon->reloadTimerHandle);
+}
+
+void AEndlessVendettaCharacter::EquipSecondary()
+{
+ if (bIsReloading) return;
+ if (IsValid(SecondaryWeapon))
+ {
+ SecondaryWeapon->Destroy();
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
+ SecondaryWeapon = nullptr;
+ bHasRifle = false;
+ return;
+ }
+
+ if (IsValid(PrimaryWeapon)) EquipPrimary();
+
+ if (GadgetManager->IsValidReconGadget() && GadgetManager->IsReconEquipped() && !GadgetManager->TryToUnequipRecon()) return;
+ if (GadgetManager->IsValidCombatGadget() && GadgetManager->IsCombatEquipped() && !GadgetManager->TryToUnequipCombat()) return;
+
+
+ FActorSpawnParameters spawnParams;
+ spawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
+
+ bHasRifle = true;
+ AActor* SecondaryWeaponActor = GetWorld()->SpawnActor(SecondaryWeaponClass, spawnParams);
+ SecondaryWeaponActor->AttachToComponent(Mesh1P, AttachmentRules, FName("GripPoint"));
+ SecondaryWeapon = Cast(SecondaryWeaponActor);
+ GetWorldTimerManager().ClearTimer(SecondaryWeapon->reloadTimerHandle);
+}
+
+void AEndlessVendettaCharacter::WeaponSwitcher(AActor* Outhit)
+{
+ if (IsValid(PrimaryWeapon))
+ {
+ EquipPrimary();
+ }
+ PrimaryWeaponClass = Outhit->GetClass();
+ Outhit->Destroy();
+ EquipPrimary();
+}
+
+//Calls the fire function in the baseWeaponClass
+void AEndlessVendettaCharacter::FireCaller()
+{
+ if (IsValid(PrimaryWeapon) && !bIsReloading)
+ {
+ PrimaryWeapon->Fire();
+ }
+ if (IsValid(SecondaryWeapon) && !bIsReloading)
+ {
+ SecondaryWeapon->Fire();
+ }
+}
+
+void AEndlessVendettaCharacter::StopFire()
+{
+ if (IsValid(PrimaryWeapon))
+ {
+ PrimaryWeapon->CancelFire();
+ }
+ if (IsValid(SecondaryWeapon))
+ {
+ SecondaryWeapon->CancelFire();
+ }
+}
+
+void AEndlessVendettaCharacter::GunRightClick()
+{
+ if (IsValid(PrimaryWeapon) && !bIsScoped)
+ {
+ for (UActorComponent* actorComp : this->GetComponentsByTag(UArrowComponent::StaticClass(), FName("ScopedLocationArrow")))
+ {
+ ScopedLocationArrow = Cast(actorComp);
+ break;
+ }
+ if (!IsValid(ScopedLocationArrow)) return;
+ PrimaryWeapon->SetActorLocation(ScopedLocationArrow->GetComponentLocation());
+ bIsScoped = true;
+ PrimaryWeapon->WeaponScopedFire();
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(50); //change this number to a number you can change in editor eventually
+ }
+ if (IsValid(SecondaryWeapon) && !bIsScoped)
+ {
+ for (UActorComponent* actorComp : this->GetComponentsByTag(UArrowComponent::StaticClass(), FName("ScopedLocationArrow")))
+ {
+ ScopedLocationArrow = Cast(actorComp);
+ break;
+ }
+ if (!IsValid(ScopedLocationArrow)) return;
+ bIsScoped = true;
+ SecondaryWeapon->WeaponScopedFire();
+ SecondaryWeapon->SetActorLocation(ScopedLocationArrow->GetComponentLocation());
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(50); //change this number to a number you can change in editor eventually
+ }
+}
+
+void AEndlessVendettaCharacter::StopGunRightClick()
+{
+ if (IsValid(PrimaryWeapon))
+ {
+ bIsScoped = false;
+ PrimaryWeapon->WeaponScopedFire();
+ PrimaryWeapon->SetActorRelativeLocation(FVector(0,0,0));
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
+ }
+ if (IsValid(SecondaryWeapon))
+ {
+ bIsScoped = false;
+ SecondaryWeapon->WeaponScopedFire();
+ SecondaryWeapon->SetActorRelativeLocation(FVector(0,0,0));
+ this->GetFirstPersonCameraComponent()->SetFieldOfView(90);
+ }
+}
+
+void AEndlessVendettaCharacter::GunReload()
+{
+ if (IsValid(PrimaryWeapon))
+ {
+ PrimaryWeapon->ReloadTimer();
+ bIsReloading = true;
+ }
+ if (IsValid(SecondaryWeapon))
+ {
+ SecondaryWeapon->ReloadTimer();
+ bIsReloading = true;
}
}
@@ -99,6 +421,7 @@ void AEndlessVendettaCharacter::Look(const FInputActionValue& Value)
}
}
+
void AEndlessVendettaCharacter::SetHasRifle(bool bNewHasRifle)
{
bHasRifle = bNewHasRifle;
@@ -107,4 +430,18 @@ void AEndlessVendettaCharacter::SetHasRifle(bool bNewHasRifle)
bool AEndlessVendettaCharacter::GetHasRifle()
{
return bHasRifle;
-}
\ No newline at end of file
+}
+
+bool AEndlessVendettaCharacter::UpdateGadgetType(TSubclassOf NewGadgetClass)
+{
+ if (NewGadgetClass.GetDefaultObject()->IsA(AReconGadget::StaticClass()) && GadgetManager->ReconCantBeSwitchedOut()) return false;
+ if (NewGadgetClass.GetDefaultObject()->IsA(ACombatGadget::StaticClass()) && GadgetManager->CombatCantBeSwitchedOut()) return false;
+
+ for (UActorComponent* PlayersCamera : GetComponentsByTag(UCameraComponent::StaticClass(), FName("PlayersCamera")))
+ {
+ GadgetManager->SpawnGadget(NewGadgetClass, Cast(PlayersCamera));
+ break;
+ }
+ return true;
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
index 667db81c..71be65d9 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h
@@ -3,10 +3,14 @@
#pragma once
#include "CoreMinimal.h"
+#include "WeaponSystem/BaseWeaponClass.h"
#include "GameFramework/Character.h"
#include "InputActionValue.h"
+#include "Components/ArrowComponent.h"
+#include "GadgetSystem/GadgetManager.h"
#include "EndlessVendettaCharacter.generated.h"
+class UWeaponInventory;
class UInputComponent;
class USkeletalMeshComponent;
class USceneComponent;
@@ -29,25 +33,71 @@ class AEndlessVendettaCharacter : public ACharacter
/** MappingContext */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
- class UInputMappingContext* DefaultMappingContext;
+ UInputMappingContext* DefaultMappingContext;
/** Jump Input Action */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
- class UInputAction* JumpAction;
+ UInputAction* JumpAction;
/** Move Input Action */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
- class UInputAction* MoveAction;
+ UInputAction* MoveAction;
+ // Gadget Actions
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
+ UInputAction* ReconAction;
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
+ UInputAction* CombatAction;
+
+ /** Weapon Equip Action */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
+ UInputAction* EquipPrimaryWeapon;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
+ UInputAction* EquipSecondaryWeapon;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
+ class UInputAction* TapShootAction;
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
+ class UInputAction* GunAimInAction;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true"))
+ class UInputAction* GunReloadAction;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ UInputAction* CrouchAction;
+
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ UInputAction* InteractAction;
+
public:
AEndlessVendettaCharacter();
+ UPROPERTY(EditDefaultsOnly, Category = "Stats")
+ float CurrentHealth = 100.0f;
+ UPROPERTY(EditDefaultsOnly, Category = "Stats")
+ float MaxHealth = 100.0f;
+ UPROPERTY(EditDefaultsOnly, Category = "Stats")
+ float DefaultHealth = 100.0f;
+
protected:
- virtual void BeginPlay();
+ virtual void BeginPlay() override;
+ virtual void Tick(float DeltaTime) override;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ TSubclassOf GadgetManagerClass;
+
public:
-
+ int Money = 2000;
+ AGadgetManager* GadgetManager;
+ bool bIsReloading = false;
+
+ bool bIsPlayerMoving = false;
+
+ double MoveGroundSpeed;
+
/** Look Input Action */
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
class UInputAction* LookAction;
@@ -64,6 +114,35 @@ public:
UFUNCTION(BlueprintCallable, Category = Weapon)
bool GetHasRifle();
+ UPROPERTY(EditAnywhere, Category = "Weapons")
+ TSubclassOf PrimaryWeaponClass;
+
+ UPROPERTY(EditAnywhere, Category = "Weapons")
+ TSubclassOf SecondaryWeaponClass;
+
+ ABaseWeaponClass* PrimaryWeapon;
+ ABaseWeaponClass* SecondaryWeapon;
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ void FireCaller();
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ void GunRightClick();
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ void StopGunRightClick();
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ void GunReload();
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ void StopFire();
+
+ UArrowComponent* ScopedLocationArrow;
+
+ UPROPERTY(EditAnywhere, Category = "Dont Touch")
+ bool bIsScoped;
+
protected:
/** Called for movement input */
void Move(const FInputActionValue& Value);
@@ -71,17 +150,42 @@ protected:
/** Called for looking input */
void Look(const FInputActionValue& Value);
+ void ToggleRecon();
+ void ToggleCombat();
+
+ UPROPERTY(EditDefaultsOnly, Category = "Interaction")
+ float InteractionRange = 250;
+ void Interact();
+
protected:
// APawn interface
virtual void SetupPlayerInputComponent(UInputComponent* InputComponent) override;
// End of APawn interface
public:
- /** Returns Mesh1P subobject **/
+ UFUNCTION(BlueprintCallable, Category = "Stealth")
+ void SetCrouch();
+ UFUNCTION(BlueprintCallable, Category = "Stealth")
+ void SetUnCrouch();
+
+ /** Returns Mesh1P Sub-object **/
USkeletalMeshComponent* GetMesh1P() const { return Mesh1P; }
- /** Returns FirstPersonCameraComponent subobject **/
+ /** Returns FirstPersonCameraComponent Sub-object **/
UCameraComponent* GetFirstPersonCameraComponent() const { return FirstPersonCameraComponent; }
+ UFUNCTION(BlueprintCallable, Category = "Damage Control")
+ virtual float TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
+ void WeaponPickUpSystem();
+
+ void EquipPrimary();
+ void EquipSecondary();
+
+ void WeaponSwitcher(AActor* Outhit);
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void CheckpointCompletedUI();
+
+ // Returns true if successfully changed to a new gadget, can fail if the target gadget to replace is being used
+ bool UpdateGadgetType(TSubclassOf NewGadgetClass);
};
-
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp
index c6255c57..bbba7bcd 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.cpp
@@ -3,12 +3,38 @@
#include "EndlessVendettaGameMode.h"
#include "EndlessVendettaCharacter.h"
#include "UObject/ConstructorHelpers.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+#include "EndlessVendetta/AI/AIControlHub.h"
+#include "Kismet/GameplayStatics.h"
+#include "Engine/DamageEvents.h"
-AEndlessVendettaGameMode::AEndlessVendettaGameMode()
- : Super()
+AEndlessVendettaGameMode::AEndlessVendettaGameMode() : Super()
{
// set default pawn class to our Blueprinted character
static ConstructorHelpers::FClassFinder PlayerPawnClassFinder(TEXT("/Game/FirstPerson/Blueprints/BP_FirstPersonCharacter"));
DefaultPawnClass = PlayerPawnClassFinder.Class;
}
+
+void AEndlessVendettaGameMode::KillAllEnemies()
+{
+ TArray EnemyCharacters;
+ UGameplayStatics::GetAllActorsOfClass(GetWorld(), AEnemyCharacter::StaticClass(), EnemyCharacters);
+ for (AActor* EnemyActor : EnemyCharacters)
+ {
+ AEnemyCharacter* EnemyCharacter = Cast(EnemyActor);
+ EnemyCharacter->TakeDamage(EnemyCharacter->MaxHealth, FDamageEvent(), GetWorld()->GetFirstPlayerController(), GetWorld()->GetFirstPlayerController()->GetOwner());
+ }
+}
+
+void AEndlessVendettaGameMode::SetLocalAIAlertLevel(int NewAlertLevel)
+{
+ TArray AIControlHubActors;
+ UGameplayStatics::GetAllActorsOfClass(GetWorld(), AAIControlHub::StaticClass(), AIControlHubActors);
+ for (AActor* AIControlHubActor : AIControlHubActors)
+ {
+ AAIControlHub* AIControlHub = Cast(AIControlHubActor);
+ AIControlHub->SetPlayerLastKnownLocation();
+ AIControlHub->SetAlertLevel(NewAlertLevel);
+ }
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h
index 97d6b063..420ab589 100644
--- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h
+++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaGameMode.h
@@ -13,7 +13,10 @@ class AEndlessVendettaGameMode : public AGameModeBase
public:
AEndlessVendettaGameMode();
+
+ UFUNCTION(Exec, Category = ExecFunctions)
+ void KillAllEnemies();
+
+ UFUNCTION(Exec, Category = ExecFunctions)
+ void SetLocalAIAlertLevel(int NewAlertLevel);
};
-
-
-
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaProjectile.cpp b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/EndlessVendettaProjectile.cpp
similarity index 100%
rename from EndlessVendetta/Source/EndlessVendetta/EndlessVendettaProjectile.cpp
rename to EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/EndlessVendettaProjectile.cpp
diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaProjectile.h b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/EndlessVendettaProjectile.h
similarity index 100%
rename from EndlessVendetta/Source/EndlessVendetta/EndlessVendettaProjectile.h
rename to EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/EndlessVendettaProjectile.h
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_PickUpComponent.cpp b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_PickUpComponent.cpp
similarity index 100%
rename from EndlessVendetta/Source/EndlessVendetta/TP_PickUpComponent.cpp
rename to EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_PickUpComponent.cpp
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_PickUpComponent.h b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_PickUpComponent.h
similarity index 95%
rename from EndlessVendetta/Source/EndlessVendetta/TP_PickUpComponent.h
rename to EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_PickUpComponent.h
index a59366e7..62b5655a 100644
--- a/EndlessVendetta/Source/EndlessVendetta/TP_PickUpComponent.h
+++ b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_PickUpComponent.h
@@ -4,7 +4,7 @@
#include "CoreMinimal.h"
#include "Components/SphereComponent.h"
-#include "EndlessVendettaCharacter.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
#include "TP_PickUpComponent.generated.h"
// Declaration of the delegate that will be called when someone picks this up
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_WeaponComponent.cpp b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_WeaponComponent.cpp
similarity index 98%
rename from EndlessVendetta/Source/EndlessVendetta/TP_WeaponComponent.cpp
rename to EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_WeaponComponent.cpp
index bd7c0deb..50dfa1d8 100644
--- a/EndlessVendetta/Source/EndlessVendetta/TP_WeaponComponent.cpp
+++ b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_WeaponComponent.cpp
@@ -2,7 +2,7 @@
#include "TP_WeaponComponent.h"
-#include "EndlessVendettaCharacter.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
#include "EndlessVendettaProjectile.h"
#include "GameFramework/PlayerController.h"
#include "Camera/PlayerCameraManager.h"
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_WeaponComponent.h b/EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_WeaponComponent.h
similarity index 100%
rename from EndlessVendetta/Source/EndlessVendetta/TP_WeaponComponent.h
rename to EndlessVendetta/Source/EndlessVendetta/FirstPersonTemplateClasses/TP_WeaponComponent.h
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/CombatGadget.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/CombatGadget.cpp
new file mode 100644
index 00000000..55976a01
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/CombatGadget.cpp
@@ -0,0 +1,5 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "CombatGadget.h"
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/CombatGadget.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/CombatGadget.h
new file mode 100644
index 00000000..7175c889
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/CombatGadget.h
@@ -0,0 +1,17 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GadgetBase.h"
+#include "CombatGadget.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API ACombatGadget : public AGadgetBase
+{
+ GENERATED_BODY()
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetBase.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetBase.cpp
new file mode 100644
index 00000000..a028af77
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetBase.cpp
@@ -0,0 +1,92 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "GadgetBase.h"
+
+#include "EnhancedInputComponent.h"
+#include "EnhancedInputSubsystems.h"
+
+// Sets default values
+AGadgetBase::AGadgetBase()
+{
+ // 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 AGadgetBase::BeginPlay()
+{
+ Super::BeginPlay();
+
+ PlayerController = GetWorld()->GetFirstPlayerController();
+}
+
+// Called every frame
+void AGadgetBase::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
+void AGadgetBase::Equip()
+{
+ SetActorRelativeLocation(EquippedOffset);
+ Equipped = true;
+
+
+
+ UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem(PlayerController->GetLocalPlayer());
+ Subsystem->AddMappingContext(GadgetMappingContext, 2);
+ UEnhancedInputComponent* EnhancedInputComponent = Cast(PlayerController->InputComponent);
+ EnhancedInputComponent->BindAction(ActivateAction, ETriggerEvent::Started, this, &AGadgetBase::Activate);
+}
+
+bool AGadgetBase::Unequip()
+{
+ if (GadgetInUse && !UnequippableWhenInUse) return false;
+
+ SetActorRelativeLocation(UnequippedOffset);
+ Equipped = false;
+
+ UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem(PlayerController->GetLocalPlayer());
+ Subsystem->RemoveMappingContext(GadgetMappingContext);
+ UEnhancedInputComponent* EnhancedInputComponent = Cast(PlayerController->InputComponent);
+ EnhancedInputComponent->ClearActionBindings();
+
+ return true;
+}
+
+void AGadgetBase::Activate()
+{
+ StartInUseTimer();
+}
+
+void AGadgetBase::FinishedUsing()
+{
+ UE_LOG(LogTemp, Warning, TEXT("Gadget is no longer being used"));
+
+ GadgetInUse = false;
+ InUseHandle.Invalidate();
+
+ StartGadgetCooldown();
+}
+
+// -------------- Timers --------------
+
+void AGadgetBase::StartGadgetCooldown()
+{
+ GadgetOnCooldown = true;
+ GetWorld()->GetTimerManager().SetTimer(CooldownHandle, this, &AGadgetBase::ReadyGadget, CooldownTime, false);
+}
+
+void AGadgetBase::StartInUseTimer()
+{
+ UE_LOG(LogTemp, Warning, TEXT("Gadget In Use Timer Started"));
+
+ GadgetInUse = true;
+ GetWorld()->GetTimerManager().SetTimer(InUseHandle, this, &AGadgetBase::FinishedUsing, GadgetMaxUptime, false);
+}
+
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetBase.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetBase.h
new file mode 100644
index 00000000..44cd254b
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetBase.h
@@ -0,0 +1,133 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EnhancedInputSubsystemInterface.h"
+#include "GadgetTutorial/BaseGadgetTutorial.h"
+#include "GameFramework/Actor.h"
+#include "GadgetBase.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AGadgetBase : public AActor
+{
+ GENERATED_BODY()
+
+ APlayerController* PlayerController;
+
+ FTimerHandle CooldownHandle;
+ void StartGadgetCooldown();
+ bool GadgetOnCooldown = false;
+
+ FTimerHandle InUseHandle;
+ void StartInUseTimer();
+ bool GadgetInUse = false;
+
+ void ReadyGadget()
+ {
+ UE_LOG(LogTemp, Warning, TEXT("Gadget is now ready to be used again"));
+ GadgetOnCooldown = false;
+ }
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ FVector EquippedOffset = FVector(0, 0, 0);
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ FRotator GadgetRotation = FRotator(0, 0, 0);
+
+ UPROPERTY(EditDefaultsOnly, CAtegory = "Gadget")
+ FVector UnequippedOffset = FVector(0, 0, -1000);
+
+ UPROPERTY(EditDefaultsOnly, cATEGORY = "Gadget")
+ float GadgetMaxUptime;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ float CooldownTime;
+
+ UPROPERTY(EditDefaultsOnly, CAtegory = "Gadget")
+ bool UnequippableWhenInUse = false;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ UInputMappingContext* GadgetMappingContext;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ UInputAction* ActivateAction;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ UTexture2D* GadgetIcon;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ FString GadgetDesc;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ FString GadgetName;
+
+
+ // Used by child classes to run custom gadget behaviour
+ virtual void Activate();
+
+ // Starts Cooldown and automatically unequips gadget, used by child classes to implement custom behaviour
+ virtual void FinishedUsing();
+
+ bool GadgetCantBeUsed()
+ {
+ return GadgetOnCooldown|| GadgetInUse;
+ }
+
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ bool Equipped = false;
+
+ void Equip();
+
+ // Return true if unequip succeeds
+ bool Unequip();
+
+ FVector GetUnequippedOffset()
+ {
+ return UnequippedOffset;
+ }
+
+ FRotator GetGadgetSpawnRotation()
+ {
+ return GadgetRotation;
+ }
+
+ UTexture2D* GetGadgetIcon()
+ {
+ return IsValid(GadgetIcon) ? GadgetIcon : nullptr;
+ }
+
+ FString GetGadgetDesc()
+ {
+ return GadgetDesc;
+ }
+
+ FString GetGadgetName()
+ {
+ return GadgetName;
+ }
+
+ bool IsUnequippableInUse()
+ {
+ return UnequippableWhenInUse;
+ }
+
+ bool IsInUse()
+ {
+ return GadgetInUse;
+ }
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ TSubclassOf GadgetTutorialClass;
+
+ // Sets default values for this actor's properties
+ AGadgetBase();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/Explosive.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/Explosive.cpp
new file mode 100644
index 00000000..71262298
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/Explosive.cpp
@@ -0,0 +1,90 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "Explosive.h"
+
+#include "CollisionDebugDrawingPublic.h"
+#include "Kismet/KismetMathLibrary.h"
+#include "Engine/DamageEvents.h"
+#include "EndlessVendetta/AI/AICharacter.h"
+
+// Sets default values
+AExplosive::AExplosive()
+{
+ // 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 AExplosive::BeginPlay()
+{
+ Super::BeginPlay();
+
+ if (ExplosionDelayInSeconds <= 0)
+ {
+ Explosion();
+ return;
+ }
+
+ FTimerHandle ExplosionHandle;
+ GetWorld()->GetTimerManager().SetTimer(ExplosionHandle, this, &AExplosive::Explosion, ExplosionDelayInSeconds);
+}
+
+// Called every frame
+void AExplosive::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
+void AExplosive::Explosion()
+{
+ float PitchAngleIncrement = 180.f / ShrapnelPitchDensity;
+ float YawAngleIncrement = 360.f / ShrapnelYawDensity;
+
+ FHitResult OutHit;
+ FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam;
+ QueryParams.bTraceComplex = false;
+ QueryParams.AddIgnoredActor(this);
+ FVector LT_Start = GetActorLocation();
+
+ for(int y = 1; y <= ShrapnelPitchDensity; y++)
+ {
+ for (int x = 1; x <= ShrapnelYawDensity; x++)
+ {
+ FRotator ShrapnelRotation = FRotator(-90.f + (y * PitchAngleIncrement), x * YawAngleIncrement, 0.f);
+ FVector LT_End = LT_Start + (UKismetMathLibrary::GetForwardVector(ShrapnelRotation) * ShrapnelTravelDistance);
+ bool HitSomething = GetWorld()->LineTraceSingleByChannel(OutHit, LT_Start, LT_End, ECC_Camera, QueryParams);
+
+ if (DrawDebugLines) DrawShrapnelDebugLines(HitSomething, LT_Start, LT_End, OutHit.ImpactPoint);
+ if (!HitSomething || !OutHit.GetActor()->ActorHasTag(FName("Enemy")) || OutHit.GetActor()->ActorHasTag(FName("Dead"))) continue;
+
+ float HitDistance = FVector::Distance(LT_Start, OutHit.ImpactPoint);
+ float DamageToApply = ShrapnelDamage;
+ if (HitDistance > ShrapnelDamageFalloffDistance)
+ {
+ // Damage linearly decrease from falloff distance to maximum travel distance, using straight line equation y = mx + c
+ float Magnitude = ShrapnelDamage / (ShrapnelDamageFalloffDistance - ShrapnelTravelDistance);
+ float DMG_Intercept = ShrapnelDamage - (Magnitude * ShrapnelDamageFalloffDistance);
+ DamageToApply = (Magnitude * HitDistance) + DMG_Intercept;
+ }
+ // When merged, call philips take damage function here
+ UE_LOG(LogTemp, Warning, TEXT("A shrapnel piece hit %s, dealing %f damage"), *OutHit.GetActor()->GetName(), DamageToApply);
+ Cast(OutHit.GetActor())->TakeDamage(DamageToApply, FPointDamageEvent(), GetWorld()->GetFirstPlayerController(), this);
+ }
+ }
+ PlayExplosionEffects();
+}
+
+void AExplosive::DrawShrapnelDebugLines(bool HitSomething, FVector StartVector, FVector EndVector, FVector ImpactPoint)
+{
+ if (!HitSomething)
+ {
+ DrawDebugLine(GetWorld(), StartVector, EndVector, FColor::Green, false, 5, 0, 2);
+ return;
+ }
+ DrawDebugLine(GetWorld(), ImpactPoint, EndVector, FColor::Red, false, 5, 0, 2);
+ DrawDebugLine(GetWorld(), StartVector, ImpactPoint, FColor::Green, false, 5, 0, 2);
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/Explosive.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/Explosive.h
new file mode 100644
index 00000000..4ffb2806
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/Explosive.h
@@ -0,0 +1,63 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Actor.h"
+#include "Explosive.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AExplosive : public AActor
+{
+ GENERATED_BODY()
+
+ void DrawShrapnelDebugLines(bool HitSomething, FVector StartVector, FVector EndVector, FVector ImpactPoint);
+
+protected:
+ // Maximum amount of damage dealt by an individual piece of shrapnel
+ UPROPERTY(EditDefaultsOnly, Category = "Explosion")
+ float ShrapnelDamage = 10;
+
+ // Number of shrapnel pieces uniformly spread around the Y axis
+ UPROPERTY(EditDefaultsOnly, Category = "Explosion")
+ int ShrapnelPitchDensity = 40;
+
+ // Number of shrapnel pieces uniformly spread around the Z axis
+ UPROPERTY(EditDefaultsOnly, Category = "Explosion")
+ int ShrapnelYawDensity = 40;
+
+ // How far shrapnel should travel from origin point, given its not obstructed along its path
+ UPROPERTY(EditDefaultsOnly, Category = "Explosion")
+ float ShrapnelTravelDistance = 600;
+
+ // After what distance travelled should shrapnel damage start to decrease
+ UPROPERTY(EditDefaultsOnly, Category = "Explosion")
+ float ShrapnelDamageFalloffDistance = 200;
+
+ // Delay from spawning in before explosion happens
+ UPROPERTY(EditDefaultsOnly, Category = "Explosion")
+ float ExplosionDelayInSeconds = 0;
+
+ /**
+ * Should debug lines be drawn to show planned travel trajectory of each
+ * shrapnel piece in red, and actual travelled shrapnel trajectory in green
+ */
+ UPROPERTY(EditAnywhere, Category = "Explosion")
+ bool DrawDebugLines = false;
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Explosion")
+ void PlayExplosionEffects();
+
+ void Explosion();
+
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Sets default values for this actor's properties
+ AExplosive();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/OverloadModule/OverloadModule.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/OverloadModule/OverloadModule.cpp
new file mode 100644
index 00000000..c89568ee
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/OverloadModule/OverloadModule.cpp
@@ -0,0 +1,129 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "OverloadModule.h"
+
+#include "Components/SphereComponent.h"
+#include "GameFramework/Character.h"
+
+void AOverloadModule::BeginPlay()
+{
+ Super::BeginPlay();
+
+ this->SetActorTickInterval(0.2);
+ PlayerChar = GetWorld()->GetFirstPlayerController()->GetCharacter();
+ PlayerCam = Cast(PlayerChar->GetComponentByClass(UCameraComponent::StaticClass()));
+}
+
+
+void AOverloadModule::Tick(float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ if (GadgetCantBeUsed()) return;
+ CheckForPotentialHackTarget();
+}
+
+void AOverloadModule::CheckForPotentialHackTarget()
+{
+ FHitResult OutHit;
+ FVector LT_Start = PlayerCam->GetComponentLocation();
+ FVector LT_End = PlayerCam->GetComponentLocation() + (PlayerCam->GetForwardVector() * DeadBodyCheckDistance);
+
+ //DrawDebugLine(GetWorld(), LT_Start, LT_End, FColor::Red, false, 0.2, 0, 1);
+
+ FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam;
+ QueryParams.AddIgnoredActor(PlayerChar);
+ if (!GetWorld()->LineTraceSingleByChannel(OutHit, LT_Start, LT_End, ECC_Camera, QueryParams) || !(OutHit.GetActor()->ActorHasTag(FName("Enemy")) && OutHit.GetActor()->ActorHasTag(FName("Dead"))))
+ {
+ PotentialHackTarget = nullptr;
+ DisplayNeedADeadEnemy();
+ return;
+ }
+
+ if (HackedEnemies.Contains(OutHit.GetActor()->GetUniqueID()))
+ {
+ PotentialHackTarget = nullptr;
+ DisplayAlreadyHacked();
+ return;
+ }
+
+ //DrawDebugLine(GetWorld(), LT_Start, OutHit.ImpactPoint, FColor::Green, false, 0.2, 0, 1);
+ PotentialHackTarget = OutHit.GetActor();
+ DisplayFoundPotentialTarget();
+}
+
+
+void AOverloadModule::Activate()
+{
+ if (GadgetCantBeUsed() || !IsValid(PotentialHackTarget)) return;
+
+ Super::Activate();
+ HackedEnemies.Add(PotentialHackTarget->GetUniqueID());
+ ExplodeClosestAliveEnemy();
+ PlayHackingAnim(GadgetMaxUptime);
+}
+
+void AOverloadModule::FinishedUsing()
+{
+ IsValid(ClosestEnemy) ? DisplayHackingSuccess() : DisplayHackingFailure();
+ SpawnExplosiveOnActor(ClosestEnemy);
+ Super::FinishedUsing();
+ PlayRechargingAnim(CooldownTime);
+}
+
+void AOverloadModule::ExplodeClosestAliveEnemy()
+{
+ FTransform EmptyTransform;
+ USphereComponent* SphereCollision = Cast(AddComponentByClass(USphereComponent::StaticClass(), false, EmptyTransform, false));
+
+ SphereCollision->SetSphereRadius(AreaOfEffectInMeters * 100, true);
+
+ TArray OverlappingActors;
+ TArray EnemiesInRadius;
+
+ // Find all living enemies within the radius
+ SphereCollision->GetOverlappingActors(OverlappingActors, ACharacter::StaticClass());
+ for (AActor* OverlappingActor : OverlappingActors)
+ {
+ if (OverlappingActor->ActorHasTag(FName("Enemy")) && !OverlappingActor->ActorHasTag(FName("Dead"))) EnemiesInRadius.Add(OverlappingActor);
+ }
+
+ if (EnemiesInRadius.IsEmpty())
+ {
+ ClosestEnemy = nullptr;
+ SphereCollision->DestroyComponent();
+ return;
+ }
+
+ // Find the closest Enemy in radius
+ ClosestEnemy = EnemiesInRadius[0];
+ float Dist = FVector::Distance(PlayerChar->GetActorLocation(), ClosestEnemy->GetActorLocation());
+ if (EnemiesInRadius.Num() < 2)
+ {
+ SphereCollision->DestroyComponent();
+ return;
+ }
+
+ for (int i = 1; i < EnemiesInRadius.Num(); i++)
+ {
+ float ConsideredDist = FVector::Distance(PlayerChar->GetActorLocation(), EnemiesInRadius[i]->GetActorLocation());
+ if (ConsideredDist <= Dist)
+ {
+ ClosestEnemy = EnemiesInRadius[i];
+ Dist = ConsideredDist;
+ }
+ }
+
+ SphereCollision->DestroyComponent();
+
+}
+
+void AOverloadModule::SpawnExplosiveOnActor(AActor* ActortoExplode)
+{
+ if (!IsValid(ActortoExplode)) return;
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ GetWorld()->SpawnActor(Explosive, ActortoExplode->GetActorLocation(), ActortoExplode->GetActorRotation(), SpawnParams);
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/OverloadModule/OverloadModule.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/OverloadModule/OverloadModule.h
new file mode 100644
index 00000000..59ffdd3a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Combat/OverloadModule/OverloadModule.h
@@ -0,0 +1,75 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Camera/CameraComponent.h"
+#include "EndlessVendetta/GadgetSystem/CombatGadget.h"
+#include "EndlessVendetta/GadgetSystem/GadgetClasses/Combat/Explosive.h"
+#include "OverloadModule.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AOverloadModule : public ACombatGadget
+{
+ GENERATED_BODY()
+
+ ACharacter* PlayerChar;
+
+ UCameraComponent* PlayerCam;
+
+ AActor* PotentialHackTarget;
+
+ AActor* ClosestEnemy;
+
+ // An Array of previously hacked enemies, stops player from hacking the same Dead Enemy
+ TArray HackedEnemies;
+
+ virtual void BeginPlay() override;
+
+ virtual void Tick(float DeltaSeconds) override;
+
+ virtual void Activate() override;
+
+ virtual void FinishedUsing() override;
+
+ void CheckForPotentialHackTarget();
+
+ void ExplodeClosestAliveEnemy();
+
+ void SpawnExplosiveOnActor(AActor* ActortoExplode);
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Overload Module")
+ float AreaOfEffectInMeters = 20;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Overload Module")
+ float DeadBodyCheckDistance = 250;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Overload Module")
+ TSubclassOf Explosive;
+
+// --------------- Display Functions ---------------
+ UFUNCTION(BlueprintImplementableEvent, Category = "Overload Module")
+ void DisplayAlreadyHacked();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Overload Module")
+ void DisplayNeedADeadEnemy();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Overload Module")
+ void DisplayFoundPotentialTarget();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Overload Module")
+ void PlayHackingAnim(float Loadingtime);
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Overload Module")
+ void DisplayHackingFailure();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Overload Module")
+ void DisplayHackingSuccess();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Overload Module")
+ void PlayRechargingAnim(float RechargingTime);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleCombatClass.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleCombatClass.cpp
new file mode 100644
index 00000000..4e759791
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleCombatClass.cpp
@@ -0,0 +1,34 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "ExampleCombatClass.h"
+
+void AExampleCombatClass::BeginPlay()
+{
+ Super::BeginPlay();
+
+ SetActorTickEnabled(false);
+}
+
+
+void AExampleCombatClass::Tick(float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ UE_LOG(LogTemp, Warning, TEXT("Example Combat is being used..."));
+}
+
+void AExampleCombatClass::Activate()
+{
+ if (GadgetCantBeUsed()) return;
+
+ Super::Activate();
+ SetActorTickEnabled(true);
+}
+
+void AExampleCombatClass::FinishedUsing()
+{
+ SetActorTickEnabled(false);
+
+ Super::FinishedUsing();
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleCombatClass.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleCombatClass.h
new file mode 100644
index 00000000..d53cfefb
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleCombatClass.h
@@ -0,0 +1,24 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EndlessVendetta/GadgetSystem/CombatGadget.h"
+#include "ExampleCombatClass.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AExampleCombatClass : public ACombatGadget
+{
+ GENERATED_BODY()
+
+ virtual void BeginPlay() override;
+
+ virtual void Tick(float DeltaSeconds) override;
+
+ virtual void Activate() override;
+
+ virtual void FinishedUsing() override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleReconClass.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleReconClass.cpp
new file mode 100644
index 00000000..cfa574cf
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleReconClass.cpp
@@ -0,0 +1,35 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "ExampleReconClass.h"
+
+void AExampleReconClass::BeginPlay()
+{
+ Super::BeginPlay();
+ SetActorTickEnabled(false);
+}
+
+
+void AExampleReconClass::Tick(float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ UE_LOG(LogTemp, Warning, TEXT("Example Recon is being used..."));
+}
+
+void AExampleReconClass::Activate()
+{
+ if (GadgetCantBeUsed()) return;
+
+ Super::Activate();
+ SetActorTickEnabled(true);
+}
+
+void AExampleReconClass::FinishedUsing()
+{
+ SetActorTickEnabled(false);
+
+ Super::FinishedUsing();
+}
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleReconClass.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleReconClass.h
new file mode 100644
index 00000000..7abc52af
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/ExampleReconClass.h
@@ -0,0 +1,25 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EndlessVendetta/GadgetSystem/ReconGadget.h"
+#include "ExampleReconClass.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AExampleReconClass : public AReconGadget
+{
+ GENERATED_BODY()
+
+ virtual void BeginPlay() override;
+
+ virtual void Tick(float DeltaSeconds) override;
+
+ virtual void Activate() override;
+
+ virtual void FinishedUsing() override;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/PhoneRinging.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/PhoneRinging.cpp
new file mode 100644
index 00000000..c3117259
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/PhoneRinging.cpp
@@ -0,0 +1,27 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "PhoneRinging.h"
+
+// Sets default values
+APhoneRinging::APhoneRinging()
+{
+ // 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 APhoneRinging::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+// Called every frame
+void APhoneRinging::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/PhoneRinging.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/PhoneRinging.h
new file mode 100644
index 00000000..dd9f8cdc
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/PhoneRinging.h
@@ -0,0 +1,26 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Actor.h"
+#include "PhoneRinging.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API APhoneRinging : public AActor
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ APhoneRinging();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/RingModule.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/RingModule.cpp
new file mode 100644
index 00000000..d282dd8a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/RingModule.cpp
@@ -0,0 +1,102 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "RingModule.h"
+
+#include "Components/SphereComponent.h"
+#include "GameFramework/Character.h"
+
+void ARingModule::BeginPlay()
+{
+ Super::BeginPlay();
+
+ this->SetActorTickInterval(0.2);
+ PlayerChar = GetWorld()->GetFirstPlayerController()->GetCharacter();
+ PlayerCam = Cast(PlayerChar->GetComponentByClass(UCameraComponent::StaticClass()));
+}
+
+void ARingModule::Tick(float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ if (GadgetCantBeUsed()) return;
+ CheckForPotentialHackTarget();
+}
+
+void ARingModule::CheckForPotentialHackTarget()
+{
+ FHitResult OutHit;
+ FVector LT_Start = PlayerCam->GetComponentLocation();
+ FVector LT_End = PlayerCam->GetComponentLocation() + (PlayerCam->GetForwardVector() * DeadBodyCheckDistance);
+
+ //DrawDebugLine(GetWorld(), LT_Start, LT_End, FColor::Red, false, 0.2, 0, 1);
+
+ FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam;
+ QueryParams.AddIgnoredActor(PlayerChar);
+ if (!GetWorld()->LineTraceSingleByChannel(OutHit, LT_Start, LT_End, ECC_Camera, QueryParams) || !(OutHit.GetActor()->ActorHasTag(FName("Enemy")) && OutHit.GetActor()->ActorHasTag(FName("Dead"))))
+ {
+ PotentialHackTarget = nullptr;
+ DisplayNeedADeadEnemy();
+ return;
+ }
+
+ if (HackedEnemies.Contains(OutHit.GetActor()->GetUniqueID()))
+ {
+ PotentialHackTarget = nullptr;
+ DisplayAlreadyHacked();
+ return;
+ }
+
+ //DrawDebugLine(GetWorld(), LT_Start, OutHit.ImpactPoint, FColor::Green, false, 0.2, 0, 1);
+ PotentialHackTarget = OutHit.GetActor();
+ DisplayFoundPotentialTarget();
+}
+
+
+void ARingModule::Activate()
+{
+ if (GadgetCantBeUsed() || !IsValid(PotentialHackTarget)) return;
+
+ Super::Activate();
+ HackedEnemies.Add(PotentialHackTarget->GetUniqueID());
+ PlayHackingAnim(GadgetMaxUptime);
+}
+
+void ARingModule::FinishedUsing()
+{
+ SpawnRingingPhoneForAllNearbyEnemies() ? DisplayHackingSuccess() : DisplayHackingFailure();
+ Super::FinishedUsing();
+ PlayRechargingAnim(CooldownTime);
+}
+
+bool ARingModule::SpawnRingingPhoneForAllNearbyEnemies()
+{
+ FTransform EmptyTransform;
+ USphereComponent* SphereCollision = Cast(AddComponentByClass(USphereComponent::StaticClass(), false, EmptyTransform, false));
+ SphereCollision->SetSphereRadius(AreaOfEffectInMeters * 100, true);
+
+ TArray OverlappingActors;
+ TArray EnemiesInRadius;
+
+ SphereCollision->GetOverlappingActors(OverlappingActors, ACharacter::StaticClass());
+ for (AActor* OverlappingActor : OverlappingActors)
+ {
+ if (OverlappingActor->ActorHasTag(FName("Enemy")) && !OverlappingActor->ActorHasTag(FName("Dead"))) EnemiesInRadius.Add(OverlappingActor);
+ }
+
+ if (EnemiesInRadius.IsEmpty())
+ {
+ SphereCollision->DestroyComponent();
+ return false;
+ }
+
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
+ for (AActor* Enemy : EnemiesInRadius)
+ {
+ AActor* SpawnedPhone = GetWorld()->SpawnActor(PhoneRingingClass, Enemy->GetActorLocation(), Enemy->GetActorRotation(), SpawnParams);
+ SpawnedPhone->AttachToComponent(Enemy->GetRootComponent(), AttachmentRules);
+ }
+ return true;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/RingModule.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/RingModule.h
new file mode 100644
index 00000000..68dfb294
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/RingModule/RingModule.h
@@ -0,0 +1,72 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "PhoneRinging.h"
+#include "EndlessVendetta/GadgetSystem/ReconGadget.h"
+#include "Camera/CameraComponent.h"
+#include "RingModule.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API ARingModule : public AReconGadget
+{
+ GENERATED_BODY()
+
+ ACharacter* PlayerChar;
+
+ UCameraComponent* PlayerCam;
+
+ AActor* PotentialHackTarget;
+
+ // An Array of previously hacked enemies, stops player from hacking the same Dead Enemy
+ TArray HackedEnemies;
+
+ virtual void BeginPlay() override;
+
+ virtual void Tick(float DeltaSeconds) override;
+
+ virtual void Activate() override;
+
+ virtual void FinishedUsing() override;
+
+ void CheckForPotentialHackTarget();
+
+ // Returns false if there are no nearby enemies
+ bool SpawnRingingPhoneForAllNearbyEnemies();
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Ring Module")
+ float AreaOfEffectInMeters = 20;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Ring Module")
+ float DeadBodyCheckDistance = 250;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Ring Module")
+ TSubclassOf PhoneRingingClass;
+
+ // --------------- Display Functions ---------------
+ UFUNCTION(BlueprintImplementableEvent, Category = "Ring Module")
+ void DisplayAlreadyHacked();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Ring Module")
+ void DisplayNeedADeadEnemy();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Ring Module")
+ void DisplayFoundPotentialTarget();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Ring Module")
+ void PlayHackingAnim(float Loadingtime);
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Ring Module")
+ void DisplayHackingFailure();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Ring Module")
+ void DisplayHackingSuccess();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Ring Module")
+ void PlayRechargingAnim(float RechargingTime);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp
new file mode 100644
index 00000000..1dbe1dd7
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp
@@ -0,0 +1,87 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "VisionLink.h"
+
+#include "CollisionDebugDrawingPublic.h"
+#include "Kismet/KismetMathLibrary.h"
+#include "Camera/CameraComponent.h"
+#include "VisionLinkEnemyLOSTest.h"
+#include "GameFramework/Character.h"
+
+void AVisionLink::BeginPlay()
+{
+ Super::BeginPlay();
+ SetActorTickEnabled(false);
+ CooldownLength = CooldownTime;
+ InUseDuration = GadgetMaxUptime;
+
+ if (NumberOfPingPulses <= 0) NumberOfPingPulses = 1;
+ TimeInbetweenPingPulses = GadgetMaxUptime / (float)NumberOfPingPulses;
+}
+
+void AVisionLink::Activate()
+{
+ if (GadgetCantBeUsed()) return;
+
+ Super::Activate();
+
+ NumOfPingPulsesLeftInThisCycle = NumberOfPingPulses;
+ VisionLinkActivated();
+ SendOutPingPulse();
+}
+
+void AVisionLink::FinishedUsing()
+{
+ VisionLinkRecharging();
+
+ Super::FinishedUsing();
+}
+
+void AVisionLink::SendOutPingPulse()
+{
+ NumOfPingPulsesLeftInThisCycle--;
+ UpdatePulsesRemaining(NumOfPingPulsesLeftInThisCycle);
+ if (NumOfPingPulsesLeftInThisCycle < 0) return;
+
+ GetWorld()->GetTimerManager().SetTimer(PulseHandle, this, &AVisionLink::SendOutPingPulse, TimeInbetweenPingPulses, false);
+ PlayPingPulseAnim(TimeInbetweenPingPulses);
+
+ UCameraComponent* PlayerCamComp = Cast(GetWorld()->GetFirstPlayerController()->GetCharacter()->GetComponentByClass(UCameraComponent::StaticClass()));
+ TArray ActorsToIgnore;
+ ActorsToIgnore.Add(GetWorld()->GetFirstPlayerController()->GetCharacter());
+ TestLOS(PlayerCamComp->GetComponentTransform(), ActorsToIgnore);
+}
+
+void AVisionLink::TestLOS(FTransform StartingPos, TArray &ActorsToIgnore)
+{
+ float H_DegreeIncrement = (float)H_FOV / (float)LT_Horizontal_Density;
+ float V_DegreeIncrement = (float)V_FOV / (float)LT_Vertical_Density;
+ float H_StartingRot = StartingPos.GetRotation().Rotator().Yaw - ((float)H_FOV / 2.0);
+ float V_StartingRot = StartingPos.GetRotation().Rotator().Pitch - ((float)V_FOV / 2.0);
+
+ for (int H_Increment = 1; H_Increment <= LT_Horizontal_Density; H_Increment++)
+ {
+ for (int V_Increment = 1; V_Increment <= LT_Vertical_Density; V_Increment++)
+ {
+ FHitResult outHit;
+ FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam;
+ QueryParams.bTraceComplex = true;
+ QueryParams.AddIgnoredActors(ActorsToIgnore);
+
+ FRotator LT_Rot = FRotator(V_StartingRot + (V_Increment * V_DegreeIncrement), H_StartingRot + (H_Increment * H_DegreeIncrement), StartingPos.GetRotation().Rotator().Roll);
+ FVector LT_EndPoint = StartingPos.GetLocation() + UKismetMathLibrary::GetForwardVector(LT_Rot) * LT_Distance;
+
+ if (!GetWorld()->LineTraceSingleByChannel(outHit, StartingPos.GetLocation(), LT_EndPoint, ECC_Camera, QueryParams)) continue;
+
+ AActor* HitActor = outHit.GetActor();
+ if (!HitActor->ActorHasTag(FName("Enemy"))) continue;
+
+ //DrawDebugLine(GetWorld(), outHit.TraceStart, outHit.ImpactPoint, FColor::Blue, false, 3, 0, 3);
+ ActorsToIgnore.Add(HitActor);
+ SpawnPing(HitActor->GetTransform());
+ TestLOS(HitActor->GetTransform(), ActorsToIgnore);
+ }
+ }
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h
new file mode 100644
index 00000000..2a3b7789
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h
@@ -0,0 +1,75 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "VisionLinkEnemyLOSTest.h"
+#include "EndlessVendetta/GadgetSystem/ReconGadget.h"
+#include "VisionLink.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AVisionLink : public AReconGadget
+{
+ GENERATED_BODY()
+
+ int NumOfPingPulsesLeftInThisCycle;
+
+ float TimeInbetweenPingPulses;
+
+ FTimerHandle PulseHandle;
+
+ void SendOutPingPulse();
+
+ void TestLOS(FTransform StartingPos, TArray &ActorsToIgnore);
+
+ virtual void BeginPlay() override;
+
+ virtual void Activate() override;
+
+ virtual void FinishedUsing() override;
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Vision Link")
+ int NumberOfPingPulses = 1;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Vision Link")
+ int LT_Horizontal_Density = 80;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Vision Link")
+ int LT_Vertical_Density = 25;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Vision Link")
+ float LT_Distance = 4000;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Vision Link")
+ float H_FOV = 75;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Vision Link")
+ float V_FOV = 25;
+
+ UPROPERTY(BlueprintReadOnly, Category = "Vision Link")
+ float CooldownLength;
+
+ UPROPERTY(BlueprintReadOnly, Category = "Vision Link")
+ float InUseDuration;
+
+ // Updates UI with time to next Pulse
+ UFUNCTION(BlueprintImplementableEvent, Category = "Vision Link")
+ void PlayPingPulseAnim(float PulseDuration);
+
+ // Updates UI with pulses remaining
+ UFUNCTION(BlueprintImplementableEvent, Category = "Vision Link")
+ void UpdatePulsesRemaining(int PulsesRemaining);
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Vision Link")
+ void VisionLinkActivated();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Vision Link")
+ void VisionLinkRecharging();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "Vision Link")
+ void SpawnPing(FTransform PingSpawnTransform);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp
new file mode 100644
index 00000000..eb11bf58
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp
@@ -0,0 +1,74 @@
+// 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/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h
new file mode 100644
index 00000000..add35b97
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h
@@ -0,0 +1,30 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Actor.h"
+#include "VisionLinkEnemyLOSTest.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AVisionLinkEnemyLOSTest : 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();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ void TestLOS(TArray EnemiesInLink, AActor* LOS_Actor);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetManager.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetManager.cpp
new file mode 100644
index 00000000..94a5dad4
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetManager.cpp
@@ -0,0 +1,59 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "GadgetManager.h"
+
+// Sets default values
+AGadgetManager::AGadgetManager()
+{
+ // 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 AGadgetManager::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+// Called every frame
+void AGadgetManager::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
+void AGadgetManager::SpawnGadgetsOnBeginPlay(USceneComponent* PlayersCameraComponent)
+{
+ if (IsValid(ReconClass)) SpawnGadget(ReconClass, PlayersCameraComponent);
+ if (IsValid(CombatClass)) SpawnGadget(CombatClass, PlayersCameraComponent);
+}
+
+void AGadgetManager::SpawnGadget(TSubclassOf GadgetClass, USceneComponent* PlayersCameraComponent)
+{
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ const FAttachmentTransformRules AttachmentRules(EAttachmentRule::SnapToTarget, true);
+
+ AActor* SpawnedActor = GetWorld()->SpawnActor(GadgetClass, GetActorLocation(), GetActorRotation(), SpawnParams);
+
+ if (SpawnedActor->IsA(AReconGadget::StaticClass()))
+ {
+ if (IsValid(ReconGadget)) ReconGadget->Destroy();
+ ReconGadget = Cast(SpawnedActor);
+ }
+ else if (SpawnedActor->IsA(ACombatGadget::StaticClass()))
+ {
+ if (IsValid(CombatGadget)) CombatGadget->Destroy();
+ CombatGadget = Cast(SpawnedActor);
+ }
+ else UE_LOG(LogTemp, Fatal, TEXT("Passed sub class of gadget base is neither a combat or recon gadget, check the gadget class you're passing through or contact Rafal"));
+
+ AGadgetBase* BaseGadget = Cast(SpawnedActor);
+ BaseGadget->AttachToComponent(PlayersCameraComponent, AttachmentRules);
+ BaseGadget->SetActorRelativeLocation(BaseGadget->GetUnequippedOffset());
+ BaseGadget->SetActorRelativeRotation(BaseGadget->GetGadgetSpawnRotation());
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetManager.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetManager.h
new file mode 100644
index 00000000..d533215f
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetManager.h
@@ -0,0 +1,101 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "CombatGadget.h"
+#include "ReconGadget.h"
+#include "GameFramework/Actor.h"
+#include "GadgetManager.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AGadgetManager : public AActor
+{
+ GENERATED_BODY()
+
+ AReconGadget* ReconGadget;
+ ACombatGadget* CombatGadget;
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ TSubclassOf ReconClass;
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget")
+ TSubclassOf CombatClass;
+
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ void SpawnGadgetsOnBeginPlay(USceneComponent* PlayersCameraComponent);
+
+ void SpawnGadget(TSubclassOf GadgetClass, USceneComponent* PlayersCameraComponent);
+
+ // Sets default values for this actor's properties
+ AGadgetManager();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ bool IsValidReconGadget()
+ {
+ return IsValid(ReconGadget);
+ }
+
+ bool IsValidCombatGadget()
+ {
+ return IsValid(CombatGadget);
+ }
+
+ void EquipRecon()
+ {
+ ReconGadget->Equip();
+ }
+
+ void EquipCombat()
+ {
+ CombatGadget->Equip();
+ }
+
+ bool IsReconEquipped()
+ {
+ return ReconGadget->Equipped;
+ }
+
+ bool IsCombatEquipped()
+ {
+ return CombatGadget->Equipped;
+ }
+
+ bool TryToUnequipRecon()
+ {
+ if (ReconGadget->Equipped) return ReconGadget->Unequip();
+ return false;
+ }
+
+ bool TryToUnequipCombat()
+ {
+ if (CombatGadget->Equipped) return CombatGadget->Unequip();
+ return false;
+ }
+
+ bool ReconInUse()
+ {
+ return IsValidReconGadget() && ReconGadget->IsInUse();
+ }
+
+ bool CombatInUse()
+ {
+ return IsValidCombatGadget() && CombatGadget->IsInUse();
+ }
+
+ bool ReconCantBeSwitchedOut()
+ {
+ return IsValidReconGadget() && (ReconGadget->IsInUse() || (ReconGadget->Equipped && !TryToUnequipRecon()));
+ }
+
+ bool CombatCantBeSwitchedOut()
+ {
+ return IsValidCombatGadget() && (CombatGadget->IsInUse() || (CombatGadget->Equipped && !TryToUnequipCombat()));
+ }
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/BaseGadgetTutorial.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/BaseGadgetTutorial.cpp
new file mode 100644
index 00000000..c19db9e1
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/BaseGadgetTutorial.cpp
@@ -0,0 +1,45 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BaseGadgetTutorial.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+
+// Sets default values
+ABaseGadgetTutorial::ABaseGadgetTutorial()
+{
+ // 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;
+ bAllowTickBeforeBeginPlay = false;
+
+}
+
+// Called when the game starts or when spawned
+void ABaseGadgetTutorial::BeginPlay()
+{
+ Super::BeginPlay();
+ SetupTutorial();
+ SetActorTickInterval(0.2);
+}
+
+void ABaseGadgetTutorial::SpawnNewWaypoint(FVector Loc, FString Desc)
+{
+ if (IsValid(WaypointActor)) WaypointActor->Destroy();
+
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ WaypointActor = Cast(GetWorld()->SpawnActor(WaypointClass, Loc, GetActorRotation(), SpawnParams));
+ WaypointActor->SetupWaypoint(WaypointIcon, Desc);
+}
+
+void ABaseGadgetTutorial::FinishedTutorial()
+{
+ if (IsValid(WaypointActor)) WaypointActor->Destroy();
+ CompletedGadgetTutorial.Broadcast();
+}
+
+void ABaseGadgetTutorial::DestroyTutorial()
+{
+ if (IsValid(WaypointActor)) WaypointActor->Destroy();
+ DespawnEnemies();
+ Destroy();
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/BaseGadgetTutorial.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/BaseGadgetTutorial.h
new file mode 100644
index 00000000..ce32e576
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/BaseGadgetTutorial.h
@@ -0,0 +1,52 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "EndlessVendetta/BountySystem/WaypointActor.h"
+#include "GameFramework/Actor.h"
+#include "BaseGadgetTutorial.generated.h"
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FCompletedGadgetTutorial);
+
+UCLASS()
+class ENDLESSVENDETTA_API ABaseGadgetTutorial : public AActor
+{
+ GENERATED_BODY()
+
+protected:
+ AWaypointActor* WaypointActor;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget Tutorial")
+ TSubclassOf WaypointClass;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget Tutorial")
+ UTexture2D* WaypointIcon;
+
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+ void SpawnNewWaypoint(FVector Loc, FString Desc);
+
+ // Stops tutorial clues from appearing and broadcasts completion
+ void FinishedTutorial();
+
+ // Spawns Enemies, sets waypoint locations, etc...
+ UFUNCTION(BlueprintImplementableEvent)
+ void SetupTutorial();
+
+ // Destroy's enemies and other separate spawned in elements by this tutorial class
+ UFUNCTION(BlueprintImplementableEvent)
+ void DespawnEnemies();
+
+public:
+ // Sets default values for this actor's properties
+ ABaseGadgetTutorial();
+
+ UPROPERTY(BlueprintAssignable)
+ FCompletedGadgetTutorial CompletedGadgetTutorial;
+
+ void DestroyTutorial();
+
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/GadgetTutorialStation.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/GadgetTutorialStation.cpp
new file mode 100644
index 00000000..5da28ffc
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/GadgetTutorialStation.cpp
@@ -0,0 +1,118 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "GadgetTutorialStation.h"
+
+#include "Blueprint/UserWidget.h"
+
+// Sets default values
+AGadgetTutorialStation::AGadgetTutorialStation()
+{
+ // 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 AGadgetTutorialStation::BeginPlay()
+{
+ Super::BeginPlay();
+
+ EndlessVendettaCharacter = Cast(GetWorld()->GetFirstPlayerController()->GetPawn());
+}
+
+// Called every frame
+void AGadgetTutorialStation::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+}
+
+void AGadgetTutorialStation::Interact()
+{
+ if (GadgetsArray.IsEmpty()) return;
+
+ // Setup Widget so it can be seen and interacted with
+ FInputModeUIOnly InputMode;
+ APlayerController* PlayerController = GetWorld()->GetFirstPlayerController();
+ PickGadgetWidget = CreateWidget(GetWorld(), PickGadgetWidgetClass);
+ PickGadgetWidget->AddToViewport(3);
+ PlayerController->SetInputMode(InputMode);
+ PlayerController->bShowMouseCursor = true;
+ PlayerController->bEnableClickEvents = true;
+ PlayerController->bEnableMouseOverEvents = true;
+
+ // Set up gadget menu's behaviours
+ GadgetMenu = Cast(PickGadgetWidget);
+ GadgetMenu->CloseMenuDelegate.AddDynamic(this, &AGadgetTutorialStation::CloseWidget);
+ GadgetMenu->NextGadgetDelegate.AddDynamic(this, &AGadgetTutorialStation::NextGadget);
+ GadgetMenu->PreviousGadgetDelegate.AddDynamic(this, &AGadgetTutorialStation::PreviousGadget);
+ GadgetMenu->SelectGadgetDelegate.AddDynamic(this, &AGadgetTutorialStation::SelectGadget);
+
+ // Runs Update Display Gadget at the end which overrides the default stand in gadget info
+ NextGadget();
+}
+
+void AGadgetTutorialStation::InteractPrompt()
+{
+
+}
+
+void AGadgetTutorialStation::NextGadget()
+{
+ FGadgetInfo GadgetInfo;
+ // Either wrap around to the beginning or increment gadget index
+ GadgetIndex = GadgetIndex >= GadgetsArray.Num() - 1 ? 0 : GadgetIndex + 1;
+
+ GadgetInfo.GadgetIcon = GadgetsArray[GadgetIndex]->GetDefaultObject()->GetGadgetIcon();
+ GadgetInfo.GadgetDesc = GadgetsArray[GadgetIndex]->GetDefaultObject()->GetGadgetDesc();
+ GadgetInfo.GadgetName = GadgetsArray[GadgetIndex]->GetDefaultObject()->GetGadgetName();
+
+ GadgetMenu->UpdateDisplayedGadget(GadgetInfo);
+}
+
+void AGadgetTutorialStation::PreviousGadget()
+{
+ FGadgetInfo GadgetInfo;
+ // Either wrap around to the end or decrement gadget index
+ GadgetIndex = GadgetIndex <= 0 ? GadgetsArray.Num() - 1 : GadgetIndex - 1;
+
+ GadgetInfo.GadgetIcon = GadgetsArray[GadgetIndex]->GetDefaultObject()->GetGadgetIcon();
+ GadgetInfo.GadgetDesc = GadgetsArray[GadgetIndex]->GetDefaultObject()->GetGadgetDesc();
+ GadgetInfo.GadgetName = GadgetsArray[GadgetIndex]->GetDefaultObject()->GetGadgetName();
+
+ GadgetMenu->UpdateDisplayedGadget(GadgetInfo);
+}
+
+void AGadgetTutorialStation::SelectGadget()
+{
+ // Eventually expand to give player feedback of being denied if changing gadgets fails
+ if (!EndlessVendettaCharacter->UpdateGadgetType(GadgetsArray[GadgetIndex])) return;
+
+ if (IsValid(CurrentGadgetTutorial)) CurrentGadgetTutorial->DestroyTutorial();
+
+ FActorSpawnParameters SpawnParams;
+ SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
+ TSubclassOf GadgetTutorialToSpawnInClass = GadgetsArray[GadgetIndex]->GetDefaultObject()->GadgetTutorialClass;
+ if (!IsValid(GadgetTutorialToSpawnInClass)) return;
+ AActor* GadgetTutorialActor = GetWorld()->SpawnActor(GadgetTutorialToSpawnInClass, GadgetTutorialSpawnTransform.GetLocation(), GadgetTutorialSpawnTransform.GetRotation().Rotator(), SpawnParams);
+ CurrentGadgetTutorial = Cast(GadgetTutorialActor);
+}
+
+void AGadgetTutorialStation::CloseWidget()
+{
+ // close the widget
+ if (IsValid(PickGadgetWidget)) PickGadgetWidget->RemoveFromParent();
+
+ CollectGarbage(RF_PendingKill);
+
+ FInputModeGameOnly InputMode;
+ APlayerController* PlayerController = GetWorld()->GetFirstPlayerController();
+ PlayerController->SetInputMode(InputMode);
+ PlayerController->bShowMouseCursor = false;
+ PlayerController->bEnableClickEvents = false;
+ PlayerController->bEnableMouseOverEvents = false;
+}
+
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/GadgetTutorialStation.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/GadgetTutorialStation.h
new file mode 100644
index 00000000..f59f4fc7
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/GadgetTutorialStation.h
@@ -0,0 +1,65 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseGadgetTutorial.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "EndlessVendetta/GadgetSystem/GadgetBase.h"
+#include "EndlessVendetta/InteractionInterface.h"
+#include "EndlessVendetta/UserWidgets/GadgetMenu.h"
+#include "GameFramework/Actor.h"
+#include "GadgetTutorialStation.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AGadgetTutorialStation : public AActor, public IInteractionInterface
+{
+ GENERATED_BODY()
+
+ AEndlessVendettaCharacter* EndlessVendettaCharacter;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadgets")
+ TArray> GadgetsArray;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadgets")
+ TSubclassOf PickGadgetWidgetClass;
+
+ UPROPERTY(EditDefaultsOnly, Category = "Gadgets")
+ FTransform GadgetTutorialSpawnTransform;
+
+ int GadgetIndex = 0;
+
+ UUserWidget* PickGadgetWidget;
+
+ UGadgetMenu* GadgetMenu;
+
+ ABaseGadgetTutorial* CurrentGadgetTutorial;
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+ void Interact() override;\
+
+ void InteractPrompt() override;
+
+ UFUNCTION(BlueprintCallable)
+ void NextGadget();
+
+ UFUNCTION(BlueprintCallable)
+ void PreviousGadget();
+
+ UFUNCTION(BlueprintCallable)
+ void SelectGadget();
+
+ UFUNCTION(BlueprintCallable)
+ void CloseWidget();
+
+public:
+ // Sets default values for this actor's properties
+ AGadgetTutorialStation();
+
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/OverloadModuleTutorial.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/OverloadModuleTutorial.cpp
new file mode 100644
index 00000000..d7a36834
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/OverloadModuleTutorial.cpp
@@ -0,0 +1,25 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "OverloadModuleTutorial.h"
+
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+
+void AOverloadModuleTutorial::BeginPlay()
+{
+ Super::BeginPlay();
+ GadgetManager = Cast(GetWorld()->GetFirstPlayerController()->GetPawn())->GadgetManager;
+ SpawnNewWaypoint(HackTargetWaypointLoc, HackTargetWaypointDesc);
+}
+
+void AOverloadModuleTutorial::Tick(float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ if (!GadgetManager->CombatInUse()) return;
+
+ SpawnNewWaypoint(ResultWaypointLoc, ResultWaypointDesc);
+ SetActorTickEnabled(false);
+ FTimerHandle TimerHandle;
+ GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &AOverloadModuleTutorial::FinishedTutorial, 7.5);
+}
\ No newline at end of file
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/OverloadModuleTutorial.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/OverloadModuleTutorial.h
new file mode 100644
index 00000000..393b134f
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/OverloadModuleTutorial.h
@@ -0,0 +1,35 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseGadgetTutorial.h"
+#include "EndlessVendetta/GadgetSystem/GadgetManager.h"
+#include "OverloadModuleTutorial.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AOverloadModuleTutorial : public ABaseGadgetTutorial
+{
+ GENERATED_BODY()
+
+ AGadgetManager* GadgetManager;
+
+ void BeginPlay() override;
+
+ void Tick(float DeltaSeconds) override;
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget Tutorial")
+ FString HackTargetWaypointDesc;
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget Tutorial")
+ FString ResultWaypointDesc;
+
+ UPROPERTY(BlueprintReadWrite, Category = "Gadget Tutorial")
+ FVector HackTargetWaypointLoc;
+ UPROPERTY(BlueprintReadWrite, Category = "Gadget Tutorial")
+ FVector ResultWaypointLoc;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/RingModuleTutorial.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/RingModuleTutorial.cpp
new file mode 100644
index 00000000..af94b353
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/RingModuleTutorial.cpp
@@ -0,0 +1,27 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "RingModuleTutorial.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+
+
+void ARingModuleTutorial::BeginPlay()
+{
+ Super::BeginPlay();
+ GadgetManager = Cast(GetWorld()->GetFirstPlayerController()->GetPawn())->GadgetManager;
+ SpawnNewWaypoint(HackTargetWaypointLoc, HackTargetWaypointDesc);
+}
+
+void ARingModuleTutorial::Tick(float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ if (!GadgetManager->ReconInUse()) return;
+
+ SpawnNewWaypoint(ResultWaypointLoc, ResultWaypointDesc);
+ SetActorTickEnabled(false);
+ FTimerHandle TimerHandle;
+ GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &ARingModuleTutorial::FinishedTutorial, 7.5);
+}
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/RingModuleTutorial.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/RingModuleTutorial.h
new file mode 100644
index 00000000..e4726f63
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/RingModuleTutorial.h
@@ -0,0 +1,35 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseGadgetTutorial.h"
+#include "EndlessVendetta/GadgetSystem/GadgetManager.h"
+#include "RingModuleTutorial.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API ARingModuleTutorial : public ABaseGadgetTutorial
+{
+ GENERATED_BODY()
+
+ AGadgetManager* GadgetManager;
+
+ void BeginPlay() override;
+
+ void Tick(float DeltaSeconds) override;
+
+protected:
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget Tutorial")
+ FString HackTargetWaypointDesc;
+ UPROPERTY(EditDefaultsOnly, Category = "Gadget Tutorial")
+ FString ResultWaypointDesc;
+
+ UPROPERTY(BlueprintReadWrite, Category = "Gadget Tutorial")
+ FVector HackTargetWaypointLoc;
+ UPROPERTY(BlueprintReadWrite, Category = "Gadget Tutorial")
+ FVector ResultWaypointLoc;
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/VisionLinkTutorial.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/VisionLinkTutorial.cpp
new file mode 100644
index 00000000..5791ef3e
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/VisionLinkTutorial.cpp
@@ -0,0 +1,53 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "VisionLinkTutorial.h"
+
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "Kismet/KismetMathLibrary.h"
+
+void AVisionLinkTutorial::BeginPlay()
+{
+ Super::BeginPlay();
+ GadgetManager = Cast(GetWorld()->GetFirstPlayerController()->GetPawn())->GadgetManager;
+ SpawnNewWaypoint(GoToAreaWaypointLoc, GoToAreaWaypointDesc);
+}
+
+void AVisionLinkTutorial::Tick(float DeltaSeconds)
+{
+ Super::Tick(DeltaSeconds);
+
+ if (!PlayerInTutorialZone)
+ {
+ if (PlayerWasInTutZone) SpawnNewWaypoint(GoToAreaWaypointLoc, GoToAreaWaypointDesc);
+ PlayerWasInTutZone = false;
+ return;
+ }
+
+ if (!PlayerWasInTutZone) SpawnNewWaypoint(LookAtTargetWaypointLoc, LookAtTargetWaypointDesc);
+ PlayerWasInTutZone = true;
+
+ // Check if players recon gadget (vision link) is in active
+ if (!GadgetManager->ReconInUse()) return;
+
+ // Check if the player is roughly looking at their target
+ APawn* PlayerPawn = GetWorld()->GetFirstPlayerController()->GetPawn();
+ FRotator LookAtRot = UKismetMathLibrary::FindLookAtRotation(PlayerPawn->GetActorLocation(), TargetLoc);
+ FRotator PlayersRotator = PlayerPawn->GetActorRotation();
+ // Keep all yaw values between -180 and 180 to simplify the comparison
+ float DesiredtYaw = LookAtRot.Yaw - (LookAtRot.Yaw > 180 ? 360 : 0);
+ float PlayersYaw = PlayersRotator.Yaw - (PlayersRotator.Yaw > 180 ? 360 : 0);
+ // Do nothing if players yaw is off by more than 45 degrees
+ if (FMath::Abs(DesiredtYaw - PlayersYaw) > 45) return;
+
+
+ SpawnNewWaypoint(ResultWaypointLoc, ResultWaypointDesc);
+ FTimerHandle TimerHandle;
+ GetWorld()->GetTimerManager().SetTimer(TimerHandle, this, &AVisionLinkTutorial::FinishedTutorial, 7.5);
+ SetActorTickEnabled(false);
+}
+
+
+
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/VisionLinkTutorial.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/VisionLinkTutorial.h
new file mode 100644
index 00000000..5876dad0
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetTutorial/VisionLinkTutorial.h
@@ -0,0 +1,52 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseGadgetTutorial.h"
+#include "EndlessVendetta/GadgetSystem/GadgetManager.h"
+#include "VisionLinkTutorial.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API AVisionLinkTutorial : public ABaseGadgetTutorial
+{
+ GENERATED_BODY()
+
+ AGadgetManager* GadgetManager;
+
+ bool PlayerInTutorialZone = false;
+ bool PlayerWasInTutZone = false;
+
+ void BeginPlay() override;
+
+ void Tick(float DeltaSeconds) override;
+
+protected:
+ UPROPERTY(EditDefaultsOnly)
+ FString GoToAreaWaypointDesc;
+ UPROPERTY(EditDefaultsOnly)
+ FString LookAtTargetWaypointDesc;
+ UPROPERTY(EditDefaultsOnly)
+ FString ResultWaypointDesc;
+
+ UPROPERTY(BlueprintReadWrite)
+ FVector GoToAreaWaypointLoc;
+ UPROPERTY(BlueprintReadWrite)
+ FVector LookAtTargetWaypointLoc;
+ UPROPERTY(BlueprintReadWrite)
+ FVector ResultWaypointLoc;
+
+ UPROPERTY(BlueprintReadWrite)
+ FVector TargetLoc;
+
+ UFUNCTION(BlueprintCallable)
+ void PlayerEnteredTutorialZone()
+ {
+ PlayerInTutorialZone = true;
+ }
+ UFUNCTION(BlueprintCallable)
+ void PlayerLeftTutorialZone()
+ {
+ PlayerInTutorialZone = false;
+ }
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/ReconGadget.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/ReconGadget.cpp
new file mode 100644
index 00000000..03c10623
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/ReconGadget.cpp
@@ -0,0 +1,5 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "ReconGadget.h"
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/ReconGadget.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/ReconGadget.h
new file mode 100644
index 00000000..7122d3bb
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/ReconGadget.h
@@ -0,0 +1,17 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GadgetBase.h"
+#include "ReconGadget.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AReconGadget : public AGadgetBase
+{
+ GENERATED_BODY()
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/InteractionInterface.cpp b/EndlessVendetta/Source/EndlessVendetta/InteractionInterface.cpp
new file mode 100644
index 00000000..cbcd25fe
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/InteractionInterface.cpp
@@ -0,0 +1,6 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "InteractionInterface.h"
+
+// Add default functionality here for any IInteractionInterface functions that are not pure virtual.
diff --git a/EndlessVendetta/Source/EndlessVendetta/InteractionInterface.h b/EndlessVendetta/Source/EndlessVendetta/InteractionInterface.h
new file mode 100644
index 00000000..f266b10b
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/InteractionInterface.h
@@ -0,0 +1,29 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "UObject/Interface.h"
+#include "InteractionInterface.generated.h"
+
+// This class does not need to be modified.
+UINTERFACE(MinimalAPI)
+class UInteractionInterface : public UInterface
+{
+ GENERATED_BODY()
+};
+
+/**
+ *
+ */
+class ENDLESSVENDETTA_API IInteractionInterface
+{
+ GENERATED_BODY()
+
+ // Add interface functions to this class. This is the class that will be inherited to implement this interface.
+public:
+ virtual void Interact(){}
+
+
+ virtual void InteractPrompt() {}
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseItem.cpp b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseItem.cpp
new file mode 100644
index 00000000..d2987dcf
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseItem.cpp
@@ -0,0 +1,36 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BaseItem.h"
+
+
+void UBaseItem::PostInitProperties()
+{
+ Super::PostInitProperties();
+ ItemSize = FItemSize(DefaultItemSize.X, DefaultItemSize.Y);
+}
+
+void UBaseItem::RotateItem()
+{
+ if (CurrentItemRotation == Horizontal)
+ {
+ CurrentItemRotation = Vertical;
+ ItemSize = FItemSize(ItemSize.Y, ItemSize.X);
+ bIsRotated = true;
+ }
+ else
+ {
+ CurrentItemRotation = Horizontal;
+ ItemSize = FItemSize(ItemSize.Y, ItemSize.X);
+ bIsRotated = false;
+ }
+}
+
+UMaterialInterface* UBaseItem::GetItemTexture() const
+{
+ if (bIsRotated)
+ {
+ return ItemTextureRotated;
+ }
+ return ItemTexture;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseItem.h b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseItem.h
new file mode 100644
index 00000000..39d040bf
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseItem.h
@@ -0,0 +1,74 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseItem.generated.h"
+
+USTRUCT(BlueprintType)
+struct FItemSize
+{
+ GENERATED_BODY()
+
+ UPROPERTY(BlueprintReadWrite, Category = "ItemSize")
+ int X;
+ UPROPERTY(BlueprintReadWrite, Category = "ItemSize")
+ int Y;
+
+ FItemSize(const int _X, const int _Y)
+ {
+ X = _X;
+ Y = _Y;
+ }
+
+ FItemSize()
+ {
+ X = 1;
+ Y = 1;
+ }
+};
+
+UENUM(BlueprintType)
+enum EItemRotation
+{
+ Horizontal UMETA(DisplayName = "Horizontal"),
+ Vertical UMETA(DisplayName = "Vertical")
+};
+
+/**
+ *
+ */
+UCLASS(Abstract, Blueprintable)
+class ENDLESSVENDETTA_API UBaseItem : public UObject
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ int ItemID;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ FName ItemName;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ FText Description;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ FVector2D DefaultItemSize = FVector2D(1);
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ FItemSize ItemSize;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ UMaterialInterface* ItemTexture;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ UMaterialInterface* ItemTextureRotated;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ TEnumAsByte CurrentItemRotation = Horizontal;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ TSubclassOf ItemActor;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadWrite, Category = "Item")
+ bool bIsRotated = false;
+
+ virtual void PostInitProperties() override;
+
+ UFUNCTION(BlueprintCallable, Category = "Item")
+ void RotateItem();
+ UFUNCTION(BlueprintCallable, Category = "Item")
+ UMaterialInterface* GetItemTexture() const;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseWorldItem.cpp b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseWorldItem.cpp
new file mode 100644
index 00000000..ffa855c9
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseWorldItem.cpp
@@ -0,0 +1,26 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BaseWorldItem.h"
+
+
+// Sets default values
+ABaseWorldItem::ABaseWorldItem()
+{
+ // 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 ABaseWorldItem::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+// Called every frame
+void ABaseWorldItem::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseWorldItem.h b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseWorldItem.h
new file mode 100644
index 00000000..c83609d9
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/Inventory/BaseWorldItem.h
@@ -0,0 +1,25 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Actor.h"
+#include "BaseWorldItem.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API ABaseWorldItem : public AActor
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ ABaseWorldItem();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryComponent.cpp b/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryComponent.cpp
new file mode 100644
index 00000000..2d09885f
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryComponent.cpp
@@ -0,0 +1,198 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "InventoryComponent.h"
+
+#include "BaseItem.h"
+#include "Camera/CameraComponent.h"
+
+
+// Sets default values for this component's properties
+UInventoryComponent::UInventoryComponent()
+{
+ // Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
+ // off to improve performance if you don't need them.
+ bWantsInitializeComponent = true;
+ PrimaryComponentTick.bCanEverTick = true;
+}
+
+void UInventoryComponent::InitializeComponent()
+{
+ Super::InitializeComponent();
+ PlayerCharacter = Cast(GetOwner());
+ ItemToPickup = nullptr;
+}
+
+
+// Called when the game starts
+void UInventoryComponent::BeginPlay()
+{
+ Super::BeginPlay();
+
+ //FTimerHandle TraceTimerHandle;
+ //GetWorld()->GetTimerManager().SetTimer(TraceTimerHandle, this, &UInventoryComponent::ProjectTraceForItem, 0.1f, true);
+ InventoryItems.Init(nullptr, Columns * Rows);
+}
+
+
+// Called every frame
+void UInventoryComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
+{
+ Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
+
+ if (IsDirty)
+ {
+ IsDirty = false;
+ OnInventoryUpdated.Broadcast();
+ }
+}
+
+bool UInventoryComponent::AddItem(UBaseItem* Item)
+{
+ if (!IsValid(Item)) return false;
+ for (int i = 0; i < InventoryItems.Num(); i++)
+ {
+ if (IsRoomAvailable(Item, i))
+ {
+ AddItemAt(Item, i);
+ return true;
+ }
+ }
+ Item->RotateItem();
+ for (int i = 0; i < InventoryItems.Num(); i++)
+ {
+ if (IsRoomAvailable(Item, i))
+ {
+ AddItemAt(Item, i);
+ return true;
+ }
+ }
+ Item->RotateItem();
+ return false;
+}
+
+void UInventoryComponent::ProjectTraceForItem()
+{
+ if (!IsValid(PlayerCharacter)) return;
+ FVector StartLocation = Cast(PlayerCharacter->GetComponentByClass(UCameraComponent::StaticClass()))->GetComponentLocation();
+ FVector EndLocation = StartLocation + Cast(PlayerCharacter->GetComponentByClass(UCameraComponent::StaticClass()))->GetForwardVector() * MaxPickupDistance;
+ FCollisionQueryParams CollisionQueryParams;
+ CollisionQueryParams.AddIgnoredActor(PlayerCharacter);
+ if (FHitResult HitResult; GetWorld()->LineTraceSingleByChannel(HitResult, StartLocation, EndLocation, ECC_Visibility, CollisionQueryParams))
+ {
+ if (Cast(HitResult.GetActor()))
+ {
+ ItemToPickup = HitResult.GetActor();
+ Cast(ItemToPickup->GetComponentByClass(UStaticMeshComponent::StaticClass()))->SetRenderCustomDepth(true);
+ return;
+ }
+ }
+ if (!IsValid(ItemToPickup)) return;
+ Cast(ItemToPickup->GetComponentByClass(UStaticMeshComponent::StaticClass()))->SetRenderCustomDepth(false);
+}
+
+void UInventoryComponent::Pickup()
+{
+ //TODO: Add pickup logic and create pickup Actor
+ if (!IsValid(ItemToPickup)) return;
+}
+
+bool UInventoryComponent::IsRoomAvailable(UBaseItem* Item, const int TopLeftIndex)
+{
+ for (int i = IndexToTile(TopLeftIndex).X; i < IndexToTile(TopLeftIndex).X + Item->ItemSize.X; i++)
+ {
+ for (int j = IndexToTile(TopLeftIndex).Y; j < IndexToTile(TopLeftIndex).Y + Item->ItemSize.Y; j++)
+ {
+ FInventoryTile TileToCheck;
+ TileToCheck.X = i;
+ TileToCheck.Y = j;
+ if (!IsTileValid(TileToCheck)) return false;
+ TTuple ItemAtIndex = GetItemAtIndex(TileToIndex(TileToCheck));
+ if (ItemAtIndex.Get<1>()) return false;
+ if (IsValid(ItemAtIndex.Get<0>())) return false;
+ }
+ }
+ return true;
+}
+
+FInventoryTile UInventoryComponent::IndexToTile(const int Index) const
+{
+ FInventoryTile Tile;
+ Tile.X = Index % Columns;
+ Tile.Y = Index / Columns;
+ return Tile;
+}
+
+TTuple UInventoryComponent::GetItemAtIndex(const int Index)
+{
+ if (!InventoryItems.IsValidIndex(Index)) return MakeTuple(nullptr, false);
+ if (!IsValid(InventoryItems[Index])) return MakeTuple(nullptr, false);
+ return MakeTuple(InventoryItems[Index], true);
+}
+
+int UInventoryComponent::TileToIndex(const FInventoryTile InventoryTile) const
+{
+ return InventoryTile.X + InventoryTile.Y * Columns;
+}
+
+void UInventoryComponent::AddItemAt(UBaseItem* Item, const int TopLeftIndex)
+{
+ for (int i = IndexToTile(TopLeftIndex).X; i < IndexToTile(TopLeftIndex).X + Item->ItemSize.X; i++)
+ {
+ for (int j = IndexToTile(TopLeftIndex).Y; j < IndexToTile(TopLeftIndex).Y + Item->ItemSize.Y; j++)
+ {
+ FInventoryTile TileToCheck;
+ TileToCheck.X = i;
+ TileToCheck.Y = j;
+ if (!IsTileValid(TileToCheck)) return;
+ InventoryItems[TileToIndex(TileToCheck)] = Item;
+ }
+ }
+ IsDirty = true;
+}
+
+TMap UInventoryComponent::GetAllItems()
+{
+ TMap Items;
+ for (int i = 0; i < InventoryItems.Num(); i++)
+ {
+ UBaseItem* Item = InventoryItems[i];
+ if (!IsValid(Item)) continue;
+ if (Items.Contains(Item)) continue;
+ Items.Add(Item, IndexToTile(i));
+ }
+ return Items;
+}
+
+void UInventoryComponent::RemoveItem(UBaseItem* Item)
+{
+ if (!IsValid(Item)) return;
+ for (int i = 0; i < InventoryItems.Num(); i++)
+ {
+ if (InventoryItems[i] == Item)
+ {
+ InventoryItems[i] = nullptr;
+ IsDirty = true;
+ }
+ }
+}
+
+void UInventoryComponent::SpawnItem(UBaseItem* Item, FVector Location)
+{
+}
+
+void UInventoryComponent::UpdateInventorySize_Implementation(const int _Columns, const int _Rows)
+{
+ Columns = _Columns;
+ Rows = _Rows;
+ InventoryItems.SetNum(Columns * Rows);
+}
+
+bool UInventoryComponent::IsTileValid(const FInventoryTile InventoryTile) const
+{
+ if (InventoryTile.X >= 0 && InventoryTile.Y >= 0 && InventoryTile.X < Columns && InventoryTile.Y < Columns && InventoryTile.Y <= Rows)
+ {
+ return true;
+ }
+ return false;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryComponent.h b/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryComponent.h
new file mode 100644
index 00000000..813a181b
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryComponent.h
@@ -0,0 +1,77 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Components/ActorComponent.h"
+#include "InventoryStructs.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "InventoryComponent.generated.h"
+
+
+UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent))
+class ENDLESSVENDETTA_API UInventoryComponent : public UActorComponent
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this component's properties
+ UInventoryComponent();
+ virtual void InitializeComponent() override;
+
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Inventory")
+ int Columns = 10;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Inventory")
+ int Rows = 10;
+ UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Inventory")
+ float MaxPickupDistance = 200.0f;
+
+
+protected:
+ // Called when the game starts
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
+
+ DECLARE_DYNAMIC_MULTICAST_DELEGATE(FOnInventoryUpdated);
+ UPROPERTY(BlueprintAssignable, Category="Inventory")
+ FOnInventoryUpdated OnInventoryUpdated;
+
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ bool AddItem(class UBaseItem* Item);
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ void ProjectTraceForItem();
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ void Pickup();
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ bool IsRoomAvailable(class UBaseItem* Item, const int TopLeftIndex);
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ FInventoryTile IndexToTile(const int Index) const;
+ TTuple GetItemAtIndex(const int Index);
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ int TileToIndex(const FInventoryTile InventoryTile) const;
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ void AddItemAt(class UBaseItem* Item, const int TopLeftIndex);
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ TMap GetAllItems();
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ void RemoveItem(class UBaseItem* Item);
+ UFUNCTION(BlueprintCallable, Category="Inventory")
+ void SpawnItem(class UBaseItem* Item, FVector Location);
+ UFUNCTION(BlueprintNativeEvent, BlueprintCallable, Exec, Category = "Inventory")
+ void UpdateInventorySize(const int _Columns, const int _Rows);
+ virtual void UpdateInventorySize_Implementation(const int _Columns, const int _Rows);
+
+private:
+ bool IsTileValid(const FInventoryTile InventoryTile) const;
+
+ UPROPERTY()
+ AEndlessVendettaCharacter* PlayerCharacter;
+ UPROPERTY()
+ AActor* ItemToPickup;
+ bool IsDirty = false;
+ UPROPERTY()
+ TArray InventoryItems;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryStructs.h b/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryStructs.h
new file mode 100644
index 00000000..6d0b93be
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/Inventory/InventoryStructs.h
@@ -0,0 +1,32 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "InventoryStructs.generated.h"
+
+/**
+ *
+ */
+
+USTRUCT(BlueprintType)
+struct FInventoryLine
+{
+ GENERATED_BODY()
+
+ UPROPERTY(BlueprintReadWrite)
+ FVector2D Start;
+ UPROPERTY(BlueprintReadWrite)
+ FVector2D End;
+};
+
+USTRUCT(BlueprintType)
+struct FInventoryTile
+{
+ GENERATED_BODY()
+
+ UPROPERTY(BlueprintReadWrite)
+ int X;
+ UPROPERTY(BlueprintReadWrite)
+ int Y;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPerson.h b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPerson.h
new file mode 100644
index 00000000..ddbf2e22
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPerson.h
@@ -0,0 +1,5 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonCharacter.cpp
new file mode 100644
index 00000000..61708391
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonCharacter.cpp
@@ -0,0 +1,129 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include "TP_ThirdPersonCharacter.h"
+#include "Camera/CameraComponent.h"
+#include "Components/CapsuleComponent.h"
+#include "Components/InputComponent.h"
+#include "GameFramework/CharacterMovementComponent.h"
+#include "GameFramework/Controller.h"
+#include "GameFramework/SpringArmComponent.h"
+#include "EnhancedInputComponent.h"
+#include "EnhancedInputSubsystems.h"
+
+
+//////////////////////////////////////////////////////////////////////////
+// ATP_ThirdPersonCharacter
+
+ATP_ThirdPersonCharacter::ATP_ThirdPersonCharacter()
+{
+ // Set size for collision capsule
+ GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);
+
+ // Don't rotate when the controller rotates. Let that just affect the camera.
+ bUseControllerRotationPitch = false;
+ bUseControllerRotationYaw = false;
+ bUseControllerRotationRoll = false;
+
+ // Configure character movement
+ GetCharacterMovement()->bOrientRotationToMovement = true; // Character moves in the direction of input...
+ GetCharacterMovement()->RotationRate = FRotator(0.0f, 500.0f, 0.0f); // ...at this rotation rate
+
+ // Note: For faster iteration times these variables, and many more, can be tweaked in the Character Blueprint
+ // instead of recompiling to adjust them
+ GetCharacterMovement()->JumpZVelocity = 700.f;
+ GetCharacterMovement()->AirControl = 0.35f;
+ GetCharacterMovement()->MaxWalkSpeed = 500.f;
+ GetCharacterMovement()->MinAnalogWalkSpeed = 20.f;
+ GetCharacterMovement()->BrakingDecelerationWalking = 2000.f;
+
+ // Create a camera boom (pulls in towards the player if there is a collision)
+ CameraBoom = CreateDefaultSubobject(TEXT("CameraBoom"));
+ CameraBoom->SetupAttachment(RootComponent);
+ CameraBoom->TargetArmLength = 400.0f; // The camera follows at this distance behind the character
+ CameraBoom->bUsePawnControlRotation = true; // Rotate the arm based on the controller
+
+ // Create a follow camera
+ FollowCamera = CreateDefaultSubobject(TEXT("FollowCamera"));
+ FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName); // Attach the camera to the end of the boom and let the boom adjust to match the controller orientation
+ FollowCamera->bUsePawnControlRotation = false; // Camera does not rotate relative to arm
+
+ // Note: The skeletal mesh and anim blueprint references on the Mesh component (inherited from Character)
+ // are set in the derived blueprint asset named ThirdPersonCharacter (to avoid direct content references in C++)
+}
+
+void ATP_ThirdPersonCharacter::BeginPlay()
+{
+ // Call the base class
+ Super::BeginPlay();
+
+ //Add Input Mapping Context
+ if (APlayerController* PlayerController = Cast(Controller))
+ {
+ if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem(PlayerController->GetLocalPlayer()))
+ {
+ Subsystem->AddMappingContext(DefaultMappingContext, 0);
+ }
+ }
+}
+
+//////////////////////////////////////////////////////////////////////////
+// Input
+
+void ATP_ThirdPersonCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent)
+{
+ // Set up action bindings
+ if (UEnhancedInputComponent* EnhancedInputComponent = CastChecked(PlayerInputComponent)) {
+
+ //Jumping
+ EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Triggered, this, &ACharacter::Jump);
+ EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &ACharacter::StopJumping);
+
+ //Moving
+ EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &ATP_ThirdPersonCharacter::Move);
+
+ //Looking
+ EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &ATP_ThirdPersonCharacter::Look);
+
+ }
+
+}
+
+void ATP_ThirdPersonCharacter::Move(const FInputActionValue& Value)
+{
+ // input is a Vector2D
+ FVector2D MovementVector = Value.Get();
+
+ if (Controller != nullptr)
+ {
+ // find out which way is forward
+ const FRotator Rotation = Controller->GetControlRotation();
+ const FRotator YawRotation(0, Rotation.Yaw, 0);
+
+ // get forward vector
+ const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
+
+ // get right vector
+ const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);
+
+ // add movement
+ AddMovementInput(ForwardDirection, MovementVector.Y);
+ AddMovementInput(RightDirection, MovementVector.X);
+ }
+}
+
+void ATP_ThirdPersonCharacter::Look(const FInputActionValue& Value)
+{
+ // input is a Vector2D
+ FVector2D LookAxisVector = Value.Get();
+
+ if (Controller != nullptr)
+ {
+ // add yaw and pitch input to controller
+ AddControllerYawInput(LookAxisVector.X);
+ AddControllerPitchInput(LookAxisVector.Y);
+ }
+}
+
+
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonCharacter.h b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonCharacter.h
new file mode 100644
index 00000000..77f7869f
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonCharacter.h
@@ -0,0 +1,66 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Character.h"
+#include "InputActionValue.h"
+#include "TP_ThirdPersonCharacter.generated.h"
+
+
+UCLASS(config=Game)
+class ATP_ThirdPersonCharacter : public ACharacter
+{
+ GENERATED_BODY()
+
+ /** Camera boom positioning the camera behind the character */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
+ class USpringArmComponent* CameraBoom;
+
+ /** Follow camera */
+ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
+ class UCameraComponent* FollowCamera;
+
+ /** MappingContext */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ class UInputMappingContext* DefaultMappingContext;
+
+ /** Jump Input Action */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ class UInputAction* JumpAction;
+
+ /** Move Input Action */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ class UInputAction* MoveAction;
+
+ /** Look Input Action */
+ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
+ class UInputAction* LookAction;
+
+public:
+ ATP_ThirdPersonCharacter();
+
+
+protected:
+
+ /** Called for movement input */
+ void Move(const FInputActionValue& Value);
+
+ /** Called for looking input */
+ void Look(const FInputActionValue& Value);
+
+
+protected:
+ // APawn interface
+ virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;
+
+ // To add mapping context
+ virtual void BeginPlay();
+
+public:
+ /** Returns CameraBoom subobject **/
+ FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }
+ /** Returns FollowCamera subobject **/
+ FORCEINLINE class UCameraComponent* GetFollowCamera() const { return FollowCamera; }
+};
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonGameMode.cpp b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonGameMode.cpp
new file mode 100644
index 00000000..aa7ce003
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonGameMode.cpp
@@ -0,0 +1,15 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#include "TP_ThirdPersonGameMode.h"
+#include "TP_ThirdPersonCharacter.h"
+#include "UObject/ConstructorHelpers.h"
+
+ATP_ThirdPersonGameMode::ATP_ThirdPersonGameMode()
+{
+ // set default pawn class to our Blueprinted character
+ static ConstructorHelpers::FClassFinder PlayerPawnBPClass(TEXT("/Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter"));
+ if (PlayerPawnBPClass.Class != NULL)
+ {
+ DefaultPawnClass = PlayerPawnBPClass.Class;
+ }
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonGameMode.h b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonGameMode.h
new file mode 100644
index 00000000..bf3f6900
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/TP_ThirdPerson/TP_ThirdPersonGameMode.h
@@ -0,0 +1,19 @@
+// Copyright Epic Games, Inc. All Rights Reserved.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/GameModeBase.h"
+#include "TP_ThirdPersonGameMode.generated.h"
+
+UCLASS(minimalapi)
+class ATP_ThirdPersonGameMode : public AGameModeBase
+{
+ GENERATED_BODY()
+
+public:
+ ATP_ThirdPersonGameMode();
+};
+
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/UserWidgets/GadgetMenu.cpp b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/GadgetMenu.cpp
new file mode 100644
index 00000000..d9db8748
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/GadgetMenu.cpp
@@ -0,0 +1,5 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "GadgetMenu.h"
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/UserWidgets/GadgetMenu.h b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/GadgetMenu.h
new file mode 100644
index 00000000..e09b9377
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/GadgetMenu.h
@@ -0,0 +1,50 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Blueprint/UserWidget.h"
+#include "GadgetMenu.generated.h"
+
+USTRUCT(BlueprintType)
+struct FGadgetInfo
+{
+ GENERATED_BODY()
+
+ UPROPERTY(BlueprintReadWrite, Category = "Gadget")
+ UTexture2D* GadgetIcon;
+
+ UPROPERTY(BlueprintReadWrite, Category = "Gadget")
+ FString GadgetDesc;
+
+ UPROPERTY(BlueprintReadWrite, Category = "Gadget")
+ FString GadgetName;
+};
+
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FCloseMenu);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FNextGadget);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FPreviousGadget);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FSelectGadget);
+
+UCLASS()
+class ENDLESSVENDETTA_API UGadgetMenu : public UUserWidget
+{
+ GENERATED_BODY()
+
+public:
+ UPROPERTY(BlueprintCallable)
+ FCloseMenu CloseMenuDelegate;
+
+ UPROPERTY(BlueprintCallable)
+ FCloseMenu NextGadgetDelegate;
+
+ UPROPERTY(BlueprintCallable)
+ FCloseMenu PreviousGadgetDelegate;
+
+ UPROPERTY(BlueprintCallable)
+ FCloseMenu SelectGadgetDelegate;
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void UpdateDisplayedGadget(FGadgetInfo GadgetInfo);
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.cpp b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.cpp
new file mode 100644
index 00000000..1909b302
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.cpp
@@ -0,0 +1,6 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "PC_Display.h"
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.h b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.h
new file mode 100644
index 00000000..e2d8a2ca
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/UserWidgets/PC_Display.h
@@ -0,0 +1,93 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "Blueprint/UserWidget.h"
+#include "PC_Display.generated.h"
+
+USTRUCT(BlueprintType)
+struct FPC_Display_Info
+{
+ GENERATED_BODY()
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ bool IsGameOver;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ FString MB_Title;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ FString MB_Desc;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ int MB_Reward;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ TArray SB_Title;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ TArray SB_Icon;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ TArray SB_Desc;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ TArray SB_Reward;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ TArray CustomBountyAlteration_Desc;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ TArray CustomBountyAlteration_Cost;
+
+ UPROPERTY(BlueprintReadWrite, Category = "PC_Display_Info")
+ int PlayersFavourAmount;
+};
+
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FLogoutFromBountyDirectorPC);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyCBA_1);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyCBA_2);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyCBA_3);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyAmmoDrop);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyHealthDrop);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyRadio);
+DECLARE_DYNAMIC_MULTICAST_DELEGATE(FBuyFavour);
+
+UCLASS()
+class ENDLESSVENDETTA_API UPC_Display : public UUserWidget
+{
+ GENERATED_BODY()
+public:
+ // Button Delegates
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FLogoutFromBountyDirectorPC LogoutFromBountyDirectorPC;
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FBuyCBA_1 BuyCba_1;
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FBuyCBA_2 BuyCba_2;
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FBuyCBA_3 BuyCba_3;
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FBuyAmmoDrop BuyAmmoDrop;
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FBuyHealthDrop BuyHealthDrop;
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FBuyRadio BuyRadio;
+ UPROPERTY(BlueprintCallable, Category = PC_Display)
+ FBuyFavour BuyFavour;
+
+ // USTRUCT
+ UPROPERTY(BlueprintReadOnly)
+ FPC_Display_Info PC_Display_Info;
+
+ // Takes USTRUCT and uses its values to fill in widget
+ UFUNCTION(BlueprintImplementableEvent, Category = "PC_Display")
+ void LoadOS();
+
+ UFUNCTION(BlueprintImplementableEvent, Category = "PC_Display")
+ void UpdateFavourCount(int NewFavourCount);
+
+
+};
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp
new file mode 100644
index 00000000..74dac6e0
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp
@@ -0,0 +1,261 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "BaseWeaponClass.h"
+
+#include "AIHelpers.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "Kismet/KismetMathLibrary.h"
+#include "Components/CapsuleComponent.h"
+#include "Kismet/GameplayStatics.h"
+#include "Engine/DamageEvents.h"
+#include "EndlessVendetta/AI/EnemyCharacter.h"
+
+
+// Sets default values
+ABaseWeaponClass::ABaseWeaponClass()
+{
+ // 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 ABaseWeaponClass::BeginPlay()
+{
+ Super::BeginPlay();
+
+ collisionParams.AddIgnoredActor(playerInWorld);
+ collisionParams.AddIgnoredActor(this);
+
+ // Attempt to find the player character
+ APlayerController* PlayerController = UGameplayStatics::GetPlayerController(this, 0);
+ playerInWorld = Cast(PlayerController->GetCharacter());
+
+ endlessVendettaChar = Cast(playerInWorld);
+
+ for (UActorComponent* actorComp : playerInWorld->GetComponentsByTag(UArrowComponent::StaticClass(), FName("GunStart")))
+ {
+ GunStartArrow = Cast(actorComp);
+ break;
+ }
+
+ if (!playerControllerRef)
+ {
+ playerControllerRef = UGameplayStatics::GetPlayerController(GetWorld(), 0);
+ }
+
+ originalMagnitude = recoilMagnitude;
+ originalMaxAngleLeft = recoilMaxAngleLeft;
+ originalMaxAngleRight = recoilMaxAngleRight;
+ originalMinMultiplier = recoilMinMultiplier;
+
+ currentAmmoCount = MagazineSize;
+
+ UE_LOG(LogTemp, Display, TEXT("crnnt ammo: %d"), MagazineSize);
+}
+
+
+// Called every frame
+void ABaseWeaponClass::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+
+ if (playerInWorld)
+ {
+ ApplyRecoil(DeltaTime);
+ }
+ if (currentPitch < 0 && bStopShooting)
+ {
+ float increment = currentPitch * DeltaTime * 8;
+ currentPitch -= increment;
+ playerInWorld->AddControllerPitchInput(-increment);
+ }
+}
+
+
+// Recoil Handling ////////////////////////////////////////////////////////////////////////////////////////////////////////////
+void ABaseWeaponClass::GenerateRecoilVector()
+{
+ float angle = FMath::RandRange(recoilMaxAngleLeft, -recoilMaxAngleRight); //randomg recoil vector angle between left and right
+ float recMag = recoilMagnitude * 252.f; //converting degrees to controller units
+ float tempMag = -FMath::RandRange(recMag * recoilMinMultiplier, recMag); // recoil magnitude
+
+ recoilResultYaw = FMath::Sin(FMath::DegreesToRadians(angle));
+ recoilResultPitch = FMath::Cos(FMath::DegreesToRadians(angle));
+
+ if (bulletCountShoot >= howMnyShotsTillRclStop)
+ {
+ recoilResultPitch = 0;
+ }
+ //scaling direction to magnitude
+ recoilResultPitch *= -tempMag;
+ recoilResultYaw *= tempMag;
+
+ //reset recoil to 0 of curve
+ recoilTime = 0;
+}
+
+void ABaseWeaponClass::ApplyRecoil(float DeltaTime)
+{
+ if (recoilTime < 0.3)
+ {
+ float amplitude = RecoilCurve->GetFloatValue(recoilTime); //get current value of curve in time
+ recoilTime += DeltaTime;
+ if (bulletCountShoot <= 3)
+ {
+ playerInWorld->AddControllerPitchInput(GetRecoilPitch(amplitude, recoilTime));
+ currentPitch += GetRecoilPitch(amplitude,recoilTime);
+ }
+ playerInWorld->AddControllerPitchInput(FMath::RandRange(-5 * DeltaTime, 5* DeltaTime));
+ GunStartArrow->AddRelativeRotation(FRotator(-GetRecoilPitch(amplitude, recoilTime), 0, 0));
+ playerInWorld->AddControllerYawInput(GetRecoilYaw(amplitude, recoilTime));
+ UpdateSamples(amplitude, recoilTime);
+ }
+}
+
+
+void ABaseWeaponClass::nullSamples()
+{
+ recoilCurvet = 0;
+ recoilCurvez1 = 0;
+}
+
+float ABaseWeaponClass::GetRecoilPitch(float Amp, float Time)
+{
+ //Using the trapez method and we are getting the surface under the curve, each trapezoid consist of square and right triangle
+ float lower = recoilCurvez1 < Amp ? recoilCurvez1 : Amp; //get which point is common for both triangle and square of trapezoid
+ //lower point
+ float mult = (Time - recoilCurvet) * lower; //getting surface of square
+ mult += (Time - recoilCurvet) * (Amp - recoilCurvez1) / 2.0f; //getting and adding surface of triangle
+ return (recoilResultPitch * mult) / playerControllerRef->InputPitchScale_DEPRECATED; //calculating and return recoil force for current frame
+}
+
+
+//Same as getrecoilpitch
+float ABaseWeaponClass::GetRecoilYaw(float Amp, float Time)
+{
+ float lower = recoilCurvez1 < Amp ? recoilCurvez1 : Amp;
+ float mult = (Time - recoilCurvet) * lower;
+
+ mult += (Time - recoilCurvet) * (Amp - recoilCurvez1) / 2.0f;
+ return (recoilResultYaw * mult) / playerControllerRef->InputYawScale_DEPRECATED;
+}
+
+void ABaseWeaponClass::UpdateSamples(float Amp, float Time)
+{
+ recoilCurvez1 = Amp;
+ recoilCurvet = Time;
+}
+
+// Fire handling //////////////////////////////////////////////////////////////////////////////////////////////////////////
+void ABaseWeaponClass::ClickDetectionTimer()
+{
+ GetWorldTimerManager().SetTimer(timerHandle, this, &ABaseWeaponClass::Fire, 1 / FireRate, false);
+}
+
+void ABaseWeaponClass::CancelFire()
+{
+ GetWorldTimerManager().ClearTimer(timerHandle);
+ if (bulletCountShoot <= 0) return;
+ UE_LOG(LogTemp, Display, TEXT("FireCancelled"));
+ bulletCountShoot = 0;
+ GunStartArrow->SetRelativeRotation(FRotator(0));
+ //playerInWorld->GetController()->SetControlRotation(FRotator(0, playerInWorld->GetActorRotation().Yaw, playerInWorld->GetActorRotation().Roll));
+ bStopShooting = true;
+ nullSamples();
+}
+
+void ABaseWeaponClass::Fire()
+{
+ if(currentAmmoCount > 0)
+ {
+ //do damage fallof based off distance
+ traceStart = GunStartArrow->GetComponentLocation();
+ traceEnd = traceStart + (GunStartArrow->GetForwardVector() * BulletDistance);
+ if (GetWorldTimerManager().IsTimerActive(timerHandle)) return;
+ GetWorld()->LineTraceSingleByChannel(outHit, traceStart, traceEnd, ECC_Visibility, collisionParams);
+ DrawDebugLine(this->GetWorld(), traceStart, traceEnd, FColor::Black , false, 0.2f, 0U, 0.2f);
+ playerControllerRef->PlayerCameraManager->StartCameraShake(CameraShakeClass, 1);
+ currentAmmoCount -= 1;
+ GenerateRecoilVector();
+ ClickDetectionTimer();
+ bulletCountShoot += 1;
+ bStopShooting = false;
+ if (outHit.bBlockingHit)
+ {
+ if (!Cast(outHit.GetActor())) return;
+ Cast(outHit.GetActor())->TakeDamage(WeaponDamage, FPointDamageEvent(), GetWorld()->GetFirstPlayerController(), this);
+ }
+ }
+ else if(currentAmmoCount <= 0)
+ {
+ UE_LOG(LogTemp, Display, TEXT("No ammo, Ammo count: %d"), currentAmmoCount);
+ }
+
+}
+
+void ABaseWeaponClass::WeaponScopedFire()
+{
+ if (endlessVendettaChar->bIsScoped)
+ {
+ recoilMagnitude = scopedRecoilMag;
+ recoilMaxAngleLeft = scopedMaxAngleLeft;
+ recoilMaxAngleRight = scopedMaxAngleRight;
+ recoilMinMultiplier = scopedMinMultiplier;
+
+ }
+ else
+ {
+ recoilMagnitude = originalMagnitude;
+ recoilMaxAngleLeft = originalMaxAngleLeft;
+ recoilMaxAngleRight = originalMaxAngleRight;
+ recoilMinMultiplier = originalMinMultiplier;
+ }
+}
+
+void ABaseWeaponClass::ReloadTimer()
+{
+ GetWorldTimerManager().SetTimer(reloadTimerHandle, this, &ABaseWeaponClass::WeaponReload, TimeToReload, false);
+ ShowReloadingWidget();
+}
+
+void ABaseWeaponClass::WeaponReload()
+{
+ if(MagazineSize >= currentAmmoCount)
+ {
+ UE_LOG(LogTemp, Display, TEXT("Weapon Reloading: mag size: %d"), MagazineSize);
+ currentAmmoCount = MagazineSize;
+ endlessVendettaChar->bIsReloading = false;
+ HideReloadingWidget();
+ }
+}
+
+void ABaseWeaponClass::Interact()
+{
+ if(!IsValid(this)) return;
+ GLog->Log("Interact Called");
+ endlessVendettaChar->WeaponSwitcher(this);
+}
+
+void ABaseWeaponClass::InteractPrompt()
+{
+ WeaponStatsPopUp();
+}
+
+// void ABaseWeaponClass::GetOutHit(FHitResult OutHit)
+// {
+// if(IsValid(this))
+// {
+// endlessVendettaChar->PrimaryWeapon->Destroy();
+// }
+// if (OutHit.GetActor()->ActorHasTag(FName("AssaultRifle")))
+// {
+// endlessVendettaChar->EquipPrimary();
+// }
+// AActor* HitActor = Cast(endlessVendettaChar->PrimaryWeaponClass);
+// endlessVendettaChar->PrimaryWeapon = Cast(HitActor);
+// }
+
+
+
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h
new file mode 100644
index 00000000..531048b8
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h
@@ -0,0 +1,191 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "WeaponItemClass.h"
+#include "Components/ArrowComponent.h"
+#include "Kismet/KismetMathLibrary.h"
+#include "EndlessVendetta/InteractionInterface.h"
+#include "Engine/EngineTypes.h"
+#include "BaseWeaponClass.generated.h"
+
+class AEndlessVendettaCharacter;
+class UCapsuleComponent;
+
+UCLASS()
+class ENDLESSVENDETTA_API ABaseWeaponClass : public AActor, public IInteractionInterface
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ ABaseWeaponClass();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+ virtual void ApplyRecoil(float DeltaTime);
+
+ void GenerateRecoilVector();
+
+ void nullSamples();
+
+ //recoil previous curve
+ float recoilCurvez1 = 0;
+
+ //recoil previous curve time
+ float recoilCurvet = 0;
+
+ float recoilTime = 0;
+
+ float recoilResultPitch = 0;
+ float recoilResultYaw = 0;
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void ShowReloadingWidget();
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void HideReloadingWidget();
+
+
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+ void ReloadTimer();
+
+ float currentPitch;
+
+ UPROPERTY(EditAnywhere)
+ float BulletDistance;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite)
+ FString WeaponName;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite)
+ int WeaponDamage;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite)
+ FString WeaponDescription;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite)
+ float FireRate;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite)
+ int MagazineSize;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite)
+ float TimeToReload = 3.f;
+
+ //how many bullets until the recoil stops going up
+ UPROPERTY(EditAnywhere)
+ int howMnyShotsTillRclStop;
+
+ UPROPERTY(BlueprintReadWrite)
+ int currentAmmoCount;
+
+ UPROPERTY(EditAnywhere, BlueprintReadWrite)
+ UTexture2D* WeaponImage;
+
+ UPROPERTY(EditAnywhere, Category = "ScopedFire")
+ float scopedRecoilMag;
+
+ UPROPERTY(EditAnywhere, Category = "ScopedFire")
+ float scopedMaxAngleLeft;
+
+ UPROPERTY(EditAnywhere, Category = "ScopedFire")
+ float scopedMaxAngleRight;
+
+ UPROPERTY(EditAnywhere, Category = "ScopedFire")
+ float scopedMinMultiplier;
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ virtual void Fire();
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ virtual void ClickDetectionTimer();
+
+ virtual void CancelFire();
+
+ UPROPERTY(VisibleAnywhere)
+ ACharacter* playerInWorld;
+
+ AEndlessVendettaCharacter* endlessVendettaChar;
+
+ APlayerController* playerControllerRef;
+
+ FTimerHandle timerHandle;
+ FTimerHandle reloadTimerHandle;
+
+ bool bFirstBulletShot = false;
+
+ UPROPERTY(EditAnywhere)
+ TSubclassOf CameraShakeClass;
+
+ /* How far the gun goes up*/
+ UPROPERTY(EditAnywhere, Category = "Recoil")
+ float recoilMagnitude;
+
+ UPROPERTY(EditAnywhere, Category = "Recoil")
+ float recoilMaxAngleLeft;
+
+ UPROPERTY(EditAnywhere, Category = "Recoil")
+ float recoilMaxAngleRight;
+
+ UPROPERTY(EditAnywhere, Category = "Recoil")
+ float recoilMinMultiplier;
+
+ UPROPERTY(EditAnywhere, Category = "Recoil")
+ class UCurveFloat* RecoilCurve;
+
+ UFUNCTION(BlueprintCallable, Category = "Recoil")
+ float GetRecoilPitch(float Amp, float Time);
+
+ UFUNCTION(BlueprintCallable, Category = "Recoil")
+ float GetRecoilYaw(float Amp, float Time);
+
+ UFUNCTION(BlueprintCallable, Category = "Recoil")
+ void UpdateSamples(float Amp, float Time);
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ void WeaponScopedFire();
+
+ UFUNCTION(BlueprintCallable, Category = "Weapons")
+ void WeaponReload();
+
+ FHitResult outHit;
+ FVector traceStart;
+ FVector traceEnd;
+ FVector newTraceEnd;
+ FCollisionQueryParams collisionParams;
+
+ //UFUNCTION(BlueprintCallable, Category = "Weapons")
+ //void RecoilVerticalLimit(FHitResult Outhit);
+
+ UPROPERTY(VisibleAnywhere)
+ int bulletCountShoot; //Gets how many bullets shot per
+
+ void Interact() override;
+
+ void InteractPrompt() override;
+
+ UFUNCTION(BlueprintImplementableEvent)
+ void WeaponStatsPopUp();
+
+ //void GetOutHit(FHitResult OutHit);
+
+protected:
+ UArrowComponent* GunStartArrow;
+ bool bStopShooting = false;
+
+private:
+
+ float originalMagnitude;
+ float originalMaxAngleLeft;
+ float originalMaxAngleRight;
+ float originalMinMultiplier;
+
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/PistolClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/PistolClass.cpp
new file mode 100644
index 00000000..0e91083a
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/PistolClass.cpp
@@ -0,0 +1,48 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "PistolClass.h"
+
+
+// Sets default values
+APistolClass::APistolClass()
+{
+ // 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 APistolClass::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+// Called every frame
+void APistolClass::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
+
+void APistolClass::Fire()
+{
+ Super::Fire();
+ UE_LOG(LogTemp, Display, TEXT("Testing overrides: Pistol has been fired"));
+}
+
+void APistolClass::ClickDetectionTimer()
+{
+ Super::ClickDetectionTimer();
+}
+
+void APistolClass::CancelFire()
+{
+ if (bulletCountShoot <= 0) return;
+ UE_LOG(LogTemp, Display, TEXT("FireCancelled"));
+ bulletCountShoot = 0;
+ GunStartArrow->SetRelativeRotation(FRotator(0));
+ //playerInWorld->GetController()->SetControlRotation(FRotator(0, playerInWorld->GetActorRotation().Yaw, playerInWorld->GetActorRotation().Roll));
+ bStopShooting = true;
+ nullSamples();
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/PistolClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/PistolClass.h
new file mode 100644
index 00000000..0ddb7290
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/PistolClass.h
@@ -0,0 +1,29 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseWeaponClass.h"
+#include "PistolClass.generated.h"
+
+UCLASS()
+class ENDLESSVENDETTA_API APistolClass : public ABaseWeaponClass
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ APistolClass();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ virtual void Fire() override;
+ virtual void ClickDetectionTimer() override;
+ virtual void CancelFire() override;
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.cpp
new file mode 100644
index 00000000..266ae616
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.cpp
@@ -0,0 +1,10 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "ShotgunClass.h"
+
+AShotgunClass::AShotgunClass()
+{
+ // 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;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.h
new file mode 100644
index 00000000..8bf23c16
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/ShotgunClass.h
@@ -0,0 +1,21 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseWeaponClass.h"
+#include "ShotgunClass.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API AShotgunClass : public ABaseWeaponClass
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ AShotgunClass();
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp
new file mode 100644
index 00000000..9ace82f6
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp
@@ -0,0 +1,94 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "SniperClass.h"
+#include "EndlessVendetta/EndlessVendettaCharacter.h"
+#include "EndlessVendetta/AI/AICharacter.h"
+#include "Engine/DamageEvents.h"
+#include "Kismet/GameplayStatics.h"
+
+// Sets default values
+ASniperClass::ASniperClass()
+{
+ // 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 ASniperClass::BeginPlay()
+{
+ Super::BeginPlay();
+}
+
+// Called every frame
+void ASniperClass::Tick(float DeltaTime)
+{
+ ApplyRecoil(DeltaTime);
+ recoilMagnitude = 1;
+ if(endlessVendettaChar->bIsPlayerMoving == false )
+ {
+ recoilResultPitch = 0;
+ recoilMagnitude = -1;
+ }
+ if (currentPitch < 0 && bStopShooting)
+ {
+ float increment = currentPitch * DeltaTime * 8;
+ currentPitch -= increment;
+ playerInWorld->AddControllerPitchInput(-increment);
+ }
+}
+
+void ASniperClass::Fire()
+{
+ if(currentAmmoCount > 0 && !bSingleShotOnly)
+ {
+ bSingleShotOnly = true;
+ //do damage fallof based off distance
+ traceStart = GunStartArrow->GetComponentLocation();
+ traceEnd = traceStart + (GunStartArrow->GetForwardVector() * BulletDistance);
+ if (GetWorldTimerManager().IsTimerActive(timerHandle)) return;
+ GetWorld()->LineTraceSingleByChannel(outHit, traceStart, traceEnd, ECC_Visibility, collisionParams);
+ DrawDebugLine(this->GetWorld(), traceStart, traceEnd, FColor::Black , false, 0.2f, 0U, 0.2f);
+ playerControllerRef->PlayerCameraManager->StartCameraShake(CameraShakeClass, 1);
+ currentAmmoCount -= 1;
+ bulletCountShoot += 1;
+ bStopShooting = false;
+ GenerateRecoilVector();
+ ApplyRecoil(UGameplayStatics::GetWorldDeltaSeconds(this->GetWorld()));
+ this->GetWorld()->GetTimerManager().SetTimer(SniperTimerHandle, this, &ASniperClass::StopFire, FireRate, false);
+ if (outHit.bBlockingHit)
+ {
+ UE_LOG(LogTemp, Display, TEXT("Hit: %s"), *outHit.GetActor()->GetName());
+ if (!Cast(outHit.GetActor())) return;
+ Cast(outHit.GetActor())->TakeDamage(WeaponDamage, FPointDamageEvent(), GetWorld()->GetFirstPlayerController(), this);
+ }
+ }
+ else if(currentAmmoCount <= 0)
+ {
+ UE_LOG(LogTemp, Display, TEXT("No ammo, Ammo count: %d"), currentAmmoCount);
+ }
+}
+
+void ASniperClass::ApplyRecoil(float DeltaTime)
+{
+ if (recoilTime < 0.3)
+ {
+ float amplitude = RecoilCurve->GetFloatValue(recoilTime); //get current value of curve in time
+ recoilTime += DeltaTime;
+
+ playerInWorld->AddControllerPitchInput(GetRecoilPitch(amplitude, recoilTime));
+
+ currentPitch += GetRecoilPitch(amplitude,recoilTime);
+
+ playerInWorld->AddControllerPitchInput(FMath::RandRange(-5 * DeltaTime, 5* DeltaTime));
+ GunStartArrow->AddRelativeRotation(FRotator(-GetRecoilPitch(amplitude, recoilTime), 0, 0));
+ playerInWorld->AddControllerYawInput(GetRecoilYaw(amplitude, recoilTime));
+
+ UpdateSamples(amplitude, recoilTime);
+ }
+}
+
+void ASniperClass::StopFire()
+{
+ bSingleShotOnly = false;
+}
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.h
new file mode 100644
index 00000000..721020b1
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.h
@@ -0,0 +1,42 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "BaseWeaponClass.h"
+#include "SniperClass.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API ASniperClass : public ABaseWeaponClass
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ ASniperClass();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+private:
+
+ bool bSingleShotOnly;
+ FTimerHandle SniperTimerHandle;
+
+protected:
+
+ virtual void Fire() override;
+
+ virtual void ApplyRecoil(float DeltaTime) override;
+
+ void StopFire();
+
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponCameraShake.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponCameraShake.cpp
new file mode 100644
index 00000000..03a594a9
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponCameraShake.cpp
@@ -0,0 +1,4 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "WeaponCameraShake.h"
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponCameraShake.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponCameraShake.h
new file mode 100644
index 00000000..604113b5
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponCameraShake.h
@@ -0,0 +1,16 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+
+#include "WeaponCameraShake.generated.h"
+
+/**
+ *
+ */
+UCLASS()
+class ENDLESSVENDETTA_API UWeaponCameraShake : public UCameraShakeBase
+{
+ GENERATED_BODY()
+};
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponItemClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponItemClass.cpp
new file mode 100644
index 00000000..32f68147
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponItemClass.cpp
@@ -0,0 +1,39 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+
+#include "WeaponItemClass.h"
+
+
+// Sets default values
+AWeaponItemClass::AWeaponItemClass()
+{
+ // 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 AWeaponItemClass::BeginPlay()
+{
+ Super::BeginPlay();
+
+}
+
+// Called every frame
+void AWeaponItemClass::Tick(float DeltaTime)
+{
+ Super::Tick(DeltaTime);
+}
+
+//Called from WeaponInventory actor component class
+void AWeaponItemClass::Equip()
+{
+ GetWorld();
+ UE_LOG(LogTemp, Display, TEXT("World Player is in: %s"), GetWorld());
+}
+
+//Called from WeaponInventory actor component class
+void AWeaponItemClass::Unequip(ABaseWeaponClass* PickedUpWeapon)
+{
+ //same as equip but
+}
+
diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponItemClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponItemClass.h
new file mode 100644
index 00000000..0ab0f0a6
--- /dev/null
+++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/WeaponItemClass.h
@@ -0,0 +1,34 @@
+// Fill out your copyright notice in the Description page of Project Settings.
+
+#pragma once
+
+#include "CoreMinimal.h"
+#include "GameFramework/Actor.h"
+#include "WeaponItemClass.generated.h"
+
+class ABaseWeaponClass;
+
+UCLASS()
+class ENDLESSVENDETTA_API AWeaponItemClass : public AActor
+{
+ GENERATED_BODY()
+
+public:
+ // Sets default values for this actor's properties
+ AWeaponItemClass();
+
+protected:
+ // Called when the game starts or when spawned
+ virtual void BeginPlay() override;
+
+public:
+ // Called every frame
+ virtual void Tick(float DeltaTime) override;
+
+ UFUNCTION()
+ void Equip();
+
+ UFUNCTION()
+ void Unequip(ABaseWeaponClass* PickedUpWeapon);
+
+};
diff --git a/UE5 Layout/Phil_s_UE5_Layout.ini b/UE5 Layout/Phil_s_UE5_Layout.ini
new file mode 100644
index 00000000..abba7c93
--- /dev/null
+++ b/UE5 Layout/Phil_s_UE5_Layout.ini
@@ -0,0 +1,30 @@
+[EditorLayouts]
+LayoutName=NSLOCTEXT("LayoutNamespace", "Phil_s_UE5_Layout", "Phil's UE5 Layout")
+LayoutDescription=NSLOCTEXT("LayoutNamespace", "", "")
+UnrealEd_Layout_v1.5=("Type": "Layout","Name": "UnrealEd_Layout_v1.5","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 2,"Type": "Stack","HideTabWell": false,"ForegroundTab": "LevelEditor","Tabs": [("TabId": "LevelEditor","TabState": "OpenedTab"),("TabId": "DockedToolkit","TabState": "ClosedTab"),("TabId": "ProjectSettings","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Automatic","WindowSize_X": 2236,"WindowSize_Y": 909.99993896484375,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "ContentBrowser1Tab","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": -1058,"WindowPosition_Y": 229,"WindowSize_X": 1000,"WindowSize_Y": 600,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "WidgetReflector","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": 9,"WindowPosition_Y": 186,"WindowSize_X": 1644,"WindowSize_Y": 600,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "MessageLog","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": 457,"WindowPosition_Y": 213,"WindowSize_X": 1000,"WindowSize_Y": 600,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "ReferenceViewer","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": 455,"WindowPosition_Y": 227,"WindowSize_X": 1000,"WindowSize_Y": 600,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "ProjectLauncher","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": 0,"WindowPosition_Y": 58,"WindowSize_X": 1914,"WindowSize_Y": 910,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "EditorSettings","TabState": "ClosedTab"),("TabId": "PluginsEditor","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": 134,"WindowPosition_Y": 74,"WindowSize_X": 1650,"WindowSize_Y": 900,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "BridgeTab","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Vertical","WindowPlacement": "Placement_Specified","WindowPosition_X": 0,"WindowPosition_Y": 58,"WindowSize_X": 1914,"WindowSize_Y": 910,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "StandaloneToolkit","TabState": "ClosedTab")]),("SizeCoefficient": 0.34999999403953552,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "MergeTool","TabState": "ClosedTab")])])])
+LevelEditor_Layout_v1.8=("Type": "Layout","Name": "LevelEditor_Layout_v1.8","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 1,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.75,"Type": "Splitter","Orientation": "Orient_Horizontal","Nodes": [("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "TopLeftModeTab","TabState": "ClosedTab"),("TabId": "LevelEditorToolBox","TabState": "ClosedTab")]),("SizeCoefficient": 1.1499999761581421,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": true,"ForegroundTab": "None","Tabs": [("TabId": "LevelEditorToolBar","TabState": "OpenedTab")]),("SizeCoefficient": 1,"Type": "Stack","HideTabWell": true,"ForegroundTab": "None","Tabs": [("TabId": "EditorModeToolbar","TabState": "ClosedTab")]),("SizeCoefficient": 1,"Type": "Splitter","Orientation": "Orient_Horizontal","Nodes": [("SizeCoefficient": 1.5425490140914917,"Type": "Stack","HideTabWell": true,"ForegroundTab": "LevelEditorViewport","Tabs": [("TabId": "LevelEditorViewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.45745047926902771,"Type": "Stack","HideTabWell": false,"ForegroundTab": "PlacementBrowser","Tabs": [("TabId": "PlacementBrowser","TabState": "OpenedTab")])])])]),("SizeCoefficient": 0.40000000596046448,"Type": "Splitter","Orientation": "Orient_Horizontal","Nodes": [("SizeCoefficient": 0.41683539748191833,"Type": "Stack","HideTabWell": false,"ForegroundTab": "ContentBrowserTab1","Tabs": [("TabId": "EmbeddedSequenceID","TabState": "ClosedTab"),("TabId": "ContentBrowserTab1","TabState": "OpenedTab"),("TabId": "OutputLog","TabState": "OpenedTab"),("TabId": "Sequencer","TabState": "ClosedTab")]),("SizeCoefficient": 0.38316473364830017,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "ContentBrowserTab2","TabState": "ClosedTab")])])]),("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "TakeRecorder","TabState": "ClosedTab")]),("SizeCoefficient": 0.25,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.56138122081756592,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "TopRightModeTab","TabState": "ClosedTab"),("TabId": "LevelEditorLayerBrowser","TabState": "ClosedTab")]),("SizeCoefficient": 0.83861857652664185,"Type": "Stack","HideTabWell": false,"ForegroundTab": "LevelEditorSceneOutliner","Tabs": [("TabId": "BottomRightModeTab","TabState": "ClosedTab"),("TabId": "LevelEditorSelectionDetails","TabState": "OpenedTab"),("TabId": "WorldBrowserPartitionEditor","TabState": "ClosedTab"),("TabId": "WorldSettingsTab","TabState": "ClosedTab"),("TabId": "LevelEditorSceneOutliner","TabState": "OpenedTab")])])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": 457,"WindowPosition_Y": 213,"WindowSize_X": 1000,"WindowSize_Y": 600,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "WorldBrowserDetails","TabState": "ClosedTab")])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_Specified","WindowPosition_X": 457,"WindowPosition_Y": 213,"WindowSize_X": 1000,"WindowSize_Y": 600,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "WorldBrowserHierarchy","TabState": "ClosedTab")])])])
+WidgetBlueprintEditor_Designer_Layout_v4_8=("Type": "Layout","Name": "WidgetBlueprintEditor_Designer_Layout_v4_8","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.15000000596046448,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "WidgetTemplates","Tabs": [("TabId": "WidgetTemplates","TabState": "OpenedTab"),("TabId": "WidgetLibrary","TabState": "OpenedTab")]),("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SlateHierarchy","Tabs": [("TabId": "SlateHierarchy","TabState": "OpenedTab"),("TabId": "BindWidget","TabState": "OpenedTab")])]),("SizeCoefficient": 0.85000002384185791,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.69999998807907104,"Type": "Splitter","Orientation": "Orient_Horizontal","Nodes": [("SizeCoefficient": 0.05000000074505806,"Type": "Stack","HideTabWell": true,"ForegroundTab": "None","Tabs": [("TabId": "TopLeftModeTab","TabState": "ClosedTab")]),("SizeCoefficient": 0.80000001192092896,"Type": "Stack","HideTabWell": true,"ForegroundTab": "SlatePreview","Tabs": [("TabId": "SlatePreview","TabState": "OpenedTab")]),("SizeCoefficient": 0.34999999403953552,"Type": "Stack","HideTabWell": false,"ForegroundTab": "WidgetDetails","Tabs": [("TabId": "WidgetDetails","TabState": "OpenedTab")])]),("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Animations","Tabs": [("TabId": "Animations","TabState": "OpenedTab"),("TabId": "EmbeddedSequenceID","TabState": "ClosedTab"),("TabId": "CompilerResults","TabState": "ClosedTab")])])]),("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Vertical","WindowPlacement": "Placement_Specified","WindowPosition_X": 573,"WindowPosition_Y": 306,"WindowSize_X": 768,"WindowSize_Y": 413,"bIsMaximized": false,"Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "SequencerGraphEditor","TabState": "ClosedTab")])])])
+Blueprints_Unified_Components_v7=("Type": "Layout","Name": "Blueprints_Unified_Components_v7","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.15000000596046448,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "ConstructionScriptEditor","Tabs": [("TabId": "ConstructionScriptEditor","TabState": "OpenedTab")]),("SizeCoefficient": 0.69999998807907104,"Type": "Stack","HideTabWell": false,"ForegroundTab": "MyBlueprint","Tabs": [("TabId": "MyBlueprint","TabState": "OpenedTab")])]),("SizeCoefficient": 0.60000002384185791,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.80000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SCSViewport","Tabs": [("TabId": "SCSViewport","TabState": "OpenedTab"),("TabId": "Document","TabState": "ClosedTab")]),("SizeCoefficient": 0.20000000298023224,"Type": "Stack","HideTabWell": false,"ForegroundTab": "FindResults","Tabs": [("TabId": "EmbeddedSequenceID","TabState": "ClosedTab"),("TabId": "CompilerResults","TabState": "OpenedTab"),("TabId": "FindResults","TabState": "OpenedTab"),("TabId": "BookmarkList","TabState": "ClosedTab")])]),("SizeCoefficient": 0.25,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Inspector","Tabs": [("TabId": "Inspector","TabState": "OpenedTab"),("TabId": "PaletteList","TabState": "ClosedTab")])])])
+Standalone_TextureEditor_Layout_v5=("Type": "Layout","Name": "Standalone_TextureEditor_Layout_v5","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": true,"ForegroundTab": "TextureEditor_Viewport","Tabs": [("TabId": "TextureEditor_Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.33000001311302185,"Type": "Stack","HideTabWell": false,"ForegroundTab": "TextureEditor_Properties","Tabs": [("TabId": "TextureEditor_Properties","TabState": "OpenedTab"),("TabId": "TextureEditor_Oodle","TabState": "OpenedTab")])])])
+Standalone_BlueprintDefaults_Layout_v7=("Type": "Layout","Name": "Standalone_BlueprintDefaults_Layout_v7","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Vertical","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": true,"ForegroundTab": "DefaultEditor","Tabs": [("TabId": "DefaultEditor","TabState": "OpenedTab")])])])
+Blueprints_Unified_v5=("Type": "Layout","Name": "Blueprints_Unified_v5","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.15000000596046448,"Type": "Stack","HideTabWell": false,"ForegroundTab": "MyBlueprint","Tabs": [("TabId": "MyBlueprint","TabState": "OpenedTab")]),("SizeCoefficient": 0.60000002384185791,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.80000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Document","Tabs": [("TabId": "Document","TabState": "ClosedTab")]),("SizeCoefficient": 0.20000000298023224,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "EmbeddedSequenceID","TabState": "ClosedTab"),("TabId": "CompilerResults","TabState": "ClosedTab"),("TabId": "FindResults","TabState": "ClosedTab"),("TabId": "BookmarkList","TabState": "ClosedTab")])]),("SizeCoefficient": 0.25,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Inspector","Tabs": [("TabId": "Inspector","TabState": "OpenedTab"),("TabId": "PaletteList","TabState": "ClosedTab")])])])
+Standalone_SimpleAssetEditor_Layout_v4=("Type": "Layout","Name": "Standalone_SimpleAssetEditor_Layout_v4","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Vertical","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "GenericEditor_Properties","Tabs": [("TabId": "GenericEditor_Properties","TabState": "OpenedTab")])])])
+Standalone_DataTableEditor_Layout_v6=("Type": "Layout","Name": "Standalone_DataTableEditor_Layout_v6","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Vertical","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "DataTableEditor_DataTable","Tabs": [("TabId": "DataTableEditor_DataTable","TabState": "OpenedTab"),("TabId": "DataTableEditor_DataTableDetails","TabState": "OpenedTab")]),("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "DataTableEditor_RowEditor","Tabs": [("TabId": "DataTableEditor_RowEditor","TabState": "OpenedTab")])])])
+WidgetBlueprintEditor_Graph_Layout_v2x1=("Type": "Layout","Name": "WidgetBlueprintEditor_Graph_Layout_v2x1","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.15000000596046448,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "MyBlueprint","Tabs": [("TabId": "MyBlueprint","TabState": "OpenedTab")]),("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Inspector","Tabs": [("TabId": "Inspector","TabState": "OpenedTab")])]),("SizeCoefficient": 0.69999998807907104,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.80000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Document","Tabs": [("TabId": "Document","TabState": "ClosedTab")]),("SizeCoefficient": 0.20000000298023224,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "EmbeddedSequenceID","TabState": "ClosedTab"),("TabId": "CompilerResults","TabState": "ClosedTab"),("TabId": "FindResults","TabState": "ClosedTab")])]),("SizeCoefficient": 0.15000000596046448,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "PaletteList","TabState": "ClosedTab")])])])
+Stanalone_AnimationBlueprintEditMode_Layout_v1.4=("Type": "Layout","Name": "Stanalone_AnimationBlueprintEditMode_Layout_v1.4","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.25,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": true,"ForegroundTab": "Viewport","Tabs": [("TabId": "Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "MyBlueprint","Tabs": [("TabId": "AnimCurveViewerTab","TabState": "ClosedTab"),("TabId": "SkeletonTreeView","TabState": "ClosedTab"),("TabId": "PoseWatchManager","TabState": "OpenedTab"),("TabId": "MyBlueprint","TabState": "OpenedTab")])]),("SizeCoefficient": 0.55000001192092896,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.80000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Document","Tabs": [("TabId": "Document","TabState": "ClosedTab")]),("SizeCoefficient": 0.20000000298023224,"Type": "Stack","HideTabWell": false,"ForegroundTab": "CompilerResults","Tabs": [("TabId": "CompilerResults","TabState": "OpenedTab"),("TabId": "FindResults","TabState": "ClosedTab")])]),("SizeCoefficient": 0.20000000298023224,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Inspector","Tabs": [("TabId": "Inspector","TabState": "OpenedTab"),("TabId": "AdvancedPreviewTab","TabState": "OpenedTab"),("TabId": "PersonaSequenceRecorderSettings","TabState": "ClosedTab"),("TabId": "AnimBlueprintParentPlayerEditor","TabState": "ClosedTab")]),("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SequenceBrowser","Tabs": [("TabId": "AnimBlueprintPreviewEditor","TabState": "OpenedTab"),("TabId": "SequenceBrowser","TabState": "OpenedTab"),("TabId": "SkeletonSlotNames","TabState": "ClosedTab")])])])])
+Standalone_MaterialEditor_Layout_v13=("Type": "Layout","Name": "Standalone_MaterialEditor_Layout_v13","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.14999999105930328,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": true,"ForegroundTab": "MaterialEditor_Preview","Tabs": [("TabId": "MaterialEditor_Preview","TabState": "OpenedTab")]),("SizeCoefficient": 1,"Type": "Stack","HideTabWell": false,"ForegroundTab": "MaterialEditor_MaterialProperties","Tabs": [("TabId": "MaterialEditor_MaterialProperties","TabState": "OpenedTab"),("TabId": "MaterialEditor_PreviewSettings","TabState": "ClosedTab"),("TabId": "MaterialEditor_ParameterDefaults","TabState": "OpenedTab"),("TabId": "MaterialEditor_CustomPrimitiveData","TabState": "ClosedTab"),("TabId": "MaterialInstanceEditor_MaterialLayerProperties","TabState": "ClosedTab")])]),("SizeCoefficient": 0.59999996423721313,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.80000001192092896,"Type": "Stack","HideTabWell": true,"ForegroundTab": "Document","Tabs": [("TabId": "Document","TabState": "OpenedTab")]),("SizeCoefficient": 0.20000000298023224,"Type": "Stack","HideTabWell": false,"ForegroundTab": "OldMaterialStats_Grid","Tabs": [("TabId": "MaterialStats_Grid","TabState": "ClosedTab"),("TabId": "OldMaterialStats_Grid","TabState": "OpenedTab"),("TabId": "MaterialEditor_Find","TabState": "ClosedTab")])]),("SizeCoefficient": 0.14999999105930328,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "MaterialEditor_Palette","TabState": "SidebarTab","SidebarLocation": "Right","SidebarCoeff": 0.14000000059604645,"SidebarPinned": false)])])])
+Standalone_StaticMeshEditor_Layout_v6=("Type": "Layout","Name": "Standalone_StaticMeshEditor_Layout_v6","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.73684209585189819,"Type": "Stack","HideTabWell": true,"ForegroundTab": "StaticMeshEditor_Viewport","Tabs": [("TabId": "StaticMeshEditor_Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.26315790414810181,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.69999998807907104,"Type": "Stack","HideTabWell": false,"ForegroundTab": "StaticMeshEditor_Properties","Tabs": [("TabId": "StaticMeshEditor_Properties","TabState": "OpenedTab"),("TabId": "StaticMeshEditor_SocketManager","TabState": "OpenedTab"),("TabId": "TopLeftModeTab","TabState": "ClosedTab")]),("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "None","Tabs": [("TabId": "StaticMeshEditor_SocketManager","TabState": "OpenedTab"),("TabId": "TopLeftModeTab","TabState": "ClosedTab"),("TabId": "StaticMeshEditor_Collision","TabState": "ClosedTab")])])])])
+Standalone_SkeletalMeshEditor_Layout_v3.4=("Type": "Layout","Name": "Standalone_SkeletalMeshEditor_Layout_v3.4","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.17999999225139618,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SkeletonTreeView","Tabs": [("TabId": "AnimAssetPropertiesTab","TabState": "OpenedTab"),("TabId": "SkeletonTreeView","TabState": "OpenedTab")]),("SizeCoefficient": 0.54000002145767212,"Type": "Stack","HideTabWell": true,"ForegroundTab": "Viewport","Tabs": [("TabId": "Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.17999999225139618,"Type": "Stack","HideTabWell": false,"ForegroundTab": "MorphTargetsTab","Tabs": [("TabId": "MorphTargetsTab","TabState": "OpenedTab"),("TabId": "DetailsTab","TabState": "ClosedTab"),("TabId": "ToolBoxDetailsTab","TabState": "ClosedTab"),("TabId": "AdvancedPreviewTab","TabState": "OpenedTab"),("TabId": "PersonaSequenceRecorderSettings","TabState": "ClosedTab")])])])
+Standalone_AnimationEditor_Layout_v1.4=("Type": "Layout","Name": "Standalone_AnimationEditor_Layout_v1.4","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.17999999225139618,"Type": "Stack","HideTabWell": false,"ForegroundTab": "AnimAssetPropertiesTab","Tabs": [("TabId": "SkeletonTreeView","TabState": "OpenedTab"),("TabId": "AnimAssetPropertiesTab","TabState": "OpenedTab")]),("SizeCoefficient": 0.54000002145767212,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.60000002384185791,"Type": "Stack","HideTabWell": true,"ForegroundTab": "Viewport","Tabs": [("TabId": "Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.40000000596046448,"Type": "Stack","HideTabWell": true,"ForegroundTab": "Document","Tabs": [("TabId": "Document","TabState": "ClosedTab"),("TabId": "CurveEditor","TabState": "ClosedTab")])]),("SizeCoefficient": 0.17999999225139618,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.60000002384185791,"Type": "Stack","HideTabWell": false,"ForegroundTab": "DetailsTab","Tabs": [("TabId": "DetailsTab","TabState": "OpenedTab"),("TabId": "AdvancedPreviewTab","TabState": "OpenedTab"),("TabId": "PersonaSequenceRecorderSettings","TabState": "ClosedTab")]),("SizeCoefficient": 0.40000000596046448,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SequenceBrowser","Tabs": [("TabId": "SequenceBrowser","TabState": "OpenedTab"),("TabId": "AnimMontageSections","TabState": "ClosedTab"),("TabId": "AnimCurveViewerTab","TabState": "ClosedTab"),("TabId": "SkeletonSlotNames","TabState": "ClosedTab")])])])])
+Standalone_SkeletonEditor_Layout_v1.3=("Type": "Layout","Name": "Standalone_SkeletonEditor_Layout_v1.3","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.17999999225139618,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SkeletonTreeView","Tabs": [("TabId": "SkeletonTreeView","TabState": "OpenedTab"),("TabId": "RetargetManager","TabState": "ClosedTab")]),("SizeCoefficient": 0.54000002145767212,"Type": "Stack","HideTabWell": true,"ForegroundTab": "Viewport","Tabs": [("TabId": "Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.17999999225139618,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "AdvancedPreviewTab","Tabs": [("TabId": "DetailsTab","TabState": "OpenedTab"),("TabId": "AdvancedPreviewTab","TabState": "OpenedTab"),("TabId": "PersonaSequenceRecorderSettings","TabState": "ClosedTab")]),("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SkeletonAnimNotifies","Tabs": [("TabId": "SkeletonAnimNotifies","TabState": "OpenedTab"),("TabId": "SequenceBrowser","TabState": "OpenedTab"),("TabId": "AnimCurveViewerTab","TabState": "OpenedTab"),("TabId": "SkeletonSlotNames","TabState": "ClosedTab")])])])])
+Standalone_PhysicsAssetEditor_Layout_v5.3=("Type": "Layout","Name": "Standalone_PhysicsAssetEditor_Layout_v5.3","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.17999999225139618,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.60000002384185791,"Type": "Stack","HideTabWell": false,"ForegroundTab": "SkeletonTreeView","Tabs": [("TabId": "SkeletonTreeView","TabState": "OpenedTab")]),("SizeCoefficient": 0.40000000596046448,"Type": "Stack","HideTabWell": false,"ForegroundTab": "PhysicsAssetGraphView","Tabs": [("TabId": "PhysicsAssetGraphView","TabState": "OpenedTab")])]),("SizeCoefficient": 0.54000002145767212,"Type": "Stack","HideTabWell": true,"ForegroundTab": "Viewport","Tabs": [("TabId": "Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.17999999225139618,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.60000002384185791,"Type": "Stack","HideTabWell": false,"ForegroundTab": "DetailsTab","Tabs": [("TabId": "DetailsTab","TabState": "OpenedTab"),("TabId": "AdvancedPreviewTab","TabState": "OpenedTab"),("TabId": "PersonaSequenceRecorderSettings","TabState": "ClosedTab")]),("SizeCoefficient": 0.40000000596046448,"Type": "Stack","HideTabWell": false,"ForegroundTab": "PhysicsAssetTools","Tabs": [("TabId": "PhysicsAssetTools","TabState": "OpenedTab"),("TabId": "PhysicsAssetProfilesView","TabState": "OpenedTab")])])])])
+UVEditorLayout2=("Type": "Layout","Name": "UVEditorLayout2","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.20000000298023224,"Type": "Stack","HideTabWell": true,"ForegroundTab": "None","Tabs": [("TabId": "TopLeftModeTab","TabState": "ClosedTab")]),("SizeCoefficient": 0.40000000596046448,"Type": "Stack","HideTabWell": true,"ForegroundTab": "BaseAssetToolkit_Viewport","Tabs": [("TabId": "BaseAssetToolkit_Viewport","TabState": "OpenedTab")]),("SizeCoefficient": 0.40000000596046448,"Type": "Stack","HideTabWell": true,"ForegroundTab": "UVEditor_LivePreviewTab","Tabs": [("TabId": "UVEditor_LivePreviewTab","TabState": "OpenedTab")])])])
+Standalone_SoundCueEditor_Layout_v5=("Type": "Layout","Name": "Standalone_SoundCueEditor_Layout_v5","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.20249998569488525,"Type": "Stack","HideTabWell": true,"ForegroundTab": "SoundCueEditor_Properties","Tabs": [("TabId": "SoundCueEditor_Properties","TabState": "OpenedTab")]),("SizeCoefficient": 0.58499997854232788,"Type": "Stack","HideTabWell": true,"ForegroundTab": "SoundCueEditor_GraphCanvas","Tabs": [("TabId": "SoundCueEditor_GraphCanvas","TabState": "OpenedTab")]),("SizeCoefficient": 0.11249999701976776,"Type": "Stack","HideTabWell": true,"ForegroundTab": "SoundCueEditor_Palette","Tabs": [("TabId": "SoundCueEditor_Palette","TabState": "OpenedTab")])])])
+Standalone_BehaviorTree_Layout_v2=("Type": "Layout","Name": "Standalone_BehaviorTree_Layout_v2","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.69999998807907104,"Type": "Stack","HideTabWell": false,"ForegroundTab": "Document","Tabs": [("TabId": "Document","TabState": "ClosedTab")]),("SizeCoefficient": 0.30000001192092896,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.60000002384185791,"Type": "Stack","HideTabWell": false,"ForegroundTab": "BehaviorTreeEditor_Properties","Tabs": [("TabId": "BehaviorTreeEditor_Properties","TabState": "OpenedTab"),("TabId": "BehaviorTreeEditor_Search","TabState": "ClosedTab")]),("SizeCoefficient": 0.40000000596046448,"Type": "Stack","HideTabWell": false,"ForegroundTab": "BehaviorTreeEditor_Blackboard","Tabs": [("TabId": "BehaviorTreeEditor_Blackboard","TabState": "OpenedTab")])])])])
+WidgetReflector_Layout_NoStats_v2=("Type": "Layout","Name": "WidgetReflector_Layout_NoStats_v2","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Vertical","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 1,"Type": "Stack","HideTabWell": true,"ForegroundTab": "WidgetReflector.SlateOptionsTab","Tabs": [("TabId": "WidgetReflector.SlateOptionsTab","TabState": "OpenedTab")]),("SizeCoefficient": 1,"Type": "Splitter","Orientation": "Orient_Horizontal","Nodes": [("SizeCoefficient": 1,"Type": "Splitter","Orientation": "Orient_Vertical","Nodes": [("SizeCoefficient": 0.69999998807907104,"Type": "Stack","HideTabWell": true,"ForegroundTab": "WidgetReflector.WidgetHierarchyTab","Tabs": [("TabId": "WidgetReflector.WidgetHierarchyTab","TabState": "OpenedTab")]),("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": true,"ForegroundTab": "None","Tabs": [("TabId": "WidgetReflector.SnapshotWidgetPickerTab","TabState": "ClosedTab"),("TabId": "WidgetReflector.WidgetEventsTab","TabState": "ClosedTab"),("TabId": "WidgetReflector.HittestGridTab","TabState": "ClosedTab"),("TabId": "WidgetReflector.WidgetList","TabState": "ClosedTab")])]),("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": true,"ForegroundTab": "WidgetReflector.WidgetDetailsTab","Tabs": [("TabId": "WidgetReflector.WidgetDetailsTab","TabState": "OpenedTab")])])])])
+Standalone_MaterialInstanceEditor_Layout_v8=("Type": "Layout","Name": "Standalone_MaterialInstanceEditor_Layout_v8","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.62999999523162842,"Type": "Stack","HideTabWell": true,"ForegroundTab": "MaterialInstanceEditor_Preview","Tabs": [("TabId": "MaterialInstanceEditor_Preview","TabState": "OpenedTab"),("TabId": "MaterialInstanceEditor_PreviewSettings","TabState": "ClosedTab")]),("SizeCoefficient": 0.27000001072883606,"Type": "Stack","HideTabWell": false,"ForegroundTab": "MaterialInstanceEditor_MaterialProperties","Tabs": [("TabId": "MaterialInstanceEditor_MaterialProperties","TabState": "OpenedTab"),("TabId": "MaterialInstanceEditor_MaterialLayerProperties","TabState": "OpenedTab")])])])
+None=("Type": "Layout","Name": "None","PrimaryAreaIndex": -1,"Areas": [])
+Standalone_ControlRigEditMode_Layout_v1.5=("Type": "Layout","Name": "Standalone_ControlRigEditMode_Layout_v1.5","PrimaryAreaIndex": -1,"Areas": [])
+Standalone_BlackboardEditor_Layout_v2=("Type": "Layout","Name": "Standalone_BlackboardEditor_Layout_v2","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "BehaviorTreeEditor_BlackboardEditor","Tabs": [("TabId": "BehaviorTreeEditor_BlackboardEditor","TabState": "OpenedTab")]),("SizeCoefficient": 0.5,"Type": "Stack","HideTabWell": false,"ForegroundTab": "BehaviorTreeEditor_BlackboardProperties","Tabs": [("TabId": "BehaviorTreeEditor_BlackboardProperties","TabState": "OpenedTab")])])])
+Standalone_EnvironmentQuery_Layout_v2=("Type": "Layout","Name": "Standalone_EnvironmentQuery_Layout_v2","PrimaryAreaIndex": 0,"Areas": [("SizeCoefficient": 1,"Type": "Area","Orientation": "Orient_Horizontal","WindowPlacement": "Placement_NoWindow","Nodes": [("SizeCoefficient": 0.69999998807907104,"Type": "Stack","HideTabWell": false,"ForegroundTab": "EnvironmentQueryEditor_UpdateGraph","Tabs": [("TabId": "EnvironmentQueryEditor_UpdateGraph","TabState": "OpenedTab")]),("SizeCoefficient": 0.30000001192092896,"Type": "Stack","HideTabWell": false,"ForegroundTab": "EnvironmentQueryEditor_Properties","Tabs": [("TabId": "EnvironmentQueryEditor_Properties","TabState": "OpenedTab"),("TabId": "EnvironmentQueryEditor_Profiler","TabState": "OpenedTab")])])])
+