diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..fbec821 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,91 @@ +[*.{cpp,h}] + +# Naming convention rules (note: currently need to be ordered from more to less specific) + +cpp_naming_rule.aactor_prefixed.symbols = aactor_class +cpp_naming_rule.aactor_prefixed.style = aactor_style + +cpp_naming_rule.swidget_prefixed.symbols = swidget_class +cpp_naming_rule.swidget_prefixed.style = swidget_style + +cpp_naming_rule.uobject_prefixed.symbols = uobject_class +cpp_naming_rule.uobject_prefixed.style = uobject_style + +cpp_naming_rule.booleans_prefixed.symbols = boolean_vars +cpp_naming_rule.booleans_prefixed.style = boolean_style + +cpp_naming_rule.structs_prefixed.symbols = structs +cpp_naming_rule.structs_prefixed.style = unreal_engine_structs + +cpp_naming_rule.enums_prefixed.symbols = enums +cpp_naming_rule.enums_prefixed.style = unreal_engine_enums + +cpp_naming_rule.templates_prefixed.symbols = templates +cpp_naming_rule.templates_prefixed.style = unreal_engine_templates + +cpp_naming_rule.general_names.symbols = all_symbols +cpp_naming_rule.general_names.style = unreal_engine_default + +# Naming convention symbols + +cpp_naming_symbols.aactor_class.applicable_kinds = class +cpp_naming_symbols.aactor_class.applicable_type = AActor + +cpp_naming_symbols.swidget_class.applicable_kinds = class +cpp_naming_symbols.swidget_class.applicable_type = SWidget + +cpp_naming_symbols.uobject_class.applicable_kinds = class +cpp_naming_symbols.uobject_class.applicable_type = UObject + +cpp_naming_symbols.boolean_vars.applicable_kinds = local,parameter,field +cpp_naming_symbols.boolean_vars.applicable_type = bool + +cpp_naming_symbols.enums.applicable_kinds = enum + +cpp_naming_symbols.templates.applicable_kinds = template_class + +cpp_naming_symbols.structs.applicable_kinds = struct + +cpp_naming_symbols.all_symbols.applicable_kinds = * + +# Naming convention styles + +cpp_naming_style.unreal_engine_default.capitalization = pascal_case +cpp_naming_style.unreal_engine_default.required_prefix = +cpp_naming_style.unreal_engine_default.required_suffix = +cpp_naming_style.unreal_engine_default.word_separator = + +cpp_naming_style.unreal_engine_enums.capitalization = pascal_case +cpp_naming_style.unreal_engine_enums.required_prefix = E +cpp_naming_style.unreal_engine_enums.required_suffix = +cpp_naming_style.unreal_engine_enums.word_separator = + +cpp_naming_style.unreal_engine_templates.capitalization = pascal_case +cpp_naming_style.unreal_engine_templates.required_prefix = T +cpp_naming_style.unreal_engine_templates.required_suffix = +cpp_naming_style.unreal_engine_templates.word_separator = + +cpp_naming_style.unreal_engine_structs.capitalization = pascal_case +cpp_naming_style.unreal_engine_structs.required_prefix = F +cpp_naming_style.unreal_engine_structs.required_suffix = +cpp_naming_style.unreal_engine_structs.word_separator = + +cpp_naming_style.uobject_style.capitalization = pascal_case +cpp_naming_style.uobject_style.required_prefix = U +cpp_naming_style.uobject_style.required_suffix = +cpp_naming_style.uobject_style.word_separator = + +cpp_naming_style.aactor_style.capitalization = pascal_case +cpp_naming_style.aactor_style.required_prefix = A +cpp_naming_style.aactor_style.required_suffix = +cpp_naming_style.aactor_style.word_separator = + +cpp_naming_style.swidget_style.capitalization = pascal_case +cpp_naming_style.swidget_style.required_prefix = S +cpp_naming_style.swidget_style.required_suffix = +cpp_naming_style.swidget_style.word_separator = + +cpp_naming_style.boolean_style.capitalization = pascal_case +cpp_naming_style.boolean_style.required_prefix = b +cpp_naming_style.boolean_style.required_suffix = +cpp_naming_style.boolean_style.word_separator = \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b157a4c --- /dev/null +++ b/.gitignore @@ -0,0 +1,30 @@ +# Unreal Engine generated folders +Binaries/ +Build/ +DerivedDataCache/ +Intermediate/ +Saved/ + +# Visual Studio / Rider IDE files +.vs/ +.idea/ +*.suo +*.sln.docstates +*.user +*.opensdf +*.sdf +*.VC.db +*.VC.opendb + +# Generated by Unreal toolchain +*.generated.h +*.generated.cpp + +# OS junk +.DS_Store +Thumbs.db +desktop.ini + +# Misc +*.log +*.pdb diff --git a/.vsconfig b/.vsconfig new file mode 100644 index 0000000..b981b2e --- /dev/null +++ b/.vsconfig @@ -0,0 +1,19 @@ +{ + "version": "1.0", + "components": [ + "Component.Unreal.Debugger", + "Component.Unreal.Ide", + "Microsoft.Net.Component.4.6.2.TargetingPack", + "Microsoft.VisualStudio.Component.VC.14.38.17.8.ATL", + "Microsoft.VisualStudio.Component.VC.14.38.17.8.x86.x64", + "Microsoft.VisualStudio.Component.VC.14.44.17.14.ATL", + "Microsoft.VisualStudio.Component.VC.14.44.17.14.x86.x64", + "Microsoft.VisualStudio.Component.VC.Llvm.Clang", + "Microsoft.VisualStudio.Component.VC.Tools.x86.x64", + "Microsoft.VisualStudio.Component.Windows11SDK.22621", + "Microsoft.VisualStudio.Workload.CoreEditor", + "Microsoft.VisualStudio.Workload.ManagedDesktop", + "Microsoft.VisualStudio.Workload.NativeDesktop", + "Microsoft.VisualStudio.Workload.NativeGame" + ] +} diff --git a/Config/DefaultEditor.ini b/Config/DefaultEditor.ini new file mode 100644 index 0000000..79b70b5 --- /dev/null +++ b/Config/DefaultEditor.ini @@ -0,0 +1,9 @@ +[UnrealEd.SimpleMap] +SimpleMapName=/Game/ThirdPersonCPP/Maps/ThirdPersonExampleMap + +[EditoronlyBP] +bAllowClassAndBlueprintPinMatching=true +bReplaceBlueprintWithClass= true +bDontLoadBlueprintOutsideEditor= true +bBlueprintIsNotBlueprintType= true + diff --git a/Config/DefaultEditorPerProjectUserSettings.ini b/Config/DefaultEditorPerProjectUserSettings.ini new file mode 100644 index 0000000..4dcc526 --- /dev/null +++ b/Config/DefaultEditorPerProjectUserSettings.ini @@ -0,0 +1,2 @@ +[ContentBrowser] +ContentBrowserTab1.SelectedPaths=/Game/ThirdPersonCPP \ No newline at end of file diff --git a/Config/DefaultEngine.ini b/Config/DefaultEngine.ini new file mode 100644 index 0000000..cbad2e0 --- /dev/null +++ b/Config/DefaultEngine.ini @@ -0,0 +1,100 @@ +[/Script/EngineSettings.GameMapsSettings] +GameDefaultMap=/Game/ThirdPerson/Lvl_ThirdPerson.Lvl_ThirdPerson +EditorStartupMap=/Game/ThirdPerson/Lvl_ThirdPerson.Lvl_ThirdPerson +; GameMode/PlayerController/PlayerCharacter agora moram em C++ (Game/Modes/Entity/Controller). +; O motor pode spawnar AZMMOGameMode directamente; um BP filho continua opcional. +GlobalDefaultGameMode=/Script/ZMMO.ZMMOGameMode +GameInstanceClass=/Script/ZMMO.ZMMOGameInstance + +[/Script/Engine.RendererSettings] +r.ReflectionMethod=1 +r.GenerateMeshDistanceFields=True +r.DynamicGlobalIlluminationMethod=1 +r.Lumen.TraceMeshSDFs=0 +r.Shadow.Virtual.Enable=1 +r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=True +r.DefaultFeature.AutoExposure.ExtendDefaultLuminanceRange=true +r.AllowStaticLighting=False + +r.SkinCache.CompileShaders=True + +r.RayTracing=True + +r.RayTracing.RayTracingProxies.ProjectEnabled=True + +r.Substrate=True + +r.Substrate.ProjectGBufferFormat=0 + +r.DefaultFeature.LocalExposure.HighlightContrastScale=0.8 + +r.DefaultFeature.LocalExposure.ShadowContrastScale=0.8 + +[/Script/WindowsTargetPlatform.WindowsTargetSettings] +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +DefaultGraphicsRHI=DefaultGraphicsRHI_DX12 +-D3D12TargetedShaderFormats=PCD3D_SM5 ++D3D12TargetedShaderFormats=PCD3D_SM6 +-D3D11TargetedShaderFormats=PCD3D_SM5 ++D3D11TargetedShaderFormats=PCD3D_SM5 +Compiler=Default +AudioSampleRate=48000 +AudioCallbackBufferFrameSize=1024 +AudioNumBuffersToEnqueue=1 +AudioMaxChannels=0 +AudioNumSourceWorkers=4 +SpatializationPlugin= +SourceDataOverridePlugin= +ReverbPlugin= +OcclusionPlugin= +CompressionOverrides=(bOverrideCompressionTimes=False,DurationThreshold=5.000000,MaxNumRandomBranches=0,SoundCueQualityIndex=0) +CacheSizeKB=65536 +MaxChunkSizeOverrideKB=0 +bResampleForDevice=False +MaxSampleRate=48000.000000 +HighSampleRate=32000.000000 +MedSampleRate=24000.000000 +LowSampleRate=12000.000000 +MinSampleRate=8000.000000 +CompressionQualityModifier=1.000000 +AutoStreamingThreshold=0.000000 +SoundCueCookQualityIndex=-1 + +[/Script/LinuxTargetPlatform.LinuxTargetSettings] +-TargetedRHIs=SF_VULKAN_SM5 ++TargetedRHIs=SF_VULKAN_SM6 + +[/Script/MacTargetPlatform.MacTargetSettings] +-TargetedRHIs=SF_METAL_SM5 ++TargetedRHIs=SF_METAL_SM6 + +[/Script/HardwareTargeting.HardwareTargetingSettings] +TargetedHardwareClass=Desktop +AppliedTargetedHardwareClass=Desktop +DefaultGraphicsPerformance=Maximum +AppliedDefaultGraphicsPerformance=Maximum + +[/Script/Engine.Engine] ++ActiveGameNameRedirects=(OldGameName="TP_ThirdPerson",NewGameName="/Script/ZMMO") ++ActiveGameNameRedirects=(OldGameName="/Script/TP_ThirdPerson",NewGameName="/Script/ZMMO") +; Redirects do template antigo para a nova arquitectura (Game/Modes/Entity/Controller). +; ZMMOCharacter foi reescrito como ZMMOPlayerCharacter (ACharacter local com CMC livre). ++ActiveClassRedirects=(OldClassName="TP_ThirdPersonPlayerController",NewClassName="ZMMOPlayerController") ++ActiveClassRedirects=(OldClassName="TP_ThirdPersonGameMode",NewClassName="ZMMOGameMode") ++ActiveClassRedirects=(OldClassName="TP_ThirdPersonCharacter",NewClassName="ZMMOPlayerCharacter") ++ActiveClassRedirects=(OldClassName="ZMMOCharacter",NewClassName="ZMMOPlayerCharacter") + +[/Script/AndroidFileServerEditor.AndroidFileServerRuntimeSettings] +bEnablePlugin=True +bAllowNetworkConnection=True +SecurityToken=A6F8C6FA4AB4631DF1DC329232BB6B40 +bIncludeInShipping=False +bAllowExternalStartInShipping=False +bCompileAFSProject=False +bUseCompression=False +bLogFiles=False +bReportStats=False +ConnectionType=USBOnly +bUseManualIPAddress=False +ManualIPAddress= + diff --git a/Config/DefaultGame.ini b/Config/DefaultGame.ini new file mode 100644 index 0000000..97b1be6 --- /dev/null +++ b/Config/DefaultGame.ini @@ -0,0 +1,3 @@ +[/Script/EngineSettings.GeneralProjectSettings] +ProjectID=FC3E256F43B2AFD43009F4949B0814BE +ProjectName=Third Person Game Template diff --git a/Config/DefaultInput.ini b/Config/DefaultInput.ini new file mode 100644 index 0000000..ad7bb00 --- /dev/null +++ b/Config/DefaultInput.ini @@ -0,0 +1,86 @@ + + +[/Script/Engine.InputSettings] +-AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.25,Exponent=1.f,Sensitivity=1.f)) +-AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) +-AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.f,Exponent=1.f,Sensitivity=0.07f)) ++AxisConfig=(AxisKeyName="MouseY",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseWheelAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightTriggerAxis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_Special_Left_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Mouse2D",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_LeftY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightX",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Gamepad_RightY",AxisProperties=(DeadZone=0.250000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MouseX",AxisProperties=(DeadZone=0.000000,Sensitivity=0.070000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="Vive_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="MixedReality_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="OculusTouch_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Left_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Grip_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trigger_Axis",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Thumbstick_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_X",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Y",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) ++AxisConfig=(AxisKeyName="ValveIndex_Right_Trackpad_Force",AxisProperties=(DeadZone=0.000000,Sensitivity=1.000000,Exponent=1.000000,bInvert=False)) +bAltEnterTogglesFullscreen=True +bF11TogglesFullscreen=True +bUseMouseForTouch=False +bEnableMouseSmoothing=True +bEnableFOVScaling=True +bCaptureMouseOnLaunch=True +bEnableLegacyInputScales=True +bEnableMotionControls=True +bFilterInputByPlatformUser=False +bShouldFlushPressedKeysOnViewportFocusLost=True +bAlwaysShowTouchInterface=False +bShowConsoleOnFourFingerTap=True +bEnableGestureRecognizer=False +bUseAutocorrect=False +DefaultViewportMouseCaptureMode=CapturePermanently_IncludingInitialMouseDown +DefaultViewportMouseLockMode=LockOnCapture +FOVScale=0.011110 +DoubleClickTime=0.200000 +DefaultPlayerInputClass=/Script/EnhancedInput.EnhancedPlayerInput +DefaultInputComponentClass=/Script/EnhancedInput.EnhancedInputComponent +DefaultTouchInterface=None +-ConsoleKeys=Tilde ++ConsoleKeys=Tilde + diff --git a/Content/Characters/Mannequins/Anims/Death/MM_Death_Back_01.uasset b/Content/Characters/Mannequins/Anims/Death/MM_Death_Back_01.uasset new file mode 100644 index 0000000..917cff8 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Death/MM_Death_Back_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_01.uasset b/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_01.uasset new file mode 100644 index 0000000..ccfd8a9 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_02.uasset b/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_02.uasset new file mode 100644 index 0000000..a5ccfc5 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_02.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_03.uasset b/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_03.uasset new file mode 100644 index 0000000..d31ec0f Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Death/MM_Death_Front_03.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Death/MM_Death_Left_01.uasset b/Content/Characters/Mannequins/Anims/Death/MM_Death_Left_01.uasset new file mode 100644 index 0000000..2ad429e Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Death/MM_Death_Left_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Death/MM_Death_Right_01.uasset b/Content/Characters/Mannequins/Anims/Death/MM_Death_Right_01.uasset new file mode 100644 index 0000000..bce3365 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Death/MM_Death_Right_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Aim/AO_Pistol.uasset b/Content/Characters/Mannequins/Anims/Pistol/Aim/AO_Pistol.uasset new file mode 100644 index 0000000..cc21f78 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Aim/AO_Pistol.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS1.uasset b/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS1.uasset new file mode 100644 index 0000000..09c54fa Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS1.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_CD.uasset b/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_CD.uasset new file mode 100644 index 0000000..94e36c7 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_CD.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_CU.uasset b/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_CU.uasset new file mode 100644 index 0000000..f8cd07f Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Aim/MF_Pistol_Idle_ADS_AO_CU.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd.uasset new file mode 100644 index 0000000..c5bc3a0 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd_Left.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd_Left.uasset new file mode 100644 index 0000000..1c0d6a0 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd_Right.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd_Right.uasset new file mode 100644 index 0000000..e934901 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Bwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd.uasset new file mode 100644 index 0000000..cc14f2241 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd_Left.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd_Left.uasset new file mode 100644 index 0000000..955f71d Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd_Right.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd_Right.uasset new file mode 100644 index 0000000..bcd6de6 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Fwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Left.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Left.uasset new file mode 100644 index 0000000..d5f15aa Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Right.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Right.uasset new file mode 100644 index 0000000..e98c2d4 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jog/MF_Pistol_Jog_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_Fall_Loop.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_Fall_Loop.uasset new file mode 100644 index 0000000..7ca0d7c Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_Fall_Loop.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_RecoveryAdditive.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_RecoveryAdditive.uasset new file mode 100644 index 0000000..9903187 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_RecoveryAdditive.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_Start.uasset b/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_Start.uasset new file mode 100644 index 0000000..2e47a86 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Jump/MM_Pistol_Jump_Start.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/MF_Pistol_Idle_ADS.uasset b/Content/Characters/Mannequins/Anims/Pistol/MF_Pistol_Idle_ADS.uasset new file mode 100644 index 0000000..5829066 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/MF_Pistol_Idle_ADS.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_DryFire.uasset b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_DryFire.uasset new file mode 100644 index 0000000..d04d2f5 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_DryFire.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Equip.uasset b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Equip.uasset new file mode 100644 index 0000000..3c416f2 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Equip.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Fire.uasset b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Fire.uasset new file mode 100644 index 0000000..7120917 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Fire.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Fire_Montage.uasset b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Fire_Montage.uasset new file mode 100644 index 0000000..75d7c8c Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Fire_Montage.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Reload.uasset b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Reload.uasset new file mode 100644 index 0000000..077674e Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/MM_Pistol_Reload.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd.uasset new file mode 100644 index 0000000..2cd3e66 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd_Left.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd_Left.uasset new file mode 100644 index 0000000..eb16ba5 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd_Right.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd_Right.uasset new file mode 100644 index 0000000..c0e647d Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Bwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd.uasset new file mode 100644 index 0000000..dee4cde Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd_Left.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd_Left.uasset new file mode 100644 index 0000000..06eee3a Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd_Right.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd_Right.uasset new file mode 100644 index 0000000..2ff4293 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Fwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Left.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Left.uasset new file mode 100644 index 0000000..c277b2c Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Right.uasset b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Right.uasset new file mode 100644 index 0000000..885473d Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Pistol/Walk/MF_Pistol_Walk_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/AIM/AO_Rifle.uasset b/Content/Characters/Mannequins/Anims/Rifle/AIM/AO_Rifle.uasset new file mode 100644 index 0000000..1b85a18 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/AIM/AO_Rifle.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CC.uasset b/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CC.uasset new file mode 100644 index 0000000..95292ac Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CC.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CD.uasset b/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CD.uasset new file mode 100644 index 0000000..c5c06f9 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CD.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CU.uasset b/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CU.uasset new file mode 100644 index 0000000..eb8a080 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/AIM/MM_Rifle_Idle_ADS_AO_CU.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Back_Med_01.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Back_Med_01.uasset new file mode 100644 index 0000000..74eb352 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Back_Med_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Hvy_01.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Hvy_01.uasset new file mode 100644 index 0000000..396e9f3 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Hvy_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_01.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_01.uasset new file mode 100644 index 0000000..a6846ff Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_02.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_02.uasset new file mode 100644 index 0000000..d0bef37 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_02.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_03.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_03.uasset new file mode 100644 index 0000000..dca4bc6 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_03.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_04.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_04.uasset new file mode 100644 index 0000000..d134adb Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Lgt_04.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Med_01.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Med_01.uasset new file mode 100644 index 0000000..70302cf Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Med_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Med_02.uasset b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Med_02.uasset new file mode 100644 index 0000000..fe6d7d6 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/HitReact/MM_HitReact_Front_Med_02.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd.uasset new file mode 100644 index 0000000..cc1c3a2 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd_Left.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd_Left.uasset new file mode 100644 index 0000000..23a8ebe Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd_Right.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd_Right.uasset new file mode 100644 index 0000000..2cd5292 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Bwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd.uasset new file mode 100644 index 0000000..0cc1859 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd_Left.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd_Left.uasset new file mode 100644 index 0000000..6aa7b51 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd_Right.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd_Right.uasset new file mode 100644 index 0000000..924600c Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Fwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Left.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Left.uasset new file mode 100644 index 0000000..edbb191 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Right.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Right.uasset new file mode 100644 index 0000000..84e67fd Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jog/MF_Rifle_Jog_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Apex.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Apex.uasset new file mode 100644 index 0000000..858c4c5 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Apex.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Fall_Land.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Fall_Land.uasset new file mode 100644 index 0000000..b411ecc Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Fall_Land.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Fall_Loop.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Fall_Loop.uasset new file mode 100644 index 0000000..826ae53 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Fall_Loop.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_RecoveryAdditive.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_RecoveryAdditive.uasset new file mode 100644 index 0000000..9baadd3 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_RecoveryAdditive.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Start.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Start.uasset new file mode 100644 index 0000000..513b51e Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Start.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Start_Loop.uasset b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Start_Loop.uasset new file mode 100644 index 0000000..fc1774b Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Jump/MM_Rifle_Jump_Start_Loop.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/MF_Rifle_Idle_ADS.uasset b/Content/Characters/Mannequins/Anims/Rifle/MF_Rifle_Idle_ADS.uasset new file mode 100644 index 0000000..f569392 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/MF_Rifle_Idle_ADS.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_DryFire.uasset b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_DryFire.uasset new file mode 100644 index 0000000..8db0457 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_DryFire.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Equip.uasset b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Equip.uasset new file mode 100644 index 0000000..faf20c7 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Equip.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Fire.uasset b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Fire.uasset new file mode 100644 index 0000000..3120009 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Fire.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Reload.uasset b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Reload.uasset new file mode 100644 index 0000000..ebee502 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/MM_Rifle_Reload.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd.uasset new file mode 100644 index 0000000..29f95fd Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd_Left.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd_Left.uasset new file mode 100644 index 0000000..86ed9ac Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd_Right.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd_Right.uasset new file mode 100644 index 0000000..aed754e Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Bwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd.uasset new file mode 100644 index 0000000..18f0501 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd_Left.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd_Left.uasset new file mode 100644 index 0000000..9ec1dc5 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd_Right.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd_Right.uasset new file mode 100644 index 0000000..de08560 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Fwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Left.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Left.uasset new file mode 100644 index 0000000..e421d11 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Right.uasset b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Right.uasset new file mode 100644 index 0000000..f324682 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Rifle/Walk/MF_Rifle_Walk_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/ABP_Unarmed.uasset b/Content/Characters/Mannequins/Anims/Unarmed/ABP_Unarmed.uasset new file mode 100644 index 0000000..0ac838a Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/ABP_Unarmed.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_01.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_01.uasset new file mode 100644 index 0000000..58bd156 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_01.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_02.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_02.uasset new file mode 100644 index 0000000..ec5f1e3 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_02.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_03.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_03.uasset new file mode 100644 index 0000000..88efb9a Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_Attack_03.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_ChargedAttack.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_ChargedAttack.uasset new file mode 100644 index 0000000..a6dc463 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Attack/MM_ChargedAttack.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/BS_Idle_Walk_Run.uasset b/Content/Characters/Mannequins/Anims/Unarmed/BS_Idle_Walk_Run.uasset new file mode 100644 index 0000000..de46f07 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/BS_Idle_Walk_Run.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd.uasset new file mode 100644 index 0000000..21c9a0f Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd_Left.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd_Left.uasset new file mode 100644 index 0000000..34a4c9d Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd_Right.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd_Right.uasset new file mode 100644 index 0000000..c0c75e5 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Bwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd.uasset new file mode 100644 index 0000000..0a5fa59 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd_Left.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd_Left.uasset new file mode 100644 index 0000000..c6c5368 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd_Right.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd_Right.uasset new file mode 100644 index 0000000..112223b Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Fwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Left.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Left.uasset new file mode 100644 index 0000000..f9fe418 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Right.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Right.uasset new file mode 100644 index 0000000..e455a2e Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jog/MF_Unarmed_Jog_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Dash.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Dash.uasset new file mode 100644 index 0000000..69df391 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Dash.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Fall_Loop.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Fall_Loop.uasset new file mode 100644 index 0000000..86c58a1 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Fall_Loop.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Jump.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Jump.uasset new file mode 100644 index 0000000..5229aa9 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Jump.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Land.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Land.uasset new file mode 100644 index 0000000..9560d54 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_Land.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_WallJump.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_WallJump.uasset new file mode 100644 index 0000000..73a2af9 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Jump/MM_WallJump.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/MM_Idle.uasset b/Content/Characters/Mannequins/Anims/Unarmed/MM_Idle.uasset new file mode 100644 index 0000000..0f10045 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/MM_Idle.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd.uasset new file mode 100644 index 0000000..03db74a Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd_Left.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd_Left.uasset new file mode 100644 index 0000000..f7b1a96 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd_Right.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd_Right.uasset new file mode 100644 index 0000000..3a03801 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Bwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd.uasset new file mode 100644 index 0000000..d780a3a Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd_Left.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd_Left.uasset new file mode 100644 index 0000000..331e673 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd_Right.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd_Right.uasset new file mode 100644 index 0000000..b715bbe Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Fwd_Right.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Left.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Left.uasset new file mode 100644 index 0000000..5b5f188 Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Left.uasset differ diff --git a/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Right.uasset b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Right.uasset new file mode 100644 index 0000000..6d0ba3f Binary files /dev/null and b/Content/Characters/Mannequins/Anims/Unarmed/Walk/MF_Unarmed_Walk_Right.uasset differ diff --git a/Content/Characters/Mannequins/Materials/M_Mannequin.uasset b/Content/Characters/Mannequins/Materials/M_Mannequin.uasset new file mode 100644 index 0000000..a384381 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/M_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Manny/MI_Manny_01_New.uasset b/Content/Characters/Mannequins/Materials/Manny/MI_Manny_01_New.uasset new file mode 100644 index 0000000..6316baf Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Manny/MI_Manny_01_New.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Manny/MI_Manny_02_New.uasset b/Content/Characters/Mannequins/Materials/Manny/MI_Manny_02_New.uasset new file mode 100644 index 0000000..5c98ea5 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Manny/MI_Manny_02_New.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Quinn/MI_Quinn_01.uasset b/Content/Characters/Mannequins/Materials/Quinn/MI_Quinn_01.uasset new file mode 100644 index 0000000..b2d7eec Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Quinn/MI_Quinn_01.uasset differ diff --git a/Content/Characters/Mannequins/Materials/Quinn/MI_Quinn_02.uasset b/Content/Characters/Mannequins/Materials/Quinn/MI_Quinn_02.uasset new file mode 100644 index 0000000..74bbb66 Binary files /dev/null and b/Content/Characters/Mannequins/Materials/Quinn/MI_Quinn_02.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset b/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset new file mode 100644 index 0000000..077e1f4 Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SKM_Manny_Simple.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset b/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset new file mode 100644 index 0000000..df9c636 Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SKM_Quinn_Simple.uasset differ diff --git a/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset b/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset new file mode 100644 index 0000000..60f16f0 Binary files /dev/null and b/Content/Characters/Mannequins/Meshes/SK_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset new file mode 100644 index 0000000..6032287 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Body.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/CR_Mannequin_FootIK.uasset b/Content/Characters/Mannequins/Rigs/CR_Mannequin_FootIK.uasset new file mode 100644 index 0000000..b4c4426 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/CR_Mannequin_FootIK.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset new file mode 100644 index 0000000..0b2c38d Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/CR_Mannequin_Procedural.uasset differ diff --git a/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset b/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset new file mode 100644 index 0000000..3518d39 Binary files /dev/null and b/Content/Characters/Mannequins/Rigs/PA_Mannequin.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset new file mode 100644 index 0000000..2c4145b Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_BN.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset new file mode 100644 index 0000000..2e236b4 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MRA.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MRA.uasset new file mode 100644 index 0000000..faa8537 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_01_MRA.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset new file mode 100644 index 0000000..fbee995 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_BN.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset new file mode 100644 index 0000000..56262e6 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MRA.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MRA.uasset new file mode 100644 index 0000000..f2f4f83 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_MRA.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset new file mode 100644 index 0000000..e8e61da Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Manny/T_Manny_02_N.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_D.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_D.uasset new file mode 100644 index 0000000..d2e0ab2 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_MRA.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_MRA.uasset new file mode 100644 index 0000000..8244da9 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_MRA.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_N.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_N.uasset new file mode 100644 index 0000000..44bd3c8 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_01_N.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_D.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_D.uasset new file mode 100644 index 0000000..63bd3b7 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_D.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_MRA.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_MRA.uasset new file mode 100644 index 0000000..6c4a979 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_MRA.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_N.uasset b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_N.uasset new file mode 100644 index 0000000..3ba5513 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Quinn/T_Quinn_02_N.uasset differ diff --git a/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset b/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset new file mode 100644 index 0000000..1cc7ef6 Binary files /dev/null and b/Content/Characters/Mannequins/Textures/Shared/T_UE_Logo_M.uasset differ diff --git a/Content/Input/Actions/IA_Jump.uasset b/Content/Input/Actions/IA_Jump.uasset new file mode 100644 index 0000000..49d209b Binary files /dev/null and b/Content/Input/Actions/IA_Jump.uasset differ diff --git a/Content/Input/Actions/IA_Look.uasset b/Content/Input/Actions/IA_Look.uasset new file mode 100644 index 0000000..d87d291 Binary files /dev/null and b/Content/Input/Actions/IA_Look.uasset differ diff --git a/Content/Input/Actions/IA_MouseLook.uasset b/Content/Input/Actions/IA_MouseLook.uasset new file mode 100644 index 0000000..6161fb0 Binary files /dev/null and b/Content/Input/Actions/IA_MouseLook.uasset differ diff --git a/Content/Input/Actions/IA_Move.uasset b/Content/Input/Actions/IA_Move.uasset new file mode 100644 index 0000000..892d571 Binary files /dev/null and b/Content/Input/Actions/IA_Move.uasset differ diff --git a/Content/Input/IMC_Default.uasset b/Content/Input/IMC_Default.uasset new file mode 100644 index 0000000..4dddf94 Binary files /dev/null and b/Content/Input/IMC_Default.uasset differ diff --git a/Content/Input/IMC_MouseLook.uasset b/Content/Input/IMC_MouseLook.uasset new file mode 100644 index 0000000..1216180 Binary files /dev/null and b/Content/Input/IMC_MouseLook.uasset differ diff --git a/Content/Input/Touch/BPI_TouchInterface.uasset b/Content/Input/Touch/BPI_TouchInterface.uasset new file mode 100644 index 0000000..f627245 Binary files /dev/null and b/Content/Input/Touch/BPI_TouchInterface.uasset differ diff --git a/Content/Input/Touch/UI_Thumbstick.uasset b/Content/Input/Touch/UI_Thumbstick.uasset new file mode 100644 index 0000000..f597a90 Binary files /dev/null and b/Content/Input/Touch/UI_Thumbstick.uasset differ diff --git a/Content/Input/Touch/UI_TouchSimple.uasset b/Content/Input/Touch/UI_TouchSimple.uasset new file mode 100644 index 0000000..3b6cb2b Binary files /dev/null and b/Content/Input/Touch/UI_TouchSimple.uasset differ diff --git a/Content/LevelPrototyping/Interactable/Door/BP_DoorFrame.uasset b/Content/LevelPrototyping/Interactable/Door/BP_DoorFrame.uasset new file mode 100644 index 0000000..88f7170 Binary files /dev/null and b/Content/LevelPrototyping/Interactable/Door/BP_DoorFrame.uasset differ diff --git a/Content/LevelPrototyping/Interactable/Door/Meshes/SM_Door.uasset b/Content/LevelPrototyping/Interactable/Door/Meshes/SM_Door.uasset new file mode 100644 index 0000000..9f5a3e1 Binary files /dev/null and b/Content/LevelPrototyping/Interactable/Door/Meshes/SM_Door.uasset differ diff --git a/Content/LevelPrototyping/Interactable/Door/Meshes/SM_DoorFrame_Corner.uasset b/Content/LevelPrototyping/Interactable/Door/Meshes/SM_DoorFrame_Corner.uasset new file mode 100644 index 0000000..65c50ba Binary files /dev/null and b/Content/LevelPrototyping/Interactable/Door/Meshes/SM_DoorFrame_Corner.uasset differ diff --git a/Content/LevelPrototyping/Interactable/Door/Meshes/SM_DoorFrame_Edge.uasset b/Content/LevelPrototyping/Interactable/Door/Meshes/SM_DoorFrame_Edge.uasset new file mode 100644 index 0000000..4497526 Binary files /dev/null and b/Content/LevelPrototyping/Interactable/Door/Meshes/SM_DoorFrame_Edge.uasset differ diff --git a/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/MI_GlowNT.uasset b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/MI_GlowNT.uasset new file mode 100644 index 0000000..df55d5c Binary files /dev/null and b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/MI_GlowNT.uasset differ diff --git a/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/M_GradientGlow.uasset b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/M_GradientGlow.uasset new file mode 100644 index 0000000..0db8b14 Binary files /dev/null and b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/M_GradientGlow.uasset differ diff --git a/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/M_SimpleGlow.uasset b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/M_SimpleGlow.uasset new file mode 100644 index 0000000..8b7eaba Binary files /dev/null and b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Materials/M_SimpleGlow.uasset differ diff --git a/Content/LevelPrototyping/Interactable/JumpPad/Assets/Meshes/SM_CircularBand.uasset b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Meshes/SM_CircularBand.uasset new file mode 100644 index 0000000..4fe6d9a Binary files /dev/null and b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Meshes/SM_CircularBand.uasset differ diff --git a/Content/LevelPrototyping/Interactable/JumpPad/Assets/Meshes/SM_CircularGlow.uasset b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Meshes/SM_CircularGlow.uasset new file mode 100644 index 0000000..86cecae Binary files /dev/null and b/Content/LevelPrototyping/Interactable/JumpPad/Assets/Meshes/SM_CircularGlow.uasset differ diff --git a/Content/LevelPrototyping/Interactable/JumpPad/Assets/NS_JumpPad.uasset b/Content/LevelPrototyping/Interactable/JumpPad/Assets/NS_JumpPad.uasset new file mode 100644 index 0000000..9981a30 Binary files /dev/null and b/Content/LevelPrototyping/Interactable/JumpPad/Assets/NS_JumpPad.uasset differ diff --git a/Content/LevelPrototyping/Interactable/JumpPad/BP_JumpPad.uasset b/Content/LevelPrototyping/Interactable/JumpPad/BP_JumpPad.uasset new file mode 100644 index 0000000..541de5c Binary files /dev/null and b/Content/LevelPrototyping/Interactable/JumpPad/BP_JumpPad.uasset differ diff --git a/Content/LevelPrototyping/Interactable/Target/Assets/SM_TargetBaseMesh.uasset b/Content/LevelPrototyping/Interactable/Target/Assets/SM_TargetBaseMesh.uasset new file mode 100644 index 0000000..f154a0e Binary files /dev/null and b/Content/LevelPrototyping/Interactable/Target/Assets/SM_TargetBaseMesh.uasset differ diff --git a/Content/LevelPrototyping/Interactable/Target/BP_WobbleTarget.uasset b/Content/LevelPrototyping/Interactable/Target/BP_WobbleTarget.uasset new file mode 100644 index 0000000..115c622 Binary files /dev/null and b/Content/LevelPrototyping/Interactable/Target/BP_WobbleTarget.uasset differ diff --git a/Content/LevelPrototyping/Materials/MF_ProcGrid.uasset b/Content/LevelPrototyping/Materials/MF_ProcGrid.uasset new file mode 100644 index 0000000..f3e6461 Binary files /dev/null and b/Content/LevelPrototyping/Materials/MF_ProcGrid.uasset differ diff --git a/Content/LevelPrototyping/Materials/MI_DefaultColorway.uasset b/Content/LevelPrototyping/Materials/MI_DefaultColorway.uasset new file mode 100644 index 0000000..76da848 Binary files /dev/null and b/Content/LevelPrototyping/Materials/MI_DefaultColorway.uasset differ diff --git a/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray.uasset b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray.uasset new file mode 100644 index 0000000..63a5bfa Binary files /dev/null and b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray.uasset differ diff --git a/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray_02.uasset b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray_02.uasset new file mode 100644 index 0000000..2accd35 Binary files /dev/null and b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray_02.uasset differ diff --git a/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray_Round.uasset b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray_Round.uasset new file mode 100644 index 0000000..954d27f Binary files /dev/null and b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_Gray_Round.uasset differ diff --git a/Content/LevelPrototyping/Materials/MI_PrototypeGrid_TopDark.uasset b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_TopDark.uasset new file mode 100644 index 0000000..bc39915 Binary files /dev/null and b/Content/LevelPrototyping/Materials/MI_PrototypeGrid_TopDark.uasset differ diff --git a/Content/LevelPrototyping/Materials/M_FlatCol.uasset b/Content/LevelPrototyping/Materials/M_FlatCol.uasset new file mode 100644 index 0000000..a182f0c Binary files /dev/null and b/Content/LevelPrototyping/Materials/M_FlatCol.uasset differ diff --git a/Content/LevelPrototyping/Materials/M_PrototypeGrid.uasset b/Content/LevelPrototyping/Materials/M_PrototypeGrid.uasset new file mode 100644 index 0000000..edb0c7f Binary files /dev/null and b/Content/LevelPrototyping/Materials/M_PrototypeGrid.uasset differ diff --git a/Content/LevelPrototyping/Meshes/SM_ChamferCube.uasset b/Content/LevelPrototyping/Meshes/SM_ChamferCube.uasset new file mode 100644 index 0000000..f1df33d Binary files /dev/null and b/Content/LevelPrototyping/Meshes/SM_ChamferCube.uasset differ diff --git a/Content/LevelPrototyping/Meshes/SM_Cube.uasset b/Content/LevelPrototyping/Meshes/SM_Cube.uasset new file mode 100644 index 0000000..064d510 Binary files /dev/null and b/Content/LevelPrototyping/Meshes/SM_Cube.uasset differ diff --git a/Content/LevelPrototyping/Meshes/SM_Cylinder.uasset b/Content/LevelPrototyping/Meshes/SM_Cylinder.uasset new file mode 100644 index 0000000..c9507f3 Binary files /dev/null and b/Content/LevelPrototyping/Meshes/SM_Cylinder.uasset differ diff --git a/Content/LevelPrototyping/Meshes/SM_Plane.uasset b/Content/LevelPrototyping/Meshes/SM_Plane.uasset new file mode 100644 index 0000000..db5527a Binary files /dev/null and b/Content/LevelPrototyping/Meshes/SM_Plane.uasset differ diff --git a/Content/LevelPrototyping/Meshes/SM_QuarterCylinder.uasset b/Content/LevelPrototyping/Meshes/SM_QuarterCylinder.uasset new file mode 100644 index 0000000..2e5bcee Binary files /dev/null and b/Content/LevelPrototyping/Meshes/SM_QuarterCylinder.uasset differ diff --git a/Content/LevelPrototyping/Meshes/SM_QuarterCylinderOuter.uasset b/Content/LevelPrototyping/Meshes/SM_QuarterCylinderOuter.uasset new file mode 100644 index 0000000..fcab6f9 Binary files /dev/null and b/Content/LevelPrototyping/Meshes/SM_QuarterCylinderOuter.uasset differ diff --git a/Content/LevelPrototyping/Meshes/SM_Ramp.uasset b/Content/LevelPrototyping/Meshes/SM_Ramp.uasset new file mode 100644 index 0000000..e1293ee Binary files /dev/null and b/Content/LevelPrototyping/Meshes/SM_Ramp.uasset differ diff --git a/Content/LevelPrototyping/Textures/T_GridChecker_A.uasset b/Content/LevelPrototyping/Textures/T_GridChecker_A.uasset new file mode 100644 index 0000000..e901d24 Binary files /dev/null and b/Content/LevelPrototyping/Textures/T_GridChecker_A.uasset differ diff --git a/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset b/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset new file mode 100644 index 0000000..b4a8478 Binary files /dev/null and b/Content/ThirdPerson/Blueprints/BP_ThirdPersonCharacter.uasset differ diff --git a/Content/ThirdPerson/Blueprints/BP_ThirdPersonGameMode.uasset b/Content/ThirdPerson/Blueprints/BP_ThirdPersonGameMode.uasset new file mode 100644 index 0000000..649362b Binary files /dev/null and b/Content/ThirdPerson/Blueprints/BP_ThirdPersonGameMode.uasset differ diff --git a/Content/ThirdPerson/Blueprints/BP_ThirdPersonPlayerController.uasset b/Content/ThirdPerson/Blueprints/BP_ThirdPersonPlayerController.uasset new file mode 100644 index 0000000..d913ba6 Binary files /dev/null and b/Content/ThirdPerson/Blueprints/BP_ThirdPersonPlayerController.uasset differ diff --git a/Content/ThirdPerson/Lvl_ThirdPerson.umap b/Content/ThirdPerson/Lvl_ThirdPerson.umap new file mode 100644 index 0000000..3015a16 Binary files /dev/null and b/Content/ThirdPerson/Lvl_ThirdPerson.umap differ diff --git a/Content/ThirdPerson/MI_ThirdPersonColWay.uasset b/Content/ThirdPerson/MI_ThirdPersonColWay.uasset new file mode 100644 index 0000000..a215863 Binary files /dev/null and b/Content/ThirdPerson/MI_ThirdPersonColWay.uasset differ diff --git a/Content/ThirdPerson/TestWorld.umap b/Content/ThirdPerson/TestWorld.umap new file mode 100644 index 0000000..3ce30a4 Binary files /dev/null and b/Content/ThirdPerson/TestWorld.umap differ diff --git a/Content/Variant_Combat/Anims/ABP_Manny_Combat.uasset b/Content/Variant_Combat/Anims/ABP_Manny_Combat.uasset new file mode 100644 index 0000000..3c308d1 Binary files /dev/null and b/Content/Variant_Combat/Anims/ABP_Manny_Combat.uasset differ diff --git a/Content/Variant_Combat/Anims/AM_ChargedAttack.uasset b/Content/Variant_Combat/Anims/AM_ChargedAttack.uasset new file mode 100644 index 0000000..56daa84 Binary files /dev/null and b/Content/Variant_Combat/Anims/AM_ChargedAttack.uasset differ diff --git a/Content/Variant_Combat/Anims/AM_ComboAttack.uasset b/Content/Variant_Combat/Anims/AM_ComboAttack.uasset new file mode 100644 index 0000000..df8067e Binary files /dev/null and b/Content/Variant_Combat/Anims/AM_ComboAttack.uasset differ diff --git a/Content/Variant_Combat/Blueprints/AI/BP_CombatAIController.uasset b/Content/Variant_Combat/Blueprints/AI/BP_CombatAIController.uasset new file mode 100644 index 0000000..614d0da Binary files /dev/null and b/Content/Variant_Combat/Blueprints/AI/BP_CombatAIController.uasset differ diff --git a/Content/Variant_Combat/Blueprints/AI/BP_CombatEnemy.uasset b/Content/Variant_Combat/Blueprints/AI/BP_CombatEnemy.uasset new file mode 100644 index 0000000..7705d1a Binary files /dev/null and b/Content/Variant_Combat/Blueprints/AI/BP_CombatEnemy.uasset differ diff --git a/Content/Variant_Combat/Blueprints/AI/BP_CombatEnemySpawner.uasset b/Content/Variant_Combat/Blueprints/AI/BP_CombatEnemySpawner.uasset new file mode 100644 index 0000000..ba3573f Binary files /dev/null and b/Content/Variant_Combat/Blueprints/AI/BP_CombatEnemySpawner.uasset differ diff --git a/Content/Variant_Combat/Blueprints/AI/EnvQuery_Evade.uasset b/Content/Variant_Combat/Blueprints/AI/EnvQuery_Evade.uasset new file mode 100644 index 0000000..912ba02 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/AI/EnvQuery_Evade.uasset differ diff --git a/Content/Variant_Combat/Blueprints/AI/EnvQuery_Fallback.uasset b/Content/Variant_Combat/Blueprints/AI/EnvQuery_Fallback.uasset new file mode 100644 index 0000000..681bf0d Binary files /dev/null and b/Content/Variant_Combat/Blueprints/AI/EnvQuery_Fallback.uasset differ diff --git a/Content/Variant_Combat/Blueprints/AI/EnvQuery_Flank.uasset b/Content/Variant_Combat/Blueprints/AI/EnvQuery_Flank.uasset new file mode 100644 index 0000000..18724ef Binary files /dev/null and b/Content/Variant_Combat/Blueprints/AI/EnvQuery_Flank.uasset differ diff --git a/Content/Variant_Combat/Blueprints/AI/ST_CombatEnemy.uasset b/Content/Variant_Combat/Blueprints/AI/ST_CombatEnemy.uasset new file mode 100644 index 0000000..2ba0933 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/AI/ST_CombatEnemy.uasset differ diff --git a/Content/Variant_Combat/Blueprints/BP_CameraShake_Hit_Enemy.uasset b/Content/Variant_Combat/Blueprints/BP_CameraShake_Hit_Enemy.uasset new file mode 100644 index 0000000..4d81109 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/BP_CameraShake_Hit_Enemy.uasset differ diff --git a/Content/Variant_Combat/Blueprints/BP_CameraShake_Hit_Player.uasset b/Content/Variant_Combat/Blueprints/BP_CameraShake_Hit_Player.uasset new file mode 100644 index 0000000..ae20d4b Binary files /dev/null and b/Content/Variant_Combat/Blueprints/BP_CameraShake_Hit_Player.uasset differ diff --git a/Content/Variant_Combat/Blueprints/BP_CombatCharacter.uasset b/Content/Variant_Combat/Blueprints/BP_CombatCharacter.uasset new file mode 100644 index 0000000..6ee8e69 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/BP_CombatCharacter.uasset differ diff --git a/Content/Variant_Combat/Blueprints/BP_CombatGameMode.uasset b/Content/Variant_Combat/Blueprints/BP_CombatGameMode.uasset new file mode 100644 index 0000000..a18bcbb Binary files /dev/null and b/Content/Variant_Combat/Blueprints/BP_CombatGameMode.uasset differ diff --git a/Content/Variant_Combat/Blueprints/BP_CombatPlayerController.uasset b/Content/Variant_Combat/Blueprints/BP_CombatPlayerController.uasset new file mode 100644 index 0000000..e24902e Binary files /dev/null and b/Content/Variant_Combat/Blueprints/BP_CombatPlayerController.uasset differ diff --git a/Content/Variant_Combat/Blueprints/Interactables/BP_CombatActivationVolume.uasset b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatActivationVolume.uasset new file mode 100644 index 0000000..90dd2c2 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatActivationVolume.uasset differ diff --git a/Content/Variant_Combat/Blueprints/Interactables/BP_CombatCheckpointVolume.uasset b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatCheckpointVolume.uasset new file mode 100644 index 0000000..9682ec7 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatCheckpointVolume.uasset differ diff --git a/Content/Variant_Combat/Blueprints/Interactables/BP_CombatDamageableBox.uasset b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatDamageableBox.uasset new file mode 100644 index 0000000..e0d89a8 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatDamageableBox.uasset differ diff --git a/Content/Variant_Combat/Blueprints/Interactables/BP_CombatDummy.uasset b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatDummy.uasset new file mode 100644 index 0000000..e687bb9 Binary files /dev/null and b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatDummy.uasset differ diff --git a/Content/Variant_Combat/Blueprints/Interactables/BP_CombatLavaFloor.uasset b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatLavaFloor.uasset new file mode 100644 index 0000000..fb931fd Binary files /dev/null and b/Content/Variant_Combat/Blueprints/Interactables/BP_CombatLavaFloor.uasset differ diff --git a/Content/Variant_Combat/Input/Actions/IA_ChargedAttack.uasset b/Content/Variant_Combat/Input/Actions/IA_ChargedAttack.uasset new file mode 100644 index 0000000..665e2b1 Binary files /dev/null and b/Content/Variant_Combat/Input/Actions/IA_ChargedAttack.uasset differ diff --git a/Content/Variant_Combat/Input/Actions/IA_ComboAttack.uasset b/Content/Variant_Combat/Input/Actions/IA_ComboAttack.uasset new file mode 100644 index 0000000..4a6fdfa Binary files /dev/null and b/Content/Variant_Combat/Input/Actions/IA_ComboAttack.uasset differ diff --git a/Content/Variant_Combat/Input/Actions/IA_ToggleCameraSide.uasset b/Content/Variant_Combat/Input/Actions/IA_ToggleCameraSide.uasset new file mode 100644 index 0000000..12595e9 Binary files /dev/null and b/Content/Variant_Combat/Input/Actions/IA_ToggleCameraSide.uasset differ diff --git a/Content/Variant_Combat/Input/BPI_TouchInterface_Combat.uasset b/Content/Variant_Combat/Input/BPI_TouchInterface_Combat.uasset new file mode 100644 index 0000000..744ad76 Binary files /dev/null and b/Content/Variant_Combat/Input/BPI_TouchInterface_Combat.uasset differ diff --git a/Content/Variant_Combat/Input/IMC_Combat.uasset b/Content/Variant_Combat/Input/IMC_Combat.uasset new file mode 100644 index 0000000..d58afcf Binary files /dev/null and b/Content/Variant_Combat/Input/IMC_Combat.uasset differ diff --git a/Content/Variant_Combat/Input/UI_TouchInterface_Combat.uasset b/Content/Variant_Combat/Input/UI_TouchInterface_Combat.uasset new file mode 100644 index 0000000..8be9c1b Binary files /dev/null and b/Content/Variant_Combat/Input/UI_TouchInterface_Combat.uasset differ diff --git a/Content/Variant_Combat/Lvl_Combat.umap b/Content/Variant_Combat/Lvl_Combat.umap new file mode 100644 index 0000000..caa3ad0 Binary files /dev/null and b/Content/Variant_Combat/Lvl_Combat.umap differ diff --git a/Content/Variant_Combat/Materials/MI_Box_Destroyed.uasset b/Content/Variant_Combat/Materials/MI_Box_Destroyed.uasset new file mode 100644 index 0000000..a690dfa Binary files /dev/null and b/Content/Variant_Combat/Materials/MI_Box_Destroyed.uasset differ diff --git a/Content/Variant_Combat/Materials/M_Lava.uasset b/Content/Variant_Combat/Materials/M_Lava.uasset new file mode 100644 index 0000000..2005b6c Binary files /dev/null and b/Content/Variant_Combat/Materials/M_Lava.uasset differ diff --git a/Content/Variant_Combat/UI/UI_LifeBar.uasset b/Content/Variant_Combat/UI/UI_LifeBar.uasset new file mode 100644 index 0000000..a192e4e Binary files /dev/null and b/Content/Variant_Combat/UI/UI_LifeBar.uasset differ diff --git a/Content/Variant_Combat/VFX/NS_Damage.uasset b/Content/Variant_Combat/VFX/NS_Damage.uasset new file mode 100644 index 0000000..a1d8ecb Binary files /dev/null and b/Content/Variant_Combat/VFX/NS_Damage.uasset differ diff --git a/Content/Variant_Platforming/Anims/ABP_Manny_Platforming.uasset b/Content/Variant_Platforming/Anims/ABP_Manny_Platforming.uasset new file mode 100644 index 0000000..9efeee9 Binary files /dev/null and b/Content/Variant_Platforming/Anims/ABP_Manny_Platforming.uasset differ diff --git a/Content/Variant_Platforming/Anims/AM_Dash.uasset b/Content/Variant_Platforming/Anims/AM_Dash.uasset new file mode 100644 index 0000000..6477cbc Binary files /dev/null and b/Content/Variant_Platforming/Anims/AM_Dash.uasset differ diff --git a/Content/Variant_Platforming/Blueprints/BP_PlatformingCharacter.uasset b/Content/Variant_Platforming/Blueprints/BP_PlatformingCharacter.uasset new file mode 100644 index 0000000..2f62d75 Binary files /dev/null and b/Content/Variant_Platforming/Blueprints/BP_PlatformingCharacter.uasset differ diff --git a/Content/Variant_Platforming/Blueprints/BP_PlatformingGameMode.uasset b/Content/Variant_Platforming/Blueprints/BP_PlatformingGameMode.uasset new file mode 100644 index 0000000..645451f Binary files /dev/null and b/Content/Variant_Platforming/Blueprints/BP_PlatformingGameMode.uasset differ diff --git a/Content/Variant_Platforming/Blueprints/BP_PlatformingPlayerController.uasset b/Content/Variant_Platforming/Blueprints/BP_PlatformingPlayerController.uasset new file mode 100644 index 0000000..4294554 Binary files /dev/null and b/Content/Variant_Platforming/Blueprints/BP_PlatformingPlayerController.uasset differ diff --git a/Content/Variant_Platforming/Input/Actions/IA_Dash.uasset b/Content/Variant_Platforming/Input/Actions/IA_Dash.uasset new file mode 100644 index 0000000..690cbd5 Binary files /dev/null and b/Content/Variant_Platforming/Input/Actions/IA_Dash.uasset differ diff --git a/Content/Variant_Platforming/Input/BPI_TouchInterface_Platforming.uasset b/Content/Variant_Platforming/Input/BPI_TouchInterface_Platforming.uasset new file mode 100644 index 0000000..293820a Binary files /dev/null and b/Content/Variant_Platforming/Input/BPI_TouchInterface_Platforming.uasset differ diff --git a/Content/Variant_Platforming/Input/IMC_Platforming.uasset b/Content/Variant_Platforming/Input/IMC_Platforming.uasset new file mode 100644 index 0000000..05ac570 Binary files /dev/null and b/Content/Variant_Platforming/Input/IMC_Platforming.uasset differ diff --git a/Content/Variant_Platforming/Input/UI_TouchInterface_Platforming.uasset b/Content/Variant_Platforming/Input/UI_TouchInterface_Platforming.uasset new file mode 100644 index 0000000..ec067ea Binary files /dev/null and b/Content/Variant_Platforming/Input/UI_TouchInterface_Platforming.uasset differ diff --git a/Content/Variant_Platforming/Lvl_Platforming.umap b/Content/Variant_Platforming/Lvl_Platforming.umap new file mode 100644 index 0000000..3814014 Binary files /dev/null and b/Content/Variant_Platforming/Lvl_Platforming.umap differ diff --git a/Content/Variant_Platforming/VFX/NS_Jump_Trail.uasset b/Content/Variant_Platforming/VFX/NS_Jump_Trail.uasset new file mode 100644 index 0000000..3cfe81a Binary files /dev/null and b/Content/Variant_Platforming/VFX/NS_Jump_Trail.uasset differ diff --git a/Content/Variant_SideScrolling/Anims/ABP_Manny_SideScroller.uasset b/Content/Variant_SideScrolling/Anims/ABP_Manny_SideScroller.uasset new file mode 100644 index 0000000..2f401c0 Binary files /dev/null and b/Content/Variant_SideScrolling/Anims/ABP_Manny_SideScroller.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/AI/BP_SideScrollingAIController.uasset b/Content/Variant_SideScrolling/Blueprints/AI/BP_SideScrollingAIController.uasset new file mode 100644 index 0000000..313522c Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/AI/BP_SideScrollingAIController.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/AI/BP_SideScrollingNPC.uasset b/Content/Variant_SideScrolling/Blueprints/AI/BP_SideScrollingNPC.uasset new file mode 100644 index 0000000..466cfab Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/AI/BP_SideScrollingNPC.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/AI/ST_SideScrollingNPC.uasset b/Content/Variant_SideScrolling/Blueprints/AI/ST_SideScrollingNPC.uasset new file mode 100644 index 0000000..e8d35a7 Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/AI/ST_SideScrollingNPC.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingCameraManager.uasset b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingCameraManager.uasset new file mode 100644 index 0000000..b1fcdb0 Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingCameraManager.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingCharacter.uasset b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingCharacter.uasset new file mode 100644 index 0000000..1285a38 Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingCharacter.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingGameMode.uasset b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingGameMode.uasset new file mode 100644 index 0000000..ea7afa8 Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingGameMode.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingPlayerController.uasset b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingPlayerController.uasset new file mode 100644 index 0000000..23deb13 Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/BP_SideScrollingPlayerController.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingMovingPlatform.uasset b/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingMovingPlatform.uasset new file mode 100644 index 0000000..516bcc0 Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingMovingPlatform.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingPickup.uasset b/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingPickup.uasset new file mode 100644 index 0000000..d67ff7d Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingPickup.uasset differ diff --git a/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingSoftPlatform.uasset b/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingSoftPlatform.uasset new file mode 100644 index 0000000..fc1fa1c Binary files /dev/null and b/Content/Variant_SideScrolling/Blueprints/Items/BP_SideScrollingSoftPlatform.uasset differ diff --git a/Content/Variant_SideScrolling/Input/Actions/IA_Drop.uasset b/Content/Variant_SideScrolling/Input/Actions/IA_Drop.uasset new file mode 100644 index 0000000..6d918bb Binary files /dev/null and b/Content/Variant_SideScrolling/Input/Actions/IA_Drop.uasset differ diff --git a/Content/Variant_SideScrolling/Input/Actions/IA_Interact.uasset b/Content/Variant_SideScrolling/Input/Actions/IA_Interact.uasset new file mode 100644 index 0000000..4d4760a Binary files /dev/null and b/Content/Variant_SideScrolling/Input/Actions/IA_Interact.uasset differ diff --git a/Content/Variant_SideScrolling/Input/Actions/IA_Mover.uasset b/Content/Variant_SideScrolling/Input/Actions/IA_Mover.uasset new file mode 100644 index 0000000..383f490 Binary files /dev/null and b/Content/Variant_SideScrolling/Input/Actions/IA_Mover.uasset differ diff --git a/Content/Variant_SideScrolling/Input/BPI_TouchInterface_SideScrolling.uasset b/Content/Variant_SideScrolling/Input/BPI_TouchInterface_SideScrolling.uasset new file mode 100644 index 0000000..219a795 Binary files /dev/null and b/Content/Variant_SideScrolling/Input/BPI_TouchInterface_SideScrolling.uasset differ diff --git a/Content/Variant_SideScrolling/Input/IMC_SideScroller.uasset b/Content/Variant_SideScrolling/Input/IMC_SideScroller.uasset new file mode 100644 index 0000000..069d802 Binary files /dev/null and b/Content/Variant_SideScrolling/Input/IMC_SideScroller.uasset differ diff --git a/Content/Variant_SideScrolling/Input/UI_TouchInterface_SideScrolling.uasset b/Content/Variant_SideScrolling/Input/UI_TouchInterface_SideScrolling.uasset new file mode 100644 index 0000000..5a3e3d0 Binary files /dev/null and b/Content/Variant_SideScrolling/Input/UI_TouchInterface_SideScrolling.uasset differ diff --git a/Content/Variant_SideScrolling/Lvl_SideScrolling.umap b/Content/Variant_SideScrolling/Lvl_SideScrolling.umap new file mode 100644 index 0000000..c411b58 Binary files /dev/null and b/Content/Variant_SideScrolling/Lvl_SideScrolling.umap differ diff --git a/Content/Variant_SideScrolling/UI/UI_SideScrolling.uasset b/Content/Variant_SideScrolling/UI/UI_SideScrolling.uasset new file mode 100644 index 0000000..93a290a Binary files /dev/null and b/Content/Variant_SideScrolling/UI/UI_SideScrolling.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/1/2G/02U8G0EXYJ1BTT3AV3Q9WM.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/2G/02U8G0EXYJ1BTT3AV3Q9WM.uasset new file mode 100644 index 0000000..333a023 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/2G/02U8G0EXYJ1BTT3AV3Q9WM.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/1/3L/A2MGK5FOHKL79MG3GHM98G.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/3L/A2MGK5FOHKL79MG3GHM98G.uasset new file mode 100644 index 0000000..4269434 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/3L/A2MGK5FOHKL79MG3GHM98G.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/1/9O/FRJGV6530E9MDUAXUUMVT2.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/9O/FRJGV6530E9MDUAXUUMVT2.uasset new file mode 100644 index 0000000..b1556bc Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/9O/FRJGV6530E9MDUAXUUMVT2.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/1/IG/UMDLFRNRL0X2EHVXYK5GHU.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/IG/UMDLFRNRL0X2EHVXYK5GHU.uasset new file mode 100644 index 0000000..6af849b Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/IG/UMDLFRNRL0X2EHVXYK5GHU.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/1/XZ/4B9S1TXRVTRUH65OYK2B2P.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/XZ/4B9S1TXRVTRUH65OYK2B2P.uasset new file mode 100644 index 0000000..e1bbdf8 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/1/XZ/4B9S1TXRVTRUH65OYK2B2P.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/2/68/Q971G3T2SO9JLUJ0IUVRU3.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/68/Q971G3T2SO9JLUJ0IUVRU3.uasset new file mode 100644 index 0000000..b369ceb Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/68/Q971G3T2SO9JLUJ0IUVRU3.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/2/E6/MLANNHEKLRCH3U6O18XOFD.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/E6/MLANNHEKLRCH3U6O18XOFD.uasset new file mode 100644 index 0000000..28c9eae Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/E6/MLANNHEKLRCH3U6O18XOFD.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/2/N1/S96KI2IJWDPHU10GB2K3J3.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/N1/S96KI2IJWDPHU10GB2K3J3.uasset new file mode 100644 index 0000000..86e2501 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/N1/S96KI2IJWDPHU10GB2K3J3.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/2/NR/GSOWAY7OVPG4EJ6N53FBT5.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/NR/GSOWAY7OVPG4EJ6N53FBT5.uasset new file mode 100644 index 0000000..6ae956c Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/NR/GSOWAY7OVPG4EJ6N53FBT5.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/2/T9/YID9AT8SZJSB8IEEA6F17J.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/T9/YID9AT8SZJSB8IEEA6F17J.uasset new file mode 100644 index 0000000..ca5d2a0 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/T9/YID9AT8SZJSB8IEEA6F17J.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/2/UV/TIA4QC1RY52JZAK9G2KJAU.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/UV/TIA4QC1RY52JZAK9G2KJAU.uasset new file mode 100644 index 0000000..483ba4f Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/UV/TIA4QC1RY52JZAK9G2KJAU.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/2/YS/5M6ZW56UUSEDQGRAJ95B7F.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/YS/5M6ZW56UUSEDQGRAJ95B7F.uasset new file mode 100644 index 0000000..a11130e Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/2/YS/5M6ZW56UUSEDQGRAJ95B7F.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/3/29/VOEXR6TWUNVF3TIA73I71O.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/29/VOEXR6TWUNVF3TIA73I71O.uasset new file mode 100644 index 0000000..7a3b319 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/29/VOEXR6TWUNVF3TIA73I71O.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/3/HB/IVEC500UBZYR67J9NU0UU2.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/HB/IVEC500UBZYR67J9NU0UU2.uasset new file mode 100644 index 0000000..aab550c Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/HB/IVEC500UBZYR67J9NU0UU2.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/3/K7/YSP4L3AFACO2UFE02PWPAZ.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/K7/YSP4L3AFACO2UFE02PWPAZ.uasset new file mode 100644 index 0000000..7f43873 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/K7/YSP4L3AFACO2UFE02PWPAZ.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/3/WS/JQJDHWS2C0NEV2PQQ24DS9.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/WS/JQJDHWS2C0NEV2PQQ24DS9.uasset new file mode 100644 index 0000000..fced162 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/3/WS/JQJDHWS2C0NEV2PQQ24DS9.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/4/D4/5F0B0BSJ06CAOWTYEMJ9UP.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/D4/5F0B0BSJ06CAOWTYEMJ9UP.uasset new file mode 100644 index 0000000..38fceb0 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/D4/5F0B0BSJ06CAOWTYEMJ9UP.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/4/DC/A1TO6K1ZIIQLSIAZ9BYSJD.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/DC/A1TO6K1ZIIQLSIAZ9BYSJD.uasset new file mode 100644 index 0000000..7f79466 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/DC/A1TO6K1ZIIQLSIAZ9BYSJD.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/4/FH/5VFMLGY79X7A0RY85CW7GP.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/FH/5VFMLGY79X7A0RY85CW7GP.uasset new file mode 100644 index 0000000..2f32d89 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/FH/5VFMLGY79X7A0RY85CW7GP.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/4/J0/KX0K662MF8YCCY1QRAE6AU.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/J0/KX0K662MF8YCCY1QRAE6AU.uasset new file mode 100644 index 0000000..644caa6 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/4/J0/KX0K662MF8YCCY1QRAE6AU.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/5/4E/Z2WSCL5N559UJC5TOP6F1W.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/4E/Z2WSCL5N559UJC5TOP6F1W.uasset new file mode 100644 index 0000000..c112f87 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/4E/Z2WSCL5N559UJC5TOP6F1W.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/5/A1/CV60LLIDPR76AC94BI4R36.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/A1/CV60LLIDPR76AC94BI4R36.uasset new file mode 100644 index 0000000..80ce419 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/A1/CV60LLIDPR76AC94BI4R36.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/5/JW/M23AIJR1F3QFTN7C70JL6N.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/JW/M23AIJR1F3QFTN7C70JL6N.uasset new file mode 100644 index 0000000..7de5f7e Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/JW/M23AIJR1F3QFTN7C70JL6N.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/5/QQ/YJQPAKT8LWP1B301MWEDV6.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/QQ/YJQPAKT8LWP1B301MWEDV6.uasset new file mode 100644 index 0000000..c3a9030 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/QQ/YJQPAKT8LWP1B301MWEDV6.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/5/V8/53KYKU6SU2KEFHAVL4ATJV.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/V8/53KYKU6SU2KEFHAVL4ATJV.uasset new file mode 100644 index 0000000..cc406b6 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/V8/53KYKU6SU2KEFHAVL4ATJV.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/5/X8/4IKXRVK1SD5I5PXETE1VUX.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/X8/4IKXRVK1SD5I5PXETE1VUX.uasset new file mode 100644 index 0000000..29baeb8 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/5/X8/4IKXRVK1SD5I5PXETE1VUX.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/6/3Q/9YY85F8AXT6KNDZU0RF2BL.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/3Q/9YY85F8AXT6KNDZU0RF2BL.uasset new file mode 100644 index 0000000..ef26341 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/3Q/9YY85F8AXT6KNDZU0RF2BL.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/6/6B/82CFIGAYT1PTOJ0QQV8X71.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/6B/82CFIGAYT1PTOJ0QQV8X71.uasset new file mode 100644 index 0000000..fd8781c Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/6B/82CFIGAYT1PTOJ0QQV8X71.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/6/8F/7YOPYVC7H0KELG7EBXME2G.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/8F/7YOPYVC7H0KELG7EBXME2G.uasset new file mode 100644 index 0000000..21fa11e Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/8F/7YOPYVC7H0KELG7EBXME2G.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/6/96/YJWLSNJ996N1D5LBQA3H23.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/96/YJWLSNJ996N1D5LBQA3H23.uasset new file mode 100644 index 0000000..d43de3c Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/96/YJWLSNJ996N1D5LBQA3H23.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/6/9R/9LHPFE23OYWT3JZ6CBSMDF.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/9R/9LHPFE23OYWT3JZ6CBSMDF.uasset new file mode 100644 index 0000000..e59fdfa Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/9R/9LHPFE23OYWT3JZ6CBSMDF.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/6/B1/UNL95LPUP3TWS87184G67I.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/B1/UNL95LPUP3TWS87184G67I.uasset new file mode 100644 index 0000000..7a09f23 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/6/B1/UNL95LPUP3TWS87184G67I.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/0B/4BRKVOKK1A3WPRBJJGYD47.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/0B/4BRKVOKK1A3WPRBJJGYD47.uasset new file mode 100644 index 0000000..148ac66 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/0B/4BRKVOKK1A3WPRBJJGYD47.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/5Q/TVDW5C9545EN7HD9Z8OS1V.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/5Q/TVDW5C9545EN7HD9Z8OS1V.uasset new file mode 100644 index 0000000..427a3f6 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/5Q/TVDW5C9545EN7HD9Z8OS1V.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/6N/YAW7D6CUC40GV5TSLJD2BG.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/6N/YAW7D6CUC40GV5TSLJD2BG.uasset new file mode 100644 index 0000000..080373b Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/6N/YAW7D6CUC40GV5TSLJD2BG.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/G3/1N8ESWJALGDYB5AJQBR1IY.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/G3/1N8ESWJALGDYB5AJQBR1IY.uasset new file mode 100644 index 0000000..247cc6d Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/G3/1N8ESWJALGDYB5AJQBR1IY.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/LW/XI60F8RUM0JYJIT9T17L9I.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/LW/XI60F8RUM0JYJIT9T17L9I.uasset new file mode 100644 index 0000000..f7a03e4 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/LW/XI60F8RUM0JYJIT9T17L9I.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/N6/5APYRECUJRT1SO9LS515IJ.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/N6/5APYRECUJRT1SO9LS515IJ.uasset new file mode 100644 index 0000000..c21efe6 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/N6/5APYRECUJRT1SO9LS515IJ.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/RB/Q5T6BQ2QCBTJG0ORINH627.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/RB/Q5T6BQ2QCBTJG0ORINH627.uasset new file mode 100644 index 0000000..8ceea01 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/RB/Q5T6BQ2QCBTJG0ORINH627.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/7/RD/69QYQMRG4U4JVJ1CZ5JWVN.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/RD/69QYQMRG4U4JVJ1CZ5JWVN.uasset new file mode 100644 index 0000000..c93f100 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/7/RD/69QYQMRG4U4JVJ1CZ5JWVN.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/8/0M/ALJ2HD5RZZRC1WYRBVZYZX.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/8/0M/ALJ2HD5RZZRC1WYRBVZYZX.uasset new file mode 100644 index 0000000..21eefa1 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/8/0M/ALJ2HD5RZZRC1WYRBVZYZX.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/8/FE/TIDI0C6ET0K1IM67FLQUB1.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/8/FE/TIDI0C6ET0K1IM67FLQUB1.uasset new file mode 100644 index 0000000..aae5738 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/8/FE/TIDI0C6ET0K1IM67FLQUB1.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/8/KK/V3O1E59SOM8L1HNJC4QCG6.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/8/KK/V3O1E59SOM8L1HNJC4QCG6.uasset new file mode 100644 index 0000000..61f0a63 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/8/KK/V3O1E59SOM8L1HNJC4QCG6.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/9/6Y/SO0XTY2CO0JIY74NDT8AZE.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/6Y/SO0XTY2CO0JIY74NDT8AZE.uasset new file mode 100644 index 0000000..6f4a3c7 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/6Y/SO0XTY2CO0JIY74NDT8AZE.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/9/FY/NA00ONP3IT1SUJJ4L42ZGU.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/FY/NA00ONP3IT1SUJJ4L42ZGU.uasset new file mode 100644 index 0000000..2e0f066 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/FY/NA00ONP3IT1SUJJ4L42ZGU.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/9/KE/RK629GGHY991OCX4UXBSSA.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/KE/RK629GGHY991OCX4UXBSSA.uasset new file mode 100644 index 0000000..fe93e17 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/KE/RK629GGHY991OCX4UXBSSA.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/9/W4/KMG00ML6Q16EP4R6VH2YFG.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/W4/KMG00ML6Q16EP4R6VH2YFG.uasset new file mode 100644 index 0000000..c04b4a1 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/9/W4/KMG00ML6Q16EP4R6VH2YFG.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/A/30/9W5D9QWS33B6YHBQ3PJWFY.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/30/9W5D9QWS33B6YHBQ3PJWFY.uasset new file mode 100644 index 0000000..f08fbb1 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/30/9W5D9QWS33B6YHBQ3PJWFY.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/A/60/JYTMT702VL1JGAVDIC5FQ7.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/60/JYTMT702VL1JGAVDIC5FQ7.uasset new file mode 100644 index 0000000..ae30db4 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/60/JYTMT702VL1JGAVDIC5FQ7.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/A/JK/0N0M191D7Z264BZA766ROC.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/JK/0N0M191D7Z264BZA766ROC.uasset new file mode 100644 index 0000000..f6c4595 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/JK/0N0M191D7Z264BZA766ROC.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/A/SZ/VQZO6BRL2LVZVPJXJRTCW8.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/SZ/VQZO6BRL2LVZVPJXJRTCW8.uasset new file mode 100644 index 0000000..6a69b1b Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/A/SZ/VQZO6BRL2LVZVPJXJRTCW8.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/3Q/0N4150SN0K2NYR1N1SJ1LC.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/3Q/0N4150SN0K2NYR1N1SJ1LC.uasset new file mode 100644 index 0000000..496f3e7 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/3Q/0N4150SN0K2NYR1N1SJ1LC.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/96/CKG3F7E1MQUIV4M89B1VLP.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/96/CKG3F7E1MQUIV4M89B1VLP.uasset new file mode 100644 index 0000000..309ca85 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/96/CKG3F7E1MQUIV4M89B1VLP.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/AI/QJ8PX3QYKSSEO00QVSLYUW.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/AI/QJ8PX3QYKSSEO00QVSLYUW.uasset new file mode 100644 index 0000000..ccde783 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/AI/QJ8PX3QYKSSEO00QVSLYUW.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/HP/1KT74TGZW04W95O7HLODEU.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/HP/1KT74TGZW04W95O7HLODEU.uasset new file mode 100644 index 0000000..1a1f938 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/HP/1KT74TGZW04W95O7HLODEU.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/QB/0RD2BROGX8XFH78MYAWP86.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/QB/0RD2BROGX8XFH78MYAWP86.uasset new file mode 100644 index 0000000..e23456c Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/QB/0RD2BROGX8XFH78MYAWP86.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/SM/5I0T2D0GU71R9GQCIAYR8R.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/SM/5I0T2D0GU71R9GQCIAYR8R.uasset new file mode 100644 index 0000000..c4656de Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/SM/5I0T2D0GU71R9GQCIAYR8R.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/WD/GXMDY3RPBGPRCMC0M3DB6W.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/WD/GXMDY3RPBGPRCMC0M3DB6W.uasset new file mode 100644 index 0000000..34df7da Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/WD/GXMDY3RPBGPRCMC0M3DB6W.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/B/YC/S87SXF4J05LAT97WW4RVOY.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/YC/S87SXF4J05LAT97WW4RVOY.uasset new file mode 100644 index 0000000..da4016c Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/B/YC/S87SXF4J05LAT97WW4RVOY.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/C/5W/QKXQAODBKITNE7N675IXIY.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/5W/QKXQAODBKITNE7N675IXIY.uasset new file mode 100644 index 0000000..61e4370 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/5W/QKXQAODBKITNE7N675IXIY.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/C/D5/VT5NTL3GGUG5WSHNAVRAMS.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/D5/VT5NTL3GGUG5WSHNAVRAMS.uasset new file mode 100644 index 0000000..a129d87 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/D5/VT5NTL3GGUG5WSHNAVRAMS.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/C/GI/PA6OC25PAKSGPL8O9L6VQN.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/GI/PA6OC25PAKSGPL8O9L6VQN.uasset new file mode 100644 index 0000000..dd5762b Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/GI/PA6OC25PAKSGPL8O9L6VQN.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/C/RC/UR7H1P0OTSXVPAVZXZE82H.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/RC/UR7H1P0OTSXVPAVZXZE82H.uasset new file mode 100644 index 0000000..ae85ff6 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/C/RC/UR7H1P0OTSXVPAVZXZE82H.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/D/0K/W9V7DZHVD1813TO2W9A5Q0.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/D/0K/W9V7DZHVD1813TO2W9A5Q0.uasset new file mode 100644 index 0000000..8c30fef Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/D/0K/W9V7DZHVD1813TO2W9A5Q0.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/D/1D/CCU5BL3843RTMTMNRNWRSA.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/D/1D/CCU5BL3843RTMTMNRNWRSA.uasset new file mode 100644 index 0000000..5eb5e2b Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/D/1D/CCU5BL3843RTMTMNRNWRSA.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/D/N3/NGASPVUDH6C9JIQSA6ZE0T.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/D/N3/NGASPVUDH6C9JIQSA6ZE0T.uasset new file mode 100644 index 0000000..7576614 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/D/N3/NGASPVUDH6C9JIQSA6ZE0T.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/E/7E/3C4PXLT28R9WV3DFGC0NZF.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/7E/3C4PXLT28R9WV3DFGC0NZF.uasset new file mode 100644 index 0000000..ae1a408 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/7E/3C4PXLT28R9WV3DFGC0NZF.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/E/AZ/HF62OU7IM25GN5KTW2SHXR.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/AZ/HF62OU7IM25GN5KTW2SHXR.uasset new file mode 100644 index 0000000..3a8e261 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/AZ/HF62OU7IM25GN5KTW2SHXR.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/E/FT/KQOFMMBGIE9YTZU6IQVXUJ.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/FT/KQOFMMBGIE9YTZU6IQVXUJ.uasset new file mode 100644 index 0000000..01a605a Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/FT/KQOFMMBGIE9YTZU6IQVXUJ.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/E/KS/GNYW8XCQ974697OMM2VZNN.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/KS/GNYW8XCQ974697OMM2VZNN.uasset new file mode 100644 index 0000000..5868be9 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/KS/GNYW8XCQ974697OMM2VZNN.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/E/SD/S3UTR49GRCI3BL0GB4MTC1.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/SD/S3UTR49GRCI3BL0GB4MTC1.uasset new file mode 100644 index 0000000..2f11935 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/SD/S3UTR49GRCI3BL0GB4MTC1.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/E/ST/GMMJEH1Q6094WUSCJNO7L3.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/ST/GMMJEH1Q6094WUSCJNO7L3.uasset new file mode 100644 index 0000000..f5b498b Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/ST/GMMJEH1Q6094WUSCJNO7L3.uasset differ diff --git a/Content/__ExternalActors__/ThirdPerson/TestWorld/E/Z0/V7C0Q33RM7DNPVBLZFE8HU.uasset b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/Z0/V7C0Q33RM7DNPVBLZFE8HU.uasset new file mode 100644 index 0000000..e5dc422 Binary files /dev/null and b/Content/__ExternalActors__/ThirdPerson/TestWorld/E/Z0/V7C0Q33RM7DNPVBLZFE8HU.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/09/6VOTF0H77B77LNPRHA1IYO.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/09/6VOTF0H77B77LNPRHA1IYO.uasset new file mode 100644 index 0000000..cf0800e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/09/6VOTF0H77B77LNPRHA1IYO.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/68/TFF0KCJOKMAFWHCUNS986L.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/68/TFF0KCJOKMAFWHCUNS986L.uasset new file mode 100644 index 0000000..a6e00ea Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/68/TFF0KCJOKMAFWHCUNS986L.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/6T/7MNN6LIAHBUH3LNJA8OD7O.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/6T/7MNN6LIAHBUH3LNJA8OD7O.uasset new file mode 100644 index 0000000..4481ff4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/6T/7MNN6LIAHBUH3LNJA8OD7O.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/GY/W6UMQ08ZGD02NR2XHXMS7T.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/GY/W6UMQ08ZGD02NR2XHXMS7T.uasset new file mode 100644 index 0000000..dc6958d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/GY/W6UMQ08ZGD02NR2XHXMS7T.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/PY/D55A2955I299GXFMUK73NN.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/PY/D55A2955I299GXFMUK73NN.uasset new file mode 100644 index 0000000..a6e9f2b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/PY/D55A2955I299GXFMUK73NN.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/SK/591N2DAZZHFKKFOF53JES4.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/SK/591N2DAZZHFKKFOF53JES4.uasset new file mode 100644 index 0000000..4bfa751 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/0/SK/591N2DAZZHFKKFOF53JES4.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/13/96ZEEPCX5RLGE3VS3Z5F83.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/13/96ZEEPCX5RLGE3VS3Z5F83.uasset new file mode 100644 index 0000000..4415720 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/13/96ZEEPCX5RLGE3VS3Z5F83.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/7N/TMU12PWOB3PF1QBMHGAA9P.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/7N/TMU12PWOB3PF1QBMHGAA9P.uasset new file mode 100644 index 0000000..9210218 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/7N/TMU12PWOB3PF1QBMHGAA9P.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/8V/MZ5VD1FM5EWPQ14HOUY9LL.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/8V/MZ5VD1FM5EWPQ14HOUY9LL.uasset new file mode 100644 index 0000000..78f04a9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/8V/MZ5VD1FM5EWPQ14HOUY9LL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/9L/RVJQMYYFJ9NF8ATLBRGNE2.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/9L/RVJQMYYFJ9NF8ATLBRGNE2.uasset new file mode 100644 index 0000000..b93a990 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/9L/RVJQMYYFJ9NF8ATLBRGNE2.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/G4/J64XLYHNNKOHM68L3ATL04.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/G4/J64XLYHNNKOHM68L3ATL04.uasset new file mode 100644 index 0000000..cd47ff3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/G4/J64XLYHNNKOHM68L3ATL04.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/K6/QEH37F755SSQDHM16RP0W6.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/K6/QEH37F755SSQDHM16RP0W6.uasset new file mode 100644 index 0000000..3b388d7 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/K6/QEH37F755SSQDHM16RP0W6.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/MO/FX52NCMV5JFYOIP51Q8D0R.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/MO/FX52NCMV5JFYOIP51Q8D0R.uasset new file mode 100644 index 0000000..34654f3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/MO/FX52NCMV5JFYOIP51Q8D0R.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/N0/UUHIOS9OWPYF8DRRUOILO0.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/N0/UUHIOS9OWPYF8DRRUOILO0.uasset new file mode 100644 index 0000000..f79361f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/N0/UUHIOS9OWPYF8DRRUOILO0.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/NZ/2DGYN86OICCF1JK42OM8LH.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/NZ/2DGYN86OICCF1JK42OM8LH.uasset new file mode 100644 index 0000000..c11be32 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/NZ/2DGYN86OICCF1JK42OM8LH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/Q1/54UJTQSRBUIMXTLWMQD201.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/Q1/54UJTQSRBUIMXTLWMQD201.uasset new file mode 100644 index 0000000..6a67e3b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/Q1/54UJTQSRBUIMXTLWMQD201.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/QC/I20BJ3V98WLHGTVOPUE3TL.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/QC/I20BJ3V98WLHGTVOPUE3TL.uasset new file mode 100644 index 0000000..e3e167c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/1/QC/I20BJ3V98WLHGTVOPUE3TL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/DC/J79FNM591NCL4PRZU30JKH.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/DC/J79FNM591NCL4PRZU30JKH.uasset new file mode 100644 index 0000000..2036af1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/DC/J79FNM591NCL4PRZU30JKH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/E2/7WMFIN5511KNW0G94AGVMX.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/E2/7WMFIN5511KNW0G94AGVMX.uasset new file mode 100644 index 0000000..0854943 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/E2/7WMFIN5511KNW0G94AGVMX.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/ES/Y759LYJCXPLAYRH2BHOD2H.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/ES/Y759LYJCXPLAYRH2BHOD2H.uasset new file mode 100644 index 0000000..2185b58 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/ES/Y759LYJCXPLAYRH2BHOD2H.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/PC/QNCY9367JPRDLFY623BAWG.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/PC/QNCY9367JPRDLFY623BAWG.uasset new file mode 100644 index 0000000..476e3e6 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/PC/QNCY9367JPRDLFY623BAWG.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/PN/5DVYKXIO9QXKZ6DD03JHFY.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/PN/5DVYKXIO9QXKZ6DD03JHFY.uasset new file mode 100644 index 0000000..beeb0e2 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/PN/5DVYKXIO9QXKZ6DD03JHFY.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/T8/Z9LBHJJSRJW405KOMZM5LN.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/T8/Z9LBHJJSRJW405KOMZM5LN.uasset new file mode 100644 index 0000000..cff145f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/T8/Z9LBHJJSRJW405KOMZM5LN.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/UQ/VZBO103EOK3C009CQ3SIA2.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/UQ/VZBO103EOK3C009CQ3SIA2.uasset new file mode 100644 index 0000000..3ed8ccb Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/UQ/VZBO103EOK3C009CQ3SIA2.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/VD/6CQW6ZVH27TP37BOERS3L5.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/VD/6CQW6ZVH27TP37BOERS3L5.uasset new file mode 100644 index 0000000..6c0959f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/VD/6CQW6ZVH27TP37BOERS3L5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/XD/KJJ0PM9Q2DJXW333FHZ7R0.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/XD/KJJ0PM9Q2DJXW333FHZ7R0.uasset new file mode 100644 index 0000000..1004878 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/2/XD/KJJ0PM9Q2DJXW333FHZ7R0.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/3E/2AV29D92911SDW8QKQ24BX.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/3E/2AV29D92911SDW8QKQ24BX.uasset new file mode 100644 index 0000000..9d96a5a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/3E/2AV29D92911SDW8QKQ24BX.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/85/TBH0DY74DPFG02QFP4HVBY.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/85/TBH0DY74DPFG02QFP4HVBY.uasset new file mode 100644 index 0000000..e1f4bca Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/85/TBH0DY74DPFG02QFP4HVBY.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/8W/TGNMGZGKIRPV4FRVB95PUT.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/8W/TGNMGZGKIRPV4FRVB95PUT.uasset new file mode 100644 index 0000000..d57ae47 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/8W/TGNMGZGKIRPV4FRVB95PUT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/CJ/8IMDJ47RUM6RR9KKJ07RMR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/CJ/8IMDJ47RUM6RR9KKJ07RMR.uasset new file mode 100644 index 0000000..3374506 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/CJ/8IMDJ47RUM6RR9KKJ07RMR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/DE/EG6ISGHPR9UK0TU4M6ILXJ.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/DE/EG6ISGHPR9UK0TU4M6ILXJ.uasset new file mode 100644 index 0000000..659aa72 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/DE/EG6ISGHPR9UK0TU4M6ILXJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/G1/8K6PTWH7EC700FSPEZEBAI.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/G1/8K6PTWH7EC700FSPEZEBAI.uasset new file mode 100644 index 0000000..5354b3f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/G1/8K6PTWH7EC700FSPEZEBAI.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/GU/HHTBIYESCLLX4M9TYH2V2O.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/GU/HHTBIYESCLLX4M9TYH2V2O.uasset new file mode 100644 index 0000000..ffdfa22 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/GU/HHTBIYESCLLX4M9TYH2V2O.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/LU/MQL9YZXJP8NMBT4NJS35FE.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/LU/MQL9YZXJP8NMBT4NJS35FE.uasset new file mode 100644 index 0000000..259047f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/3/LU/MQL9YZXJP8NMBT4NJS35FE.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/2G/4AWBEWEWJUNQ9436Q44MM8.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/2G/4AWBEWEWJUNQ9436Q44MM8.uasset new file mode 100644 index 0000000..29981e8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/2G/4AWBEWEWJUNQ9436Q44MM8.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/3C/BUY1N1NIXKH5ZMH2B9OHQS.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/3C/BUY1N1NIXKH5ZMH2B9OHQS.uasset new file mode 100644 index 0000000..35c5d59 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/3C/BUY1N1NIXKH5ZMH2B9OHQS.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/4Z/0CC2QQCZ4BB1D3AHY0Q906.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/4Z/0CC2QQCZ4BB1D3AHY0Q906.uasset new file mode 100644 index 0000000..17b591b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/4Z/0CC2QQCZ4BB1D3AHY0Q906.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/74/O2DL9QU8VK5L7HY1JO6IXG.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/74/O2DL9QU8VK5L7HY1JO6IXG.uasset new file mode 100644 index 0000000..029a404 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/74/O2DL9QU8VK5L7HY1JO6IXG.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/9S/CN0ENC7UB9EH44A15Z9DS5.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/9S/CN0ENC7UB9EH44A15Z9DS5.uasset new file mode 100644 index 0000000..f1b1292 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/9S/CN0ENC7UB9EH44A15Z9DS5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/C9/WRKC9ED7V99C15LK7N52RX.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/C9/WRKC9ED7V99C15LK7N52RX.uasset new file mode 100644 index 0000000..ea8fa96 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/C9/WRKC9ED7V99C15LK7N52RX.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/DQ/NDUDVEMBDWYTZMRHKUF2S1.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/DQ/NDUDVEMBDWYTZMRHKUF2S1.uasset new file mode 100644 index 0000000..495bb21 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/DQ/NDUDVEMBDWYTZMRHKUF2S1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/E0/3GAWGDPJRLAX24672Y8QI4.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/E0/3GAWGDPJRLAX24672Y8QI4.uasset new file mode 100644 index 0000000..ff1b2ad Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/E0/3GAWGDPJRLAX24672Y8QI4.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/K0/SB6TUKZ0O9035RUL6J9QPV.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/K0/SB6TUKZ0O9035RUL6J9QPV.uasset new file mode 100644 index 0000000..eb5bd09 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/K0/SB6TUKZ0O9035RUL6J9QPV.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/MK/0B83XTNUO53M03D9U4EFOU.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/MK/0B83XTNUO53M03D9U4EFOU.uasset new file mode 100644 index 0000000..39bb28e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/MK/0B83XTNUO53M03D9U4EFOU.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/Q3/S3DCYMNYH5AAJ7KBVZMOEP.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/Q3/S3DCYMNYH5AAJ7KBVZMOEP.uasset new file mode 100644 index 0000000..4da33bc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/Q3/S3DCYMNYH5AAJ7KBVZMOEP.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/RN/Z1AJIFWKGGP237W3JG3GPE.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/RN/Z1AJIFWKGGP237W3JG3GPE.uasset new file mode 100644 index 0000000..d92455a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/RN/Z1AJIFWKGGP237W3JG3GPE.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/T2/M3Q0393W11ULYHGZPBGWES.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/T2/M3Q0393W11ULYHGZPBGWES.uasset new file mode 100644 index 0000000..d42d8b0 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/4/T2/M3Q0393W11ULYHGZPBGWES.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/1I/K236CQU20O4O3XE1TLBV3U.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/1I/K236CQU20O4O3XE1TLBV3U.uasset new file mode 100644 index 0000000..fe86bec Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/1I/K236CQU20O4O3XE1TLBV3U.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/5P/CWCQ7HWLG4FMXT0ZRC4TI0.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/5P/CWCQ7HWLG4FMXT0ZRC4TI0.uasset new file mode 100644 index 0000000..d05490b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/5P/CWCQ7HWLG4FMXT0ZRC4TI0.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/5V/2ZKI0MH4J35IQ435354JH3.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/5V/2ZKI0MH4J35IQ435354JH3.uasset new file mode 100644 index 0000000..98faed8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/5V/2ZKI0MH4J35IQ435354JH3.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/B7/C4HUJNJJBL0Y0DBF5HV1PH.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/B7/C4HUJNJJBL0Y0DBF5HV1PH.uasset new file mode 100644 index 0000000..2753d7b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/B7/C4HUJNJJBL0Y0DBF5HV1PH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/BF/BFIXU5567HNRMQP5MJY0O1.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/BF/BFIXU5567HNRMQP5MJY0O1.uasset new file mode 100644 index 0000000..06ef1c9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/BF/BFIXU5567HNRMQP5MJY0O1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/EK/9F37QKGF01YU7CHDKL2KO5.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/EK/9F37QKGF01YU7CHDKL2KO5.uasset new file mode 100644 index 0000000..beacd0b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/EK/9F37QKGF01YU7CHDKL2KO5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/OV/ZNSNNPGU4O3LUJM2II2DZH.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/OV/ZNSNNPGU4O3LUJM2II2DZH.uasset new file mode 100644 index 0000000..ab1df00 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/5/OV/ZNSNNPGU4O3LUJM2II2DZH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/58/RK3NC5MNSOW06DYLLR8400.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/58/RK3NC5MNSOW06DYLLR8400.uasset new file mode 100644 index 0000000..10cbbf4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/58/RK3NC5MNSOW06DYLLR8400.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/GZ/GUJXQ0SLRQY9GOI1S9KFYR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/GZ/GUJXQ0SLRQY9GOI1S9KFYR.uasset new file mode 100644 index 0000000..f357334 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/GZ/GUJXQ0SLRQY9GOI1S9KFYR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/JG/SVPF4PAWLB95N3A3454HRT.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/JG/SVPF4PAWLB95N3A3454HRT.uasset new file mode 100644 index 0000000..1d5e109 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/JG/SVPF4PAWLB95N3A3454HRT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/RY/MYVMN2NWF4QNT14AQUADS9.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/RY/MYVMN2NWF4QNT14AQUADS9.uasset new file mode 100644 index 0000000..38a4238 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/RY/MYVMN2NWF4QNT14AQUADS9.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/ZZ/Y9F2IUUMWMKN65LVGL93M3.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/ZZ/Y9F2IUUMWMKN65LVGL93M3.uasset new file mode 100644 index 0000000..3fe2b76 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/6/ZZ/Y9F2IUUMWMKN65LVGL93M3.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/3E/FM5O1XVO2BJK8VOAB6TSPC.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/3E/FM5O1XVO2BJK8VOAB6TSPC.uasset new file mode 100644 index 0000000..0929a32 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/3E/FM5O1XVO2BJK8VOAB6TSPC.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/8Q/5HSFA3MSWAHTHR0JJALDVL.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/8Q/5HSFA3MSWAHTHR0JJALDVL.uasset new file mode 100644 index 0000000..cbe3b61 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/8Q/5HSFA3MSWAHTHR0JJALDVL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/BM/7479BCOZ59Z9SD4ZOM4F9V.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/BM/7479BCOZ59Z9SD4ZOM4F9V.uasset new file mode 100644 index 0000000..3cd5c0e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/BM/7479BCOZ59Z9SD4ZOM4F9V.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/JK/7MZAAVLMCDJG8N39T8CHSV.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/JK/7MZAAVLMCDJG8N39T8CHSV.uasset new file mode 100644 index 0000000..6739821 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/JK/7MZAAVLMCDJG8N39T8CHSV.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/OM/H0URW02T819PVDV28FETOW.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/OM/H0URW02T819PVDV28FETOW.uasset new file mode 100644 index 0000000..7852e6b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/OM/H0URW02T819PVDV28FETOW.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/SI/O3Y0LUWOXJ0ISZ4831L7JJ.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/SI/O3Y0LUWOXJ0ISZ4831L7JJ.uasset new file mode 100644 index 0000000..b4579b6 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/SI/O3Y0LUWOXJ0ISZ4831L7JJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/UA/57QE41VBC21TQVJDEOPIDD.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/UA/57QE41VBC21TQVJDEOPIDD.uasset new file mode 100644 index 0000000..5565414 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/UA/57QE41VBC21TQVJDEOPIDD.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/XH/LZHLJ4KVLTW803TFRP2L6G.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/XH/LZHLJ4KVLTW803TFRP2L6G.uasset new file mode 100644 index 0000000..a860a54 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/XH/LZHLJ4KVLTW803TFRP2L6G.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/YL/Z1OC45KSRGWRYP06FOLI06.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/YL/Z1OC45KSRGWRYP06FOLI06.uasset new file mode 100644 index 0000000..142e9af Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/YL/Z1OC45KSRGWRYP06FOLI06.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/ZL/CM32V8FT81XRL4H1KIRZ82.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/ZL/CM32V8FT81XRL4H1KIRZ82.uasset new file mode 100644 index 0000000..15bbfbc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/7/ZL/CM32V8FT81XRL4H1KIRZ82.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/DC/S1EW4KLHAUP0J6WDU070LV.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/DC/S1EW4KLHAUP0J6WDU070LV.uasset new file mode 100644 index 0000000..10651de Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/DC/S1EW4KLHAUP0J6WDU070LV.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/EP/MZT58AKN5FYJDSWXBTJ4J5.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/EP/MZT58AKN5FYJDSWXBTJ4J5.uasset new file mode 100644 index 0000000..90f9747 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/EP/MZT58AKN5FYJDSWXBTJ4J5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/NJ/7JIU4N386J0Y6M6DDYAUM4.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/NJ/7JIU4N386J0Y6M6DDYAUM4.uasset new file mode 100644 index 0000000..82b47bb Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/NJ/7JIU4N386J0Y6M6DDYAUM4.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/VT/E69L6BT44SM44CXN0MTR63.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/VT/E69L6BT44SM44CXN0MTR63.uasset new file mode 100644 index 0000000..369623a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/8/VT/E69L6BT44SM44CXN0MTR63.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/1J/16WYQZ5CWG9P0JJ5N5MEYL.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/1J/16WYQZ5CWG9P0JJ5N5MEYL.uasset new file mode 100644 index 0000000..e16d024 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/1J/16WYQZ5CWG9P0JJ5N5MEYL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/42/MYS8TTPTRDM4WQJQIA3JBR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/42/MYS8TTPTRDM4WQJQIA3JBR.uasset new file mode 100644 index 0000000..b22ced0 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/42/MYS8TTPTRDM4WQJQIA3JBR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/5Y/RL8GWHB7J9LK8ABYT86KFK.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/5Y/RL8GWHB7J9LK8ABYT86KFK.uasset new file mode 100644 index 0000000..e8b0643 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/5Y/RL8GWHB7J9LK8ABYT86KFK.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/7S/4WSAUZ9CKGL1KAB95PLUKB.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/7S/4WSAUZ9CKGL1KAB95PLUKB.uasset new file mode 100644 index 0000000..e684aa3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/7S/4WSAUZ9CKGL1KAB95PLUKB.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/CT/XOY76XWZ289FAGBPE23VGM.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/CT/XOY76XWZ289FAGBPE23VGM.uasset new file mode 100644 index 0000000..629dfdb Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/CT/XOY76XWZ289FAGBPE23VGM.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/F7/BI9AGK5BZ5HC3OEFD71NDX.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/F7/BI9AGK5BZ5HC3OEFD71NDX.uasset new file mode 100644 index 0000000..aeb3d76 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/F7/BI9AGK5BZ5HC3OEFD71NDX.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/L9/ISAVDUPAU52L9Y0B19ZSVR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/L9/ISAVDUPAU52L9Y0B19ZSVR.uasset new file mode 100644 index 0000000..60aa407 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/L9/ISAVDUPAU52L9Y0B19ZSVR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/UK/VIHECZYKQBHOHTQJ5HOP5N.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/UK/VIHECZYKQBHOHTQJ5HOP5N.uasset new file mode 100644 index 0000000..74e0e15 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/UK/VIHECZYKQBHOHTQJ5HOP5N.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/WD/1RTVDV9K0CECLS8KGYNIWK.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/WD/1RTVDV9K0CECLS8KGYNIWK.uasset new file mode 100644 index 0000000..f3c5dc4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/WD/1RTVDV9K0CECLS8KGYNIWK.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/YB/DGOD6T41WFMLGX79EE8K93.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/YB/DGOD6T41WFMLGX79EE8K93.uasset new file mode 100644 index 0000000..89e7136 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/9/YB/DGOD6T41WFMLGX79EE8K93.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/1C/B670KN293LRVUI9KPDJYZQ.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/1C/B670KN293LRVUI9KPDJYZQ.uasset new file mode 100644 index 0000000..c9e249b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/1C/B670KN293LRVUI9KPDJYZQ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/4Y/92E37ZMC15SJHI4WVOAUJF.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/4Y/92E37ZMC15SJHI4WVOAUJF.uasset new file mode 100644 index 0000000..d9746ca Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/4Y/92E37ZMC15SJHI4WVOAUJF.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/6J/4ZIILPFTQ6GFUC2XONSULT.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/6J/4ZIILPFTQ6GFUC2XONSULT.uasset new file mode 100644 index 0000000..43b9975 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/6J/4ZIILPFTQ6GFUC2XONSULT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/7Y/VJ8782056EN0L3U58SXFHI.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/7Y/VJ8782056EN0L3U58SXFHI.uasset new file mode 100644 index 0000000..c58cb82 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/7Y/VJ8782056EN0L3U58SXFHI.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/IZ/RAFMPUO8GU8O5DPTYQX1R0.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/IZ/RAFMPUO8GU8O5DPTYQX1R0.uasset new file mode 100644 index 0000000..d7103fe Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/IZ/RAFMPUO8GU8O5DPTYQX1R0.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/RX/HCSASZZNTMSQ8CQ8W60SV1.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/RX/HCSASZZNTMSQ8CQ8W60SV1.uasset new file mode 100644 index 0000000..18ec006 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/RX/HCSASZZNTMSQ8CQ8W60SV1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/T7/0YPDDNSZW9JPKHNAMZOYH6.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/T7/0YPDDNSZW9JPKHNAMZOYH6.uasset new file mode 100644 index 0000000..ed2d534 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/T7/0YPDDNSZW9JPKHNAMZOYH6.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/U6/PB0X7ZBOLQE6CEQQV3DVW5.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/U6/PB0X7ZBOLQE6CEQQV3DVW5.uasset new file mode 100644 index 0000000..cab226d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/A/U6/PB0X7ZBOLQE6CEQQV3DVW5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/3C/RADELFHIH52GWIX5947EMP.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/3C/RADELFHIH52GWIX5947EMP.uasset new file mode 100644 index 0000000..1cfc3e4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/3C/RADELFHIH52GWIX5947EMP.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/41/958IOENSA2728UXMR02FI9.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/41/958IOENSA2728UXMR02FI9.uasset new file mode 100644 index 0000000..cb099af Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/41/958IOENSA2728UXMR02FI9.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/B3/SAWMSAU314L3NNBWR7W4D6.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/B3/SAWMSAU314L3NNBWR7W4D6.uasset new file mode 100644 index 0000000..1b497d1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/B3/SAWMSAU314L3NNBWR7W4D6.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/FI/RBBFX2WPX0SZJJYN6C8QXA.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/FI/RBBFX2WPX0SZJJYN6C8QXA.uasset new file mode 100644 index 0000000..eb6ef8b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/FI/RBBFX2WPX0SZJJYN6C8QXA.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/IS/GP5HYM7VCE5DAG4X5BCLTR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/IS/GP5HYM7VCE5DAG4X5BCLTR.uasset new file mode 100644 index 0000000..317dc87 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/IS/GP5HYM7VCE5DAG4X5BCLTR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/NJ/5Y1VQUNTF8AFC4KPGYNOPY.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/NJ/5Y1VQUNTF8AFC4KPGYNOPY.uasset new file mode 100644 index 0000000..5374d2a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/NJ/5Y1VQUNTF8AFC4KPGYNOPY.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/RM/0ZAUNU1TI4K8V3F9W7FWX1.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/RM/0ZAUNU1TI4K8V3F9W7FWX1.uasset new file mode 100644 index 0000000..ba1759a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/RM/0ZAUNU1TI4K8V3F9W7FWX1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/S1/K7PEL8F0LO6OYJG2NMIOPV.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/S1/K7PEL8F0LO6OYJG2NMIOPV.uasset new file mode 100644 index 0000000..2d140c9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/S1/K7PEL8F0LO6OYJG2NMIOPV.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/U6/OYWNWHCBUR6VJ1KQ2YG1EL.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/U6/OYWNWHCBUR6VJ1KQ2YG1EL.uasset new file mode 100644 index 0000000..a0762fc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/U6/OYWNWHCBUR6VJ1KQ2YG1EL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/YE/OSR9D90IZ8XS3U3U9JOZMT.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/YE/OSR9D90IZ8XS3U3U9JOZMT.uasset new file mode 100644 index 0000000..6888575 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/B/YE/OSR9D90IZ8XS3U3U9JOZMT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/0V/XLEE1T2PHH0O58PW97TAGB.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/0V/XLEE1T2PHH0O58PW97TAGB.uasset new file mode 100644 index 0000000..8d930d5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/0V/XLEE1T2PHH0O58PW97TAGB.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/2I/TKDUF5QTLUB3M3LINOWE54.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/2I/TKDUF5QTLUB3M3LINOWE54.uasset new file mode 100644 index 0000000..f6ecb2a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/2I/TKDUF5QTLUB3M3LINOWE54.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/52/L0UWST7CZ30C6XW4U9WDUN.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/52/L0UWST7CZ30C6XW4U9WDUN.uasset new file mode 100644 index 0000000..cae2bc8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/52/L0UWST7CZ30C6XW4U9WDUN.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/5J/S7RNJ6GME3RDR5K4S4BA7C.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/5J/S7RNJ6GME3RDR5K4S4BA7C.uasset new file mode 100644 index 0000000..d84f9cf Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/5J/S7RNJ6GME3RDR5K4S4BA7C.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/CF/CCVPG4FRPH1SRANJGHB4AW.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/CF/CCVPG4FRPH1SRANJGHB4AW.uasset new file mode 100644 index 0000000..f3dedce Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/CF/CCVPG4FRPH1SRANJGHB4AW.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/D3/0IZLBUD8D8FRFZ3X6FS0NL.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/D3/0IZLBUD8D8FRFZ3X6FS0NL.uasset new file mode 100644 index 0000000..68305d1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/D3/0IZLBUD8D8FRFZ3X6FS0NL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/DN/PSZEID3KH3UCA6N4JJ7EH5.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/DN/PSZEID3KH3UCA6N4JJ7EH5.uasset new file mode 100644 index 0000000..71dce34 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/DN/PSZEID3KH3UCA6N4JJ7EH5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/H3/0XSTNQS7WWXGF0W0R0MHYH.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/H3/0XSTNQS7WWXGF0W0R0MHYH.uasset new file mode 100644 index 0000000..b1c7068 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/H3/0XSTNQS7WWXGF0W0R0MHYH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/IC/82GXHIQ1LBSS75HKJS22Z1.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/IC/82GXHIQ1LBSS75HKJS22Z1.uasset new file mode 100644 index 0000000..ac8b62b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/IC/82GXHIQ1LBSS75HKJS22Z1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/OQ/QSHJBZFA3DH4WUMPYR0F5P.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/OQ/QSHJBZFA3DH4WUMPYR0F5P.uasset new file mode 100644 index 0000000..0de6ed8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/OQ/QSHJBZFA3DH4WUMPYR0F5P.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/R9/L3U9JKOV9CIMSF7EVCJIZH.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/R9/L3U9JKOV9CIMSF7EVCJIZH.uasset new file mode 100644 index 0000000..0b7b236 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/R9/L3U9JKOV9CIMSF7EVCJIZH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/S5/R35THGWMTZWY37KCLGIB7L.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/S5/R35THGWMTZWY37KCLGIB7L.uasset new file mode 100644 index 0000000..7fe9f81 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/S5/R35THGWMTZWY37KCLGIB7L.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/WL/P9Y29NLS25OX7A4GU66A6A.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/WL/P9Y29NLS25OX7A4GU66A6A.uasset new file mode 100644 index 0000000..56aa35f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/WL/P9Y29NLS25OX7A4GU66A6A.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/ZI/29MX5OP77Y9OOZ7V1YCBUM.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/ZI/29MX5OP77Y9OOZ7V1YCBUM.uasset new file mode 100644 index 0000000..977cb1f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/C/ZI/29MX5OP77Y9OOZ7V1YCBUM.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/09/ZZRW8OHLRZDO5O0926MMPR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/09/ZZRW8OHLRZDO5O0926MMPR.uasset new file mode 100644 index 0000000..efff761 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/09/ZZRW8OHLRZDO5O0926MMPR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/0N/93KJOJF9EXQN0RAXMTNKDR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/0N/93KJOJF9EXQN0RAXMTNKDR.uasset new file mode 100644 index 0000000..f2aee30 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/0N/93KJOJF9EXQN0RAXMTNKDR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/61/ITYUBBWV7Y4IQXOLL3OQJZ.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/61/ITYUBBWV7Y4IQXOLL3OQJZ.uasset new file mode 100644 index 0000000..cbe35ed Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/61/ITYUBBWV7Y4IQXOLL3OQJZ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/75/S72Z416K7C5SQ26QAZYHIC.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/75/S72Z416K7C5SQ26QAZYHIC.uasset new file mode 100644 index 0000000..30aec5f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/75/S72Z416K7C5SQ26QAZYHIC.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/AC/AU94FKCJ1ZPAVYN19SWNSR.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/AC/AU94FKCJ1ZPAVYN19SWNSR.uasset new file mode 100644 index 0000000..a888991 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/AC/AU94FKCJ1ZPAVYN19SWNSR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/B0/ZE8C59CK81PJ77IL1LVLQU.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/B0/ZE8C59CK81PJ77IL1LVLQU.uasset new file mode 100644 index 0000000..79a130c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/B0/ZE8C59CK81PJ77IL1LVLQU.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/O0/ICNATY20XOMXIO9PWTLC46.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/O0/ICNATY20XOMXIO9PWTLC46.uasset new file mode 100644 index 0000000..1f00b47 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/O0/ICNATY20XOMXIO9PWTLC46.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/OO/N782ZG44Y5GSTV48DK6NHT.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/OO/N782ZG44Y5GSTV48DK6NHT.uasset new file mode 100644 index 0000000..cdcc38c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/OO/N782ZG44Y5GSTV48DK6NHT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/QZ/IDA5I0RVDBWJM3XO7DN7BU.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/QZ/IDA5I0RVDBWJM3XO7DN7BU.uasset new file mode 100644 index 0000000..bd7ec85 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/QZ/IDA5I0RVDBWJM3XO7DN7BU.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/RR/E36ZI764OLQ2HQNVTOL4I0.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/RR/E36ZI764OLQ2HQNVTOL4I0.uasset new file mode 100644 index 0000000..2b7c338 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/RR/E36ZI764OLQ2HQNVTOL4I0.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/ZN/AASHM8JVSL0T04BL1PKPVV.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/ZN/AASHM8JVSL0T04BL1PKPVV.uasset new file mode 100644 index 0000000..08bf4ab Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/D/ZN/AASHM8JVSL0T04BL1PKPVV.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/0W/BXUQNB8M3HHSJ6SCAVEGS7.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/0W/BXUQNB8M3HHSJ6SCAVEGS7.uasset new file mode 100644 index 0000000..a8b771f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/0W/BXUQNB8M3HHSJ6SCAVEGS7.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/27/GZJOI0Z35GOANSWBGT9QY9.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/27/GZJOI0Z35GOANSWBGT9QY9.uasset new file mode 100644 index 0000000..8f73796 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/27/GZJOI0Z35GOANSWBGT9QY9.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/5H/SXKH8U4XMAUA5AFBNY1M9I.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/5H/SXKH8U4XMAUA5AFBNY1M9I.uasset new file mode 100644 index 0000000..d31f2f3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/5H/SXKH8U4XMAUA5AFBNY1M9I.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/C3/SA8IH98KFTNCIYFK2VCP5C.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/C3/SA8IH98KFTNCIYFK2VCP5C.uasset new file mode 100644 index 0000000..4960131 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/C3/SA8IH98KFTNCIYFK2VCP5C.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/FF/4T2DI6DVP9S9AFO2356BSH.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/FF/4T2DI6DVP9S9AFO2356BSH.uasset new file mode 100644 index 0000000..2c09bc0 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/FF/4T2DI6DVP9S9AFO2356BSH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/IM/TWHLFKFH4DB824NJJJLC1H.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/IM/TWHLFKFH4DB824NJJJLC1H.uasset new file mode 100644 index 0000000..f77daf7 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/IM/TWHLFKFH4DB824NJJJLC1H.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/J9/Q4B9M2NH0W56UM3XIMZMOZ.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/J9/Q4B9M2NH0W56UM3XIMZMOZ.uasset new file mode 100644 index 0000000..87414aa Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/J9/Q4B9M2NH0W56UM3XIMZMOZ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/K5/S1VK675CG7GLA667I2TYT5.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/K5/S1VK675CG7GLA667I2TYT5.uasset new file mode 100644 index 0000000..331e0d5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/K5/S1VK675CG7GLA667I2TYT5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/KK/RKM41UD17P08BSJT6UZVLJ.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/KK/RKM41UD17P08BSJT6UZVLJ.uasset new file mode 100644 index 0000000..ef3b9f0 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/KK/RKM41UD17P08BSJT6UZVLJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/Y5/G83AFQCGFHSD24L1L4S5WO.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/Y5/G83AFQCGFHSD24L1L4S5WO.uasset new file mode 100644 index 0000000..6e390ce Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/Y5/G83AFQCGFHSD24L1L4S5WO.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/YO/13HRCDN18BGJI0B1LGKN1T.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/YO/13HRCDN18BGJI0B1LGKN1T.uasset new file mode 100644 index 0000000..f8da7b8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/E/YO/13HRCDN18BGJI0B1LGKN1T.uasset differ diff --git a/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/F/5B/VVZB345TJTB0CL0BS349YF.uasset b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/F/5B/VVZB345TJTB0CL0BS349YF.uasset new file mode 100644 index 0000000..6c3f3a5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Combat/Lvl_Combat/F/5B/VVZB345TJTB0CL0BS349YF.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/4B/I5O7HJ57YPKKYPY4SSFLZZ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/4B/I5O7HJ57YPKKYPY4SSFLZZ.uasset new file mode 100644 index 0000000..b8799cc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/4B/I5O7HJ57YPKKYPY4SSFLZZ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/J0/QVXJ1XUJQIZQ2ONEJOW0EI.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/J0/QVXJ1XUJQIZQ2ONEJOW0EI.uasset new file mode 100644 index 0000000..cb27245 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/J0/QVXJ1XUJQIZQ2ONEJOW0EI.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/JN/C6PH50SPLFLBWA0OBWMQ5F.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/JN/C6PH50SPLFLBWA0OBWMQ5F.uasset new file mode 100644 index 0000000..1f34354 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/JN/C6PH50SPLFLBWA0OBWMQ5F.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/KB/70R3R0AIAG8WCGCAGQ9CY3.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/KB/70R3R0AIAG8WCGCAGQ9CY3.uasset new file mode 100644 index 0000000..646901c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/KB/70R3R0AIAG8WCGCAGQ9CY3.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/L0/7JFGLNLOCKI0V1IMMACK8B.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/L0/7JFGLNLOCKI0V1IMMACK8B.uasset new file mode 100644 index 0000000..4217d12 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/L0/7JFGLNLOCKI0V1IMMACK8B.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/LN/6XUGMACJHTF9UVGA53PLQ9.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/LN/6XUGMACJHTF9UVGA53PLQ9.uasset new file mode 100644 index 0000000..bc734fb Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/LN/6XUGMACJHTF9UVGA53PLQ9.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/OK/2FZGASC74XU6I8LRJ4B9LO.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/OK/2FZGASC74XU6I8LRJ4B9LO.uasset new file mode 100644 index 0000000..f0f363e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/OK/2FZGASC74XU6I8LRJ4B9LO.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/Q1/Q5QAZW7H2QSS3YP9WWH1SC.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/Q1/Q5QAZW7H2QSS3YP9WWH1SC.uasset new file mode 100644 index 0000000..cc2e1d9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/Q1/Q5QAZW7H2QSS3YP9WWH1SC.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/TH/TXPB77A5UO9PLNG838CR59.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/TH/TXPB77A5UO9PLNG838CR59.uasset new file mode 100644 index 0000000..59e591d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/TH/TXPB77A5UO9PLNG838CR59.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/XS/21O3C30HDVFRXZ0RL7PRMF.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/XS/21O3C30HDVFRXZ0RL7PRMF.uasset new file mode 100644 index 0000000..f0a27c1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/0/XS/21O3C30HDVFRXZ0RL7PRMF.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/1O/DVDF8QZG4S920O3BQWHRO1.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/1O/DVDF8QZG4S920O3BQWHRO1.uasset new file mode 100644 index 0000000..3331179 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/1O/DVDF8QZG4S920O3BQWHRO1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/32/9OI6KLDGH7UIFHL3YRPU1R.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/32/9OI6KLDGH7UIFHL3YRPU1R.uasset new file mode 100644 index 0000000..84ea305 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/32/9OI6KLDGH7UIFHL3YRPU1R.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/3E/MP74I7I6B8KHZ3XNPOIUQK.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/3E/MP74I7I6B8KHZ3XNPOIUQK.uasset new file mode 100644 index 0000000..6631f3a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/3E/MP74I7I6B8KHZ3XNPOIUQK.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/4V/AM9A6SENLG8J1ID4WGVI4L.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/4V/AM9A6SENLG8J1ID4WGVI4L.uasset new file mode 100644 index 0000000..ec7f367 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/4V/AM9A6SENLG8J1ID4WGVI4L.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/51/5Y69443HPJ0BUZGAUHEJK3.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/51/5Y69443HPJ0BUZGAUHEJK3.uasset new file mode 100644 index 0000000..9f41a50 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/51/5Y69443HPJ0BUZGAUHEJK3.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/97/XM7WH6EAJNTGEZ63GE7FJ6.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/97/XM7WH6EAJNTGEZ63GE7FJ6.uasset new file mode 100644 index 0000000..267061f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/97/XM7WH6EAJNTGEZ63GE7FJ6.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/GA/OEGB3A3ENQT70XN5J4YKQJ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/GA/OEGB3A3ENQT70XN5J4YKQJ.uasset new file mode 100644 index 0000000..336a02b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/GA/OEGB3A3ENQT70XN5J4YKQJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/L5/QG3Z4YZSPOZSHGICCUH31A.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/L5/QG3Z4YZSPOZSHGICCUH31A.uasset new file mode 100644 index 0000000..b3e699c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/L5/QG3Z4YZSPOZSHGICCUH31A.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/N4/PELUAFNLTUJDHSXON93S6I.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/N4/PELUAFNLTUJDHSXON93S6I.uasset new file mode 100644 index 0000000..1b58cc0 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/N4/PELUAFNLTUJDHSXON93S6I.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/PU/K4YJRC8WAA2CIGF549BYZR.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/PU/K4YJRC8WAA2CIGF549BYZR.uasset new file mode 100644 index 0000000..1386ae4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/PU/K4YJRC8WAA2CIGF549BYZR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/R0/HT23SLNIEQ0O2HXL7LBX4R.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/R0/HT23SLNIEQ0O2HXL7LBX4R.uasset new file mode 100644 index 0000000..59c8d8f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/R0/HT23SLNIEQ0O2HXL7LBX4R.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/T1/H5NOVVQYGVDZH2QBIXZRI5.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/T1/H5NOVVQYGVDZH2QBIXZRI5.uasset new file mode 100644 index 0000000..3d3365f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/T1/H5NOVVQYGVDZH2QBIXZRI5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/U0/YGL0WFXJS6FO10WOKK1V2L.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/U0/YGL0WFXJS6FO10WOKK1V2L.uasset new file mode 100644 index 0000000..7b6dd4d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/U0/YGL0WFXJS6FO10WOKK1V2L.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/YF/EKAD5DGG3DXWMMY6JCZYDE.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/YF/EKAD5DGG3DXWMMY6JCZYDE.uasset new file mode 100644 index 0000000..4790292 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/YF/EKAD5DGG3DXWMMY6JCZYDE.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/ZP/9I0OZ8R10E9S06ETOOJA63.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/ZP/9I0OZ8R10E9S06ETOOJA63.uasset new file mode 100644 index 0000000..4e73004 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/1/ZP/9I0OZ8R10E9S06ETOOJA63.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/1C/ZUE27ERNTBGXJY0JQR479S.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/1C/ZUE27ERNTBGXJY0JQR479S.uasset new file mode 100644 index 0000000..138e75a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/1C/ZUE27ERNTBGXJY0JQR479S.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/1R/618POQ41Q2FSSGC1VTL0AJ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/1R/618POQ41Q2FSSGC1VTL0AJ.uasset new file mode 100644 index 0000000..8386797 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/1R/618POQ41Q2FSSGC1VTL0AJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/67/LRD5AFZSX7RLAT58UVOF6S.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/67/LRD5AFZSX7RLAT58UVOF6S.uasset new file mode 100644 index 0000000..ba6998f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/67/LRD5AFZSX7RLAT58UVOF6S.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/K8/5Z205Q47ZTF15T5Q87JU7E.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/K8/5Z205Q47ZTF15T5Q87JU7E.uasset new file mode 100644 index 0000000..2ca91a4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/K8/5Z205Q47ZTF15T5Q87JU7E.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/L6/9KHQMN7IUK8SMKHH3VX6M3.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/L6/9KHQMN7IUK8SMKHH3VX6M3.uasset new file mode 100644 index 0000000..5523f9e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/L6/9KHQMN7IUK8SMKHH3VX6M3.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/OI/MF8ZZS7KVI44SVR0BHY301.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/OI/MF8ZZS7KVI44SVR0BHY301.uasset new file mode 100644 index 0000000..6162cdc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/OI/MF8ZZS7KVI44SVR0BHY301.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/V9/XCZ24R2H8269E10XXKVHNG.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/V9/XCZ24R2H8269E10XXKVHNG.uasset new file mode 100644 index 0000000..c115efb Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/V9/XCZ24R2H8269E10XXKVHNG.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/Z9/6SNYH6YCML05ATNZJMJNLV.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/Z9/6SNYH6YCML05ATNZJMJNLV.uasset new file mode 100644 index 0000000..39c042c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/2/Z9/6SNYH6YCML05ATNZJMJNLV.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/11/QC3UE5SH63R7HLDSIARHYP.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/11/QC3UE5SH63R7HLDSIARHYP.uasset new file mode 100644 index 0000000..68174d8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/11/QC3UE5SH63R7HLDSIARHYP.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/1L/ITUZ7HAI87POYJ5CKEJ6JQ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/1L/ITUZ7HAI87POYJ5CKEJ6JQ.uasset new file mode 100644 index 0000000..d8611c6 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/1L/ITUZ7HAI87POYJ5CKEJ6JQ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/5C/472HXGW93Z5Y0DTU24MT05.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/5C/472HXGW93Z5Y0DTU24MT05.uasset new file mode 100644 index 0000000..7fa6a8c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/5C/472HXGW93Z5Y0DTU24MT05.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/69/49UL41JIT9J3Z82DSEOGNR.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/69/49UL41JIT9J3Z82DSEOGNR.uasset new file mode 100644 index 0000000..c41126f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/69/49UL41JIT9J3Z82DSEOGNR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/6F/7UY85E4YUBO3IIQ5WZY2TR.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/6F/7UY85E4YUBO3IIQ5WZY2TR.uasset new file mode 100644 index 0000000..fcb7bd5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/6F/7UY85E4YUBO3IIQ5WZY2TR.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/6H/7ALASFYN40X69PEEB5RXZ2.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/6H/7ALASFYN40X69PEEB5RXZ2.uasset new file mode 100644 index 0000000..6ea3a06 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/6H/7ALASFYN40X69PEEB5RXZ2.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/AD/OOT0TOS7NDYPON55O43E4B.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/AD/OOT0TOS7NDYPON55O43E4B.uasset new file mode 100644 index 0000000..622eaa9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/AD/OOT0TOS7NDYPON55O43E4B.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/GD/LA9QY6EIOP5MXBBFTM03KI.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/GD/LA9QY6EIOP5MXBBFTM03KI.uasset new file mode 100644 index 0000000..ac1d2ee Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/GD/LA9QY6EIOP5MXBBFTM03KI.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/J1/ZMFUDHBD9FHM68ZT96IA1C.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/J1/ZMFUDHBD9FHM68ZT96IA1C.uasset new file mode 100644 index 0000000..87e3cb1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/J1/ZMFUDHBD9FHM68ZT96IA1C.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/JO/XBLLR77AXMIP149OV5ULY9.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/JO/XBLLR77AXMIP149OV5ULY9.uasset new file mode 100644 index 0000000..8ba4374 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/JO/XBLLR77AXMIP149OV5ULY9.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/LR/AXA3SZ8RWC8FDWTY56RLDA.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/LR/AXA3SZ8RWC8FDWTY56RLDA.uasset new file mode 100644 index 0000000..25ebb40 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/LR/AXA3SZ8RWC8FDWTY56RLDA.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/SN/0X78Q6B7RDHXMQZYGFLGXK.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/SN/0X78Q6B7RDHXMQZYGFLGXK.uasset new file mode 100644 index 0000000..8bf92a1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/SN/0X78Q6B7RDHXMQZYGFLGXK.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/VJ/XUG7C1X903GP7S2ZAQ6UPS.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/VJ/XUG7C1X903GP7S2ZAQ6UPS.uasset new file mode 100644 index 0000000..578fb0f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/VJ/XUG7C1X903GP7S2ZAQ6UPS.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/ZC/GUWXM26Q7AB4QLO5N6TPIP.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/ZC/GUWXM26Q7AB4QLO5N6TPIP.uasset new file mode 100644 index 0000000..9a2d770 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/ZC/GUWXM26Q7AB4QLO5N6TPIP.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/ZO/2FVRIT79WCE6J17NINDFS5.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/ZO/2FVRIT79WCE6J17NINDFS5.uasset new file mode 100644 index 0000000..f058895 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/3/ZO/2FVRIT79WCE6J17NINDFS5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/2U/FNC5A4JGOWJW5YKO9E4ZYH.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/2U/FNC5A4JGOWJW5YKO9E4ZYH.uasset new file mode 100644 index 0000000..7c4ce1c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/2U/FNC5A4JGOWJW5YKO9E4ZYH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/F1/ROZ0POEXKJ0PKXMW4DSCG1.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/F1/ROZ0POEXKJ0PKXMW4DSCG1.uasset new file mode 100644 index 0000000..3dbc8e5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/F1/ROZ0POEXKJ0PKXMW4DSCG1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/LU/26JCC0IS872O4TFGUT9O98.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/LU/26JCC0IS872O4TFGUT9O98.uasset new file mode 100644 index 0000000..56a428a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/LU/26JCC0IS872O4TFGUT9O98.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/OS/M2J2I7C3QIZMSSVZ2GMVVF.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/OS/M2J2I7C3QIZMSSVZ2GMVVF.uasset new file mode 100644 index 0000000..66a0b45 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/OS/M2J2I7C3QIZMSSVZ2GMVVF.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/UV/ZAF0544EAKPRNRKQIP0O01.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/UV/ZAF0544EAKPRNRKQIP0O01.uasset new file mode 100644 index 0000000..dbec7de Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/UV/ZAF0544EAKPRNRKQIP0O01.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/WL/YEFLQ06YUDR45W9UEV3JM5.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/WL/YEFLQ06YUDR45W9UEV3JM5.uasset new file mode 100644 index 0000000..07a768d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/WL/YEFLQ06YUDR45W9UEV3JM5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/XS/U8PM1GZLKWHL4FF18EN1ND.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/XS/U8PM1GZLKWHL4FF18EN1ND.uasset new file mode 100644 index 0000000..91dffb2 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/XS/U8PM1GZLKWHL4FF18EN1ND.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/ZF/WCHFY0EDKV80XWG7UZXXIX.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/ZF/WCHFY0EDKV80XWG7UZXXIX.uasset new file mode 100644 index 0000000..d89fd5d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/4/ZF/WCHFY0EDKV80XWG7UZXXIX.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/10/G2ESKRA6OA5RY0JRT35GRW.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/10/G2ESKRA6OA5RY0JRT35GRW.uasset new file mode 100644 index 0000000..0a966be Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/10/G2ESKRA6OA5RY0JRT35GRW.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/1I/93DDS3U8RVSY7QM30EHTKV.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/1I/93DDS3U8RVSY7QM30EHTKV.uasset new file mode 100644 index 0000000..f39f986 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/1I/93DDS3U8RVSY7QM30EHTKV.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/91/0Q4R1IE3K2BYJSXIZOQ0QP.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/91/0Q4R1IE3K2BYJSXIZOQ0QP.uasset new file mode 100644 index 0000000..3c1e507 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/91/0Q4R1IE3K2BYJSXIZOQ0QP.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/BA/DGFPSX4DTSKSZQ36SD1Y3K.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/BA/DGFPSX4DTSKSZQ36SD1Y3K.uasset new file mode 100644 index 0000000..3632ab3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/BA/DGFPSX4DTSKSZQ36SD1Y3K.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/CT/GLPCUDYPOA417QPFT25J2M.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/CT/GLPCUDYPOA417QPFT25J2M.uasset new file mode 100644 index 0000000..935c530 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/CT/GLPCUDYPOA417QPFT25J2M.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/D1/PJ7PHXS1Q9YT4RRK8ASA17.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/D1/PJ7PHXS1Q9YT4RRK8ASA17.uasset new file mode 100644 index 0000000..90709da Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/D1/PJ7PHXS1Q9YT4RRK8ASA17.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/DP/15D95A5TUVKKEPBC5Z3V0K.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/DP/15D95A5TUVKKEPBC5Z3V0K.uasset new file mode 100644 index 0000000..0e553fc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/DP/15D95A5TUVKKEPBC5Z3V0K.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/IL/XNME8P2GEX8RVJYJ5AS9L9.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/IL/XNME8P2GEX8RVJYJ5AS9L9.uasset new file mode 100644 index 0000000..7cf2c2d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/IL/XNME8P2GEX8RVJYJ5AS9L9.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/PQ/PI85JOOOY2R6IWIS0B5ZV5.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/PQ/PI85JOOOY2R6IWIS0B5ZV5.uasset new file mode 100644 index 0000000..8a961f6 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/PQ/PI85JOOOY2R6IWIS0B5ZV5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/VB/DD4B02GSXHYDFMAB03BUYE.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/VB/DD4B02GSXHYDFMAB03BUYE.uasset new file mode 100644 index 0000000..b916782 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/5/VB/DD4B02GSXHYDFMAB03BUYE.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/3U/Y7SCQAHPSUVVCZQCNEIKCJ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/3U/Y7SCQAHPSUVVCZQCNEIKCJ.uasset new file mode 100644 index 0000000..e9b78cc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/3U/Y7SCQAHPSUVVCZQCNEIKCJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/7U/KFRJ8G1ZYZHNS4N6S74ZMY.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/7U/KFRJ8G1ZYZHNS4N6S74ZMY.uasset new file mode 100644 index 0000000..daad457 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/7U/KFRJ8G1ZYZHNS4N6S74ZMY.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/8P/A5XH9J5QDNE58G2EZQY8EN.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/8P/A5XH9J5QDNE58G2EZQY8EN.uasset new file mode 100644 index 0000000..e716716 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/8P/A5XH9J5QDNE58G2EZQY8EN.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/9G/2YEWP1NRKUKTW7IS6S8YM5.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/9G/2YEWP1NRKUKTW7IS6S8YM5.uasset new file mode 100644 index 0000000..5316eff Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/9G/2YEWP1NRKUKTW7IS6S8YM5.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/FD/BLYOF7Y0BIG7Q9IEJJVLIJ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/FD/BLYOF7Y0BIG7Q9IEJJVLIJ.uasset new file mode 100644 index 0000000..99fe4f3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/FD/BLYOF7Y0BIG7Q9IEJJVLIJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/IR/DGTM6Z6X9MUIW1R1RM6HEM.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/IR/DGTM6Z6X9MUIW1R1RM6HEM.uasset new file mode 100644 index 0000000..69ad728 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/IR/DGTM6Z6X9MUIW1R1RM6HEM.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/KW/DIOBPSCU4ASCOKUXZZGYBP.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/KW/DIOBPSCU4ASCOKUXZZGYBP.uasset new file mode 100644 index 0000000..4ae5cd5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/KW/DIOBPSCU4ASCOKUXZZGYBP.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/MR/CIPUCZLV4PC998H04BXE50.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/MR/CIPUCZLV4PC998H04BXE50.uasset new file mode 100644 index 0000000..71f3382 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/MR/CIPUCZLV4PC998H04BXE50.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/UN/V2FXYCRO8TWCQFEW9S7ONL.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/UN/V2FXYCRO8TWCQFEW9S7ONL.uasset new file mode 100644 index 0000000..f21e6bf Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/UN/V2FXYCRO8TWCQFEW9S7ONL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/V3/KTE510QWYNYYC5GPCZILN2.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/V3/KTE510QWYNYYC5GPCZILN2.uasset new file mode 100644 index 0000000..8cff4e4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/6/V3/KTE510QWYNYYC5GPCZILN2.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/2L/43POZNB1OZZ0WC9OQQWP32.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/2L/43POZNB1OZZ0WC9OQQWP32.uasset new file mode 100644 index 0000000..0983755 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/2L/43POZNB1OZZ0WC9OQQWP32.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/7N/IHKH3QKKSO2BH68HLQE5HW.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/7N/IHKH3QKKSO2BH68HLQE5HW.uasset new file mode 100644 index 0000000..cfabb3b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/7N/IHKH3QKKSO2BH68HLQE5HW.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/FF/SREIGLJND5CE6ZHB6ORFDA.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/FF/SREIGLJND5CE6ZHB6ORFDA.uasset new file mode 100644 index 0000000..e241152 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/FF/SREIGLJND5CE6ZHB6ORFDA.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/HC/DMJ0WZMFEPSSU5KV3I06DY.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/HC/DMJ0WZMFEPSSU5KV3I06DY.uasset new file mode 100644 index 0000000..83495f8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/HC/DMJ0WZMFEPSSU5KV3I06DY.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/I3/2DFXQK7NBEGYK26EMWYIAI.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/I3/2DFXQK7NBEGYK26EMWYIAI.uasset new file mode 100644 index 0000000..f83aaf1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/I3/2DFXQK7NBEGYK26EMWYIAI.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/KT/1DMK92SYFO52BCWH7YW6X1.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/KT/1DMK92SYFO52BCWH7YW6X1.uasset new file mode 100644 index 0000000..7e7535e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/KT/1DMK92SYFO52BCWH7YW6X1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/MJ/5XX5M6PJ0MHJDUL7W6DYUJ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/MJ/5XX5M6PJ0MHJDUL7W6DYUJ.uasset new file mode 100644 index 0000000..698a17f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/MJ/5XX5M6PJ0MHJDUL7W6DYUJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/WH/A20YQ6G8GBT085UFJFYOFD.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/WH/A20YQ6G8GBT085UFJFYOFD.uasset new file mode 100644 index 0000000..f527399 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/WH/A20YQ6G8GBT085UFJFYOFD.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/XH/NCZ6KTAN4JPVHK2TB6KIWE.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/XH/NCZ6KTAN4JPVHK2TB6KIWE.uasset new file mode 100644 index 0000000..c2ba393 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/7/XH/NCZ6KTAN4JPVHK2TB6KIWE.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/0Y/JZOJQOJ8LAMK8MRFA4Y2CN.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/0Y/JZOJQOJ8LAMK8MRFA4Y2CN.uasset new file mode 100644 index 0000000..5ce387a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/0Y/JZOJQOJ8LAMK8MRFA4Y2CN.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/16/M2H1K5CDOD4X9UOOKN3G2R.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/16/M2H1K5CDOD4X9UOOKN3G2R.uasset new file mode 100644 index 0000000..bd6ae9b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/16/M2H1K5CDOD4X9UOOKN3G2R.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/2U/XD95IMXOS47D6E9UJR2SNJ.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/2U/XD95IMXOS47D6E9UJR2SNJ.uasset new file mode 100644 index 0000000..fa29ff3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/2U/XD95IMXOS47D6E9UJR2SNJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/5K/WT2N6PIFH19MI313NH2V8D.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/5K/WT2N6PIFH19MI313NH2V8D.uasset new file mode 100644 index 0000000..f35db8b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/5K/WT2N6PIFH19MI313NH2V8D.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/6P/E9NE3R4WWBFLO7DM3YVJ25.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/6P/E9NE3R4WWBFLO7DM3YVJ25.uasset new file mode 100644 index 0000000..a7bb879 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/6P/E9NE3R4WWBFLO7DM3YVJ25.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/6U/9N30SLQBL4GCYWZAABJERE.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/6U/9N30SLQBL4GCYWZAABJERE.uasset new file mode 100644 index 0000000..84db8a9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/6U/9N30SLQBL4GCYWZAABJERE.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/7K/H1IDQB3F7XR0G6D56GBMU6.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/7K/H1IDQB3F7XR0G6D56GBMU6.uasset new file mode 100644 index 0000000..e30d2ea Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/7K/H1IDQB3F7XR0G6D56GBMU6.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/AJ/XJF07VB8ISEFI4M87N4CXF.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/AJ/XJF07VB8ISEFI4M87N4CXF.uasset new file mode 100644 index 0000000..4c5a1f1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/AJ/XJF07VB8ISEFI4M87N4CXF.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/DH/OC6G68ED5VJZVW8EJQA76B.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/DH/OC6G68ED5VJZVW8EJQA76B.uasset new file mode 100644 index 0000000..30d0a76 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/DH/OC6G68ED5VJZVW8EJQA76B.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/GN/DIDACECEDK7DQHGSZF35H6.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/GN/DIDACECEDK7DQHGSZF35H6.uasset new file mode 100644 index 0000000..ec3b2a2 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/GN/DIDACECEDK7DQHGSZF35H6.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/HS/R85DVK392RC4R0J9AJJSDX.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/HS/R85DVK392RC4R0J9AJJSDX.uasset new file mode 100644 index 0000000..8275e20 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/HS/R85DVK392RC4R0J9AJJSDX.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/L1/PNG8TF54EI2EAW897D3V0R.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/L1/PNG8TF54EI2EAW897D3V0R.uasset new file mode 100644 index 0000000..bf06089 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/L1/PNG8TF54EI2EAW897D3V0R.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/LP/95YG2KJ4S2ZT9TNGF4O1UA.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/LP/95YG2KJ4S2ZT9TNGF4O1UA.uasset new file mode 100644 index 0000000..b5bf80e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/LP/95YG2KJ4S2ZT9TNGF4O1UA.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/NQ/B9RELJCTYQ8L9Y6YSJCZIA.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/NQ/B9RELJCTYQ8L9Y6YSJCZIA.uasset new file mode 100644 index 0000000..3784403 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/NQ/B9RELJCTYQ8L9Y6YSJCZIA.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/XL/7MKLADN1ZTTQ9FPVTBJGUD.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/XL/7MKLADN1ZTTQ9FPVTBJGUD.uasset new file mode 100644 index 0000000..077447a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/8/XL/7MKLADN1ZTTQ9FPVTBJGUD.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/1I/FU34616O1QKKFXMD67EPG7.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/1I/FU34616O1QKKFXMD67EPG7.uasset new file mode 100644 index 0000000..27c39af Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/1I/FU34616O1QKKFXMD67EPG7.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/2Z/K9Y7T981NPFQB0F0ODWMT7.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/2Z/K9Y7T981NPFQB0F0ODWMT7.uasset new file mode 100644 index 0000000..4da9bac Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/2Z/K9Y7T981NPFQB0F0ODWMT7.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/40/03OMEJKEKXOLMSAJLN6AF0.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/40/03OMEJKEKXOLMSAJLN6AF0.uasset new file mode 100644 index 0000000..5e2609c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/40/03OMEJKEKXOLMSAJLN6AF0.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/91/EMMTW3081FS3SV7WH9BV88.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/91/EMMTW3081FS3SV7WH9BV88.uasset new file mode 100644 index 0000000..278ef56 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/91/EMMTW3081FS3SV7WH9BV88.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/DQ/SBFD5M675LVD68N22SGIWH.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/DQ/SBFD5M675LVD68N22SGIWH.uasset new file mode 100644 index 0000000..67bd5f7 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/DQ/SBFD5M675LVD68N22SGIWH.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/HL/KDU8U69V1XMLLWEBDOOFTK.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/HL/KDU8U69V1XMLLWEBDOOFTK.uasset new file mode 100644 index 0000000..2584990 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/HL/KDU8U69V1XMLLWEBDOOFTK.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/HU/PMPASKH2GKH319Q1CFMPRM.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/HU/PMPASKH2GKH319Q1CFMPRM.uasset new file mode 100644 index 0000000..863619c Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/HU/PMPASKH2GKH319Q1CFMPRM.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/IO/VM3C7C9TQPPAFFJU31MCU7.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/IO/VM3C7C9TQPPAFFJU31MCU7.uasset new file mode 100644 index 0000000..ffe92e9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/IO/VM3C7C9TQPPAFFJU31MCU7.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/JR/THXBS4Q7NOST3UFAAZK5R4.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/JR/THXBS4Q7NOST3UFAAZK5R4.uasset new file mode 100644 index 0000000..57b0f09 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/JR/THXBS4Q7NOST3UFAAZK5R4.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/UW/FS31A2FNT9GW4YINH4S00F.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/UW/FS31A2FNT9GW4YINH4S00F.uasset new file mode 100644 index 0000000..7dd21f1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/UW/FS31A2FNT9GW4YINH4S00F.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/UZ/8KR57T843NS9S301MPFH8D.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/UZ/8KR57T843NS9S301MPFH8D.uasset new file mode 100644 index 0000000..2695f4b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/9/UZ/8KR57T843NS9S301MPFH8D.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/37/3MDT8UZULS2IQMUIAZMQYT.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/37/3MDT8UZULS2IQMUIAZMQYT.uasset new file mode 100644 index 0000000..bf01c56 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/37/3MDT8UZULS2IQMUIAZMQYT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/3T/LQOJ9BAH0TFG9BN6VMPR0L.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/3T/LQOJ9BAH0TFG9BN6VMPR0L.uasset new file mode 100644 index 0000000..e9295fd Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/3T/LQOJ9BAH0TFG9BN6VMPR0L.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/AT/95NOG595COK8YO39FPAVPE.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/AT/95NOG595COK8YO39FPAVPE.uasset new file mode 100644 index 0000000..9b4f0a1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/AT/95NOG595COK8YO39FPAVPE.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/HZ/SQLM1IFIPOBMEKJGJHIBDL.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/HZ/SQLM1IFIPOBMEKJGJHIBDL.uasset new file mode 100644 index 0000000..9885e34 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/HZ/SQLM1IFIPOBMEKJGJHIBDL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/NT/1U3K1FIZFLZJD9JECG4J91.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/NT/1U3K1FIZFLZJD9JECG4J91.uasset new file mode 100644 index 0000000..1a96ecb Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/NT/1U3K1FIZFLZJD9JECG4J91.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/P0/2315TBK297NP062364FRJK.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/P0/2315TBK297NP062364FRJK.uasset new file mode 100644 index 0000000..692d368 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/P0/2315TBK297NP062364FRJK.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/YE/8F6N6CWL3Z9YFWFCPBOABN.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/YE/8F6N6CWL3Z9YFWFCPBOABN.uasset new file mode 100644 index 0000000..1922997 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/A/YE/8F6N6CWL3Z9YFWFCPBOABN.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/17/SDPBJ9K67UIPUP22ZH7864.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/17/SDPBJ9K67UIPUP22ZH7864.uasset new file mode 100644 index 0000000..616ef84 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/17/SDPBJ9K67UIPUP22ZH7864.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/4O/8WLC0J43A48EBWDDJ38YJD.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/4O/8WLC0J43A48EBWDDJ38YJD.uasset new file mode 100644 index 0000000..074aa90 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/4O/8WLC0J43A48EBWDDJ38YJD.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/76/E3AHN2FPNWBFJ2AQ6HVNOY.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/76/E3AHN2FPNWBFJ2AQ6HVNOY.uasset new file mode 100644 index 0000000..1d088fb Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/76/E3AHN2FPNWBFJ2AQ6HVNOY.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/BQ/Q372FLA8BD7JIG29PCYFWG.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/BQ/Q372FLA8BD7JIG29PCYFWG.uasset new file mode 100644 index 0000000..95c44d8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/BQ/Q372FLA8BD7JIG29PCYFWG.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/CT/CFSGXL14SGU01FPIMKSNE1.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/CT/CFSGXL14SGU01FPIMKSNE1.uasset new file mode 100644 index 0000000..3124cac Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/CT/CFSGXL14SGU01FPIMKSNE1.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/DA/6DJ7HJ17WP8CD3I6ZY8HWI.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/DA/6DJ7HJ17WP8CD3I6ZY8HWI.uasset new file mode 100644 index 0000000..2f9a260 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/DA/6DJ7HJ17WP8CD3I6ZY8HWI.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/EX/VH3KW6RCB7L4HSAXAZF3W3.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/EX/VH3KW6RCB7L4HSAXAZF3W3.uasset new file mode 100644 index 0000000..32dc72a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/EX/VH3KW6RCB7L4HSAXAZF3W3.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/F7/KMRREMHTMPCZQOSLDYDJBS.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/F7/KMRREMHTMPCZQOSLDYDJBS.uasset new file mode 100644 index 0000000..0b3fc2b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/F7/KMRREMHTMPCZQOSLDYDJBS.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/NE/1IZ3B0QY64Q0RDP9NU2K6H.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/NE/1IZ3B0QY64Q0RDP9NU2K6H.uasset new file mode 100644 index 0000000..64ed730 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/NE/1IZ3B0QY64Q0RDP9NU2K6H.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/SG/ABBQVE4WS4Q8X6QBWDF841.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/SG/ABBQVE4WS4Q8X6QBWDF841.uasset new file mode 100644 index 0000000..1467ccc Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/SG/ABBQVE4WS4Q8X6QBWDF841.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/T3/BMIR1KVDQU7TPX80KNVG2T.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/T3/BMIR1KVDQU7TPX80KNVG2T.uasset new file mode 100644 index 0000000..d409874 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/B/T3/BMIR1KVDQU7TPX80KNVG2T.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/2M/BKLMJXKFDR71PC1PWGUPPP.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/2M/BKLMJXKFDR71PC1PWGUPPP.uasset new file mode 100644 index 0000000..106002f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/2M/BKLMJXKFDR71PC1PWGUPPP.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/4T/2KL36DS4X1S0RM7I09CL33.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/4T/2KL36DS4X1S0RM7I09CL33.uasset new file mode 100644 index 0000000..720361e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/4T/2KL36DS4X1S0RM7I09CL33.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/7M/BO9IX3WLRNCEHVRDDLEOWT.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/7M/BO9IX3WLRNCEHVRDDLEOWT.uasset new file mode 100644 index 0000000..81a7890 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/7M/BO9IX3WLRNCEHVRDDLEOWT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/8A/TJ8MW1WQ2KJOMU1L02L2YA.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/8A/TJ8MW1WQ2KJOMU1L02L2YA.uasset new file mode 100644 index 0000000..14a7fcf Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/8A/TJ8MW1WQ2KJOMU1L02L2YA.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/W1/4XPUEFSRF6IJ5DJVQ5HY2N.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/W1/4XPUEFSRF6IJ5DJVQ5HY2N.uasset new file mode 100644 index 0000000..1aca37d Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/W1/4XPUEFSRF6IJ5DJVQ5HY2N.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/YZ/BZJ174LKPK9P48T2FPZ2YD.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/YZ/BZJ174LKPK9P48T2FPZ2YD.uasset new file mode 100644 index 0000000..2c23b65 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/C/YZ/BZJ174LKPK9P48T2FPZ2YD.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/24/8PNBMJZ6VELIPUADNB9KZY.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/24/8PNBMJZ6VELIPUADNB9KZY.uasset new file mode 100644 index 0000000..b1b4b50 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/24/8PNBMJZ6VELIPUADNB9KZY.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/40/HCM80K2UTKQ44YIMIPPXS8.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/40/HCM80K2UTKQ44YIMIPPXS8.uasset new file mode 100644 index 0000000..35233cd Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/40/HCM80K2UTKQ44YIMIPPXS8.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/EY/PINX4K2U7SAPH6WRJ4H1EL.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/EY/PINX4K2U7SAPH6WRJ4H1EL.uasset new file mode 100644 index 0000000..9ffb99f Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/EY/PINX4K2U7SAPH6WRJ4H1EL.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/LA/T916UMOAT5N27HQFVX6WGS.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/LA/T916UMOAT5N27HQFVX6WGS.uasset new file mode 100644 index 0000000..9ab536b Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/D/LA/T916UMOAT5N27HQFVX6WGS.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/5L/5SHDOVHTHP7TGMLI05GVV9.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/5L/5SHDOVHTHP7TGMLI05GVV9.uasset new file mode 100644 index 0000000..f9a2cec Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/5L/5SHDOVHTHP7TGMLI05GVV9.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/A5/G6EJWJRQ94MEJ6VYZQCH0P.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/A5/G6EJWJRQ94MEJ6VYZQCH0P.uasset new file mode 100644 index 0000000..be9dd9a Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/A5/G6EJWJRQ94MEJ6VYZQCH0P.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/KF/BM04659BFJO7X0DH4EGU2N.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/KF/BM04659BFJO7X0DH4EGU2N.uasset new file mode 100644 index 0000000..2ac3c6e Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/KF/BM04659BFJO7X0DH4EGU2N.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/L8/O2XSZ7TA8EZ3U0EH412XVT.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/L8/O2XSZ7TA8EZ3U0EH412XVT.uasset new file mode 100644 index 0000000..f8aa256 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/E/L8/O2XSZ7TA8EZ3U0EH412XVT.uasset differ diff --git a/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/F/4R/B8IQ24EUB55DKMWKFIM65C.uasset b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/F/4R/B8IQ24EUB55DKMWKFIM65C.uasset new file mode 100644 index 0000000..0c87ba7 Binary files /dev/null and b/Content/__ExternalActors__/Variant_Platforming/Lvl_Platforming/F/4R/B8IQ24EUB55DKMWKFIM65C.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/2I/G1MKF8NNQ54SREG7DDID6O.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/2I/G1MKF8NNQ54SREG7DDID6O.uasset new file mode 100644 index 0000000..20b499a Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/2I/G1MKF8NNQ54SREG7DDID6O.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/51/C41HDKEQ2QWJHE8D8QL4TM.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/51/C41HDKEQ2QWJHE8D8QL4TM.uasset new file mode 100644 index 0000000..6e6d05d Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/51/C41HDKEQ2QWJHE8D8QL4TM.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/55/TSQ6SNX6TODA8EE8PEHVED.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/55/TSQ6SNX6TODA8EE8PEHVED.uasset new file mode 100644 index 0000000..0e1f970 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/55/TSQ6SNX6TODA8EE8PEHVED.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/7N/X1VL3XUO4ZCPBN9ZEYXAU5.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/7N/X1VL3XUO4ZCPBN9ZEYXAU5.uasset new file mode 100644 index 0000000..7b294a8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/7N/X1VL3XUO4ZCPBN9ZEYXAU5.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/9X/ON50D9MMRRWCOF8MZCJLBN.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/9X/ON50D9MMRRWCOF8MZCJLBN.uasset new file mode 100644 index 0000000..2c03e0b Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/9X/ON50D9MMRRWCOF8MZCJLBN.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/A0/QUB33CZ9GJSQCJ55A8O7SH.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/A0/QUB33CZ9GJSQCJ55A8O7SH.uasset new file mode 100644 index 0000000..ec8fcfe Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/A0/QUB33CZ9GJSQCJ55A8O7SH.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/CE/WO89H04O4WVY06P3ZDQZDY.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/CE/WO89H04O4WVY06P3ZDQZDY.uasset new file mode 100644 index 0000000..2f8a487 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/CE/WO89H04O4WVY06P3ZDQZDY.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/W4/K4XW5H58ZTIXYZPFEU59QY.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/W4/K4XW5H58ZTIXYZPFEU59QY.uasset new file mode 100644 index 0000000..6d2fded Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/W4/K4XW5H58ZTIXYZPFEU59QY.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/XR/DKEGC1B4JI84Q6M99OFPAB.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/XR/DKEGC1B4JI84Q6M99OFPAB.uasset new file mode 100644 index 0000000..2b90c04 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/XR/DKEGC1B4JI84Q6M99OFPAB.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/YZ/8GP970C3DULJJRBDLJCCAT.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/YZ/8GP970C3DULJJRBDLJCCAT.uasset new file mode 100644 index 0000000..8175be3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/0/YZ/8GP970C3DULJJRBDLJCCAT.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/4L/QHE9SS8IL8NAH4LP40QVMA.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/4L/QHE9SS8IL8NAH4LP40QVMA.uasset new file mode 100644 index 0000000..7a1a523 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/4L/QHE9SS8IL8NAH4LP40QVMA.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/AS/7JLJ2FV98VA2GZXKO2SZQ3.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/AS/7JLJ2FV98VA2GZXKO2SZQ3.uasset new file mode 100644 index 0000000..d7f3723 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/AS/7JLJ2FV98VA2GZXKO2SZQ3.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/DZ/I5IBC74KFACATJBFXLDCE0.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/DZ/I5IBC74KFACATJBFXLDCE0.uasset new file mode 100644 index 0000000..a25f1aa Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/DZ/I5IBC74KFACATJBFXLDCE0.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/MM/CNZCO2Y9UH51FLSXM49L4K.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/MM/CNZCO2Y9UH51FLSXM49L4K.uasset new file mode 100644 index 0000000..723eadf Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/1/MM/CNZCO2Y9UH51FLSXM49L4K.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/88/W3TC4XVD4B726DXP8IRN6K.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/88/W3TC4XVD4B726DXP8IRN6K.uasset new file mode 100644 index 0000000..2879aad Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/88/W3TC4XVD4B726DXP8IRN6K.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/8N/FCX53BERRMEQY7OWO3KYO6.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/8N/FCX53BERRMEQY7OWO3KYO6.uasset new file mode 100644 index 0000000..285e92a Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/8N/FCX53BERRMEQY7OWO3KYO6.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/8W/JCYX6FJ8GQ2IFZ7BNCK5RE.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/8W/JCYX6FJ8GQ2IFZ7BNCK5RE.uasset new file mode 100644 index 0000000..2b4cef2 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/8W/JCYX6FJ8GQ2IFZ7BNCK5RE.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/BX/L4E2EQEA7T84XTQO1ANHJH.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/BX/L4E2EQEA7T84XTQO1ANHJH.uasset new file mode 100644 index 0000000..7bbdd26 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/BX/L4E2EQEA7T84XTQO1ANHJH.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/QN/5OYUDWJJIFAH2U8EP29EZW.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/QN/5OYUDWJJIFAH2U8EP29EZW.uasset new file mode 100644 index 0000000..41d273e Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/QN/5OYUDWJJIFAH2U8EP29EZW.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/QN/HKCCLAZQSUEJZG9QCZ6C0O.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/QN/HKCCLAZQSUEJZG9QCZ6C0O.uasset new file mode 100644 index 0000000..dd29124 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/QN/HKCCLAZQSUEJZG9QCZ6C0O.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/TS/G8WTY9XQQX37L3VIWLTMJU.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/TS/G8WTY9XQQX37L3VIWLTMJU.uasset new file mode 100644 index 0000000..cee7e01 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/TS/G8WTY9XQQX37L3VIWLTMJU.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/UF/U3AV1VA4PKPVMO06KMZSD1.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/UF/U3AV1VA4PKPVMO06KMZSD1.uasset new file mode 100644 index 0000000..c5d5b1f Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/UF/U3AV1VA4PKPVMO06KMZSD1.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/WS/OVOQ7FE1IFTPQISWGSWKVC.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/WS/OVOQ7FE1IFTPQISWGSWKVC.uasset new file mode 100644 index 0000000..424245f Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/WS/OVOQ7FE1IFTPQISWGSWKVC.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/WV/IGCDSH3F4Y0RC8SENYM91Z.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/WV/IGCDSH3F4Y0RC8SENYM91Z.uasset new file mode 100644 index 0000000..96ffe46 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/2/WV/IGCDSH3F4Y0RC8SENYM91Z.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/5S/82ZBWG53S08ZU6XJ2ZSBBE.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/5S/82ZBWG53S08ZU6XJ2ZSBBE.uasset new file mode 100644 index 0000000..18fb644 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/5S/82ZBWG53S08ZU6XJ2ZSBBE.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/GX/6EOALX5Y5HFRQJAGOS1QT7.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/GX/6EOALX5Y5HFRQJAGOS1QT7.uasset new file mode 100644 index 0000000..8aa3f13 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/GX/6EOALX5Y5HFRQJAGOS1QT7.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/LI/I3R0J0JY12SLX2CUDGPK14.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/LI/I3R0J0JY12SLX2CUDGPK14.uasset new file mode 100644 index 0000000..ba6dcd8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/LI/I3R0J0JY12SLX2CUDGPK14.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/V1/D800HGD5TR8TIRIXI0DPZO.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/V1/D800HGD5TR8TIRIXI0DPZO.uasset new file mode 100644 index 0000000..92c1c72 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/3/V1/D800HGD5TR8TIRIXI0DPZO.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/2O/7LLF6A9TYTLPVE3CJBMHZW.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/2O/7LLF6A9TYTLPVE3CJBMHZW.uasset new file mode 100644 index 0000000..e874a23 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/2O/7LLF6A9TYTLPVE3CJBMHZW.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/5P/6P8DZN6JS5T15S43S4A4Q9.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/5P/6P8DZN6JS5T15S43S4A4Q9.uasset new file mode 100644 index 0000000..b75686f Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/5P/6P8DZN6JS5T15S43S4A4Q9.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/AO/V40S5T2E6I4T2O6BBNUR38.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/AO/V40S5T2E6I4T2O6BBNUR38.uasset new file mode 100644 index 0000000..a5630b5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/AO/V40S5T2E6I4T2O6BBNUR38.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/DJ/F3N5KA328H6KPE36KJLFHV.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/DJ/F3N5KA328H6KPE36KJLFHV.uasset new file mode 100644 index 0000000..12fb2c0 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/DJ/F3N5KA328H6KPE36KJLFHV.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/FE/C6BJR38GS6H4J2SPT0XRZG.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/FE/C6BJR38GS6H4J2SPT0XRZG.uasset new file mode 100644 index 0000000..c4956e4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/FE/C6BJR38GS6H4J2SPT0XRZG.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/FI/PYW5E1IVFV8U5TT2WHQGHB.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/FI/PYW5E1IVFV8U5TT2WHQGHB.uasset new file mode 100644 index 0000000..832b6ec Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/FI/PYW5E1IVFV8U5TT2WHQGHB.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/S1/V1WOSCNF9Z5E74HYU3V5O1.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/S1/V1WOSCNF9Z5E74HYU3V5O1.uasset new file mode 100644 index 0000000..4f3cbfa Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/S1/V1WOSCNF9Z5E74HYU3V5O1.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/SR/O49WBYGCZC2E5STYR76FC4.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/SR/O49WBYGCZC2E5STYR76FC4.uasset new file mode 100644 index 0000000..b54c727 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/SR/O49WBYGCZC2E5STYR76FC4.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/X1/0K1YU00713QQLQPVSUR3IP.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/X1/0K1YU00713QQLQPVSUR3IP.uasset new file mode 100644 index 0000000..bc3cc3b Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/4/X1/0K1YU00713QQLQPVSUR3IP.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/1I/2S73Q6F8UM0GUJ5FUTYL7X.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/1I/2S73Q6F8UM0GUJ5FUTYL7X.uasset new file mode 100644 index 0000000..4da170e Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/1I/2S73Q6F8UM0GUJ5FUTYL7X.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/AN/JLMHPKUN9Z5WTQYDGYP142.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/AN/JLMHPKUN9Z5WTQYDGYP142.uasset new file mode 100644 index 0000000..61cf599 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/AN/JLMHPKUN9Z5WTQYDGYP142.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/BN/36TXURCS5J98HU9ZZ79V1Z.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/BN/36TXURCS5J98HU9ZZ79V1Z.uasset new file mode 100644 index 0000000..67d09ca Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/BN/36TXURCS5J98HU9ZZ79V1Z.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/CY/E7V6YSUV6ZU1RENFIG0S6N.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/CY/E7V6YSUV6ZU1RENFIG0S6N.uasset new file mode 100644 index 0000000..169a7c7 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/CY/E7V6YSUV6ZU1RENFIG0S6N.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/R7/QBO2ZHXPF79ZYF4GINGLIF.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/R7/QBO2ZHXPF79ZYF4GINGLIF.uasset new file mode 100644 index 0000000..ff0a791 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/R7/QBO2ZHXPF79ZYF4GINGLIF.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/RK/SCE75WXEPFZ9ERSYYKKE4A.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/RK/SCE75WXEPFZ9ERSYYKKE4A.uasset new file mode 100644 index 0000000..6f23c20 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/5/RK/SCE75WXEPFZ9ERSYYKKE4A.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/7N/V8LHYHOZ8T4E0JW1UI8HNH.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/7N/V8LHYHOZ8T4E0JW1UI8HNH.uasset new file mode 100644 index 0000000..c9c9631 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/7N/V8LHYHOZ8T4E0JW1UI8HNH.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/G4/6HOLR0R7EDXS2QUKSQ79J7.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/G4/6HOLR0R7EDXS2QUKSQ79J7.uasset new file mode 100644 index 0000000..fc9d2fa Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/G4/6HOLR0R7EDXS2QUKSQ79J7.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/Y7/WUY3BJM0HMIJDZ6ORO6KDY.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/Y7/WUY3BJM0HMIJDZ6ORO6KDY.uasset new file mode 100644 index 0000000..3cad6bf Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/Y7/WUY3BJM0HMIJDZ6ORO6KDY.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/Z6/A3HQCHNAI3O4WPJZEB47V3.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/Z6/A3HQCHNAI3O4WPJZEB47V3.uasset new file mode 100644 index 0000000..3e4c980 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/Z6/A3HQCHNAI3O4WPJZEB47V3.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/ZZ/JNWPBGUXXO50Z8FMT2C8FK.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/ZZ/JNWPBGUXXO50Z8FMT2C8FK.uasset new file mode 100644 index 0000000..318ec9b Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/6/ZZ/JNWPBGUXXO50Z8FMT2C8FK.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/AC/GJKJDMBGHUD0VUN52G0BWX.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/AC/GJKJDMBGHUD0VUN52G0BWX.uasset new file mode 100644 index 0000000..a641fda Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/AC/GJKJDMBGHUD0VUN52G0BWX.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FI/VOZOS1IVPW2M97OAXQCQV1.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FI/VOZOS1IVPW2M97OAXQCQV1.uasset new file mode 100644 index 0000000..eb1a186 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FI/VOZOS1IVPW2M97OAXQCQV1.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FU/ESKEUK3PO4RFJ7DNJHE95H.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FU/ESKEUK3PO4RFJ7DNJHE95H.uasset new file mode 100644 index 0000000..ea6bd2c Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FU/ESKEUK3PO4RFJ7DNJHE95H.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FZ/TAY0RTVT1I4LEADPG4DMCL.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FZ/TAY0RTVT1I4LEADPG4DMCL.uasset new file mode 100644 index 0000000..5e5dc98 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/FZ/TAY0RTVT1I4LEADPG4DMCL.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/HG/KNVV0PKQUQGFMXEO4LEB5E.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/HG/KNVV0PKQUQGFMXEO4LEB5E.uasset new file mode 100644 index 0000000..7390381 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/HG/KNVV0PKQUQGFMXEO4LEB5E.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/OJ/3Z4PRDM96FA9PAAA5QN8T6.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/OJ/3Z4PRDM96FA9PAAA5QN8T6.uasset new file mode 100644 index 0000000..75896ba Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/OJ/3Z4PRDM96FA9PAAA5QN8T6.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/Q9/VV1XAARCTH3S9KYJ70JU5U.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/Q9/VV1XAARCTH3S9KYJ70JU5U.uasset new file mode 100644 index 0000000..989c366 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/Q9/VV1XAARCTH3S9KYJ70JU5U.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/RK/BFV42H3EZS6RTU76GYOY42.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/RK/BFV42H3EZS6RTU76GYOY42.uasset new file mode 100644 index 0000000..8a6740c Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/RK/BFV42H3EZS6RTU76GYOY42.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/TK/XOW2H2EFOJBB8E2LG4DQ3A.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/TK/XOW2H2EFOJBB8E2LG4DQ3A.uasset new file mode 100644 index 0000000..cca0144 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/TK/XOW2H2EFOJBB8E2LG4DQ3A.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/VE/PAV8481ITARYRY3QDLFEJZ.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/VE/PAV8481ITARYRY3QDLFEJZ.uasset new file mode 100644 index 0000000..927cdce Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/7/VE/PAV8481ITARYRY3QDLFEJZ.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/0Y/JGIN2GJ35V3PEEV84HFVRV.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/0Y/JGIN2GJ35V3PEEV84HFVRV.uasset new file mode 100644 index 0000000..8bc73dd Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/0Y/JGIN2GJ35V3PEEV84HFVRV.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/BX/0TL7ZIIQQ5DC1IAX1XYJUZ.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/BX/0TL7ZIIQQ5DC1IAX1XYJUZ.uasset new file mode 100644 index 0000000..a0ae9ee Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/BX/0TL7ZIIQQ5DC1IAX1XYJUZ.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/IY/E2HCOQGZZ81FQJZH0Q7EXB.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/IY/E2HCOQGZZ81FQJZH0Q7EXB.uasset new file mode 100644 index 0000000..7940ca4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/IY/E2HCOQGZZ81FQJZH0Q7EXB.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/QR/0XN8O0QF52ZUXKOZG7BONA.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/QR/0XN8O0QF52ZUXKOZG7BONA.uasset new file mode 100644 index 0000000..0005a27 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/QR/0XN8O0QF52ZUXKOZG7BONA.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/V3/20IIIADDF8349J2BKCJKT0.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/V3/20IIIADDF8349J2BKCJKT0.uasset new file mode 100644 index 0000000..959698d Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/V3/20IIIADDF8349J2BKCJKT0.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/XQ/YVK1F3AJGN2OYUWBYE1175.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/XQ/YVK1F3AJGN2OYUWBYE1175.uasset new file mode 100644 index 0000000..604c384 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/XQ/YVK1F3AJGN2OYUWBYE1175.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/XT/8U4LWVODG9CWTCW2RDG45N.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/XT/8U4LWVODG9CWTCW2RDG45N.uasset new file mode 100644 index 0000000..cb2ff15 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/XT/8U4LWVODG9CWTCW2RDG45N.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/ZO/DNU8CWFVEZ083S87RKPEZ9.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/ZO/DNU8CWFVEZ083S87RKPEZ9.uasset new file mode 100644 index 0000000..e32fa4c Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/8/ZO/DNU8CWFVEZ083S87RKPEZ9.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/0H/L2OPHB6SDBCIRYW1FF8EBT.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/0H/L2OPHB6SDBCIRYW1FF8EBT.uasset new file mode 100644 index 0000000..57e9418 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/0H/L2OPHB6SDBCIRYW1FF8EBT.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/EY/NKSPJALRCCOUADXCNJK3CL.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/EY/NKSPJALRCCOUADXCNJK3CL.uasset new file mode 100644 index 0000000..8a8b664 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/EY/NKSPJALRCCOUADXCNJK3CL.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/FU/3SI6A5UVXA8UU40SO8PXBK.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/FU/3SI6A5UVXA8UU40SO8PXBK.uasset new file mode 100644 index 0000000..0216530 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/FU/3SI6A5UVXA8UU40SO8PXBK.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/IB/TU2042O8WCAXRXICLUU34I.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/IB/TU2042O8WCAXRXICLUU34I.uasset new file mode 100644 index 0000000..c7ec378 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/IB/TU2042O8WCAXRXICLUU34I.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/W1/Y1NMCVOYTP7IVRTZNVIOZN.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/W1/Y1NMCVOYTP7IVRTZNVIOZN.uasset new file mode 100644 index 0000000..460d4c9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/W1/Y1NMCVOYTP7IVRTZNVIOZN.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/XD/B5ECBUW5KR3KQQF2K7SZ1E.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/XD/B5ECBUW5KR3KQQF2K7SZ1E.uasset new file mode 100644 index 0000000..91e4cd9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/XD/B5ECBUW5KR3KQQF2K7SZ1E.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/ZQ/9WNDS1QQWL546BM4CI6BNZ.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/ZQ/9WNDS1QQWL546BM4CI6BNZ.uasset new file mode 100644 index 0000000..90ee09f Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/9/ZQ/9WNDS1QQWL546BM4CI6BNZ.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/2J/LZETGQ3X85G5TSJ9FFXCA3.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/2J/LZETGQ3X85G5TSJ9FFXCA3.uasset new file mode 100644 index 0000000..52dc4f4 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/2J/LZETGQ3X85G5TSJ9FFXCA3.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/2S/5B1U9FCQ8M5X53RHEQ6D5J.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/2S/5B1U9FCQ8M5X53RHEQ6D5J.uasset new file mode 100644 index 0000000..d678f90 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/2S/5B1U9FCQ8M5X53RHEQ6D5J.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/89/YLDOGE8ZIHHE1N8EWSSA5X.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/89/YLDOGE8ZIHHE1N8EWSSA5X.uasset new file mode 100644 index 0000000..c253a9b Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/89/YLDOGE8ZIHHE1N8EWSSA5X.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/I2/P09WK19412DF9S1OSOGA9N.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/I2/P09WK19412DF9S1OSOGA9N.uasset new file mode 100644 index 0000000..1f16e86 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/I2/P09WK19412DF9S1OSOGA9N.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/MU/N60BGDPNX9NAECL7P3D62A.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/MU/N60BGDPNX9NAECL7P3D62A.uasset new file mode 100644 index 0000000..9fa85b6 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/MU/N60BGDPNX9NAECL7P3D62A.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/QT/43H2JAMUR02W8525AAT31O.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/QT/43H2JAMUR02W8525AAT31O.uasset new file mode 100644 index 0000000..b5ada80 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/QT/43H2JAMUR02W8525AAT31O.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/R0/PW2O8FXK76Q7QQP5HO12GT.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/R0/PW2O8FXK76Q7QQP5HO12GT.uasset new file mode 100644 index 0000000..43da282 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/R0/PW2O8FXK76Q7QQP5HO12GT.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/RH/6EAZC8A5PICQNUO92BCA8I.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/RH/6EAZC8A5PICQNUO92BCA8I.uasset new file mode 100644 index 0000000..f8ae146 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/RH/6EAZC8A5PICQNUO92BCA8I.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/RR/VFVX5TLBBD4APPS0WIVULU.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/RR/VFVX5TLBBD4APPS0WIVULU.uasset new file mode 100644 index 0000000..1689f64 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/RR/VFVX5TLBBD4APPS0WIVULU.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/SR/9P30BPQ8QVJ0DC2NIS2OC5.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/SR/9P30BPQ8QVJ0DC2NIS2OC5.uasset new file mode 100644 index 0000000..eb62682 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/SR/9P30BPQ8QVJ0DC2NIS2OC5.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/TM/9JUSV7NLY7Q93ZKVXAUORV.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/TM/9JUSV7NLY7Q93ZKVXAUORV.uasset new file mode 100644 index 0000000..65a95a9 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/A/TM/9JUSV7NLY7Q93ZKVXAUORV.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/0Q/K1MY2Z3PO44FGAHJOJSWRF.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/0Q/K1MY2Z3PO44FGAHJOJSWRF.uasset new file mode 100644 index 0000000..1ed059b Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/0Q/K1MY2Z3PO44FGAHJOJSWRF.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/4U/0JQULTZPZO65LXMOXJI8ZH.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/4U/0JQULTZPZO65LXMOXJI8ZH.uasset new file mode 100644 index 0000000..0e244e8 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/4U/0JQULTZPZO65LXMOXJI8ZH.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/C4/G8J8FNL5D83NA6SN3RKUNP.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/C4/G8J8FNL5D83NA6SN3RKUNP.uasset new file mode 100644 index 0000000..14cc1a5 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/C4/G8J8FNL5D83NA6SN3RKUNP.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/DM/E5TLKD3GOGSELPM18VQESJ.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/DM/E5TLKD3GOGSELPM18VQESJ.uasset new file mode 100644 index 0000000..39530f2 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/DM/E5TLKD3GOGSELPM18VQESJ.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/NS/E0F0PNC3IO8QSVU5LCI5I2.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/NS/E0F0PNC3IO8QSVU5LCI5I2.uasset new file mode 100644 index 0000000..88f945e Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/NS/E0F0PNC3IO8QSVU5LCI5I2.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/Q6/JDMX515ZGL66Y7Z28EI0RU.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/Q6/JDMX515ZGL66Y7Z28EI0RU.uasset new file mode 100644 index 0000000..543f9b3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/Q6/JDMX515ZGL66Y7Z28EI0RU.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/TT/YM92F6PM12D7710U2ZVWWY.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/TT/YM92F6PM12D7710U2ZVWWY.uasset new file mode 100644 index 0000000..6b0de61 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/TT/YM92F6PM12D7710U2ZVWWY.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/UR/JZ7DT0ELPYBVDXM6L7TM0C.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/UR/JZ7DT0ELPYBVDXM6L7TM0C.uasset new file mode 100644 index 0000000..4bf9210 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/B/UR/JZ7DT0ELPYBVDXM6L7TM0C.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/0L/CL3R603WDPFWJLMYLWZVZN.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/0L/CL3R603WDPFWJLMYLWZVZN.uasset new file mode 100644 index 0000000..dfc8af6 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/0L/CL3R603WDPFWJLMYLWZVZN.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/5R/95TDOJQ9Z8E18ROGC7MIX7.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/5R/95TDOJQ9Z8E18ROGC7MIX7.uasset new file mode 100644 index 0000000..b302aec Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/5R/95TDOJQ9Z8E18ROGC7MIX7.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/6U/6T7ODNLR62JH0BULT1J4AE.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/6U/6T7ODNLR62JH0BULT1J4AE.uasset new file mode 100644 index 0000000..bd0c564 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/6U/6T7ODNLR62JH0BULT1J4AE.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/9S/LQQ0H0SH70184OCJX1HNZ4.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/9S/LQQ0H0SH70184OCJX1HNZ4.uasset new file mode 100644 index 0000000..de1e621 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/9S/LQQ0H0SH70184OCJX1HNZ4.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/C4/C5A84ZQFO9N5LUDADATW0V.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/C4/C5A84ZQFO9N5LUDADATW0V.uasset new file mode 100644 index 0000000..3109eb2 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/C4/C5A84ZQFO9N5LUDADATW0V.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/J4/0LD3OOMMA7A1BOXNC9KUEB.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/J4/0LD3OOMMA7A1BOXNC9KUEB.uasset new file mode 100644 index 0000000..a0152dc Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/J4/0LD3OOMMA7A1BOXNC9KUEB.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/LR/BCXS1F48STUAAKWQ5V9AA5.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/LR/BCXS1F48STUAAKWQ5V9AA5.uasset new file mode 100644 index 0000000..23682b3 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/LR/BCXS1F48STUAAKWQ5V9AA5.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/ML/40T5MMM0YXF4J1LHKAELOM.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/ML/40T5MMM0YXF4J1LHKAELOM.uasset new file mode 100644 index 0000000..3eb97f7 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/ML/40T5MMM0YXF4J1LHKAELOM.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/N4/8DRPJ2DF8214RH35JA4GMC.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/N4/8DRPJ2DF8214RH35JA4GMC.uasset new file mode 100644 index 0000000..30a19fa Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/N4/8DRPJ2DF8214RH35JA4GMC.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/O2/81W0XWDLGITVXVMUB25TDV.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/O2/81W0XWDLGITVXVMUB25TDV.uasset new file mode 100644 index 0000000..d9e57ad Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/O2/81W0XWDLGITVXVMUB25TDV.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/P8/NS40YVZO11JHTQKF9JMSXF.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/P8/NS40YVZO11JHTQKF9JMSXF.uasset new file mode 100644 index 0000000..a7de9f6 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/C/P8/NS40YVZO11JHTQKF9JMSXF.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/73/Q8RBKW1UCEJ0BQANAITWX5.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/73/Q8RBKW1UCEJ0BQANAITWX5.uasset new file mode 100644 index 0000000..960bac1 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/73/Q8RBKW1UCEJ0BQANAITWX5.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/7P/SBT259X67MUNBQI7R3T53P.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/7P/SBT259X67MUNBQI7R3T53P.uasset new file mode 100644 index 0000000..1e5e865 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/7P/SBT259X67MUNBQI7R3T53P.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/82/UMH0N4CZQFRU0ME4IZXWI8.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/82/UMH0N4CZQFRU0ME4IZXWI8.uasset new file mode 100644 index 0000000..b0b9089 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/82/UMH0N4CZQFRU0ME4IZXWI8.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/88/TDH4MAYEZP207X3DMEB2OI.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/88/TDH4MAYEZP207X3DMEB2OI.uasset new file mode 100644 index 0000000..7f824bb Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/88/TDH4MAYEZP207X3DMEB2OI.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/8J/EQEW33IHHR667Y7DPDUFKK.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/8J/EQEW33IHHR667Y7DPDUFKK.uasset new file mode 100644 index 0000000..e16403b Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/8J/EQEW33IHHR667Y7DPDUFKK.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/EG/T8AKUCFASX0QNVT22HD30H.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/EG/T8AKUCFASX0QNVT22HD30H.uasset new file mode 100644 index 0000000..ffe5dbe Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/EG/T8AKUCFASX0QNVT22HD30H.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/MO/C4L1DOMPEFG1B1T21Z4RNL.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/MO/C4L1DOMPEFG1B1T21Z4RNL.uasset new file mode 100644 index 0000000..d7d45cf Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/MO/C4L1DOMPEFG1B1T21Z4RNL.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/T2/1CGXTAH2ZI6S335DJWHRJ9.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/T2/1CGXTAH2ZI6S335DJWHRJ9.uasset new file mode 100644 index 0000000..0e19baf Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/T2/1CGXTAH2ZI6S335DJWHRJ9.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/T6/99IJ6BRDKY68PMANM4E0U1.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/T6/99IJ6BRDKY68PMANM4E0U1.uasset new file mode 100644 index 0000000..4de8965 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/T6/99IJ6BRDKY68PMANM4E0U1.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/W0/7ZPJ8M3MEVY6KHBGJC37EZ.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/W0/7ZPJ8M3MEVY6KHBGJC37EZ.uasset new file mode 100644 index 0000000..07a695b Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/D/W0/7ZPJ8M3MEVY6KHBGJC37EZ.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/DA/K28CUXOWD7LWSW25P6Z35P.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/DA/K28CUXOWD7LWSW25P6Z35P.uasset new file mode 100644 index 0000000..40f7b57 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/DA/K28CUXOWD7LWSW25P6Z35P.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/E2/LUCPJMX9ZH469ORNA5LMBP.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/E2/LUCPJMX9ZH469ORNA5LMBP.uasset new file mode 100644 index 0000000..78f3652 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/E2/LUCPJMX9ZH469ORNA5LMBP.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/F3/8FPOFB99K2OT9AF8LGCI1G.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/F3/8FPOFB99K2OT9AF8LGCI1G.uasset new file mode 100644 index 0000000..6fc42ff Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/F3/8FPOFB99K2OT9AF8LGCI1G.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/VE/IBZI1HGCXN01TW4JJ5RBOU.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/VE/IBZI1HGCXN01TW4JJ5RBOU.uasset new file mode 100644 index 0000000..752892e Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/E/VE/IBZI1HGCXN01TW4JJ5RBOU.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/F/03/7O6UXFI7OYBTT8XLD8LOQX.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/F/03/7O6UXFI7OYBTT8XLD8LOQX.uasset new file mode 100644 index 0000000..3ef2f53 Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/F/03/7O6UXFI7OYBTT8XLD8LOQX.uasset differ diff --git a/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/F/49/VR137PSSEONSZYOJDXKSNI.uasset b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/F/49/VR137PSSEONSZYOJDXKSNI.uasset new file mode 100644 index 0000000..373dc1c Binary files /dev/null and b/Content/__ExternalActors__/Variant_SideScrolling/Lvl_SideScrolling/F/49/VR137PSSEONSZYOJDXKSNI.uasset differ diff --git a/Content/__ExternalObjects__/ThirdPerson/TestWorld/6/WC/U2X8JZUEMFR1L6TN101EG7.uasset b/Content/__ExternalObjects__/ThirdPerson/TestWorld/6/WC/U2X8JZUEMFR1L6TN101EG7.uasset new file mode 100644 index 0000000..b99544f Binary files /dev/null and b/Content/__ExternalObjects__/ThirdPerson/TestWorld/6/WC/U2X8JZUEMFR1L6TN101EG7.uasset differ diff --git a/Content/__ExternalObjects__/ThirdPerson/TestWorld/D/N2/R4B449IADCGUC7QYBNJEQY.uasset b/Content/__ExternalObjects__/ThirdPerson/TestWorld/D/N2/R4B449IADCGUC7QYBNJEQY.uasset new file mode 100644 index 0000000..dd26c8a Binary files /dev/null and b/Content/__ExternalObjects__/ThirdPerson/TestWorld/D/N2/R4B449IADCGUC7QYBNJEQY.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/0/AJ/Q42ZSOSTBUDHJO9I0YFJH8.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/0/AJ/Q42ZSOSTBUDHJO9I0YFJH8.uasset new file mode 100644 index 0000000..708b75f Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/0/AJ/Q42ZSOSTBUDHJO9I0YFJH8.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/0/QK/03V86HC7QVQDQ0QJ94CYLX.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/0/QK/03V86HC7QVQDQ0QJ94CYLX.uasset new file mode 100644 index 0000000..8868062 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/0/QK/03V86HC7QVQDQ0QJ94CYLX.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/7X/QGWW4SCWICG53A9K5OPS0G.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/7X/QGWW4SCWICG53A9K5OPS0G.uasset new file mode 100644 index 0000000..6c14728 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/7X/QGWW4SCWICG53A9K5OPS0G.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/K1/7BSJXD4YWZ2V1U8AB8O3Z2.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/K1/7BSJXD4YWZ2V1U8AB8O3Z2.uasset new file mode 100644 index 0000000..8d2f275 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/K1/7BSJXD4YWZ2V1U8AB8O3Z2.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/SR/0VGOAD2U620LLZDVVPGFFF.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/SR/0VGOAD2U620LLZDVVPGFFF.uasset new file mode 100644 index 0000000..a791eae Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/1/SR/0VGOAD2U620LLZDVVPGFFF.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/2/C9/058CTC6QHX54BNVCVEDMD5.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/2/C9/058CTC6QHX54BNVCVEDMD5.uasset new file mode 100644 index 0000000..3ac898b Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/2/C9/058CTC6QHX54BNVCVEDMD5.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/2/QF/FZ8IH801CN94E0HZNJIAMB.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/2/QF/FZ8IH801CN94E0HZNJIAMB.uasset new file mode 100644 index 0000000..9c78b78 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/2/QF/FZ8IH801CN94E0HZNJIAMB.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/5/EA/O3MBSQAXYS6XJUBQR76X9N.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/5/EA/O3MBSQAXYS6XJUBQR76X9N.uasset new file mode 100644 index 0000000..5c4f082 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/5/EA/O3MBSQAXYS6XJUBQR76X9N.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/7/O5/2TVKAOBOK3OMUSU4BNULM9.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/7/O5/2TVKAOBOK3OMUSU4BNULM9.uasset new file mode 100644 index 0000000..eb66ab7 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/7/O5/2TVKAOBOK3OMUSU4BNULM9.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/9/SK/PAE64UA62B4I6LK904O50Y.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/9/SK/PAE64UA62B4I6LK904O50Y.uasset new file mode 100644 index 0000000..461a97f Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/9/SK/PAE64UA62B4I6LK904O50Y.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/6N/VD4T3XSWEKR61PNFVRIPB4.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/6N/VD4T3XSWEKR61PNFVRIPB4.uasset new file mode 100644 index 0000000..28335c5 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/6N/VD4T3XSWEKR61PNFVRIPB4.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/D9/DAOWHPOKN1G4LLVA17BQ4F.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/D9/DAOWHPOKN1G4LLVA17BQ4F.uasset new file mode 100644 index 0000000..a87db0a Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/D9/DAOWHPOKN1G4LLVA17BQ4F.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/YB/BKATFJPNWZY6410P5E2OS4.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/YB/BKATFJPNWZY6410P5E2OS4.uasset new file mode 100644 index 0000000..8ee0bcb Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/A/YB/BKATFJPNWZY6410P5E2OS4.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/B/4J/TM33UR07N3CL6T1XDN76MR.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/B/4J/TM33UR07N3CL6T1XDN76MR.uasset new file mode 100644 index 0000000..660eb81 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/B/4J/TM33UR07N3CL6T1XDN76MR.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/B/4P/81CFSVQHA7OU7889MQEIM0.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/B/4P/81CFSVQHA7OU7889MQEIM0.uasset new file mode 100644 index 0000000..f614464 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/B/4P/81CFSVQHA7OU7889MQEIM0.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/7O/MHGK46YY82PZMS60I1H4B5.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/7O/MHGK46YY82PZMS60I1H4B5.uasset new file mode 100644 index 0000000..320a4c0 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/7O/MHGK46YY82PZMS60I1H4B5.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/BG/14XRTQLQ9HZHEKKS9TDV2B.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/BG/14XRTQLQ9HZHEKKS9TDV2B.uasset new file mode 100644 index 0000000..d7ca902 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/BG/14XRTQLQ9HZHEKKS9TDV2B.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/PM/J4QSJEZXX4QSU71S2XNSGB.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/PM/J4QSJEZXX4QSU71S2XNSGB.uasset new file mode 100644 index 0000000..f366573 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/C/PM/J4QSJEZXX4QSU71S2XNSGB.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/D/AE/OPO6LLO34IW7V0SYGULM48.uasset b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/D/AE/OPO6LLO34IW7V0SYGULM48.uasset new file mode 100644 index 0000000..234d045 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Combat/Lvl_Combat/D/AE/OPO6LLO34IW7V0SYGULM48.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/9D/ODYKWBVQ5YPDXSDWJDSI5Z.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/9D/ODYKWBVQ5YPDXSDWJDSI5Z.uasset new file mode 100644 index 0000000..79df193 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/9D/ODYKWBVQ5YPDXSDWJDSI5Z.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/HU/BN9XQV23Z2PJ1NNACEOHTX.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/HU/BN9XQV23Z2PJ1NNACEOHTX.uasset new file mode 100644 index 0000000..259ce04 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/HU/BN9XQV23Z2PJ1NNACEOHTX.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/IT/LAONTWEKWR03FY1W3WGQNC.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/IT/LAONTWEKWR03FY1W3WGQNC.uasset new file mode 100644 index 0000000..e93c511 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/IT/LAONTWEKWR03FY1W3WGQNC.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/VW/D1QERUEF4BT0SJ7JON4ABJ.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/VW/D1QERUEF4BT0SJ7JON4ABJ.uasset new file mode 100644 index 0000000..9ee5f84 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/0/VW/D1QERUEF4BT0SJ7JON4ABJ.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/1/N4/K32KI0AG7N0DL49GXDSEHL.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/1/N4/K32KI0AG7N0DL49GXDSEHL.uasset new file mode 100644 index 0000000..1265e1c Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/1/N4/K32KI0AG7N0DL49GXDSEHL.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/2/OE/06E4EHW0RK6BBO6IKZ8MM7.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/2/OE/06E4EHW0RK6BBO6IKZ8MM7.uasset new file mode 100644 index 0000000..4ae3805 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/2/OE/06E4EHW0RK6BBO6IKZ8MM7.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/5/7Z/29V5FZQ00G4SPGYVRIIHN5.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/5/7Z/29V5FZQ00G4SPGYVRIIHN5.uasset new file mode 100644 index 0000000..4191898 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/5/7Z/29V5FZQ00G4SPGYVRIIHN5.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/5/B1/01JFRDWADRKIKP06478EQG.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/5/B1/01JFRDWADRKIKP06478EQG.uasset new file mode 100644 index 0000000..e3c2d97 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/5/B1/01JFRDWADRKIKP06478EQG.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/36/KBB8RFBN2RRMBD1EAOZ825.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/36/KBB8RFBN2RRMBD1EAOZ825.uasset new file mode 100644 index 0000000..3e443cf Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/36/KBB8RFBN2RRMBD1EAOZ825.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/GS/2WS5T7NPSL6P167YENZ0RX.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/GS/2WS5T7NPSL6P167YENZ0RX.uasset new file mode 100644 index 0000000..1600f50 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/GS/2WS5T7NPSL6P167YENZ0RX.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/Q3/KY42ITXWBEPD99BD50GCCJ.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/Q3/KY42ITXWBEPD99BD50GCCJ.uasset new file mode 100644 index 0000000..e87565c Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/8/Q3/KY42ITXWBEPD99BD50GCCJ.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/9/UZ/KTVOLZ6X4TIVACY98L8NUE.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/9/UZ/KTVOLZ6X4TIVACY98L8NUE.uasset new file mode 100644 index 0000000..1862173 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/9/UZ/KTVOLZ6X4TIVACY98L8NUE.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/D/QJ/Q8MUZMCPNSAFNQNT1EMPEO.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/D/QJ/Q8MUZMCPNSAFNQNT1EMPEO.uasset new file mode 100644 index 0000000..4b49471 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/D/QJ/Q8MUZMCPNSAFNQNT1EMPEO.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/D/Y4/TGT919L5P5S1G33ISKEPWO.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/D/Y4/TGT919L5P5S1G33ISKEPWO.uasset new file mode 100644 index 0000000..163062c Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/D/Y4/TGT919L5P5S1G33ISKEPWO.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/E/AU/ABFDDJXNWORLPCM5L00YZ8.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/E/AU/ABFDDJXNWORLPCM5L00YZ8.uasset new file mode 100644 index 0000000..df32954 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/E/AU/ABFDDJXNWORLPCM5L00YZ8.uasset differ diff --git a/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/E/VP/CTS3EAYXWWHWS91H39XWNY.uasset b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/E/VP/CTS3EAYXWWHWS91H39XWNY.uasset new file mode 100644 index 0000000..65b49ee Binary files /dev/null and b/Content/__ExternalObjects__/Variant_Platforming/Lvl_Platforming/E/VP/CTS3EAYXWWHWS91H39XWNY.uasset differ diff --git a/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/1/UG/ZX8RGGTMXVLSKTMZHEWEKR.uasset b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/1/UG/ZX8RGGTMXVLSKTMZHEWEKR.uasset new file mode 100644 index 0000000..4a7204f Binary files /dev/null and b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/1/UG/ZX8RGGTMXVLSKTMZHEWEKR.uasset differ diff --git a/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/1/Z1/UMJIL66X80HOZOJFKETNE8.uasset b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/1/Z1/UMJIL66X80HOZOJFKETNE8.uasset new file mode 100644 index 0000000..ac7b993 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/1/Z1/UMJIL66X80HOZOJFKETNE8.uasset differ diff --git a/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/8/31/NU4AYO6JNDEAFXR2NA7X2O.uasset b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/8/31/NU4AYO6JNDEAFXR2NA7X2O.uasset new file mode 100644 index 0000000..090604e Binary files /dev/null and b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/8/31/NU4AYO6JNDEAFXR2NA7X2O.uasset differ diff --git a/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/9/XZ/RWPO76SKN90CVFMFKTDPKE.uasset b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/9/XZ/RWPO76SKN90CVFMFKTDPKE.uasset new file mode 100644 index 0000000..9c3e0fd Binary files /dev/null and b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/9/XZ/RWPO76SKN90CVFMFKTDPKE.uasset differ diff --git a/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/A/KQ/NGY0EZTAH2RRKD753U65B5.uasset b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/A/KQ/NGY0EZTAH2RRKD753U65B5.uasset new file mode 100644 index 0000000..1e1f485 Binary files /dev/null and b/Content/__ExternalObjects__/Variant_SideScrolling/Lvl_SideScrolling/A/KQ/NGY0EZTAH2RRKD753U65B5.uasset differ diff --git a/Plugins/VisualStudioTools/.gitignore b/Plugins/VisualStudioTools/.gitignore new file mode 100644 index 0000000..15e4cf7 --- /dev/null +++ b/Plugins/VisualStudioTools/.gitignore @@ -0,0 +1,421 @@ +## Based on VisualStudio and UnrealEngine templates +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore +## Get latest from https://github.com/github/gitignore/blob/main/UnrealEngine.gitignore + +## VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +## UnrealEngine.gitignore + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app +*.ipa + +# These project files can be generated by the engine +*.xcodeproj +*.xcworkspace +*.opensdf +*.sdf + +# Precompiled Assets +SourceArt/**/*.png +SourceArt/**/*.tga + +# Binary Files +Binaries/* +Plugins/*/Binaries/* + +# Builds +Build/* + +# Whitelist PakBlacklist-.txt files +!Build/*/ +Build/*/** +!Build/*/PakBlacklist*.txt + +# Don't ignore icon files in Build +!Build/**/*.ico + +# Built data for maps +*_BuiltData.uasset + +# Configuration files generated by the Editor +Saved/* + +# Compiled source files for the engine to use +Intermediate/* +Plugins/*/Intermediate/* + +# Cache files for the editor to use +DerivedDataCache/* diff --git a/Plugins/VisualStudioTools/CODEOWNERS b/Plugins/VisualStudioTools/CODEOWNERS new file mode 100644 index 0000000..23bfcb0 --- /dev/null +++ b/Plugins/VisualStudioTools/CODEOWNERS @@ -0,0 +1,8 @@ +# Each line is a file pattern followed by one or more owners. + +# These owners will be the default owners for everything in +# the repo. Unless a later match takes precedence, +# @microsoft/vc-ue-extensions-maintainers will be requested +# for review when someone opens a pull request. + +* @microsoft/vc-ue-extensions-maintainers diff --git a/Plugins/VisualStudioTools/CODE_OF_CONDUCT.md b/Plugins/VisualStudioTools/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f9ba8cf --- /dev/null +++ b/Plugins/VisualStudioTools/CODE_OF_CONDUCT.md @@ -0,0 +1,9 @@ +# Microsoft Open Source Code of Conduct + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). + +Resources: + +- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns diff --git a/Plugins/VisualStudioTools/CONTRIBUTING.md b/Plugins/VisualStudioTools/CONTRIBUTING.md new file mode 100644 index 0000000..51f9942 --- /dev/null +++ b/Plugins/VisualStudioTools/CONTRIBUTING.md @@ -0,0 +1,49 @@ +# Contributing + +This project welcomes contributions and suggestions. Most contributions require you to agree to a +Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us +the rights to use your contribution. For details, visit . + +When you submit a pull request, a CLA bot will automatically determine whether you need to provide +a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions +provided by the bot. You will only need to do this once across all repos using our CLA. + +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or +contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +## Code Style Guide + +The code in the repo follows the existing code conventions described in the Unreal Engine's [Code Standard document](https://docs.unrealengine.com/INT/epic-cplusplus-coding-standard-for-unreal-engine/). The `.editorconfig` file at the source root is used for Visual Studio to check the conventions and report violations. + +## Pull Requests + +When submitting a pull request, make sure that it has a clean build using the instructions below. A core contributor will review your pull request and provide feedback. Once all the feedback is addressed and the PR is approved, we will merge the changes. + +## Build workflow +The plugin source can be built in isolation using the command below (which wrap the RunUAT.bat script) to ensure it's correct for submition to the Unreal Engine Marketplace. + +From a Visual Studio Developer Prompt (or PowerShell Dev Prompt), run the following: + +```cmd +> msbuild -p:UnrealEngine=[path_or_version] -p:OutputPath=[absolute_path] +`````` + +- `UnrealEngine` can be either a path to a source build (e.g. `c:\src\ue`) or a version identifier for an installed engine (e.g. `4.27`, `5.2`). +- `OutputPath` cannot be under the Unreal Engine's folder due to a restriction from `RunUAT.bat`. + +> Note: The contents of `OutputPath` will be overwritten! + +By default the script will disable Unity Builds in the plugin modules to catch errors from cpp files not including all the required headers. It does not affect the build of other targets and modules. + +## Unity build errors + +If you get errors due to unity build problems, you get the same errors in Visual Studio by generating the solution with the command below. This will allow Visual Studio to suggest the includes as code fixes. Note that this will overwrite any existing solution and projects that are already present. + +```powershell +$env:VSTUE_IsCustomDevBuild=1; & "C:\Program Files\Epic Games\UE_5.2\Engine\Build\BatchFiles\Build.bat" -projectfiles -project="full_path_to_game.uproject" -game +``` + +The module rules for the plugin check the enviroment variable above to use the more strict include settings. + + diff --git a/Plugins/VisualStudioTools/Config/FilterPlugin.ini b/Plugins/VisualStudioTools/Config/FilterPlugin.ini new file mode 100644 index 0000000..66565e7 --- /dev/null +++ b/Plugins/VisualStudioTools/Config/FilterPlugin.ini @@ -0,0 +1,9 @@ +[FilterPlugin] +; This section lists additional files which will be packaged along with your plugin. Paths should be listed relative to the root plugin directory, and +; may include "...", "*", and "?" wildcards to match directories, files, and individual characters respectively. +; +; Examples: +; /README.txt +; /Extras/... +; /Binaries/ThirdParty/*.dll +/Docs/... diff --git a/Plugins/VisualStudioTools/Docs/Marketplace_Readme.md b/Plugins/VisualStudioTools/Docs/Marketplace_Readme.md new file mode 100644 index 0000000..cdb575c --- /dev/null +++ b/Plugins/VisualStudioTools/Docs/Marketplace_Readme.md @@ -0,0 +1,57 @@ +# Visual Studio Integration Tool + +Visual Studio Integration Tool is an Unreal Engine plugin that works in conjunction with Visual Studio to display information about Blueprints assets in C++ code (requires Visual Studio 2022 17.4 or later). + +## Installing + +### Visual Studio + +The tool requires the `Visual Studio Tools for Unreal Engine` component from Visual Studio to be installed. You can find it under the "Game development with C++" workload in the Visual Studio Installer (figure 1). + +![figure 1](./images/ide_support_ue.png) \ +*Figure 1 - Installing the Visual Studio component* + +### Unreal Engine + You can install the plugin in a couple of ways: + + - Through the Epic Games Launcher: + - Select the "Install to Engine" option within the Launcher. From there, you can select an engine version for installation. + - If you're using the Marketplace website, you can add the plugin to your account and you will have an option to open the Launcher in order to install it as detailed above. + - If you already added the plugin to your account, go Library -> Vault in the and locate the plugin there. + + - Through source distribution: + - If you're unable to use the Marketplace-based distribution (e.g. you're building the Unreal Engine from source), then you can install the plugin manually by following the instructions found at + +## Enabling the plugin + +- Through the Unreal Editor + - Open your project and then use the Plugin Manager to enable "VisualStudioTools". + - See [official documentation](https://docs.unrealengine.com/INT/working-with-plugins-in-unreal-engine/) for more information on how to install and enable plugins. +- (Advanced) Alternatively, you can manually edit the '.uproject' descriptor for your project and add an entry for the "VisualStudioTools" plugin. + +## Usage + +Test discovery in Visual Studio 2022 + +1. Begin by installing and enabling the `Visual Studio Tools for Unreal Engine` plugin. +2. Open your solution in Visual Studio. +3. Click on the Test Explorer to show a pop-up that will display available tests. (figure 3). +4. You can find the logs from the plugin execution in the Tests Output Window. +5. To refresh your filters for test discovery, you can select the "Options > Unreal Engine > Test Adapter" option under the "Tests" menu. (figure 4) + +![figure 2](./images/configuration_page.png) \ +*Figure 2 - Unreal Engine project Configuration Page + +![figure 3](./images/test_explorer.png) \ +*Figure 3 - Menu to rescan the blueprint assets in the game project* + +![figure 4](./images/test_options.png) \ +*Figure 3 - Menu to change options for Tests Discovery + +## Troubleshooting + +If you encounter any issues when setting up Visual Studio in conjunction with the Unreal Editor plugin, please refer to the [Troubleshooting](https://github.com/microsoft/vc-ue-extensions/blob/main/Docs/Troubleshooting.md) guide in the repository. This guide provides solutions for common issues and is periodically updated to ensure that the latest solutions are available. + +## Reporting issues + +To report new issues, provide feedback, or request new features, please use the following options: [Report a Problem](https://aka.ms/feedback/cpp/unrealengine/report) and [Suggest a Feature](https://aka.ms/feedback/cpp/unrealengine/suggest). These options will allow you to submit your issue or feedback directly to our team and help us improve the plugin moving forward. \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Docs/Troubleshooting.md b/Plugins/VisualStudioTools/Docs/Troubleshooting.md new file mode 100644 index 0000000..3f06739 --- /dev/null +++ b/Plugins/VisualStudioTools/Docs/Troubleshooting.md @@ -0,0 +1,55 @@ +# Troubleshooting guide + +This document describes some of the errors that might happen in the integration with the Unreal Engine and potential ways to mitigate them. + +The integration works by Visual Studio being able to invoke the `VisualStudioTools` plugin using the Unreal Editor executable in commandlet mode. That means the following must be true: + +- The `Visual Studio Tools for Unreal Engine` component from Visual Studio must be installed. You can find it under the "Game Development with C++" workload in the VS Installer. +- The game project must be built in a Editor target (e.g., `"Development_Editor"`). +- The `VisualStudioTools` plugin must be enabled for the project, either explicitly in the .uproject descriptor file or be enabled by default to all projects if installed at the as an engine plugin (via the `"EnabledByDefault=true"` entry in the .uplugin file). +- Starting on version 17.5, Visual Studio will wait to scan the game project until a file with the `UCLASS/UPROPERTY/UFUNCTION` macros is opened and the Code Lens hints are requested. +- At the moment, the Code Lens hints will only be displayed for game projects. In particular, the files in the _engine_ project of the solution (with name like "UE4" or "UE5") will not display the hints yet. + +## Code Lens are not visible + +### Verify the required VS component is installed + +In recent versions of UE, the generated solution comes with a `.vsconfig` file, which allows right-clicking on the Solution in VS and selecting "Install Missing Feature(s)". The component is part of the "Game Development with C++" workload. + +You can also see this [help page](https://learn.microsoft.com/en-us/visualstudio/install/install-visual-studio?view=vs-2022#step-4---choose-workloads) about installing features using the Visual Studio installer. + +### Check if the opened documents have any class decorated with the Unreal macros + +For real world projects, scanning the blueprints information might take several seconds and be expensive in terms of machine resources. Visual Studio will only start the operation when the Code Lens are rendered. That means it will wait until a file from the game project with the Unreal macros is opened in the editor. + +### Check if a `cpp.hint` file is redefining the relevant Unreal macros + +Some projects might have a cpp.hint file that includes the `UCLASS`, `UPROPERTY`, `UFUNCTION` macros. That might suppress the new logic in Visual Studio that uses the macros to display the Code Lens hints. + +If that is the case, you can remove those macros from the hint file, save it and try reloading the project. + +Note that other macros in the hint file can be left as-is and do not affect the Code Lens hints. + +### Ensure the C++ Database is enabled + +In Tools > Options > Text Editor > C/C++ > Advanced > Browsing/Navigation, the setting "Disable Database" should be set to "False". This is the default value of this setting. + +## Errors showing up in the Output Window and/or Task Center notification + +### Message "LogInit: Error: VisualStudioToolsCommandlet looked like a commandlet, but we could not find the class." + +Possible causes are the plugin not being installed correctly or installed but not yet enabled for the game project (which is required on installation from the Marketplace). + +- See [this section](../README.md#building-and-installing) for installation instructions. + +- See [this section](../README.md#optional-enabling-the-plugin) for instructions on how to enable the plugin. + +### Message "Command finished with exit code 1" without other errors + +Either the game project or the plugin DLL is not yet built. Rebuilding the project should ensure they are available. Then manually rescan the game project using the `Project > Rescan UE Blueprints` menu. + +### Task Center error: "Your task failed with the message: Could not find a part of the path...' + +This was a known issue when trying to locate the path the Unreal Editor executable, fixed in Visual Studio 17.5-Preview3. This usually happens when the selected Configuration in VS is not one with an "Editor" target. + +A workaround is to switch to such configuration and manually rescan the game project using the `Project > Rescan UE Blueprints` menu. diff --git a/Plugins/VisualStudioTools/Docs/Visual Studio Integration Tool Documentation.pdf b/Plugins/VisualStudioTools/Docs/Visual Studio Integration Tool Documentation.pdf new file mode 100644 index 0000000..edcdfc4 Binary files /dev/null and b/Plugins/VisualStudioTools/Docs/Visual Studio Integration Tool Documentation.pdf differ diff --git a/Plugins/VisualStudioTools/Docs/images/configuration_page.png b/Plugins/VisualStudioTools/Docs/images/configuration_page.png new file mode 100644 index 0000000..d08556b Binary files /dev/null and b/Plugins/VisualStudioTools/Docs/images/configuration_page.png differ diff --git a/Plugins/VisualStudioTools/Docs/images/ide_support_ue.png b/Plugins/VisualStudioTools/Docs/images/ide_support_ue.png new file mode 100644 index 0000000..2216c0c Binary files /dev/null and b/Plugins/VisualStudioTools/Docs/images/ide_support_ue.png differ diff --git a/Plugins/VisualStudioTools/Docs/images/test_explorer.png b/Plugins/VisualStudioTools/Docs/images/test_explorer.png new file mode 100644 index 0000000..e72d9b5 Binary files /dev/null and b/Plugins/VisualStudioTools/Docs/images/test_explorer.png differ diff --git a/Plugins/VisualStudioTools/Docs/images/test_options.png b/Plugins/VisualStudioTools/Docs/images/test_options.png new file mode 100644 index 0000000..3a035e3 Binary files /dev/null and b/Plugins/VisualStudioTools/Docs/images/test_options.png differ diff --git a/Plugins/VisualStudioTools/LICENSE b/Plugins/VisualStudioTools/LICENSE new file mode 100644 index 0000000..41f977a --- /dev/null +++ b/Plugins/VisualStudioTools/LICENSE @@ -0,0 +1,22 @@ + Visual Studio Tools for Unreal Engine + Copyright (c) Microsoft Corporation. + + MIT License + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE diff --git a/Plugins/VisualStudioTools/README.md b/Plugins/VisualStudioTools/README.md new file mode 100644 index 0000000..4fa5176 --- /dev/null +++ b/Plugins/VisualStudioTools/README.md @@ -0,0 +1,116 @@ +# Unreal Engine plugin for Visual Studio + +This project contains an Unreal Editor plugin that works in conjunction with Visual Studio to help discover and run tests in C++ code. + +The plugin can be installed in either the Engine or Game project sources, and it is automatically activated when an Unreal Engine project is opened in Visual Studio. + +## Requirements + +Before you begin, please make sure you have the following software and tools set up: + +1. Visual Studio 2022 has the "Visual Studio Tools for Unreal Engine" component installed. + 1. The component can be found in the "Game development with C++" workload or as an individual component. +2. Unreal Engine, either installed or built from source. + 1. To learn how to install or build Unreal Engine, please refer to the following guide: [Installing Unreal Engine](https://docs.unrealengine.com/5.0/en-US/installing-unreal-engine). + 1. The source code and instructions have been tested on Unreal Engine versions 4.27 and 5.0+. + +## Building and Installing the Plugin + +> If you have Unreal Engine installed and set up through the Epic Games Launcher, and you only want to use the plugin, you can skip the steps below and install it directly from the [Unreal Engine Marketplace](https://aka.ms/vsueplugin). + +The most straightforward way to use the plugin is to clone the repo under the `Plugins` folder of your game project or engine source. If you have multiple projects in the same Visual Studio solution, it is recommended to install the plugin at the engine level and share the binaries across the projects. + +1. Clone the repo by using the following commands: + ```powershell + git clone https://github.com/microsoft/vc-ue-extensions.git + ``` + +2. Build the plugin from source: + ```powershell + msbuild -p:UnrealEngine= + ``` + Note#1: `` can be path to source code folder of the engine or the one installed by `Epic Games Launcher` (e.g `C:\Program Files\Epic Games\UE_5.4`) + Note#2: Alternatevly you can follow [Unreal Engine building plugins](https://dev.epicgames.com/community/learning/tutorials/qz93/unreal-engine-building-plugins) guide. + +3. Clone built plugin. + + 3.1. To Project folder: + ```powershell + move-item -path ./bin -destination \Plugins\VisualStudioTools + ``` + Note: You have to create `Plugins` folder in the root of the game project if it doens't exisist yet. + + 3.2. To Engine folder: + ```powershell + move-item -path ./bin -destination Note: To ensure proper activation of the plugin, make sure the correct plugin is selected or the desired changes are made in the `.uproject` file. + +## Manually invoking the plugin + +The plugin is designed to be used with Visual Studio, and as such, it does not provide any user interfaces, commands, or logs within the Unreal Editor. However, it is still possible to test the plugin's execution by running the **sample** command below: + +```powershell +& "\Engine\Binaries\Win64\UnrealEditor-Cmd.exe" "$Env:UserProfile\Unreal Projects\EmptyProject\EmptyProject.uproject" -run=VisualStudioTools -output "$Env:Temp\vs-ue-tools.json" [-unattended -noshadercompile -nosound -nullrhi -nocpuprofilertrace -nocrashreports -nosplash] +``` + +This command will run the plugin for the specified project and save Unreal Engine Blueprint information in the output file. Optional parameters are included to run the command faster. + +For more information on the specific command line parameters, you can run the following command in the powershell prompt with `-help`: + +```powershell +& "" "" -run=VisualStudioTools -help [-unattended -noshadercompile -nosound -nullrhi -nocpuprofilertrace -nocrashreports -nosplash] +``` + +>Note: The executable name is `UE4Editor-cmd.exe` for UE4.x, located under a similar path. + +## Troubleshooting + +If you encounter any issues when setting up Visual Studio in conjunction with the Unreal Editor plugin, please refer to the [Troubleshooting](https://github.com/microsoft/vc-ue-extensions/blob/main/Docs/Troubleshooting.md) guide in the repository. This guide provides solutions for common issues and is periodically updated to ensure that the latest solutions are available. + +To report new issues, provide feedback, or request new features, please use the following options: [Report a Problem](https://aka.ms/feedback/cpp/unrealengine/report) and [Suggest a Feature](https://aka.ms/feedback/cpp/unrealengine/suggest). These options will allow you to submit your issue or feedback directly to our team and help us improve the plugin moving forward. + +## Contributing +This project welcomes contributions and suggestions. Check out our [contributing guide](CONTRIBUTING.md) for instructions on how to contribute to the project. + +## Trademarks + +This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general). +Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. +Any use of third-party trademarks or logos are subject to those third-party's policies. \ No newline at end of file diff --git a/Plugins/VisualStudioTools/SECURITY.md b/Plugins/VisualStudioTools/SECURITY.md new file mode 100644 index 0000000..e138ec5 --- /dev/null +++ b/Plugins/VisualStudioTools/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). + + diff --git a/Plugins/VisualStudioTools/SUPPORT.md b/Plugins/VisualStudioTools/SUPPORT.md new file mode 100644 index 0000000..b7cafca --- /dev/null +++ b/Plugins/VisualStudioTools/SUPPORT.md @@ -0,0 +1,13 @@ +# Support + +## How to file issues and get help + +This project uses the Visual Studio Developer Community to track bugs and feature requests. Please search the existing feedback before filing new ones to avoid duplicates. + +For common issues, please refer to our [Troubleshooting](https://github.com/microsoft/vc-ue-extensions/blob/main/Docs/troubleshooting.md) guide in the repository. We will periodically update the guide to provide solutions for common issues. + +To report issues, provide feedback, and request features, please use one of the following options: [Report a Problem](https://aka.ms/feedback/cpp/unrealengine/report) and [Suggest a Feature](https://aka.ms/feedback/cpp/unrealengine/suggest). + +## Microsoft Support Policy + +Support for this **PROJECT or PRODUCT** is limited to the resources listed above. diff --git a/Plugins/VisualStudioTools/Scripts/Package-Plugin.ps1 b/Plugins/VisualStudioTools/Scripts/Package-Plugin.ps1 new file mode 100644 index 0000000..04650c0 --- /dev/null +++ b/Plugins/VisualStudioTools/Scripts/Package-Plugin.ps1 @@ -0,0 +1,43 @@ +param( + [Parameter(Mandatory=$true)] + [string] + $EnginePath, + [Parameter(Mandatory=$true)] + [string] + $EngineVersion +) + +function New-TemporaryDirectory { + $parent = [System.IO.Path]::GetTempPath() + $name = [System.IO.Path]::GetRandomFileName() + New-Item -ItemType Directory -Path (Join-Path $parent $name) +} + +$PackagePath = New-TemporaryDirectory +& msbuild "-p:UnrealEngine=$EnginePath;OutputPath=$PackagePath;Versioned=true" + +# Add EnabledByDefault property in the descriptor file +Write-Host "Patch plugin descriptor file" +$descriptor = "$PackagePath/VisualStudioTools.uplugin" +$a = Get-Content $descriptor | ConvertFrom-Json +$a | Add-Member -NotePropertyName EnabledByDefault -NotePropertyValue $true -ErrorAction Ignore +$a | ConvertTo-Json -depth 100 | Out-File $descriptor -Encoding utf8 + +Write-Host "Copy Config folder" +Copy-Item -Path Config -Destination $PackagePath/Config -Recurse + +$PublishPath = "publish" +If(!(test-path -PathType Container $PublishPath)) +{ + New-Item -ItemType Directory -Path $PublishPath | Out-Null +} + +Write-Host "Create ZIP package" +$tag = $EngineVersion.Replace(".", "") +$files = Get-ChildItem $PackagePath -Exclude @("Binaries", "Intermediate") +$zip = "$PublishPath/VisualStudioTools_v$($a.VersionName)_ue$tag.zip" +Compress-Archive -Path $files -DestinationPath "$PublishPath/VisualStudioTools_v$($a.VersionName)_ue$tag.zip" -CompressionLevel Fastest + +Remove-Item $PackagePath -Force -Recurse + +Write-Host "Done: $($zip | Resolve-Path)" \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Scripts/SignDetached.proj b/Plugins/VisualStudioTools/Scripts/SignDetached.proj new file mode 100644 index 0000000..0357524 --- /dev/null +++ b/Plugins/VisualStudioTools/Scripts/SignDetached.proj @@ -0,0 +1,19 @@ + + + + + + $(MSBuildThisFileDirectory)../../out/ + + $(BaseOutputDirectory) + $(BaseOutputDirectory) + + + + + Microsoft400 + + + + + diff --git a/Plugins/VisualStudioTools/Scripts/packages.config b/Plugins/VisualStudioTools/Scripts/packages.config new file mode 100644 index 0000000..3fa1e7e --- /dev/null +++ b/Plugins/VisualStudioTools/Scripts/packages.config @@ -0,0 +1,4 @@ + + + + diff --git a/Plugins/VisualStudioTools/Source/.editorconfig b/Plugins/VisualStudioTools/Source/.editorconfig new file mode 100644 index 0000000..613c0eb --- /dev/null +++ b/Plugins/VisualStudioTools/Source/.editorconfig @@ -0,0 +1,91 @@ +[*.{cpp,h}] + +# Naming convention rules (note: currently need to be ordered from more to less specific) + +cpp_naming_rule.aactor_prefixed.symbols = aactor_class +cpp_naming_rule.aactor_prefixed.style = aactor_style + +cpp_naming_rule.swidget_prefixed.symbols = swidget_class +cpp_naming_rule.swidget_prefixed.style = swidget_style + +cpp_naming_rule.uobject_prefixed.symbols = uobject_class +cpp_naming_rule.uobject_prefixed.style = uobject_style + +cpp_naming_rule.booleans_prefixed.symbols = boolean_vars +cpp_naming_rule.booleans_prefixed.style = boolean_style + +cpp_naming_rule.structs_prefixed.symbols = structs +cpp_naming_rule.structs_prefixed.style = unreal_engine_structs + +cpp_naming_rule.enums_prefixed.symbols = enums +cpp_naming_rule.enums_prefixed.style = unreal_engine_enums + +cpp_naming_rule.templates_prefixed.symbols = templates +cpp_naming_rule.templates_prefixed.style = unreal_engine_templates + +cpp_naming_rule.general_names.symbols = all_symbols +cpp_naming_rule.general_names.style = unreal_engine_default + +# Naming convention symbols + +cpp_naming_symbols.aactor_class.applicable_kinds = class +cpp_naming_symbols.aactor_class.applicable_type = AActor + +cpp_naming_symbols.swidget_class.applicable_kinds = class +cpp_naming_symbols.swidget_class.applicable_type = SWidget + +cpp_naming_symbols.uobject_class.applicable_kinds = class +cpp_naming_symbols.uobject_class.applicable_type = UObject + +cpp_naming_symbols.boolean_vars.applicable_kinds = local,parameter,field +cpp_naming_symbols.boolean_vars.applicable_type = bool + +cpp_naming_symbols.enums.applicable_kinds = enum + +cpp_naming_symbols.templates.applicable_kinds = template_class + +cpp_naming_symbols.structs.applicable_kinds = struct + +cpp_naming_symbols.all_symbols.applicable_kinds = * + +# Naming convention styles + +cpp_naming_style.unreal_engine_default.capitalization = pascal_case +cpp_naming_style.unreal_engine_default.required_prefix = +cpp_naming_style.unreal_engine_default.required_suffix = +cpp_naming_style.unreal_engine_default.word_separator = + +cpp_naming_style.unreal_engine_enums.capitalization = pascal_case +cpp_naming_style.unreal_engine_enums.required_prefix = E +cpp_naming_style.unreal_engine_enums.required_suffix = +cpp_naming_style.unreal_engine_enums.word_separator = + +cpp_naming_style.unreal_engine_templates.capitalization = pascal_case +cpp_naming_style.unreal_engine_templates.required_prefix = T +cpp_naming_style.unreal_engine_templates.required_suffix = +cpp_naming_style.unreal_engine_templates.word_separator = + +cpp_naming_style.unreal_engine_structs.capitalization = pascal_case +cpp_naming_style.unreal_engine_structs.required_prefix = F +cpp_naming_style.unreal_engine_structs.required_suffix = +cpp_naming_style.unreal_engine_structs.word_separator = + +cpp_naming_style.uobject_style.capitalization = pascal_case +cpp_naming_style.uobject_style.required_prefix = U +cpp_naming_style.uobject_style.required_suffix = +cpp_naming_style.uobject_style.word_separator = + +cpp_naming_style.aactor_style.capitalization = pascal_case +cpp_naming_style.aactor_style.required_prefix = A +cpp_naming_style.aactor_style.required_suffix = +cpp_naming_style.aactor_style.word_separator = + +cpp_naming_style.swidget_style.capitalization = pascal_case +cpp_naming_style.swidget_style.required_prefix = S +cpp_naming_style.swidget_style.required_suffix = +cpp_naming_style.swidget_style.word_separator = + +cpp_naming_style.boolean_style.capitalization = pascal_case +cpp_naming_style.boolean_style.required_prefix = b +cpp_naming_style.boolean_style.required_suffix = +cpp_naming_style.boolean_style.word_separator = diff --git a/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/Private/VisualStudioBlueprintDebuggerHelperModule.cpp b/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/Private/VisualStudioBlueprintDebuggerHelperModule.cpp new file mode 100644 index 0000000..5afcac8 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/Private/VisualStudioBlueprintDebuggerHelperModule.cpp @@ -0,0 +1,246 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +#include "VisualStudioBlueprintDebuggerHelperModule.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 4 +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include + +IMPLEMENT_MODULE(FVisualStudioBlueprintDebuggerHelper, VisualStudioBlueprintDebuggerHelper); + +DEFINE_LOG_CATEGORY(LogVisualStudioBlueprintDebuggerHelper); + +#if ENGINE_MAJOR_VERSION >= 5 +#define FCustomBlueprintPropertyInfo TSharedPtr +#else +#define FCustomBlueprintPropertyInfo FDebugInfo +#endif + +struct FVSNodePinRuntimeInformation +{ + UEdGraphPin* Pin; + FCustomBlueprintPropertyInfo Property; + + FVSNodePinRuntimeInformation(UEdGraphPin* InPin, FCustomBlueprintPropertyInfo InProperty) + : Pin(InPin) + , Property(InProperty) + { + } +}; + +struct FVSNodeData +{ + FText NodeName; + TArray> Properties; + int32 ScriptEntryTag; + const UEdGraphNode* Node; +}; + +struct FVSNodesRuntimeInformation +{ + TArray> Nodes; +}; + +struct FVSBlueprintRuntimeInformation +{ + TArray>> RunningBlueprints; +}; + +struct StackTraceHelper +{ + int32 ScriptEntryTag; + FString NodeName; +}; + +// Keep exported so we can read it. +VISUALSTUDIOBLUEPRINTDEBUGGERHELPER_API FVSBlueprintRuntimeInformation BlueprintsRuntimeInformation; + +VISUALSTUDIOBLUEPRINTDEBUGGERHELPER_API std::map StackFrameInformation; + +VISUALSTUDIOBLUEPRINTDEBUGGERHELPER_API const char* DebuggerHelperVersion = "1.0.0"; + +void FVisualStudioBlueprintDebuggerHelper::StartupModule() +{ + CurrentScriptEntryTag = 0; + + FBlueprintContextTracker::OnEnterScriptContext.AddRaw( + this, + &FVisualStudioBlueprintDebuggerHelper::OnEnterScriptContext); + + FBlueprintContextTracker::OnExitScriptContext.AddRaw( + this, + &FVisualStudioBlueprintDebuggerHelper::OnExitScriptContext); + + FBlueprintCoreDelegates::OnScriptException.AddRaw( + this, + &FVisualStudioBlueprintDebuggerHelper::OnScriptException); +} + +void FVisualStudioBlueprintDebuggerHelper::ShutdownModule() +{ + FBlueprintCoreDelegates::OnScriptException.RemoveAll(this); + FBlueprintContextTracker::OnExitScriptContext.RemoveAll(this); + FBlueprintContextTracker::OnEnterScriptContext.RemoveAll(this); +} + +void FVisualStudioBlueprintDebuggerHelper::OnEnterScriptContext( + const struct FBlueprintContextTracker& Context, + const UObject* SourceObject, + const UFunction* Function) +{ + if (!IsInGameThread()) + { + return; + } + + CurrentScriptEntryTag = Context.GetScriptEntryTag(); +} + +void FVisualStudioBlueprintDebuggerHelper::OnExitScriptContext(const struct FBlueprintContextTracker& Context) +{ + if (!IsInGameThread()) + { + return; + } + + for (auto ItRunningBlueprints = BlueprintsRuntimeInformation.RunningBlueprints.CreateIterator(); ItRunningBlueprints; ++ItRunningBlueprints) + { + auto& RunningBlueprint = ItRunningBlueprints->Value; + for (auto ItNodeData = RunningBlueprint->Nodes.CreateIterator(); ItNodeData; ++ItNodeData) + { + if ((*ItNodeData)->ScriptEntryTag == Context.GetScriptEntryTag()) + { + ItNodeData.RemoveCurrent(); + } + } + + if (!RunningBlueprint->Nodes.Num()) + { + ItRunningBlueprints.RemoveCurrent(); + } + } + + for (auto ItStackFrameInfo = StackFrameInformation.begin(); ItStackFrameInfo != StackFrameInformation.end();) + { + if (ItStackFrameInfo->second.ScriptEntryTag == Context.GetScriptEntryTag()) + { + ItStackFrameInfo = StackFrameInformation.erase(ItStackFrameInfo); + } + else + { + ++ItStackFrameInfo; + } + } + + CurrentScriptEntryTag--; +} + +void FVisualStudioBlueprintDebuggerHelper::OnScriptException( + const UObject* Owner, + const struct FFrame& Stack, + const FBlueprintExceptionInfo& ExceptionInfo) +{ + EBlueprintExceptionType::Type ExceptionType = ExceptionInfo.GetType(); + if (ExceptionType != EBlueprintExceptionType::Type::Tracepoint && + ExceptionType != EBlueprintExceptionType::Type::WireTracepoint && + ExceptionType != EBlueprintExceptionType::Type::Breakpoint) + { + return; + } + + UFunction* NodeFunction = Cast(Stack.Node); + if (!NodeFunction) + { + return; + } + + UBlueprintGeneratedClass* BlueprintGeneratedClass = Cast(NodeFunction->GetOuter()); + if (!BlueprintGeneratedClass) + { + return; + } + + UBlueprint* Blueprint = Cast(BlueprintGeneratedClass->ClassGeneratedBy); + if (!Blueprint) + { + return; + } + + const int32 BreakpointOffset = Stack.Code - Stack.Node->Script.GetData() - 1; + const UEdGraphNode* NodeStoppedAt = FKismetDebugUtilities::FindSourceNodeForCodeLocation(Owner, Stack.Node, BreakpointOffset, /*bAllowImpreciseHit=*/ true); + if (!NodeStoppedAt) + { + return; + } + + StackFrameInformation[NodeFunction] = { CurrentScriptEntryTag, FString::Printf(TEXT("%s::%s"), *Blueprint->GetFriendlyName(), *NodeStoppedAt->GetNodeTitle(ENodeTitleType::Type::ListView).ToString()) }; + TTuple>* ExistingNodesRuntimeInformationTuple = BlueprintsRuntimeInformation.RunningBlueprints.FindByPredicate([&Blueprint](const TTuple>& Tuple) { + return Tuple.Key == Blueprint; + }); + + TSharedPtr NodesRuntimeInformation; + if (!ExistingNodesRuntimeInformationTuple) + { + NodesRuntimeInformation = MakeShared(); + BlueprintsRuntimeInformation.RunningBlueprints.Add(MakeTuple(Blueprint, NodesRuntimeInformation)); + } + else + { + NodesRuntimeInformation = ExistingNodesRuntimeInformationTuple->Value; + } + + TSharedPtr CurrentNodeData; + if (NodesRuntimeInformation->Nodes.Num() == 0 || NodeStoppedAt != NodesRuntimeInformation->Nodes.Top()->Node) + { + CurrentNodeData = MakeShared(); + CurrentNodeData->Node = NodeStoppedAt; + CurrentNodeData->NodeName = NodeStoppedAt->GetNodeTitle(ENodeTitleType::Type::ListView); + CurrentNodeData->ScriptEntryTag = CurrentScriptEntryTag; + NodesRuntimeInformation->Nodes.Push(CurrentNodeData); + } + else + { + CurrentNodeData = NodesRuntimeInformation->Nodes.Top(); + } + + FCustomBlueprintPropertyInfo PinInstanceInfo; + for (auto GraphPin : NodeStoppedAt->Pins) + { + FKismetDebugUtilities::EWatchTextResult DebugResult = FKismetDebugUtilities::GetDebugInfo(PinInstanceInfo, Blueprint, (UObject*)Owner, GraphPin); + if (DebugResult != FKismetDebugUtilities::EWTR_Valid) + { + continue; + } + + TSharedPtr* Existing = CurrentNodeData->Properties.FindByPredicate([&GraphPin](TSharedPtr& PinInfo) { + return PinInfo->Pin == GraphPin; + }); + + if (!Existing) + { + CurrentNodeData->Properties.Add(MakeShared(GraphPin, PinInstanceInfo)); + } + else + { + (*Existing)->Property = PinInstanceInfo; + } + } +} diff --git a/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/Private/VisualStudioBlueprintDebuggerHelperModule.h b/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/Private/VisualStudioBlueprintDebuggerHelperModule.h new file mode 100644 index 0000000..3e19a7d --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/Private/VisualStudioBlueprintDebuggerHelperModule.h @@ -0,0 +1,29 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +DECLARE_LOG_CATEGORY_EXTERN(LogVisualStudioBlueprintDebuggerHelper, Log, All); + +class FVisualStudioBlueprintDebuggerHelper : public FDefaultModuleImpl +{ +private: + void OnScriptException(const UObject* Owner, const struct FFrame& Stack, const FBlueprintExceptionInfo& ExceptionInfo); + void OnEnterScriptContext(const struct FBlueprintContextTracker& Context, const UObject* SourceObject, const UFunction* Function); + void OnExitScriptContext(const struct FBlueprintContextTracker& Context); + + int32 CurrentScriptEntryTag; + +public: + void StartupModule() override; + void ShutdownModule() override; +}; diff --git a/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/VisualStudioBlueprintDebuggerHelper.Build.cs b/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/VisualStudioBlueprintDebuggerHelper.Build.cs new file mode 100644 index 0000000..260b324 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioBlueprintDebuggerHelper/VisualStudioBlueprintDebuggerHelper.Build.cs @@ -0,0 +1,31 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +using UnrealBuildTool; + +public class VisualStudioBlueprintDebuggerHelper: ModuleRules +{ + public VisualStudioBlueprintDebuggerHelper(ReadOnlyTargetRules Target) : base(Target) + { + OptimizeCode = CodeOptimization.Never; + PrivateDependencyModuleNames.AddRange(new string[] { + "Core", + "ApplicationCore", + "AssetRegistry", + "CoreUObject", + "Engine", + "Json", + "JsonUtilities", + "Kismet", + "UnrealEd", + "Slate", + "SlateCore", + "ToolMenus", + "EditorSubsystem", + "MainFrame", + "BlueprintGraph", + "VisualStudioDTE", + "EditorStyle", + "Projects" + }); + } +} diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintAssetHelper.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintAssetHelper.cpp new file mode 100644 index 0000000..5eab4fe --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintAssetHelper.cpp @@ -0,0 +1,113 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#include "BlueprintAssetHelpers.h" + +#include "AssetRegistry/AssetRegistryModule.h" +#include "Blueprint/BlueprintSupport.h" +#include "Engine/BlueprintCore.h" +#include "Engine/BlueprintGeneratedClass.h" +#include "Engine/Engine.h" +#include "Engine/StreamableManager.h" +#include "Misc/ScopeExit.h" +#include "VisualStudioTools.h" + +namespace VisualStudioTools +{ +namespace AssetHelpers +{ +/* +* These helpers handle the usage of some APIs that were deprecated in 5.1 +* but the replacements are not available in older versions. +* Might be overridden by the `Build.cs` rules +*/ +#if FILTER_ASSETS_BY_CLASS_PATH + +void SetBlueprintClassFilter(FARFilter& InOutFilter) +{ + // UE5.1 deprecated the API to filter using class names + InOutFilter.ClassPaths.Add(UBlueprintCore::StaticClass()->GetClassPathName()); +} + +static FString GetObjectPathString(const FAssetData& InAssetData) +{ + // UE5.1 deprecated 'FAssetData::ObjectPath' in favor of 'FAssetData::GetObjectPathString()' + return InAssetData.GetObjectPathString(); +} + +#else // FILTER_ASSETS_BY_CLASS_PATH + +void SetBlueprintClassFilter(FARFilter& InOutFilter) +{ + InOutFilter.ClassNames.Add(UBlueprintCore::StaticClass()->GetFName()); +} + +static FString GetObjectPathString(const FAssetData& InAssetData) +{ + return InAssetData.ObjectPath.ToString(); +} + +#endif // FILTER_ASSETS_BY_CLASS_PATH + +void ForEachAsset( + const TArray& TargetAssets, + TFunctionRef Callback) +{ + // Show a simpler logging output. + // LogTimes are still useful to tell how long it takes to process each asset. + TGuardValue DisableLogVerbosity(GPrintLogVerbosity, false); + TGuardValue DisableLogCategory(GPrintLogCategory, false); + + // We're about to load the assets which might trigger a ton of log messages + // Temporarily suppress them during this stage. + GEngine->Exec(nullptr, TEXT("log LogVisualStudioTools only")); + ON_SCOPE_EXIT + { + GEngine->Exec(nullptr, TEXT("log reset")); + }; + + FStreamableManager AssetLoader; + + for (int32 Idx = 0; Idx < TargetAssets.Num(); Idx++) + { + const FAssetData AssetData = TargetAssets[Idx]; + FSoftClassPath GenClassPath = AssetData.GetTagValueRef(FBlueprintTags::GeneratedClassPath); + UE_LOG(LogVisualStudioTools, Display, TEXT("Processing blueprints [%d/%d]: %s"), Idx + 1, TargetAssets.Num(), *GenClassPath.ToString()); + + TSharedPtr Handle = AssetLoader.RequestSyncLoad(GenClassPath); + ON_SCOPE_EXIT + { + // We're done, notify an unload. + Handle->ReleaseHandle(); + }; + + if (!Handle.IsValid()) + { + UE_LOG(LogVisualStudioTools, Warning, TEXT("Failed to get a streamable handle for Blueprint. Skipping. GenClassPath: %s"), *GenClassPath.ToString()); + continue; + } + + if (auto BlueprintGeneratedClass = Cast(Handle->GetLoadedAsset())) + { + Callback(BlueprintGeneratedClass, AssetData); + } + else + { + // Log some extra information to help the user understand why the asset failed to load. + + FString ObjectPathString = AssetHelpers::GetObjectPathString(AssetData); + + FString Msg = !GenClassPath.ToString().Contains(ObjectPathString) + ? FString::Printf( + TEXT("ObjectPath is not compatible with GenClassPath, consider re-saving it to avoid future issues. { ObjectPath: %s, GenClassPath: %s }"), + *ObjectPathString, + *GenClassPath.ToString()) + : FString::Printf(TEXT("ClassPath: %s"), *GenClassPath.ToString()); + + UE_LOG(LogVisualStudioTools, Warning, TEXT("Failed to load Blueprint. Skipping. %s"), *Msg); + } + } +} + +} +} \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintAssetHelpers.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintAssetHelpers.h new file mode 100644 index 0000000..02b5edd --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintAssetHelpers.h @@ -0,0 +1,26 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#pragma once +#include "CoreMinimal.h" +#include "UObject/NoExportTypes.h" + +class UBlueprintGeneratedClass; + +namespace VisualStudioTools +{ +namespace AssetHelpers +{ +void SetBlueprintClassFilter(FARFilter& InOutFilter); + +/** +* Loads each blueprint asset and invokes the callback with the resulting blueprint generated class. +* Each iteration will load the asset using a FStreamableHandle and verify that is a valid blueprint +* before invoking the callback. +*/ +void ForEachAsset( + const TArray& TargetAssets, + TFunctionRef Callback); + +} // namespace AssetHelpers +} // namespace VisualStudioTools diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintReferencesCommandlet.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintReferencesCommandlet.cpp new file mode 100644 index 0000000..4aeb046 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintReferencesCommandlet.cpp @@ -0,0 +1,248 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#include "BlueprintReferencesCommandlet.h" + +#include "Algo/Find.h" +#include "Algo/Transform.h" +#include "AssetRegistry/AssetRegistryModule.h" +#include "BlueprintAssetHelpers.h" +#include "Engine/BlueprintGeneratedClass.h" +#include "FindInBlueprintManager.h" +#include "JsonObjectConverter.h" +#include "Misc/Paths.h" +#include "Misc/ScopeExit.h" +#include "Policies/CondensedJsonPrintPolicy.h" +#include "VisualStudioTools.h" + +namespace VisualStudioTools +{ +static FString StripClassPrefix(const FString& InClassName) +{ + if (InClassName.IsEmpty()) + { + return InClassName; + } + + size_t PrefixSize = 0; + + const TCHAR ClassPrefixChar = InClassName[0]; + switch (ClassPrefixChar) + { + case TEXT('I'): + case TEXT('A'): + case TEXT('U'): + // If it is a class prefix, check for deprecated class prefix also + if (InClassName.Len() > 12 && FCString::Strncmp(&(InClassName[1]), TEXT("DEPRECATED_"), 11) == 0) + { + PrefixSize = 12; + } + else + { + PrefixSize = 1; + } + break; + case TEXT('F'): + case TEXT('T'): + // Struct prefixes are also fine. + PrefixSize = 1; + break; + default: + PrefixSize = 0; + break; + } + + return InClassName.RightChop(PrefixSize); +} + +/** +* Retrieves the asset data matching the given FindInBlueprints query. +*/ +TArray SearchForCandidateAssets(const FString& SearchQuery) +{ + IAssetRegistry& AssetRegistry = FModuleManager::LoadModuleChecked(TEXT("AssetRegistry")).Get(); + AssetRegistry.SearchAllAssets(true); + + TArray OutItemsFound; + FStreamSearch StreamSearch(SearchQuery); + while (!StreamSearch.IsComplete()) + { + FFindInBlueprintSearchManager::Get().Tick(0.0); + } + + // Execute the search and get all the assets in the result. + StreamSearch.GetFilteredItems(OutItemsFound); + + + TArray OutTargetAssets; + Algo::Transform(OutItemsFound, OutTargetAssets, + [&](const FSearchResult& Item) + { + // The DisplayText property of the result contains the blueprint's object path + // Use that to find the respective asset in the registry +#if FILTER_ASSETS_BY_CLASS_PATH + return AssetRegistry.GetAssetByObjectPath(FSoftObjectPath(*Item->DisplayText.ToString())); +#else + return AssetRegistry.GetAssetByObjectPath(*Item->DisplayText.ToString()); +#endif // FILTER_ASSETS_BY_CLASS_PATH + }); + + return OutTargetAssets; +} + +/** +* Loads each blueprint asset and filters the collection to items which use the +* target UFunction in their call graph, matching the native class and function names. +*/ +TMap GetConfirmedAssets( + const FString& FunctionName, const FString& ClassNameWithoutPrefix, const TArray& InAssets) +{ + TMap OutResults; + + AssetHelpers::ForEachAsset(InAssets, + [&](UBlueprintGeneratedClass* BlueprintClassName, const FAssetData AssetData) + { + auto MatchingFunction = Algo::FindByPredicate(BlueprintClassName->CalledFunctions, + [&](const UFunction* Fn) + { + return Fn->HasAnyFunctionFlags(EFunctionFlags::FUNC_Native) + && Fn->GetName() == FunctionName + && Fn->GetOwnerClass()->GetName() == ClassNameWithoutPrefix; + }); + + if (MatchingFunction != nullptr) + { + OutResults.Add(BlueprintClassName->GetName(), AssetData); + } + }); + + return OutResults; +} +using JsonWriter = TJsonWriter>; + +static void SerializeBlueprintReference( + TSharedRef& Json, const FString& BlueprintClassName, const FAssetData& Asset) +{ + FString PackageFileName; + FString PackageFile; + FString PackageFilePath; + if (FPackageName::TryConvertLongPackageNameToFilename(Asset.GetPackage()->GetName(), PackageFileName) && + FPackageName::FindPackageFileWithoutExtension(PackageFileName, PackageFile)) + { + PackageFilePath = FPaths::ConvertRelativePathToFull(MoveTemp(PackageFile)); + } + + Json->WriteObjectStart(); + Json->WriteValue(TEXT("name"), BlueprintClassName); + Json->WriteValue(TEXT("path"), PackageFilePath); + Json->WriteObjectEnd(); +} + +static void SerializeBlueprints( + TSharedRef& Json, const TMap& InAssets) +{ + Json->WriteIdentifierPrefix(TEXT("blueprints")); + Json->WriteArrayStart(); + + for (auto& Item : InAssets) + { + const FString& BlueprintClassName = Item.Key; + const FAssetData& Asset = Item.Value; + SerializeBlueprintReference(Json, BlueprintClassName, Asset); + } + + Json->WriteArrayEnd(); +} + +static void SerializeMetadata( + TSharedRef& Json, int TotalAssetCount) +{ + Json->WriteIdentifierPrefix(TEXT("metadata")); + Json->WriteObjectStart(); + { + Json->WriteValue(TEXT("asset_count"), TotalAssetCount); + } + Json->WriteObjectEnd(); +} + +static void SerializeResults( + const TMap& InAssets, + FArchive& OutArchive, + int TotalAssetCount) +{ + TSharedRef Json = JsonWriter::Create(&OutArchive); + Json->WriteObjectStart(); + + SerializeBlueprints(Json, InAssets); + SerializeMetadata(Json, TotalAssetCount); + + Json->WriteObjectEnd(); + Json->Close(); +} +} // namespace VisualStudioTools + +static constexpr auto SymbolParamVal = TEXT("symbol"); + +UVsBlueprintReferencesCommandlet::UVsBlueprintReferencesCommandlet() + : Super() +{ + HelpDescription = TEXT("Commandlet for generating data used by Blueprint support in Visual Studio."); + + HelpParamNames.Add(SymbolParamVal); + HelpParamDescriptions.Add(TEXT("[Optional] Fully qualified symbol to search for in the blueprints.")); + + HelpUsage = TEXT(" -run=VsBlueprintReferences -output= -symbol= [-unattended -noshadercompile -nosound -nullrhi -nocpuprofilertrace -nocrashreports -nosplash]"); +} + +int32 UVsBlueprintReferencesCommandlet::Run( + TArray& Tokens, + TArray& Switches, + TMap& ParamVals, + FArchive& OutArchive) +{ + using namespace VisualStudioTools; + GIsRunning = true; // Required for the blueprint search to work. + + FString* ReferencesSymbol = ParamVals.Find(SymbolParamVal); + if (ReferencesSymbol->IsEmpty()) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("Missing required symbol parameter.")); + PrintHelp(); + return -1; + } + + FString FunctionName; + FString ClassNameNative; + if (!ReferencesSymbol->Split(TEXT("::"), &ClassNameNative, &FunctionName)) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("Reference parameter should be in the qualified 'NativeClassName::MethodName' format.")); + PrintHelp(); + return -1; + } + + // Execute the search in two stages: + // 1. Use FindInBlueprints to get all candidate blueprints with calls to functions that match the requested symbol + // 2. Confirm the blueprints reference the requested function, by matching the target UFunction in their call graph. + // The first step acts as a filter to avoid loading too many blueprints to inspect their call graph. + // The second step is required because the FiB data does not always allow for searching with the function + // qualified with the owned class name, if the function is static. + + FString ClassNameWithoutPrefix = StripClassPrefix(ClassNameNative); + + // Create a FiB search query for function nodes where the native name matches the requested symbol + FString SearchValue = FString::Printf(TEXT("Nodes(\"Native Name\"=+%s & ClassName=K2Node_CallFunction)"), *FunctionName); + + UE_LOG(LogVisualStudioTools, Display, TEXT("Blueprint search query: %s"), *SearchValue); + + // Step 1: Execute the Fib search + TArray TargetAssets = SearchForCandidateAssets(SearchValue); + + // Step 2: Load the assets to confirm they are a match + TMap MatchAssets = GetConfirmedAssets(FunctionName, ClassNameWithoutPrefix, TargetAssets); + + // Finally, write the results back to the output + SerializeResults(MatchAssets, OutArchive, TargetAssets.Num()); + + UE_LOG(LogVisualStudioTools, Display, TEXT("Found %d blueprints."), MatchAssets.Num()); + return 0; +} \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintReferencesCommandlet.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintReferencesCommandlet.h new file mode 100644 index 0000000..a0b8b1e --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/BlueprintReferencesCommandlet.h @@ -0,0 +1,25 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "CoreMinimal.h" +#include "VisualStudioToolsCommandletBase.h" + +#include "BlueprintReferencesCommandlet.generated.h" + +UCLASS() +class UVsBlueprintReferencesCommandlet + : public UVisualStudioToolsCommandletBase +{ + GENERATED_BODY() + +public: + UVsBlueprintReferencesCommandlet(); + + int32 Run( + TArray& Tokens, + TArray& Switches, + TMap& ParamVals, + FArchive& OutArchive) override; +}; diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/FSmartBSTR.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/FSmartBSTR.h new file mode 100644 index 0000000..46772f3 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/FSmartBSTR.h @@ -0,0 +1,63 @@ +#pragma once + +#include "VisualStudioDTE.h" +#include + +class FSmartBSTR +{ +public: + FSmartBSTR() : data(nullptr) + { + } + + FSmartBSTR(const FSmartBSTR& Other) + { + if (Other.data) data = SysAllocString(Other.data); + else data = nullptr; + } + + FSmartBSTR(FSmartBSTR&& Other) + { + data = std::exchange(Other.data, nullptr); + } + + FSmartBSTR(const FString& Other) + { + data = SysAllocString(*Other); + } + + FSmartBSTR(const OLECHAR *Ptr) + { + if (Ptr) data = SysAllocString(Ptr); + else data = nullptr; + } + + ~FSmartBSTR() + { + if (data) SysFreeString(data); + } + + FSmartBSTR& operator=(const FSmartBSTR& Other) + { + if (this == &Other) return *this; + if (data) SysFreeString(data); + if (Other.data) data = SysAllocString(Other.data); + else data = nullptr; + return *this; + } + + FSmartBSTR& operator=(FSmartBSTR&& Other) + { + if (data) SysFreeString(data); + data = std::exchange(Other.data, nullptr); + return *this; + } + + BSTR operator*() const + { + return data; + } + +private: + BSTR data; +}; \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSServerCommandlet.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSServerCommandlet.cpp new file mode 100644 index 0000000..70a55f5 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSServerCommandlet.cpp @@ -0,0 +1,118 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +#include "VSServerCommandlet.h" +#include "VSTestAdapterCommandlet.h" + +#include "Windows/AllowWindowsPlatformTypes.h" + +#include "HAL/PlatformNamedPipe.h" +#include "Runtime/Core/Public/Async/TaskGraphInterfaces.h" +#include "Runtime/Core/Public/Containers/Ticker.h" +#include "Runtime/Engine/Classes/Engine/World.h" +#include "Runtime/Engine/Public/TimerManager.h" +#include "Runtime/Launch/Resources/Version.h" +#include "Runtime\CoreUObject\Public\UObject\UObjectGlobals.h" +#include +#include +#include +#include +#include +#include + +#include "Windows/HideWindowsPlatformTypes.h" + +#include "VisualStudioTools.h" + +static constexpr auto NamedPipeParam = TEXT("NamedPipe"); +static constexpr auto KillServerParam = TEXT("KillVSServer"); + +UVSServerCommandlet::UVSServerCommandlet() +{ + HelpDescription = TEXT("Commandlet for Unreal Engine server mode."); + HelpUsage = TEXT(" -run=VSServer [-stdout -multiprocess -silent -unattended -AllowStdOutLogVerbosity -NoShaderCompile]"); + + HelpParamNames.Add(NamedPipeParam); + HelpParamDescriptions.Add(TEXT("[Required] The name of the named pipe used to communicate with Visual Studio.")); + + HelpParamNames.Add(KillServerParam); + HelpParamDescriptions.Add(TEXT("[Optional] Quit the server mode commandlet immediately.")); +} + +void UVSServerCommandlet::ExecuteSubCommandlet(FString ueServerNamedPipe) +{ + char buffer[1024]; + DWORD dwRead; + std::string result = "0"; + + // Open the named pipe. + std::wstring pipeName = L"\\\\.\\pipe\\"; + pipeName.append(ueServerNamedPipe.GetCharArray().GetData()); + HANDLE HPipe = CreateFile(pipeName.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); + if (HPipe != INVALID_HANDLE_VALUE) + { + ConnectNamedPipe(HPipe, NULL); + DWORD dwState; + BOOL bSuccess = GetNamedPipeHandleState(HPipe, &dwState, NULL, NULL, NULL, NULL, 0); + if (bSuccess) + { + // Read data from the named pipe. + ReadFile(HPipe, buffer, sizeof(buffer) - 1, &dwRead, NULL); + buffer[dwRead] = '\0'; + std::string strSubCommandletParams(buffer, dwRead); + FString SubCommandletParams = FString(strSubCommandletParams.c_str()); + + // Determine which sub-commandlet to invoke, and write back result response. + if (SubCommandletParams.Contains("VSTestAdapter")) + { + UVSTestAdapterCommandlet *Commandlet = NewObject(); + try + { + int32 subCommandletResult = Commandlet->Main(SubCommandletParams); + } + catch (const std::exception &ex) + { + UE_LOG(LogVisualStudioTools, Display, TEXT("Exception invoking VSTestAdapter commandlet: %s"), UTF8_TO_TCHAR(ex.what())); + result = "0"; + } + } + else if (SubCommandletParams.Contains("KillVSServer")) + { + // When KillVSServer is passed in, then kill the Unreal Editor process to end server mode. + exit(0); + } + else + { + // If cannot find which sub-commandlet to run, then return error. + result = "1"; + } + + WriteFile(HPipe, result.c_str(), result.size(), &dwRead, NULL); + } + } +} + +int32 UVSServerCommandlet::Main(const FString &ServerParams) +{ + TArray Tokens; + TArray Switches; + TMap ParamVals; + + ParseCommandLine(*ServerParams, Tokens, Switches, ParamVals); + if (ParamVals.Contains(NamedPipeParam)) + { + FString ueServerNamedPipe = ParamVals[NamedPipeParam]; + + // Infinite loop that listens to requests every second. + while (true) + { + std::this_thread::sleep_for(std::chrono::seconds(1)); + ExecuteSubCommandlet(ueServerNamedPipe); + } + } + else + { + UE_LOG(LogVisualStudioTools, Display, TEXT("Missing named pipe parameter.")); + } + + return 1; +} \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSServerCommandlet.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSServerCommandlet.h new file mode 100644 index 0000000..a8c7ef5 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSServerCommandlet.h @@ -0,0 +1,29 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "Commandlets/Commandlet.h" +#include + +#include +#include +#include + +#include "VSServerCommandlet.generated.h" + +UCLASS() +class UVSServerCommandlet + : public UCommandlet +{ + GENERATED_BODY() + +public: + UVSServerCommandlet(); + +public: + virtual int32 Main(const FString& Params) override; + +private: + void ExecuteSubCommandlet(FString ueServerNamedPipe); +}; \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSTestAdapterCommandlet.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSTestAdapterCommandlet.cpp new file mode 100644 index 0000000..493bfee --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSTestAdapterCommandlet.cpp @@ -0,0 +1,288 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +#include "VSTestAdapterCommandlet.h" + +#include "Runtime/Core/Public/Async/TaskGraphInterfaces.h" +#include "Runtime/Core/Public/Containers/Ticker.h" +#include "Runtime/Launch/Resources/Version.h" +#include +#include + +#include "VisualStudioTools.h" + +static constexpr auto FiltersParam = TEXT("filters"); +static constexpr auto ListTestsParam = TEXT("listtests"); +static constexpr auto RunTestsParam = TEXT("runtests"); +static constexpr auto TestResultsFileParam = TEXT("testresultfile"); +static constexpr auto HelpParam = TEXT("help"); + +static void GetAllTests(TArray& OutTestList) +{ + FAutomationTestFramework& Framework = FAutomationTestFramework::GetInstance(); + Framework.GetValidTestNames(OutTestList); +} + +static void ReadTestsFromFile(const FString& InFile, TArray& OutTestList) +{ + TSet TestCommands; + + // Wrapping in an inner scope to ensure automatic destruction of InStream object without explicitly calling .close(). + { + std::wifstream InStream(*InFile); + if (!InStream.good()) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("Failed to open file at path: %s"), *InFile); + return; + } + + std::wstring Line; + while (std::getline(InStream, Line)) + { + if (Line.length() > 0) + { + TestCommands.Add(FString(Line.c_str())); + } + } + } + + GetAllTests(OutTestList); + for (int32 Idx = OutTestList.Num() - 1; Idx >= 0; Idx--) + { + if (!TestCommands.Contains(OutTestList[Idx].GetTestName())) + { + OutTestList.RemoveAt(Idx); + } + } +} + +static int32 ListTests(const FString& TargetFile) +{ + std::wofstream OutFile(*TargetFile); + if (!OutFile.good()) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("Failed to open file at path: %s"), *TargetFile); + return 1; + } + + FAutomationTestFramework& Framework = FAutomationTestFramework::GetInstance(); + + TArray TestInfos; + GetAllTests(TestInfos); + + for (const auto& TestInfo : TestInfos) + { + const FString TestCommand = TestInfo.GetTestName(); + const FString DisplayName = TestInfo.GetDisplayName(); + const FString SourceFile = TestInfo.GetSourceFile(); + const int32 Line = TestInfo.GetSourceFileLine(); + + OutFile << *TestCommand << TEXT("|") << *DisplayName << TEXT("|") << Line << TEXT("|") << *SourceFile << std::endl; + } + + UE_LOG(LogVisualStudioTools, Display, TEXT("Found %d tests"), TestInfos.Num()); + OutFile.close(); + + return 0; +} + +static int32 RunTests(const FString& TestListFile, const FString& ResultsFile) +{ + std::wofstream OutFile(*ResultsFile); + if (!OutFile.good()) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("Failed to open file at path: %s"), *ResultsFile); + return 1; + } + + TArray TestInfos; + if (TestListFile.Equals(TEXT("All"), ESearchCase::IgnoreCase)) + { + GetAllTests(TestInfos); + } + else + { + ReadTestsFromFile(TestListFile, TestInfos); + } + + bool AllSuccessful = true; + + FAutomationTestFramework& Framework = FAutomationTestFramework::GetInstance(); + + for (const FAutomationTestInfo& TestInfo : TestInfos) + { + const FString TestCommand = TestInfo.GetTestName(); + const FString DisplayName = TestInfo.GetDisplayName(); + + UE_LOG(LogVisualStudioTools, Log, TEXT("Running %s"), *DisplayName); + + const int32 RoleIndex = 0; // always default to "local" role index. Only used for multi-participant tests + Framework.StartTestByName(TestCommand, RoleIndex); + + FDateTime Last = FDateTime::UtcNow(); + + while (!Framework.ExecuteLatentCommands()) + { + // Because we are not 'ticked' by the Engine we need to pump the TaskGraph + FTaskGraphInterface::Get().ProcessThreadUntilIdle(ENamedThreads::GameThread); + + const FDateTime Now = FDateTime::UtcNow(); + const float Delta = static_cast((Now - Last).GetTotalSeconds()); + + // .. and the core FTicker +#if ENGINE_MAJOR_VERSION >= 5 + FTSTicker::GetCoreTicker().Tick(Delta); +#else + FTicker::GetCoreTicker().Tick(Delta); +#endif + + Last = Now; + } + + FAutomationTestExecutionInfo ExecutionInfo; + const bool CurrentTestSuccessful = Framework.StopTest(ExecutionInfo) && ExecutionInfo.GetErrorTotal() == 0; + AllSuccessful = AllSuccessful && CurrentTestSuccessful; + + const FString Result = CurrentTestSuccessful ? TEXT("OK") : TEXT("FAIL"); + + // [RUNTEST] is part of the protocol, so do not remove. + OutFile << TEXT("[RUNTEST]") << *TestCommand << TEXT("|") << *DisplayName << TEXT("|") << *Result << TEXT("|") << ExecutionInfo.Duration << std::endl; + + if (!CurrentTestSuccessful) + { + for (const auto& Entry : ExecutionInfo.GetEntries()) + { + if (Entry.Event.Type == EAutomationEventType::Error) + { + OutFile << *Entry.Event.Message << std::endl; + UE_LOG(LogVisualStudioTools, Error, TEXT("%s"), *Entry.Event.Message); + } + } + + UE_LOG(LogVisualStudioTools, Log, TEXT("Failed %s"), *DisplayName); + } + + OutFile.flush(); + } + + return AllSuccessful ? 0 : 1; +} + +UVSTestAdapterCommandlet::UVSTestAdapterCommandlet() +{ + HelpDescription = TEXT("Commandlet for generating data used by Blueprint support in Visual Studio."); + HelpUsage = TEXT(" -run=VSTestAdapter [-stdout -multiprocess -silent -unattended -AllowStdOutLogVerbosity -NoShaderCompile]"); + + HelpParamNames.Add(ListTestsParam); + HelpParamDescriptions.Add(TEXT("[Required] The file path to write the test cases retrieved from FAutomationTestFramework")); + + HelpParamNames.Add(RunTestsParam); + HelpParamDescriptions.Add(TEXT("[Required] The test cases that will be sent to FAutomationTestFramework to run.")); + + HelpParamNames.Add(TestResultsFileParam); + HelpParamDescriptions.Add(TEXT("[Required] The output file from running test cases that we parse to retrieve test case results.")); + + HelpParamNames.Add(FiltersParam); + HelpParamDescriptions.Add(TEXT("[Optional] List of test filters to enable separated by '+'. Default is 'application+smoke+product+perf+stress+negative'")); + + HelpParamNames.Add(HelpParam); + HelpParamDescriptions.Add(TEXT("[Optional] Print this help message and quit the commandlet immediately.")); +} + +void UVSTestAdapterCommandlet::PrintHelp() const +{ + UE_LOG(LogVisualStudioTools, Display, TEXT("%s"), *HelpDescription); + UE_LOG(LogVisualStudioTools, Display, TEXT("Usage: %s"), *HelpUsage); + UE_LOG(LogVisualStudioTools, Display, TEXT("Parameters:")); + for (int32 Idx = 0; Idx < HelpParamNames.Num(); ++Idx) + { + UE_LOG(LogVisualStudioTools, Display, TEXT("\t-%s: %s"), *HelpParamNames[Idx], *HelpParamDescriptions[Idx]); + } +} + +int32 UVSTestAdapterCommandlet::Main(const FString& Params) +{ + TArray Tokens; + TArray Switches; + TMap ParamVals; + + // Functionality for Unreal Engine Test Adapter. + ParseCommandLine(*Params, Tokens, Switches, ParamVals); + if (ParamVals.Contains(HelpParam)) + { + PrintHelp(); + return 0; + } + + // Default to all the test filters. + auto filter = EAutomationTestFlags::ProductFilter | EAutomationTestFlags::SmokeFilter | EAutomationTestFlags::PerfFilter | EAutomationTestFlags::EngineFilter; + if (ParamVals.Contains(FiltersParam)) + { + FString filters = ParamVals[FiltersParam]; + if (filters.Contains("smoke")) + { + filter |= EAutomationTestFlags::SmokeFilter; + } + else + { + filter &= ~EAutomationTestFlags::SmokeFilter; + } + + if (filters.Contains("engine")) + { + filter |= EAutomationTestFlags::EngineFilter; + } + else + { + filter &= ~EAutomationTestFlags::EngineFilter; + } + + if (filters.Contains("product")) + { + filter |= EAutomationTestFlags::ProductFilter; + } + else + { + filter &= ~EAutomationTestFlags::ProductFilter; + } + + if (filters.Contains("perf")) + { + filter |= EAutomationTestFlags::PerfFilter; + } + else + { + filter &= ~EAutomationTestFlags::PerfFilter; + } + + if (filters.Contains("stress")) + { + filter |= EAutomationTestFlags::StressFilter; + } + else + { + filter &= ~EAutomationTestFlags::StressFilter; + } + + if (filters.Contains("negative")) + { + filter |= EAutomationTestFlags::NegativeFilter; + } + else + { + filter &= ~EAutomationTestFlags::NegativeFilter; + } + } + + FAutomationTestFramework::GetInstance().SetRequestedTestFilter(filter); + if (ParamVals.Contains(ListTestsParam)) + { + return ListTests(ParamVals[ListTestsParam]); + } + else if (ParamVals.Contains(RunTestsParam) && ParamVals.Contains(TestResultsFileParam)) + { + return RunTests(ParamVals[RunTestsParam], ParamVals[TestResultsFileParam]); + } + + PrintHelp(); + return 1; +} \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSTestAdapterCommandlet.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSTestAdapterCommandlet.h new file mode 100644 index 0000000..299b763 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VSTestAdapterCommandlet.h @@ -0,0 +1,28 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "Commandlets/Commandlet.h" + +#include +#include +#include + +#include "VSTestAdapterCommandlet.generated.h" + +UCLASS() +class UVSTestAdapterCommandlet + : public UCommandlet +{ + GENERATED_BODY() + +public: + UVSTestAdapterCommandlet(); + +public: + virtual int32 Main(const FString &Params) override; + +private: + void PrintHelp() const; +}; diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioTools.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioTools.cpp new file mode 100644 index 0000000..0c59e55 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioTools.cpp @@ -0,0 +1,19 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#include "VisualStudioTools.h" + +#include "Modules/ModuleInterface.h" +#include "Modules/ModuleManager.h" + +DEFINE_LOG_CATEGORY(LogVisualStudioTools); + +class FVisualStudioToolsModule : public IModuleInterface +{ +public: + /** IModuleInterface implementation */ + virtual void StartupModule() override {} + virtual void ShutdownModule() override {} +}; + +IMPLEMENT_MODULE(FVisualStudioToolsModule, VisualStudioTools) diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsBlueprintBreakpointExtension.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsBlueprintBreakpointExtension.cpp new file mode 100644 index 0000000..9062eac --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsBlueprintBreakpointExtension.cpp @@ -0,0 +1,576 @@ +#include "VisualStudioToolsBlueprintBreakpointExtension.h" +#include "FSmartBSTR.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if ENGINE_MAJOR_VERSION < 5 +#include +#include +#endif + +DEFINE_LOG_CATEGORY(LogUVisualStudioToolsBlueprintBreakpointExtension); + +static const FName GraphEditorModuleName(TEXT("GraphEditor")); + +void UVisualStudioToolsBlueprintBreakpointExtension::Initialize(FSubsystemCollectionBase& Collection) +{ + FGraphEditorModule& GraphEditorModule = FModuleManager::LoadModuleChecked(GraphEditorModuleName); + GraphEditorModule.GetAllGraphEditorContextMenuExtender().Add( + FGraphEditorModule::FGraphEditorMenuExtender_SelectedNode::CreateUObject(this, &ThisClass::HandleOnExtendGraphEditorContextMenu)); +} + +void UVisualStudioToolsBlueprintBreakpointExtension::Deinitialize() +{ + FGraphEditorModule* GraphEditorModule = FModuleManager::GetModulePtr(GraphEditorModuleName); + if (!GraphEditorModule) + { + return; + } + + GraphEditorModule->GetAllGraphEditorContextMenuExtender().RemoveAll( + [](const FGraphEditorModule::FGraphEditorMenuExtender_SelectedNode& Delegate) { + FName LocalFunction = GET_FUNCTION_NAME_CHECKED(ThisClass, HandleOnExtendGraphEditorContextMenu); + return Delegate.TryGetBoundFunctionName() == LocalFunction; + }); +} + +TSharedRef UVisualStudioToolsBlueprintBreakpointExtension::HandleOnExtendGraphEditorContextMenu( + const TSharedRef CommandList, + const UEdGraph* Graph, + const UEdGraphNode* Node, + const UEdGraphPin* Pin, + bool /* bIsConst */) +{ + TSharedRef Extender = MakeShared(); + if (!CanAddVisualStudioBreakpoint(Node, nullptr, nullptr)) + { + return Extender; + } + + const FName ExtensionHook(TEXT("EdGraphSchemaNodeActions")); + Extender->AddMenuExtension( + ExtensionHook, + EExtensionHook::After, + CommandList, + FMenuExtensionDelegate::CreateUObject(this, &ThisClass::AddVisualStudioBlueprintBreakpointMenuOption, Node)); + + return Extender; +} + +void UVisualStudioToolsBlueprintBreakpointExtension::AddVisualStudioBlueprintBreakpointMenuOption(FMenuBuilder& MenuBuilder, const UEdGraphNode *Node) +{ + MenuBuilder.BeginSection(TEXT("VisualStudioTools"), FText::FromString("Visual Studio Tools")); + MenuBuilder.AddMenuEntry( + FText::FromString("Set breakpoint in Visual Studio"), + FText::FromString("This will set a breakpoint in Visual Studio so the native debugger can break the execution"), + FSlateIcon(), + FUIAction(FExecuteAction::CreateUObject(this, &ThisClass::AddVisualStudioBreakpoint, Node))); + MenuBuilder.EndSection(); +} + +FString UVisualStudioToolsBlueprintBreakpointExtension::GetProjectPath(const FString &ProjectDir) +{ + FString ProjectPath; + if (!FFileHelper::LoadFileToString(ProjectPath, *(FPaths::EngineIntermediateDir() / TEXT("ProjectFiles") / TEXT("PrimaryProjectPath.txt")))) + { + const FProjectDescriptor* CurrentProject = IProjectManager::Get().GetCurrentProject(); + + if ((CurrentProject == nullptr || CurrentProject->Modules.Num() == 0) || !FUProjectDictionary::GetDefault().IsForeignProject(ProjectDir)) + { + ProjectPath = FPaths::RootDir() / TEXT("UE5"); + } + else + { + const FString BaseName = FApp::HasProjectName() ? FApp::GetProjectName() : FPaths::GetBaseFilename(ProjectDir); + ProjectPath = ProjectDir / BaseName; + } + } + + ProjectPath = ProjectPath + TEXT(".sln"); + + FPaths::NormalizeFilename(ProjectPath); + + return ProjectPath; +} + +bool UVisualStudioToolsBlueprintBreakpointExtension::GetRunningVisualStudioDTE(TComPtr& OutDTE) +{ + IRunningObjectTable* RunningObjectTable; + bool bResult = false; + FString ProjectDir = FPaths::ConvertRelativePathToFull(FPaths::ProjectDir()); + FPaths::NormalizeDirectoryName(ProjectDir); + FString SolutionPath = GetProjectPath(ProjectDir); + + if (SUCCEEDED(GetRunningObjectTable(0, &RunningObjectTable)) && RunningObjectTable) + { + IEnumMoniker* MonikersTable; + if (SUCCEEDED(RunningObjectTable->EnumRunning(&MonikersTable))) + { + MonikersTable->Reset(); + + // Look for all visual studio instances in the ROT + IMoniker* CurrentMoniker; + while (MonikersTable->Next(1, &CurrentMoniker, NULL) == S_OK) + { + IBindCtx* BindContext; + LPOLESTR OutName; + if (SUCCEEDED(CreateBindCtx(0, &BindContext)) && SUCCEEDED(CurrentMoniker->GetDisplayName(BindContext, NULL, &OutName))) + { + TComPtr ComObject; + if (SUCCEEDED(RunningObjectTable->GetObject(CurrentMoniker, &ComObject))) + { + TComPtr TempDTE; + if (SUCCEEDED(TempDTE.FromQueryInterface(__uuidof(EnvDTE::_DTE), ComObject))) + { + TComPtr Solution; + BSTR OutPath = nullptr; + if (SUCCEEDED(TempDTE->get_Solution(&Solution)) && + SUCCEEDED(Solution->get_FullName(&OutPath))) + { + FString Filename(OutPath); + FPaths::NormalizeFilename(Filename); + if (Filename == SolutionPath || Filename == ProjectDir) + { + OutDTE = TempDTE; + bResult = true; + } + } + else + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Could not get solution from DTE")); + } + + SysFreeString(OutPath); + } + } + } + else + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Could not get display name for moniker")); + } + BindContext->Release(); + CurrentMoniker->Release(); + if (bResult) break; + } + MonikersTable->Release(); + RunningObjectTable->Release(); + } + else + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Could not enumerate Running Object Table")); + } + } + else + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Could not get Running Object Table")); + } + + return bResult; +} + +bool UVisualStudioToolsBlueprintBreakpointExtension::CanAddVisualStudioBreakpoint(const UEdGraphNode* Node, UClass **OutOwnerClass, UFunction **OutFunction) +{ + const UK2Node_CallFunction* K2Node = Cast(Node); + if (!K2Node) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Node is not a UK2Node_CallFunction")); + return false; + } + + UFunction* Function = K2Node->GetTargetFunction(); + if (!Function || !Function->IsNative()) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Function is not native")); + return false; + } + + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Trying to get function definition for %s"), *Function->GetName()); + + UClass* OwnerClass = Function->GetOwnerClass(); + if (!OwnerClass->HasAllClassFlags(CLASS_Native)) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Owning class is not native")); + return false; + } + + if (OutOwnerClass) *OutOwnerClass = OwnerClass; + if (OutFunction) *OutFunction = Function; + return true; +} + +#if ENGINE_MAJOR_VERSION < 5 + +#define PRINT_PLATFORM_ERROR_MSG(_TXT) \ + do { \ + TCHAR _ErrorBuffer[MAX_SPRINTF] = { 0 }; \ + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("" #_TXT ": [%s]"), \ + FPlatformMisc::GetSystemErrorMessage(_ErrorBuffer, MAX_SPRINTF, 0)); \ + } while (0) + +bool UVisualStudioToolsBlueprintBreakpointExtension::PreloadModule(HANDLE ProcessHandle, HMODULE ModuleHandle, const FString& RemoteStorage) +{ + int32 ErrorCode = 0; + MODULEINFO ModuleInfo = { 0 }; + WCHAR ModuleName[FProgramCounterSymbolInfo::MAX_NAME_LENGTH] = { 0 }; + WCHAR ImageName[FProgramCounterSymbolInfo::MAX_NAME_LENGTH] = { 0 }; +#if PLATFORM_64BITS + static_assert(sizeof(MODULEINFO) == 24, "Broken alignment for 64bit Windows include."); +#else + static_assert(sizeof(MODULEINFO) == 12, "Broken alignment for 32bit Windows include."); +#endif + + if (!GetModuleInformation(ProcessHandle, ModuleHandle, &ModuleInfo, sizeof(ModuleInfo))) + { + PRINT_PLATFORM_ERROR_MSG("Could not read GetModuleInformation"); + return false; + } + + IMAGEHLP_MODULE64 ImageHelpModule = { 0 }; + ImageHelpModule.SizeOfStruct = sizeof(ImageHelpModule); + if (!SymGetModuleInfo64(ProcessHandle, (DWORD64)ModuleInfo.EntryPoint, &ImageHelpModule)) + { + PRINT_PLATFORM_ERROR_MSG("Could not SymGetModuleInfo64 from module"); + return false; + } + + if (ImageHelpModule.SymType != SymDeferred && ImageHelpModule.SymType != SymNone) + { + return true; + } + + if (!GetModuleFileNameExW(ProcessHandle, ModuleHandle, ImageName, 1024)) + { + PRINT_PLATFORM_ERROR_MSG("Could not GetModuleFileNameExW"); + return false; + } + + if (!GetModuleBaseNameW(ProcessHandle, ModuleHandle, ModuleName, 1024)) + { + PRINT_PLATFORM_ERROR_MSG("Could not GetModuleBaseNameW"); + return false; + } + + WCHAR SearchPath[MAX_PATH] = { 0 }; + WCHAR* FileName = NULL; + const auto Result = GetFullPathNameW(ImageName, MAX_PATH, SearchPath, &FileName); + + FString SearchPathList; + if (Result != 0 && Result < MAX_PATH) + { + *FileName = 0; + SearchPathList = SearchPath; + } + + if (!RemoteStorage.IsEmpty()) + { + if (!SearchPathList.IsEmpty()) + { + SearchPathList.AppendChar(TEXT(';')); + } + SearchPathList.Append(RemoteStorage); + } + + if (!SymSetSearchPathW(ProcessHandle, *SearchPathList)) + { + PRINT_PLATFORM_ERROR_MSG("Could not SymSetSearchPathW"); + return false; + } + + const DWORD64 BaseAddress = SymLoadModuleExW( + ProcessHandle, + ModuleHandle, + ImageName, + ModuleName, + (DWORD64)ModuleInfo.lpBaseOfDll, + ModuleInfo.SizeOfImage, + NULL, + 0); + if (!BaseAddress) + { + PRINT_PLATFORM_ERROR_MSG("Could not load the module"); + return false; + } + + return true; +} + +bool UVisualStudioToolsBlueprintBreakpointExtension::GetFunctionDefinitionLocation(const FString& FunctionSymbolName, const FString& FunctionModuleName, FString& SourceFilePath, uint32& SourceLineNumber) +{ + const HANDLE ProcessHandle = GetCurrentProcess(); + HMODULE ModuleHandle = GetModuleHandle(*FunctionModuleName); + if (!ModuleHandle || !PreloadModule(ProcessHandle, ModuleHandle, FPlatformStackWalk::GetDownstreamStorage())) + { + return false; + } + + ANSICHAR SymbolInfoBuffer[sizeof(IMAGEHLP_SYMBOL64) + MAX_SYM_NAME]; + PIMAGEHLP_SYMBOL64 SymbolInfoPtr = reinterpret_cast(SymbolInfoBuffer); + SymbolInfoPtr->SizeOfStruct = sizeof(SymbolInfoBuffer); + SymbolInfoPtr->MaxNameLength = MAX_SYM_NAME; + + FString FullyQualifiedSymbolName = FunctionSymbolName; + if (!FunctionModuleName.IsEmpty()) + { + FullyQualifiedSymbolName = FString::Printf(TEXT("%s!%s"), *FunctionModuleName, *FunctionSymbolName); + } + + if (!SymGetSymFromName64(ProcessHandle, TCHAR_TO_ANSI(*FullyQualifiedSymbolName), SymbolInfoPtr)) + { + PRINT_PLATFORM_ERROR_MSG("Could not load module symbol information"); + return false; + } + + IMAGEHLP_LINE64 FileAndLineInfo; + FileAndLineInfo.SizeOfStruct = sizeof(FileAndLineInfo); + + uint32 SourceColumnNumber = 0; + if (!SymGetLineFromAddr64(ProcessHandle, SymbolInfoPtr->Address, (::DWORD*)&SourceColumnNumber, &FileAndLineInfo)) + { + PRINT_PLATFORM_ERROR_MSG("Could not query module file and line number"); + return false; + } + + SourceLineNumber = FileAndLineInfo.LineNumber; + SourceFilePath = FString((const ANSICHAR*)(FileAndLineInfo.FileName)); + return true; +} + +#endif + +bool UVisualStudioToolsBlueprintBreakpointExtension::GetFunctionDefinitionLocation(const UEdGraphNode* Node, FString& SourceFilePath, FString& SymbolName, uint32& SourceLineNumber) +{ + UClass* OwningClass; + UFunction* Function; + if (!CanAddVisualStudioBreakpoint(Node, &OwningClass, &Function)) + { + return false; + } + + FString ModuleName; + + // Find module name for class + if (!FSourceCodeNavigation::FindClassModuleName(OwningClass, ModuleName)) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to find module name for class")); + return false; + } + + SymbolName = FString::Printf( + TEXT("%s%s::%s"), + OwningClass->GetPrefixCPP(), + *OwningClass->GetName(), + *Function->GetName()); + + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Symbol %s is defined in module %s"), *SymbolName, *ModuleName); + +#if ENGINE_MAJOR_VERSION >= 5 + uint32 SourceColumnNumber = 0; + return FPlatformStackWalk::GetFunctionDefinitionLocation( + SymbolName, + ModuleName, + SourceFilePath, + SourceLineNumber, + SourceColumnNumber); +#else + return GetFunctionDefinitionLocation(SymbolName, ModuleName, SourceFilePath, SourceLineNumber); +#endif +} + +bool UVisualStudioToolsBlueprintBreakpointExtension::GetProcessById(const TComPtr& Processes, DWORD CurrentProcessId, TComPtr& OutProcess) +{ + long Count = 0; + if (FAILED(Processes->get_Count(&Count))) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Could not get the process count")); + return false; + } + + TComPtr Process; + for (long i = 1; i <= Count; i++) + { + VARIANT Index; + Index.vt = VT_I4; + Index.lVal = i; + if (SUCCEEDED(Processes->Item(Index, &Process))) + { + long PID = 0; + if (SUCCEEDED(Process->get_ProcessID(&PID)) && CurrentProcessId == PID) + { + OutProcess = Process; + return true; + } + + Process.Reset(); + } + } + + return true; +} + +void UVisualStudioToolsBlueprintBreakpointExtension::AttachDebuggerIfNecessary(const TComPtr& Debugger) +{ + TComPtr Processes; + if (FAILED(Debugger->get_DebuggedProcesses(&Processes))) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to get debugging proccess")); + return; + } + + TComPtr Process; + DWORD CurrentProcessId = GetCurrentProcessId(); + if (!GetProcessById(Processes, CurrentProcessId, Process)) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to check if UE is already in debug mode")); + return; + } + + // currently debugging this process + if (Process.Get() != nullptr) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Already debugging UE.")); + return; + } + + Processes.Reset(); + if (FAILED(Debugger->get_LocalProcesses(&Processes))) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to attach to process")); + return; + } + + Process.Reset(); + if (!GetProcessById(Processes, CurrentProcessId, Process)) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to get all process")); + return; + } + + if (Process.Get() == nullptr) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("No UE proccess running.")); + return; + } + + if (FAILED(Process->Attach())) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to attach to process")); + } +} + +bool UVisualStudioToolsBlueprintBreakpointExtension::SetVisualStudioBreakpoint(const UEdGraphNode* Node, const FString& SourceFilePath, const FString& SymbolName, uint32 SourceLineNumber) +{ + TComPtr DTE; + bool bBreakpointAdded = false; + if (!GetRunningVisualStudioDTE(DTE)) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to access Visual Studio via DTE")); + return bBreakpointAdded; + } + + TComPtr Debugger; + TComPtr Breakpoints; + if (SUCCEEDED(DTE->get_Debugger(&Debugger)) && SUCCEEDED(Debugger->get_Breakpoints(&Breakpoints))) + { + FSmartBSTR BSTREmptyStr; + FSmartBSTR BSTRFilePath(SourceFilePath); + HRESULT Result = Breakpoints->Add( + *BSTREmptyStr, + *BSTRFilePath, + SourceLineNumber, + 1, + *BSTREmptyStr, + EnvDTE::dbgBreakpointConditionType::dbgBreakpointConditionTypeWhenTrue, + *BSTREmptyStr, + *BSTREmptyStr, + 0, + *BSTREmptyStr, + 0, + EnvDTE::dbgHitCountType::dbgHitCountTypeNone, + &Breakpoints); + + if (FAILED(Result)) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to add breakpoint")); + } + else + { + bBreakpointAdded = true; + AttachDebuggerIfNecessary(Debugger); + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Breakpoint set for %s"), *SymbolName); + } + } + else + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to get debugger or breakpoints")); + } + + return bBreakpointAdded; +} + +void UVisualStudioToolsBlueprintBreakpointExtension::AddVisualStudioBreakpoint(const UEdGraphNode* Node) +{ + FWindowsPlatformMisc::CoInitialize(); + FPlatformStackWalk::InitStackWalking(); + FString SourceFilePath; + FString SymbolName; + uint32 SourceLineNumber; + bool bBreakpointAdded = false; + + if (GetFunctionDefinitionLocation(Node, SourceFilePath, SymbolName, SourceLineNumber)) + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, TEXT("Method defined in %s at line %d"), *SourceFilePath, SourceLineNumber); + bBreakpointAdded = SetVisualStudioBreakpoint(Node, SourceFilePath, SymbolName, SourceLineNumber); + } + else + { + UE_LOG(LogUVisualStudioToolsBlueprintBreakpointExtension, Error, TEXT("Failed to get function definition location")); + } + + ShowOperationResultNotification(bBreakpointAdded, SymbolName); + FWindowsPlatformMisc::CoUninitialize(); +} + +void UVisualStudioToolsBlueprintBreakpointExtension::ShowOperationResultNotification(bool bBreakpointAdded, const FString &SymbolName) +{ + FNotificationInfo Info(bBreakpointAdded ? FText::FromString(FString::Printf(TEXT("Breakpoint added at %s"), *SymbolName)) : FText::FromString("Could not add Breakpoint in Visual Studio")); +#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 1 + Info.Image = FAppStyle::GetBrush(TEXT("LevelEditor.RecompileGameCode")); +#else + Info.Image = FEditorStyle::GetBrush(TEXT("LevelEditor.RecompileGameCode")); +#endif + Info.FadeInDuration = 0.1f; + Info.FadeOutDuration = 0.5f; + Info.ExpireDuration = 3.0f; + Info.bUseThrobber = false; + Info.bUseSuccessFailIcons = true; + Info.bUseLargeFont = true; + Info.bFireAndForget = false; + Info.bAllowThrottleWhenFrameRateIsLow = false; + Info.WidthOverride = 400.0f; + TSharedPtr NotificationItem = FSlateNotificationManager::Get().AddNotification(Info); + NotificationItem->SetCompletionState(bBreakpointAdded ? SNotificationItem::CS_Success : SNotificationItem::CS_Fail); + NotificationItem->ExpireAndFadeout(); +} diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsBlueprintBreakpointExtension.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsBlueprintBreakpointExtension.h new file mode 100644 index 0000000..4e60234 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsBlueprintBreakpointExtension.h @@ -0,0 +1,64 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "VisualStudioToolsBlueprintBreakpointExtension.generated.h" + +DECLARE_LOG_CATEGORY_EXTERN(LogUVisualStudioToolsBlueprintBreakpointExtension, Log, All); + +UCLASS() +class UVisualStudioToolsBlueprintBreakpointExtension : public UEditorSubsystem +{ + GENERATED_BODY() + +public: + DECLARE_MULTICAST_DELEGATE_ThreeParams(FOnNodeMenuExtensionHookRequestDelegate, const UEdGraphNode*, const UEdGraph*, TSet&); + + void Initialize(FSubsystemCollectionBase& Collection) override; + void Deinitialize() override; + + FOnNodeMenuExtensionHookRequestDelegate& OnNodeMenuExtensionHookRequest() { return OnNodeMenuExtensionHookRequestDelegate; } + +private: + FOnNodeMenuExtensionHookRequestDelegate OnNodeMenuExtensionHookRequestDelegate; + + TSharedRef HandleOnExtendGraphEditorContextMenu( + const TSharedRef CommandList, + const UEdGraph* Graph, + const UEdGraphNode* Node, + const UEdGraphPin* Pin, + bool bIsConst); + + void AddVisualStudioBlueprintBreakpointMenuOption(FMenuBuilder& MenuBuilder, const UEdGraphNode* node); + + void AddVisualStudioBreakpoint(const UEdGraphNode* Node); + + bool GetFunctionDefinitionLocation(const UEdGraphNode* Node, FString& SourceFilePath, FString& SymbolName, uint32& SourceLineNumber); + + bool SetVisualStudioBreakpoint(const UEdGraphNode* Node, const FString& SourceFilePath, const FString& SymbolName, uint32 SourceLineNumber); + + bool CanAddVisualStudioBreakpoint(const UEdGraphNode* Node, UClass** OutOwnerClass, UFunction** OutFunction); + + void ShowOperationResultNotification(bool bBreakpointAdded, const FString& SymbolName); + + FString GetProjectPath(const FString& ProjectDir); + + bool GetRunningVisualStudioDTE(TComPtr& OutDTE); + + void AttachDebuggerIfNecessary(const TComPtr& Debugger); + + bool GetProcessById(const TComPtr& Processes, DWORD CurrentProcessId, TComPtr& OutProcess); + +#if ENGINE_MAJOR_VERSION < 5 + bool PreloadModule(HANDLE ProcessHandle, HMODULE ModuleHandle, const FString& RemoteStorage); + + bool GetFunctionDefinitionLocation(const FString& FunctionSymbolName, const FString& FunctionModuleName, FString& SourceFilePath, uint32& SourceLineNumber); +#endif +}; diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandlet.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandlet.cpp new file mode 100644 index 0000000..c010ffa --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandlet.cpp @@ -0,0 +1,492 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +#include "VisualStudioToolsCommandlet.h" + +#include "Algo/Transform.h" +#include "AssetRegistry/AssetRegistryModule.h" +#include "Blueprint/BlueprintSupport.h" +#include "BlueprintAssetHelpers.h" +#include "Engine/BlueprintGeneratedClass.h" +#include "JsonObjectConverter.h" +#include "Misc/Paths.h" +#include "Misc/ScopeExit.h" +#include "Policies/CondensedJsonPrintPolicy.h" +#include "SourceCodeNavigation.h" +#include "UObject/CoreRedirects.h" +#include "UObject/UObjectIterator.h" +#include "VisualStudioTools.h" + +namespace VisualStudioTools +{ +static const FName CategoryFName = TEXT("Category"); +static const FName ModuleNameFName = TEXT("ModuleName"); + +static TArray GetChangedPropertiesList( + UStruct* InStruct, const uint8* DataPtr, const uint8* DefaultDataPtr) +{ + TArray Result; + + const UClass* OwnerClass = Cast(InStruct); + + // Walk only in the properties defined in the current class, the super classes are processed individually + for (TFieldIterator It(OwnerClass, EFieldIteratorFlags::ExcludeSuper); It; ++It) + { + FProperty* Property = *It; + for (int32 Idx = 0; Idx < Property->ArrayDim; Idx++) + { + const uint8* PropertyValue = Property->ContainerPtrToValuePtr(DataPtr, Idx); + const uint8* DefaultPropertyValue = Property->ContainerPtrToValuePtrForDefaults(InStruct, DefaultDataPtr, Idx); + + if (!Property->Identical(PropertyValue, DefaultPropertyValue)) + { + Result.Add(Property); + break; + } + } + } + + return Result; +} + +static bool FindBlueprintNativeParents( + const UClass* BlueprintGeneratedClass, TFunctionRef Callback) +{ + bool bAnyNativeParent = false; + for (UClass* Super = BlueprintGeneratedClass->GetSuperClass(); Super; Super = Super->GetSuperClass()) + { + // Ignore the root `UObject` class and non-native parents. + if (Super->HasAnyClassFlags(CLASS_Native) && Super->GetFName() != NAME_Object) + { + bAnyNativeParent = true; + Callback(Super); + } + } + + return bAnyNativeParent; +} + +struct FPropertyEntry +{ + FProperty* Property; + TArray Blueprints; +}; + +struct FFunctionEntry +{ + UFunction* Function; + TArray Blueprints; +}; + +struct FClassEntry +{ + const UClass* Class; + TArray Blueprints; + TMap Properties; + TMap Functions; +}; + +using ClassMap = TMap; + +struct FAssetIndex +{ + TSet AssetPathCache; + ClassMap Classes; + TArray Blueprints; + + void ProcessBlueprint(const UBlueprintGeneratedClass* BlueprintGeneratedClass) + { + if (BlueprintGeneratedClass == nullptr) + { + return; + } + + int32 BlueprintIndex = Blueprints.Num(); + + bool bHasAnyParent = FindBlueprintNativeParents(BlueprintGeneratedClass, [&](UClass* Parent) + { + FString ParentName = Parent->GetFName().ToString(); + if (!Classes.Contains(ParentName)) + { + Classes.Add(ParentName).Class = Parent; + } + + FClassEntry& ClassEntry = Classes[ParentName]; + + ClassEntry.Blueprints.Add(BlueprintIndex); + + // Retrieve the properties from the parent class that changed in the Blueprint class, by comparing their CDOs. + UObject* GeneratedClassDefault = BlueprintGeneratedClass->GetDefaultObject(false); + UObject* SuperClassDefault = Parent->GetDefaultObject(false); + TArray ChangedProperties = GetChangedPropertiesList(Parent, (uint8*)GeneratedClassDefault, (uint8*)SuperClassDefault); + + for (FProperty* Property : ChangedProperties) + { + FString PropertyName = Property->GetFName().ToString(); + if (!ClassEntry.Properties.Contains(PropertyName)) + { + ClassEntry.Properties.Add(PropertyName).Property = Property; + } + + FPropertyEntry& PropEntry = ClassEntry.Properties[PropertyName]; + PropEntry.Blueprints.Add(BlueprintIndex); + } + + // Iterate over the functions originally from the parent class + // and check if they are implemented in the BP class as well. + for (TFieldIterator It(Parent, EFieldIteratorFlags::ExcludeSuper); It; ++It) + { + UFunction* Fn = BlueprintGeneratedClass->FindFunctionByName((*It)->GetFName(), EIncludeSuperFlag::ExcludeSuper); + // If the function not present in the BP class directly, it means it was implemented. Otherwise, ignore. + if (!Fn) + { + continue; + } + + FString FnName = Fn->GetFName().ToString(); + if (!ClassEntry.Functions.Contains(FnName)) + { + ClassEntry.Functions.Add(FnName).Function = Fn; + } + + FFunctionEntry& FuncEntry = ClassEntry.Functions[FnName]; + FuncEntry.Blueprints.Add(BlueprintIndex); + } + }); + + if (bHasAnyParent) + { + check(Blueprints.Add(BlueprintGeneratedClass) == BlueprintIndex); + } + + return; + } +}; + +using JsonWriter = TJsonWriter>; + +static bool ShouldSerializePropertyValue(FProperty* Property) +{ + if (Property->ArrayDim > 1) // Skip properties that are not scalars + { + return false; + } + + if (FEnumProperty* EnumProperty = CastField(Property)) + { + return true; + } + + if (FNumericProperty* NumericProperty = CastField(Property)) + { + UEnum* EnumDef = NumericProperty->GetIntPropertyEnum(); + if (EnumDef != NULL) + { + return true; + } + + if (NumericProperty->IsFloatingPoint()) + { + return true; + } + + if (NumericProperty->IsInteger()) + { + return true; + } + } + + if (FBoolProperty* BoolProperty = CastField(Property)) + { + return true; + } + + if (FStrProperty* StringProperty = CastField(Property)) + { + return true; + } + + return false; +} + +static void SerializeBlueprints(TSharedRef& Json, TArray Items) +{ + Json->WriteArrayStart(); + for (const UClass* Blueprint : Items) + { + Json->WriteObjectStart(); + + Json->WriteValue(TEXT("name"), Blueprint->GetName()); + Json->WriteValue(TEXT("path"), Blueprint->GetPathName()); + Json->WriteObjectEnd(); + } + Json->WriteArrayEnd(); +} + +static void SerializeProperties(TSharedRef& Json, FClassEntry& Entry, TArray& Blueprints) +{ + Json->WriteArrayStart(); + for (auto& Item : Entry.Properties) + { + auto& PropName = Item.Key; + auto& PropEntry = Item.Value; + FProperty* Property = PropEntry.Property; + + Json->WriteObjectStart(); + + Json->WriteValue(TEXT("name"), PropName); + + Json->WriteIdentifierPrefix(TEXT("metadata")); + { + Json->WriteObjectStart(); + if (Property->HasMetaData(CategoryFName)) + { + Json->WriteValue(TEXT("categories"), Property->GetMetaData(CategoryFName)); + } + Json->WriteObjectEnd(); + } + + Json->WriteIdentifierPrefix(TEXT("values")); + { + Json->WriteArrayStart(); + for (auto& BlueprintEntry : PropEntry.Blueprints) + { + Json->WriteObjectStart(); + + Json->WriteValue(TEXT("blueprint"), BlueprintEntry); + + UObject* GeneratedClassDefault = Blueprints[BlueprintEntry]->GetDefaultObject(false); + const uint8* PropData = PropEntry.Property->ContainerPtrToValuePtr(GeneratedClassDefault); + + if (ShouldSerializePropertyValue(PropEntry.Property)) + { + TSharedPtr JsonValue = FJsonObjectConverter::UPropertyToJsonValue(Property, PropData); + FJsonSerializer::Serialize(JsonValue.ToSharedRef(), TEXT("value"), Json); + } + + Json->WriteObjectEnd(); + } + Json->WriteArrayEnd(); + } + + Json->WriteObjectEnd(); + } + Json->WriteArrayEnd(); +} + +static void SerializeFunctions(TSharedRef& Json, FClassEntry& Entry) +{ + Json->WriteArrayStart(); + for (auto& Item : Entry.Functions) + { + auto& Name = Item.Key; + auto& FnEntry = Item.Value; + Json->WriteObjectStart(); + Json->WriteValue(TEXT("name"), Name); + Json->WriteValue(TEXT("blueprints"), FnEntry.Blueprints); + Json->WriteObjectEnd(); + } + Json->WriteArrayEnd(); +} + +static void SerializeClasses(TSharedRef& Json, ClassMap& Items, TArray Blueprints) +{ + Json->WriteArrayStart(); + for (auto& Item : Items) + { + auto& ClassName = Item.Key; + auto& Entry = Item.Value; + Json->WriteObjectStart(); + Json->WriteValue(TEXT("name"), FString::Printf(TEXT("%s%s"), Entry.Class->GetPrefixCPP(), *Entry.Class->GetName())); + + Json->WriteValue(TEXT("blueprints"), Entry.Blueprints); + + Json->WriteIdentifierPrefix(TEXT("properties")); + SerializeProperties(Json, Entry, Blueprints); + + Json->WriteIdentifierPrefix(TEXT("functions")); + SerializeFunctions(Json, Entry); + + Json->WriteObjectEnd(); + } + Json->WriteArrayEnd(); +} + +static void SerializeToIndex(FAssetIndex Index, FArchive& IndexFile) +{ + TSharedRef Json = JsonWriter::Create(&IndexFile); + + Json->WriteObjectStart(); + + Json->WriteIdentifierPrefix(TEXT("blueprints")); + SerializeBlueprints(Json, Index.Blueprints); + + Json->WriteIdentifierPrefix(TEXT("classes")); + SerializeClasses(Json, Index.Classes, Index.Blueprints); + + Json->WriteObjectEnd(); + Json->Close(); +} + +static TArray GetModulesByPath(const FString& InDir) +{ + TArray OutResult; + Algo::TransformIf( + FSourceCodeNavigation::GetSourceFileDatabase().GetModuleNames(), + OutResult, + [&](const FString& Module) { + return FPaths::IsUnderDirectory(Module, InDir); + }, + [](const FString& Module) { +#if 0 + // Old version assumes that each module is in a folder with the same name as the module + return FPaths::GetBaseFilename(FPaths::GetPath(*Module)); +#else + // New version assumes that each module is in a file with the name Module.Build.cs + FString TempString = FPaths::GetBaseFilename(*Module); + TempString.RemoveFromEnd(TEXT(".Build")); + return TempString; +#endif + }); + + return OutResult; +} + +static void GetNativeClassesByPath(const FString& InDir, TArray>& OutClasses) +{ + TArray Modules = GetModulesByPath(InDir); + + for (TObjectIterator ClassIt; ClassIt; ++ClassIt) + { + UClass* TestClass = *ClassIt; + if (!TestClass->HasAnyClassFlags(CLASS_Native)) + { + continue; + } + + FAssetData ClassAssetData(TestClass); + FString ModuleName = ClassAssetData.GetTagValueRef(ModuleNameFName); + + if (!ModuleName.IsEmpty() && Modules.Contains(ModuleName)) + { + OutClasses.Add(TestClass); + } + } +} + +static void RunAssetScan( + FAssetIndex& Index, + const TArray>& FilterBaseClasses) +{ + FARFilter Filter; + Filter.bRecursivePaths = true; + Filter.bRecursiveClasses = true; + AssetHelpers::SetBlueprintClassFilter(Filter); + + // Add all base classes to the tag filter for native parent + Algo::Transform(FilterBaseClasses, Filter.TagsAndValues, [](const TWeakObjectPtr& Class) { + return MakeTuple( + FBlueprintTags::NativeParentClassPath, + FObjectPropertyBase::GetExportPath(Class.Get(), nullptr /*Parent*/, nullptr /*ExportRootScope*/, 0 /*PortFlags*/)); + }); + + // Take account of any core redirects for the blueprint classes we want to scan. + for (const auto& BaseClass : FilterBaseClasses) + { + if (BaseClass.IsValid()) + { + TArray PreviousNames; + if (FCoreRedirects::FindPreviousNames(ECoreRedirectFlags::Type_Class, BaseClass->GetPathName(), PreviousNames)) + { + for (const auto& PreviousName : PreviousNames) + { + // FString PreviousString = FObjectPropertyBase::GetExportPath(BaseClass->GetClass()->GetClassPathName(), PreviousName.ToString()); // Alternative way to add /Script/CoreUObject.Class'' wrapper - but not sure it makes sense to use the new class when referencing a previous name + FString PreviousString = "/Script/CoreUObject.Class'" + PreviousName.ToString() + "'"; + Filter.TagsAndValues.Add(FBlueprintTags::NativeParentClassPath, PreviousString); + } + } + } + } + + IAssetRegistry& AssetRegistry = FModuleManager::LoadModuleChecked(TEXT("AssetRegistry")).Get(); + + TArray TargetAssets; + AssetRegistry.GetAssets(Filter, TargetAssets); + + AssetHelpers::ForEachAsset(TargetAssets, + [&](UBlueprintGeneratedClass* BlueprintGeneratedClass, const FAssetData& /*AssetData*/) + { + Index.ProcessBlueprint(BlueprintGeneratedClass); + }); +} + +} // namespace VS + +static constexpr auto FilterSwitch = TEXT("filter"); +static constexpr auto FullSwitch = TEXT("full"); + +UVisualStudioToolsCommandlet::UVisualStudioToolsCommandlet() + : Super() +{ + HelpDescription = TEXT("Commandlet for generating data used by Blueprint support in Visual Studio."); + + HelpParamNames.Add(FilterSwitch); + HelpParamDescriptions.Add(TEXT("[Optional] Scan only blueprints derived from native classes under the provided path. Defaults to `FPaths::ProjectDir`. Incompatible with `-full`.")); + + HelpParamNames.Add(FullSwitch); + HelpParamDescriptions.Add(TEXT("[Optional] Scan blueprints derived from native classes from ALL modules, include the Engine. This can be _very slow_ for large projects. Incompatible with `-filter`.")); + + HelpUsage = TEXT(" -run=VisualStudioTools -output= [-filter=|-full] [-unattended -noshadercompile -nosound -nullrhi -nocpuprofilertrace -nocrashreports -nosplash]"); +} + +int32 UVisualStudioToolsCommandlet::Run( + TArray& Tokens, + TArray& Switches, + TMap& ParamVals, + FArchive& OutArchive) +{ + using namespace VisualStudioTools; + + FString* Filter = ParamVals.Find(FilterSwitch); + const bool bFullScan = Switches.Contains(FullSwitch); + + if (Filter != nullptr && bFullScan) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("Incompatible scan options.")); + PrintHelp(); + return -1; + } + + TArray> FilterBaseClasses; + if (!bFullScan) + { + if (Filter) + { + FPaths::NormalizeDirectoryName(*Filter); + GetNativeClassesByPath(*Filter, FilterBaseClasses); + } + else + { + GetNativeClassesByPath(FPaths::ProjectDir(), FilterBaseClasses); + } + } + else + { + for (TObjectIterator ClassIt; ClassIt; ++ClassIt) + { + UClass* TestClass = *ClassIt; + if (!TestClass->HasAnyClassFlags(CLASS_Native)) + { + continue; + } + + FilterBaseClasses.Add(TestClass); + } + } + + FAssetIndex Index; + RunAssetScan(Index, FilterBaseClasses); + SerializeToIndex(Index, OutArchive); + UE_LOG(LogVisualStudioTools, Display, TEXT("Found %d blueprints."), Index.Blueprints.Num()); + + return 0; +} diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandlet.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandlet.h new file mode 100644 index 0000000..05ad18d --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandlet.h @@ -0,0 +1,24 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "CoreMinimal.h" +#include "VisualStudioToolsCommandletBase.h" + +#include "VisualStudioToolsCommandlet.generated.h" + +UCLASS() +class UVisualStudioToolsCommandlet + : public UVisualStudioToolsCommandletBase +{ + GENERATED_BODY() + +public: + UVisualStudioToolsCommandlet(); + int32 Run( + TArray& Tokens, + TArray& Switches, + TMap& ParamVals, + FArchive& OutArchive) override; +}; diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandletBase.cpp b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandletBase.cpp new file mode 100644 index 0000000..716101a --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandletBase.cpp @@ -0,0 +1,88 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#include "VisualStudioToolsCommandletBase.h" + +#include "Windows/AllowWindowsPlatformTypes.h" + +#include "HAL/FileManager.h" +#include "Misc/Paths.h" +#include "VisualStudioTools.h" + +#include "Windows/HideWindowsPlatformTypes.h" + +static constexpr auto HelpSwitch = TEXT("help"); +static constexpr auto OutputSwitch = TEXT("output"); + +UVisualStudioToolsCommandletBase::UVisualStudioToolsCommandletBase() +{ + IsClient = false; + IsEditor = true; + IsServer = false; + LogToConsole = false; + ShowErrorCount = false; + + HelpParamNames.Add(OutputSwitch); + HelpParamDescriptions.Add(TEXT("[Required] The file path to write the command output.")); + + HelpParamNames.Add(HelpSwitch); + HelpParamDescriptions.Add(TEXT("[Optional] Print this help message and quit the commandlet immediately.")); +} + +void UVisualStudioToolsCommandletBase::PrintHelp() const +{ + UE_LOG(LogVisualStudioTools, Display, TEXT("%s"), *HelpDescription); + UE_LOG(LogVisualStudioTools, Display, TEXT("Usage: %s"), *HelpUsage); + UE_LOG(LogVisualStudioTools, Display, TEXT("Parameters:")); + for (int32 i = 0; i < HelpParamNames.Num(); ++i) + { + UE_LOG(LogVisualStudioTools, Display, TEXT("\t-%s: %s"), *HelpParamNames[i], *HelpParamDescriptions[i]); + } +} + +int32 UVisualStudioToolsCommandletBase::Main(const FString& Params) +{ + TArray Tokens; + TArray Switches; + TMap ParamVals; + + ParseCommandLine(*Params, Tokens, Switches, ParamVals); + + if (Switches.Contains(HelpSwitch)) + { + PrintHelp(); + return 0; + } + + UE_LOG(LogVisualStudioTools, Display, TEXT("Init VS Tools cmdlet.")); + + if (!FPaths::IsProjectFilePathSet()) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("You must invoke this commandlet with a project file.")); + return -1; + } + + FString FullPath = ParamVals.FindRef(OutputSwitch); + + if (FullPath.IsEmpty() && !FParse::Value(*Params, TEXT("output "), FullPath)) + { + // VS:1678426 - Initial version was using `-output "path-to-file"` (POSIX style). + // However, that does not support paths with spaces, even when surrounded with + // quotes because `FParse::Value` only handles that case when there's no space + // between the parameter name and quoted value. + // For back-compatibility reasons, parse that style by including the space in + // the parameter token like it's usually done for the `=` sign. + UE_LOG(LogVisualStudioTools, Error, TEXT("Missing file output parameter.")); + PrintHelp(); + return -1; + } + + TUniquePtr OutArchive{ IFileManager::Get().CreateFileWriter(*FullPath) }; + if (!OutArchive) + { + UE_LOG(LogVisualStudioTools, Error, TEXT("Failed to create index with path: %s."), *FullPath); + return -1; + } + + return this->Run(Tokens, Switches, ParamVals, *OutArchive); +} diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandletBase.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandletBase.h new file mode 100644 index 0000000..7c370ef --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Private/VisualStudioToolsCommandletBase.h @@ -0,0 +1,29 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. +// Licensed under the MIT License. + +#pragma once + +#include "Commandlets/Commandlet.h" + +#include "VisualStudioToolsCommandletBase.generated.h" + +UCLASS(Abstract) +class UVisualStudioToolsCommandletBase + : public UCommandlet +{ + GENERATED_BODY() + +public: + int32 Main(const FString& Params) override; + +protected: + UVisualStudioToolsCommandletBase(); + + void PrintHelp() const; + + virtual int32 Run( + TArray& Tokens, + TArray& Switches, + TMap& ParamVals, + FArchive& OutArchive) PURE_VIRTUAL(UVisualStudioToolsCommandletBase::Run, return 0;); +}; \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/Public/VisualStudioTools.h b/Plugins/VisualStudioTools/Source/VisualStudioTools/Public/VisualStudioTools.h new file mode 100644 index 0000000..0ffe4e9 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/Public/VisualStudioTools.h @@ -0,0 +1,7 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +#pragma once + +#include "CoreMinimal.h" + +DECLARE_LOG_CATEGORY_EXTERN(LogVisualStudioTools, Log, All); \ No newline at end of file diff --git a/Plugins/VisualStudioTools/Source/VisualStudioTools/VisualStudioTools.Build.cs b/Plugins/VisualStudioTools/Source/VisualStudioTools/VisualStudioTools.Build.cs new file mode 100644 index 0000000..5415577 --- /dev/null +++ b/Plugins/VisualStudioTools/Source/VisualStudioTools/VisualStudioTools.Build.cs @@ -0,0 +1,78 @@ +// Copyright 2022 (c) Microsoft. All rights reserved. + +using UnrealBuildTool; + +public class VisualStudioTools : ModuleRules +{ + public VisualStudioTools(ReadOnlyTargetRules Target) : base(Target) + { + bool bIsCustomDevBuild = System.Environment.GetEnvironmentVariable("VSTUE_IsCustomDevBuild") == "1"; + if (bIsCustomDevBuild) + { + // Get correct header suggestions in the IDE and validate + // the plugin build without having to affect for the whole target, + // which is expensive in source-builds of the engine. + PCHUsage = ModuleRules.PCHUsageMode.NoPCHs; + bUseUnity = false; + + // When debugging the commandlet code, disable optimizations to get + // proper local variable inspection and less inlined stack frames + OptimizeCode = CodeOptimization.Never; + + // Enable more restricted warnings during compilation in UE5. + // Required by tasks in the compliance pipeline. + #if UE_5_6_OR_LATER + CppCompileWarningSettings.UnsafeTypeCastWarningLevel = WarningLevel.Error; + #elif UE_5_0_OR_LATER + UnsafeTypeCastWarningLevel = WarningLevel.Error; + #endif + } + else + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + } + + // To support UE5.1+, the code is using the new FTopLevelAssetPath API + // with a detection of support via version numbers. + // If the check is producing a false positive/negative in your version of the engine + // you can change the block below and force the check as enabled/disabled. + if ((Target.Version.MajorVersion == 5 && Target.Version.MinorVersion >= 1) || Target.Version.MajorVersion > 5) + { + PrivateDefinitions.Add("FILTER_ASSETS_BY_CLASS_PATH=1"); + } + else + { + PrivateDefinitions.Add("FILTER_ASSETS_BY_CLASS_PATH=0"); + } + + PublicDependencyModuleNames.AddRange( + new[] + { + "Core", + } + ); + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "ApplicationCore", + "AssetRegistry", + "CoreUObject", + "Engine", + "Json", + "JsonUtilities", + "Kismet", + "UnrealEd", + "Slate", + "SlateCore", + "ToolMenus", + "EditorSubsystem", + "MainFrame", + "BlueprintGraph", + "VisualStudioDTE", + "EditorStyle", + "Projects" + } + ); + } +} diff --git a/Plugins/VisualStudioTools/VisualStudioTools.uplugin b/Plugins/VisualStudioTools/VisualStudioTools.uplugin new file mode 100644 index 0000000..7ae3561 --- /dev/null +++ b/Plugins/VisualStudioTools/VisualStudioTools.uplugin @@ -0,0 +1,38 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "2.8", + "FriendlyName": "Visual Studio Integration Tools", + "Description": "Enables integration with Visual Studio IDE.", + "Category": "Programming", + "CreatedBy": "Microsoft", + "CreatedByURL": "http://www.microsoft.com", + "DocsURL": "", + "MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/362651520df94e4fa65492dbcba44ae2", + "SupportURL": "https://developercommunity.visualstudio.com/", + "EnabledByDefault": true, + "Installed": false, + "bExplicitlyLoaded": true, + "CanContainContent": false, + "SupportedTargetPlatforms": [ + "Win64" + ], + "Modules": [ + { + "Name": "VisualStudioTools", + "Type": "Editor", + "LoadingPhase": "Default", + "PlatformAllowList": [ + "Win64" + ] + }, + { + "Name": "VisualStudioBlueprintDebuggerHelper", + "Type": "Editor", + "LoadingPhase": "None", + "PlatformAllowList": [ + "Win64" + ] + } + ] +} diff --git a/Plugins/VisualStudioTools/azure-pipelines/Support-extra-UBT-args-in-UAT.BuildPlugin.patch b/Plugins/VisualStudioTools/azure-pipelines/Support-extra-UBT-args-in-UAT.BuildPlugin.patch new file mode 100644 index 0000000..9d1a396 --- /dev/null +++ b/Plugins/VisualStudioTools/azure-pipelines/Support-extra-UBT-args-in-UAT.BuildPlugin.patch @@ -0,0 +1,46 @@ +From f7238064c8680f6392793eb664ee2c773daff594 Mon Sep 17 00:00:00 2001 +From: Oleksandr Kozlov +Date: Tue, 1 Apr 2025 15:22:14 +0200 +Subject: [PATCH] Support extra UBT args in UAT.BuildPlugin + +Forwarding extra parameters to UBT to allow customizing the build of a plugin. +Example: runuat.bat buildpluing -plugin=... -ubtargs="-LinkerArguments=\"/profile\"" + +--- + .../Scripts/BuildPluginCommand.Automation.cs | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs b/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs +index 5a43dc0c4..aaf3f192f 100644 +--- a/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs ++++ b/Engine/Source/Programs/AutomationTool/Scripts/BuildPluginCommand.Automation.cs +@@ -64,6 +64,9 @@ public sealed class BuildPlugin : BuildCommand + // Option for verifying that all include directive s + bool bStrictIncludes = ParseParam("StrictIncludes"); + ++ // Extra arguments forwarded to UBT ++ string UBTArgs = ParseParamValue("ubtargs"); ++ + // Make sure the packaging directory is valid + DirectoryReference PackageDir = new DirectoryReference(PackageParam); + +@@ -126,6 +129,16 @@ public sealed class BuildPlugin : BuildCommand + AdditionalArgs.Append(" -NoPCH -NoSharedPCH -DisableUnity"); + } + ++ // Pass extra parameters to UBT ++ if (string.IsNullOrEmpty(UBTArgs) == false) ++ { ++ Logger.LogInformation("Building with extra UBT parameters: {UBTArgs}", UBTArgs); ++ string Arg = UBTArgs; ++ Arg = Arg.TrimStart(new char[] { '\"' }); ++ Arg = Arg.TrimEnd(new char[] { '\"' }); ++ AdditionalArgs.Append(' ').Append(Arg); ++ } ++ + // check if any architectures were specified + foreach (UnrealTargetPlatform Platform in UnrealTargetPlatform.GetValidPlatforms()) + { +-- +2.49.0.windows.1 + diff --git a/Plugins/VisualStudioTools/azure-pipelines/TSAOptions.json b/Plugins/VisualStudioTools/azure-pipelines/TSAOptions.json new file mode 100644 index 0000000..54198e1 --- /dev/null +++ b/Plugins/VisualStudioTools/azure-pipelines/TSAOptions.json @@ -0,0 +1,21 @@ +{ + "tsaVersion": "TsaV2", + "codebase": "NewOrUpdate", + "codebaseName": "vc-ue-extensions", + "tsaStamp": "DevDiv", + "tsaEnvironment": "PROD", + "notificationAliases": [ + "hebaggio@microsoft.com", + "cpp-apogee@microsoft.com" + ], + "codebaseAdmins": [ + "REDMOND\\hebaggio", + "REDMOND\\cpp-apogee" + ], + "instanceUrl": "https://devdiv.visualstudio.com", + "projectName": "DevDiv", + "areaPath": "DevDiv\\Cpp Developer Experience\\GameDev Experience\\Unreal Engine integrations", + "iterationPath": "DevDiv", + "alltools": true, + "repositoryName": "vc-ue-extensions" + } \ No newline at end of file diff --git a/Plugins/VisualStudioTools/azure-pipelines/compliance.yml b/Plugins/VisualStudioTools/azure-pipelines/compliance.yml new file mode 100644 index 0000000..e8df034 --- /dev/null +++ b/Plugins/VisualStudioTools/azure-pipelines/compliance.yml @@ -0,0 +1,125 @@ +# IMPORTANT: +# Do not run BinSkim because we do not control producing the binaries. That process is owned by +# Epic. We just provide source code. Since we do not control the build, BinSkim is not needed. + +variables: + Codeql.Enabled: true + Codeql.SourceRoot: '$(Build.SourcesDirectory)' + +trigger: +- main + +pr: + autoCancel: true + branches: + include: + - main + - dev/* + +schedules: + - cron: "0 12 * * Sun" + displayName: Weekly run + branches: + include: + - main + always: true + +resources: + repositories: + - repository: 1ESPipelineTemplates + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates + parameters: + pool: + name: VSEngSS-MicroBuild2022-1ES + os: windows + customBuildTags: + - ES365AIMigrationTooling + stages: + - stage: stage + jobs: + - job: 'UnrealEngine_VisualStudioTools_Compliance' + timeoutInMinutes: 1440 + steps: + - task: CmdLine@2 + displayName: 'Clone Unreal Engine Repository' + inputs: + script: 'git clone "https://$(token)@github.com/EpicGames/UnrealEngine" --single-branch --branch $(ue_branch) --depth 1 ue' + workingDirectory: '$(Agent.BuildDirectory)' + - task: CmdLine@2 + displayName: 'Apply patch to allow us to pass linker flags to the build' + inputs: + script: 'git apply --ignore-whitespace $(Build.SourcesDirectory)/azure-pipelines/Support-extra-UBT-args-in-UAT.BuildPlugin.patch' + workingDirectory: '$(Agent.BuildDirectory)\ue' + - task: PowerShell@2 + displayName: '[UE] Append /unattended option' + inputs: + targetType: 'inline' + script: + $filePath = "$(Agent.BuildDirectory)/ue/Setup.bat"; + (Get-Content $filePath).Replace("/register", "/register /unattended") | Set-Content $filePath + - task: CmdLine@2 + displayName: '[UE] Run Setup.bat' + inputs: + script: 'ue\Setup.bat --force' + workingDirectory: '$(Agent.BuildDirectory)' + - task: MSBuild@1 + displayName: 'Build Plugin' + timeoutInMinutes: 300 + inputs: + solution: '$(Build.SourcesDirectory)/build.proj' + msbuildArguments: '/p:UnrealEngine=$(Agent.BuildDirectory)\ue /p:OutputPath=$(Build.ArtifactStagingDirectory)\drop /p:VulkanReadyBinaries=true' + createLogFile: true + - task: CopyFiles@2 + displayName: 'Collect binaries to analyze' + inputs: + SourceFolder: '$(Build.ArtifactStagingDirectory)\drop' + Contents: '**\unrealeditor-visualstudiotools.*' + TargetFolder: '$(Build.ArtifactStagingDirectory)\binariesToAnalyze' + CleanTargetFolder: true + OverWrite: true + - task: PoliCheck@2 + inputs: + targetType: 'F' + targetArgument: '$(Build.SourcesDirectory)' + - task: ComponentGovernanceComponentDetection@0 + inputs: + ignoreDirectories: '$(Agent.BuildDirectory)\ue' + displayName: 'Component Detection' + - task: APIScan@2 + displayName: 'Run APIScan' + inputs: + azureSubscription: 'VSEng-APIScanSC' + softwareFolder: '$(Build.ArtifactStagingDirectory)/binariesToAnalyze' + softwareName: 'Visual Studio Tools for Unreal Engine' + softwareVersionNum: '2.4' + softwareBuildNum: '$(Build.BuildId)' + toolVersion: 'Latest' + env: + AzureServicesAuthConnectionString: RunAs=App;AppId=d318cba7-db4d-4fb3-99e1-01879cb74e91;TenantId=72f988bf-86f1-41af-91ab-2d7cd011db47;ServiceConnectionId=93e24264-c5e6-4681-8175-ec8a41668480; + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + - task: SDLNativeRules@3 + displayName: 'Run the PREfast SDL Native Rules for MSBuild' + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + publishXML: true + userProvideBuildInfo: auto + rulesetName: Recommended + setupCommandlinePicker: 'vs2022' + - task: PublishSecurityAnalysisLogs@3 + displayName: 'Publish security analysis logs' + inputs: + ArtifactName: 'CodeAnalysisLogs' + ArtifactType: 'Container' + AllTools: true + ToolLogsNotFoundAction: 'Standard' + - task: TSAUpload@2 + displayName: 'TSA upload' + inputs: + GdnPublishTsaOnboard: True + GdnPublishTsaConfigFile: '$(Build.SourcesDirectory)/azure-pipelines/TSAOptions.json' diff --git a/Plugins/VisualStudioTools/azure-pipelines/release.yml b/Plugins/VisualStudioTools/azure-pipelines/release.yml new file mode 100644 index 0000000..e367e24 --- /dev/null +++ b/Plugins/VisualStudioTools/azure-pipelines/release.yml @@ -0,0 +1,122 @@ +# IMPORTANT: +# Do not run BinSkim because we do not control producing the binaries. That process is owned by +# Epic. We just provide source code. Since we do not control the build, BinSkim is not needed. + +# Manual trigger for now +trigger: none +pr: none + +parameters: +- name: SignTypeOverride + displayName: Signing Type (default is real for the main branch and test otherwise) + type: string + default: default + values: + - default + - test + - real + +variables: + # MicroBuild requires TeamName to be set. + - name: TeamName + value: C++ Unreal Engine + - name: TagName + value: $[replace(variables['Build.SourceBranch'], 'refs/tags/', '')] + # If the user didn't override the signing type, then only real-sign on main. + - ${{ if ne(parameters.SignTypeOverride, 'default') }}: + - name: SignType + value: ${{ parameters.SignTypeOverride }} + - ${{ if and(eq(parameters.SignTypeOverride, 'default'), or(eq(variables['Build.SourceBranchName'], 'main'), startsWith(variables['Build.SourceBranch'], 'refs/tags'))) }}: + - name: SignType + value: real + - ${{ if and(eq(parameters.SignTypeOverride, 'default'), not(or(eq(variables['Build.SourceBranchName'], 'main'), startsWith(variables['Build.SourceBranch'], 'refs/tags')))) }}: + - name: SignType + value: test + +resources: + repositories: + - repository: 1ESPipelineTemplates + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release + +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates + parameters: + pool: + name: VSEngSS-MicroBuild2022-1ES + os: windows + customBuildTags: + - ES365AIMigrationTooling + stages: + - stage: stage + jobs: + - job: 'UnrealEngine_VisualStudioTools_Release' + timeoutInMinutes: 1440 + templateContext: + outputParentDirectory: $(Agent.BuildDirectory)/out/ + outputs: + - output: pipelineArtifact + displayName: 'Publish signed plugin files' + targetPath: $(Agent.BuildDirectory)/out + artifactName: SignedPlugin + artifactType: container + sbomEnabled: false + steps: + - powershell: | + Write-Host "##vso[task.setVariable variable=SHA1]$(git rev-parse HEAD)" + displayName: Save tag commit hash + workingDirectory: '$(Build.SourcesDirectory)' + - task: MicroBuildSigningPlugin@4 + displayName: Install MicroBuild Signing + inputs: + signType: $(SignType) + zipSources: true + feedsource: 'https://pkgs.dev.azure.com/devdiv/_packaging/MicroBuildToolset/nuget/v3/index.json' + + ${{ if eq(variables.SignType, 'real')}}: + ConnectedPMEServiceName: '6cc74545-d7b9-4050-9dfa-ebefcc8961ea' + + - task: PowerShell@2 + displayName: "Create zip excluding .git folder" + inputs: + targetType: 'inline' + script: | + $destinationDirectory = "$(Agent.BuildDirectory)/out" + New-Item -Path $destinationDirectory -ItemType Directory + git archive -o "$destinationDirectory/VisualStudioTools.zip" $(SHA1) + - powershell: New-FileCatalog -Path .\VisualStudioTools.zip -CatalogFilePath .\VisualStudioTools.zip.cat -CatalogVersion 2.0 + displayName: Create standalone catalog + workingDirectory: '$(Agent.BuildDirectory)\out' + - task: NuGetToolInstaller@1 + inputs: + versionSpec: 5.7 + - task: NuGetCommand@2 + displayName: 'NuGet Restore MicroBuild Signing Extension' + inputs: + command: 'restore' + restoreSolution: 'Scripts/SignDetached.proj' + feedsToUse: 'config' + restoreDirectory: '$(Build.SourcesDirectory)\Scripts\packages' + - task: MSBuild@1 + displayName: Sign catalogs + inputs: + solution: Scripts/SignDetached.proj + msbuildArguments: /p:SignType=$(SignType) /p:BaseOutputDirectory=$(Agent.BuildDirectory)\out + # === Disabled for now in favor of uploading the artifacts to the pipeline === + # - task: GitHubRelease@1 + # displayName: Pre-release to public repo + # condition: and(succeeded(), startsWith(variables['Build.SourceBranch'], 'refs/tags')) + # inputs: + # gitHubConnection: GitHub-VSCodeExtensions + # repositoryName: microsoft/vc-ue-extensions + # action: create + # target: $(SHA1) + # tagSource: gitTag + # tag: $(TagName) + # title: $(TagName) + # isDraft: true + # isPreRelease: true + # assets: | + # $(Agent.BuildDirectory)\out\VisualStudioTools.zip + # $(Agent.BuildDirectory)\out\VisualStudioTools.zip.cat diff --git a/Plugins/VisualStudioTools/build.proj b/Plugins/VisualStudioTools/build.proj new file mode 100644 index 0000000..14e1f70 --- /dev/null +++ b/Plugins/VisualStudioTools/build.proj @@ -0,0 +1,24 @@ + + + $(MSBuildProjectDirectory) + $([System.IO.Path]::Combine($(PluginFolder), `VisualStudioTools.uplugin`)) + $([System.IO.Path]::Combine($(PluginFolder), "bin")) + $(UnrealEngine) + + $([MSBuild]::GetRegistryValue('HKEY_LOCAL_MACHINE\SOFTWARE\EpicGames\Unreal Engine\$(UnrealEngine)', 'InstalledDirectory')) + + $(EnginePath.Trim())\Engine\Build\BatchFiles\RunUAT.bat + -Unversioned + -ubtargs="-LinkerArguments=\"/profile\" " + + + + + + + + + + diff --git a/Source/ZMMO.Target.cs b/Source/ZMMO.Target.cs new file mode 100644 index 0000000..a8428ab --- /dev/null +++ b/Source/ZMMO.Target.cs @@ -0,0 +1,15 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class ZMMOTarget : TargetRules +{ + public ZMMOTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Game; + DefaultBuildSettings = BuildSettingsVersion.V6; + IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7; + ExtraModuleNames.Add("ZMMO"); + } +} diff --git a/Source/ZMMO/Game/Controller/ZMMOPlayerController.cpp b/Source/ZMMO/Game/Controller/ZMMOPlayerController.cpp new file mode 100644 index 0000000..5a7be63 --- /dev/null +++ b/Source/ZMMO/Game/Controller/ZMMOPlayerController.cpp @@ -0,0 +1,80 @@ +#include "ZMMOPlayerController.h" + +#include "Blueprint/UserWidget.h" +#include "EnhancedInputSubsystems.h" +#include "Engine/LocalPlayer.h" +#include "InputMappingContext.h" +#include "UObject/ConstructorHelpers.h" +#include "Widgets/Input/SVirtualJoystick.h" +#include "ZMMO.h" + +AZMMOPlayerController::AZMMOPlayerController() +{ + // Defaults dos Input Mapping Contexts (alinhados ao ZClientMMO). Permitem + // instanciar AZMMOPlayerController directamente como + // `PlayerControllerClass` do AZMMOGameMode sem exigir um BP filho. Se o + // projeto adicionar mais IMCs, podemos extender via BP filho ou via + // arquivos de Config (UPROPERTY EditAnywhere abaixo). + static ConstructorHelpers::FObjectFinder DefaultImc( + TEXT("/Game/Input/IMC_Default.IMC_Default")); + static ConstructorHelpers::FObjectFinder MouseLookImc( + TEXT("/Game/Input/IMC_MouseLook.IMC_MouseLook")); + + if (DefaultImc.Succeeded()) + { + DefaultMappingContexts.Add(DefaultImc.Object); + } + if (MouseLookImc.Succeeded()) + { + MobileExcludedMappingContexts.Add(MouseLookImc.Object); + } +} + +void AZMMOPlayerController::BeginPlay() +{ + Super::BeginPlay(); + + if (ShouldUseTouchControls() && IsLocalPlayerController()) + { + MobileControlsWidget = CreateWidget(this, MobileControlsWidgetClass); + if (MobileControlsWidget) + { + MobileControlsWidget->AddToPlayerScreen(0); + } + else + { + UE_LOG(LogZMMO, Error, TEXT("Could not spawn mobile controls widget.")); + } + } +} + +void AZMMOPlayerController::SetupInputComponent() +{ + Super::SetupInputComponent(); + + if (!IsLocalPlayerController()) + { + return; + } + + if (UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem(GetLocalPlayer())) + { + for (UInputMappingContext* CurrentContext : DefaultMappingContexts) + { + Subsystem->AddMappingContext(CurrentContext, 0); + } + + if (!ShouldUseTouchControls()) + { + for (UInputMappingContext* CurrentContext : MobileExcludedMappingContexts) + { + Subsystem->AddMappingContext(CurrentContext, 0); + } + } + } +} + +bool AZMMOPlayerController::ShouldUseTouchControls() const +{ + return SVirtualJoystick::ShouldDisplayTouchInterface() || bForceTouchControls; +} diff --git a/Source/ZMMO/Game/Controller/ZMMOPlayerController.h b/Source/ZMMO/Game/Controller/ZMMOPlayerController.h new file mode 100644 index 0000000..83a8d76 --- /dev/null +++ b/Source/ZMMO/Game/Controller/ZMMOPlayerController.h @@ -0,0 +1,50 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/PlayerController.h" +#include "ZMMOPlayerController.generated.h" + +class UInputMappingContext; +class UUserWidget; + +/** + * AZMMOPlayerController + * + * Player controller do cliente Zeus MMO. Responsavel apenas pela camada de + * input do Unreal (Enhanced Input Mapping Contexts e widget opcional de + * controlos touch). Toda a logica de identidade Zeus, envio de input e + * reconciliacao vive em `AZMMOPlayerCharacter`. + */ +UCLASS(Blueprintable, BlueprintType) +class ZMMO_API AZMMOPlayerController : public APlayerController +{ + GENERATED_BODY() + +public: + AZMMOPlayerController(); + +protected: + /** Mapping contexts default (sempre adicionados). */ + UPROPERTY(EditAnywhere, Category = "Input|Input Mappings") + TArray DefaultMappingContexts; + + /** Mapping contexts saltados quando estamos em modo touch. */ + UPROPERTY(EditAnywhere, Category = "Input|Input Mappings") + TArray MobileExcludedMappingContexts; + + /** Widget opcional de controlos touch (mobile / forced). */ + UPROPERTY(EditAnywhere, Category = "Input|Touch Controls") + TSubclassOf MobileControlsWidgetClass; + + UPROPERTY() + TObjectPtr MobileControlsWidget; + + /** Forca controlos touch mesmo fora de plataformas mobile (uso em desktop dev). */ + UPROPERTY(EditAnywhere, Config, Category = "Input|Touch Controls") + bool bForceTouchControls = false; + + virtual void BeginPlay() override; + virtual void SetupInputComponent() override; + + bool ShouldUseTouchControls() const; +}; diff --git a/Source/ZMMO/Game/Entity/ZMMOEntity.cpp b/Source/ZMMO/Game/Entity/ZMMOEntity.cpp new file mode 100644 index 0000000..82bbde7 --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOEntity.cpp @@ -0,0 +1,32 @@ +#include "ZMMOEntity.h" + +AZMMOEntity::AZMMOEntity() +{ + PrimaryActorTick.bCanEverTick = false; + bReplicates = false; +} + +void AZMMOEntity::SetZMMOIdentity(const int64 InEntityId, const EZMMOEntityType InEntityType) +{ + EntityId = InEntityId; + EntityType = InEntityType; +} + +void AZMMOEntity::ApplyEntitySnapshot(const FZMMOEntitySnapshot& Snapshot) +{ + const FRotator NewRotation(0.0f, Snapshot.YawDeg, 0.0f); + SetActorLocationAndRotation(Snapshot.PositionCm, NewRotation); +} + +void AZMMOEntity::SetEntityRelevant(const bool bRelevant) +{ + if (bIsZMMORelevant == bRelevant) + { + return; + } + + bIsZMMORelevant = bRelevant; + SetActorHiddenInGame(!bRelevant); + SetActorEnableCollision(bRelevant); + SetActorTickEnabled(bRelevant); +} diff --git a/Source/ZMMO/Game/Entity/ZMMOEntity.h b/Source/ZMMO/Game/Entity/ZMMOEntity.h new file mode 100644 index 0000000..5e1f8a4 --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOEntity.h @@ -0,0 +1,57 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "ZMMOEntityInterface.h" +#include "ZMMOEntityTypes.h" +#include "ZMMOEntity.generated.h" + +/** + * AZMMOEntity + * + * Classe base para entidades replicadas pelo servidor que NAO precisam de + * capsula + `UCharacterMovementComponent` — tipicamente NPCs estaticos, + * objetos dinamicos do mundo, mobs simples sem locomotion fisica. + * + * Para personagens com capsula + CMC (proxy de jogador, mobs com locomotion + * por capsula), use `AZMMOPlayerProxy` ou uma futura `AZMMOMob` que herde + * de `ACharacter`. + * + * Implementa `IZMMOEntityInterface` com: + * - getters para `EntityId` / `EntityType`; + * - `ApplyEntitySnapshot` default: `SetActorLocationAndRotation` (sem + * interpolacao temporal — V1 podera adicionar ring-buffer + lerp); + * - `SetEntityRelevant(false)` default: oculta + desativa collision + + * desativa tick (preserva o ator no mundo para futuro pooling). + */ +UCLASS(Blueprintable, BlueprintType) +class ZMMO_API AZMMOEntity : public AActor, public IZMMOEntityInterface +{ + GENERATED_BODY() + +public: + AZMMOEntity(); + + // --- IZMMOEntityInterface --- + virtual int64 GetZMMOEntityId() const override { return EntityId; } + virtual EZMMOEntityType GetZMMOEntityType() const override { return EntityType; } + virtual void ApplyEntitySnapshot(const FZMMOEntitySnapshot& Snapshot) override; + virtual void SetEntityRelevant(bool bRelevant) override; + + /** Setter usado pelo `UZMMOWorldSubsystem` apos o spawn para registrar a identidade. */ + UFUNCTION(BlueprintCallable, Category = "ZMMO|Entity") + void SetZMMOIdentity(int64 InEntityId, EZMMOEntityType InEntityType); + +protected: + /** Identificador autoritativo do servidor. Atribuido em `SetZMMOIdentity`. */ + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + int64 EntityId = 0; + + /** Categoria autoritativa (Player/Mob/NPC/Object). */ + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + EZMMOEntityType EntityType = EZMMOEntityType::Object; + + /** Estado de relevancia atual (espelha as transicoes Hidden<->Relevant do servidor). */ + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + bool bIsZMMORelevant = true; +}; diff --git a/Source/ZMMO/Game/Entity/ZMMOEntityInterface.h b/Source/ZMMO/Game/Entity/ZMMOEntityInterface.h new file mode 100644 index 0000000..77631d0 --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOEntityInterface.h @@ -0,0 +1,75 @@ +#pragma once + +#include "CoreMinimal.h" +#include "UObject/Interface.h" +#include "ZMMOEntityTypes.h" +#include "ZMMOEntityInterface.generated.h" + +/** + * UZMMOEntityInterface + * + * Marcador `UInterface` necessario para o sistema de reflexao da Unreal. Todo o + * contrato vive em `IZMMOEntityInterface` (puro C++). + */ +UINTERFACE(BlueprintType, MinimalAPI, meta = (CannotImplementInterfaceInBlueprint)) +class UZMMOEntityInterface : public UInterface +{ + GENERATED_BODY() +}; + +/** + * IZMMOEntityInterface + * + * Contrato comum de todas as entidades replicadas pelo Zeus Server (player + * local, players remotos, mobs, NPCs, objetos). Inspirado em `IZeusEntityInterface` + * (ZeusV1) e adaptado para o nosso modelo "cliente solto + servidor valida input". + * + * Decisoes: + * 1. **Identidade autoritativa**: `EntityId` e `EntityType` vem do servidor; o + * cliente nunca os altera. + * 2. **Visibilidade gated por AOI**: o servidor envia spawn/despawn quando o + * target entra/sai da area de interesse. O cliente reage via + * `SetEntityRelevant(bool)`. + * 3. **Player local nao reconcilia em V0**: para o `AZMMOPlayerCharacter` o + * `ApplyEntitySnapshot` e no-op (cliente solto controla landscape). Quando + * a colisao de objetos chegar no servidor podemos ligar reconciliacao + * horizontal opcional. + * + * Por que UInterface (e nao heranca classica)? + * - `AZMMOPlayerCharacter` ja herda de `ACharacter`. Forcar uma classe base + * `AZMMOEntity : AActor` para todos perderia o `ACharacter` gratuito. + * A interface permite que o player local (`ACharacter`), o proxy remoto + * (`ACharacter`) e entidades genericas (`AActor`) implementem o mesmo + * contrato sem heranca multipla concreta. + */ +class ZMMO_API IZMMOEntityInterface +{ + GENERATED_BODY() + +public: + /** Identificador autoritativo da entidade no servidor. */ + virtual int64 GetZMMOEntityId() const = 0; + + /** Categoria da entidade (Player, Mob, NPC, Object). */ + virtual EZMMOEntityType GetZMMOEntityType() const = 0; + + /** + * Aplica um snapshot autoritativo. Implementacoes podem extender com + * interpolacao temporal ou logica especifica (anim drivers, etc.). + * + * Para o jogador local, este metodo e no-op em V0: o cliente conduz a + * fisica do landscape de forma autoritativa local, e o servidor apenas + * valida input/velocidade (ADR 0038). + */ + virtual void ApplyEntitySnapshot(const FZMMOEntitySnapshot& Snapshot) = 0; + + /** + * Alterna entre estado visivel/ativo (`true`) e oculto/desativado (`false`). + * Implementacao default das classes do projeto: `Hidden + DisableCollision + + * DisableTick` ao desativar (preserva o ator para futuro pooling). + * + * Para o jogador local, `bRelevant=false` e ignorado — nunca despawnamos o + * proprio personagem do cliente local. + */ + virtual void SetEntityRelevant(bool bRelevant) = 0; +}; diff --git a/Source/ZMMO/Game/Entity/ZMMOEntityTypes.h b/Source/ZMMO/Game/Entity/ZMMOEntityTypes.h new file mode 100644 index 0000000..142e263 --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOEntityTypes.h @@ -0,0 +1,64 @@ +#pragma once + +#include "CoreMinimal.h" +#include "ZMMOEntityTypes.generated.h" + +/** + * Categoria autoritativa replicada pelo servidor. Determina que classe de ator + * o `UZMMOWorldSubsystem` deve spawnar para um snapshot recebido. + */ +UENUM(BlueprintType) +enum class EZMMOEntityType : uint8 +{ + Player UMETA(DisplayName = "Player"), + Mob UMETA(DisplayName = "Mob"), + NPC UMETA(DisplayName = "NPC"), + Object UMETA(DisplayName = "Object") +}; + +/** + * Snapshot autoritativo aplicado por `IZMMOEntityInterface::ApplyEntitySnapshot`. + * + * Construido pelo `UZMMOWorldSubsystem` a partir dos delegates do + * `UZeusNetworkSubsystem` (`OnPlayerStateUpdate` em V0; opcodes para mobs/NPCs + * em V1+). Mantemos os campos minimos que o servidor ja replica hoje + * (`S_PLAYER_STATE`); novos campos sao adicionados aqui sempre que o protocolo + * evoluir, sem mexer nas classes de proxy. + */ +USTRUCT(BlueprintType) +struct FZMMOEntitySnapshot +{ + GENERATED_BODY() + + /** EntityId autoritativo do servidor. */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + int64 EntityId = 0; + + /** Categoria do ator (define qual proxy class spawnar). */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + EZMMOEntityType EntityType = EZMMOEntityType::Player; + + /** Sequencia de input processada no servidor (so faz sentido para players). */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + int32 LastProcessedInputSeq = 0; + + /** Posicao mundo (cm). */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + FVector PositionCm = FVector::ZeroVector; + + /** Velocidade mundo (cm/s) — usada para network smoothing e drivers de animacao. */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + FVector VelocityCmS = FVector::ZeroVector; + + /** Yaw em graus (orientacao visual). */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + float YawDeg = 0.0f; + + /** Indica se o servidor considera o ator em solo. */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + bool bGrounded = false; + + /** Tempo do servidor (ms desde epoch) quando este snapshot foi gerado. */ + UPROPERTY(BlueprintReadOnly, Category = "ZMMO|Entity") + int64 ServerTimeMs = 0; +}; diff --git a/Source/ZMMO/Game/Entity/ZMMOPlayerCharacter.cpp b/Source/ZMMO/Game/Entity/ZMMOPlayerCharacter.cpp new file mode 100644 index 0000000..2184efb --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOPlayerCharacter.cpp @@ -0,0 +1,359 @@ +#include "ZMMOPlayerCharacter.h" + +#include "Animation/AnimInstance.h" +#include "Camera/CameraComponent.h" +#include "Components/CapsuleComponent.h" +#include "Components/SkeletalMeshComponent.h" +#include "EnhancedInputComponent.h" +#include "Engine/GameInstance.h" +#include "Engine/SkeletalMesh.h" +#include "Engine/World.h" +#include "GameFramework/CharacterMovementComponent.h" +#include "GameFramework/Controller.h" +#include "GameFramework/SpringArmComponent.h" +#include "InputAction.h" +#include "InputActionValue.h" +#include "Subsystems/WorldSubsystem.h" +#include "UObject/ConstructorHelpers.h" +#include "ZMMO.h" +#include "ZMMOWorldSubsystem.h" +#include "ZeusNetworkSubsystem.h" + +DEFINE_LOG_CATEGORY(LogZMMOPlayer); + +AZMMOPlayerCharacter::AZMMOPlayerCharacter() +{ + PrimaryActorTick.bCanEverTick = true; + PrimaryActorTick.bStartWithTickEnabled = true; + + GetCapsuleComponent()->InitCapsuleSize(42.0f, 96.0f); + + bUseControllerRotationPitch = false; + bUseControllerRotationYaw = false; + bUseControllerRotationRoll = false; + + UCharacterMovementComponent* CMC = GetCharacterMovement(); + CMC->bOrientRotationToMovement = true; + CMC->RotationRate = FRotator(0.0f, 500.0f, 0.0f); + CMC->JumpZVelocity = 500.0f; + CMC->AirControl = 0.35f; + CMC->MaxWalkSpeed = 500.0f; + CMC->MinAnalogWalkSpeed = 20.0f; + CMC->BrakingDecelerationWalking = 2000.0f; + CMC->BrakingDecelerationFalling = 1500.0f; + + CameraBoom = CreateDefaultSubobject(TEXT("CameraBoom")); + CameraBoom->SetupAttachment(RootComponent); + CameraBoom->TargetArmLength = 400.0f; + CameraBoom->bUsePawnControlRotation = true; + + FollowCamera = CreateDefaultSubobject(TEXT("FollowCamera")); + FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName); + FollowCamera->bUsePawnControlRotation = false; + + // Defaults visuais (mesh + AnimBP) — alinhados ao ZClientMMO. Permitem ao + // motor spawnar AZMMOPlayerCharacter directamente como DefaultPawnClass do + // AZMMOGameMode sem exigir um BP filho. Um BP filho continua opcional para + // trocar mesh/AnimBP por mapa. + if (USkeletalMeshComponent* MeshComponent = GetMesh()) + { + static ConstructorHelpers::FObjectFinder QuinnMesh( + TEXT("/Game/Characters/Mannequins/Meshes/SKM_Quinn_Simple.SKM_Quinn_Simple")); + static ConstructorHelpers::FClassFinder QuinnAnimBp( + TEXT("/Game/Characters/Mannequins/Anims/Unarmed/ABP_Unarmed")); + + if (QuinnMesh.Succeeded()) + { + MeshComponent->SetSkeletalMesh(QuinnMesh.Object); + MeshComponent->SetRelativeLocation(FVector(0.0f, 0.0f, -90.0f)); + MeshComponent->SetRelativeRotation(FRotator(0.0f, -90.0f, 0.0f)); + } + else + { + UE_LOG(LogZMMOPlayer, Warning, TEXT("Default mesh SKM_Quinn_Simple not found for AZMMOPlayerCharacter.")); + } + + if (QuinnAnimBp.Succeeded()) + { + MeshComponent->SetAnimationMode(EAnimationMode::AnimationBlueprint); + MeshComponent->SetAnimInstanceClass(QuinnAnimBp.Class); + } + else + { + UE_LOG(LogZMMOPlayer, Warning, TEXT("Default anim blueprint ABP_Unarmed not found for AZMMOPlayerCharacter.")); + } + } + + // Input Actions defaults (Enhanced Input) — IMCs sao adicionados pelo + // AZMMOPlayerController. As IAs aqui resolvem o asset por path; um BP filho + // pode sobrescrever caso queira inputs custom. + static ConstructorHelpers::FObjectFinder MoveActionAsset( + TEXT("/Game/Input/Actions/IA_Move.IA_Move")); + static ConstructorHelpers::FObjectFinder LookActionAsset( + TEXT("/Game/Input/Actions/IA_Look.IA_Look")); + static ConstructorHelpers::FObjectFinder MouseLookActionAsset( + TEXT("/Game/Input/Actions/IA_MouseLook.IA_MouseLook")); + static ConstructorHelpers::FObjectFinder JumpActionAsset( + TEXT("/Game/Input/Actions/IA_Jump.IA_Jump")); + + if (MoveActionAsset.Succeeded()) { MoveAction = MoveActionAsset.Object; } + if (LookActionAsset.Succeeded()) { LookAction = LookActionAsset.Object; } + if (MouseLookActionAsset.Succeeded()) { MouseLookAction = MouseLookActionAsset.Object; } + if (JumpActionAsset.Succeeded()) { JumpAction = JumpActionAsset.Object; } +} + +void AZMMOPlayerCharacter::BeginPlay() +{ + Super::BeginPlay(); + ResolveZeusNetworkSubsystem(); + BindZeusSpawnDelegate(); + TryRegisterLocalEntityFromCachedSpawn(); +} + +void AZMMOPlayerCharacter::EndPlay(const EEndPlayReason::Type EndPlayReason) +{ + UnbindZeusSpawnDelegate(); + ZeusNetwork = nullptr; + Super::EndPlay(EndPlayReason); +} + +void AZMMOPlayerCharacter::Tick(const float DeltaSeconds) +{ + Super::Tick(DeltaSeconds); + FlushInputAxisToServer(DeltaSeconds); +} + +void AZMMOPlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) +{ + if (UEnhancedInputComponent* EnhancedInputComponent = Cast(PlayerInputComponent)) + { + EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Started, this, &AZMMOPlayerCharacter::OnJumpPressed); + EnhancedInputComponent->BindAction(JumpAction, ETriggerEvent::Completed, this, &AZMMOPlayerCharacter::OnJumpReleased); + + EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Triggered, this, &AZMMOPlayerCharacter::Move); + EnhancedInputComponent->BindAction(MoveAction, ETriggerEvent::Completed, this, &AZMMOPlayerCharacter::MoveCompleted); + + EnhancedInputComponent->BindAction(LookAction, ETriggerEvent::Triggered, this, &AZMMOPlayerCharacter::Look); + EnhancedInputComponent->BindAction(MouseLookAction, ETriggerEvent::Triggered, this, &AZMMOPlayerCharacter::Look); + } + else + { + UE_LOG(LogZMMOPlayer, Error, TEXT("'%s' Failed to find an Enhanced Input component."), *GetNameSafe(this)); + } +} + +void AZMMOPlayerCharacter::Move(const FInputActionValue& Value) +{ + const FVector2D MovementVector = Value.Get(); + DoMove(MovementVector.X, MovementVector.Y); +} + +void AZMMOPlayerCharacter::MoveCompleted(const FInputActionValue& Value) +{ + (void)Value; + DoMove(0.0f, 0.0f); +} + +void AZMMOPlayerCharacter::Look(const FInputActionValue& Value) +{ + const FVector2D LookAxisVector = Value.Get(); + DoLook(LookAxisVector.X, LookAxisVector.Y); +} + +void AZMMOPlayerCharacter::OnJumpPressed() +{ + bPendingJumpPressed = true; + DoJumpStart(); +} + +void AZMMOPlayerCharacter::OnJumpReleased() +{ + bPendingJumpReleased = true; + DoJumpEnd(); +} + +void AZMMOPlayerCharacter::DoMove(const float Right, const float Forward) +{ + PendingMoveRight = FMath::Clamp(Right, -1.0f, 1.0f); + PendingMoveForward = FMath::Clamp(Forward, -1.0f, 1.0f); + + if (GetController() != nullptr) + { + const FRotator Rotation = GetController()->GetControlRotation(); + const FRotator YawRotation(0.0f, Rotation.Yaw, 0.0f); + const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X); + const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y); + AddMovementInput(ForwardDirection, Forward); + AddMovementInput(RightDirection, Right); + } +} + +void AZMMOPlayerCharacter::DoLook(const float Yaw, const float Pitch) +{ + if (GetController() != nullptr) + { + AddControllerYawInput(Yaw); + AddControllerPitchInput(Pitch); + } +} + +void AZMMOPlayerCharacter::DoJumpStart() +{ + Jump(); +} + +void AZMMOPlayerCharacter::DoJumpEnd() +{ + StopJumping(); +} + +void AZMMOPlayerCharacter::ApplyEntitySnapshot(const FZMMOEntitySnapshot& /*Snapshot*/) +{ + // Cliente local solto: o servidor nao reconcilia posicao em V0 (ADR 0038). + // Quando colisao de objetos chegar, podemos ligar uma reconciliacao opcional + // horizontal aqui (XY only), preservando o Z do CMC local. +} + +void AZMMOPlayerCharacter::SetEntityRelevant(bool /*bRelevant*/) +{ + // Nunca despawnamos o jogador local via AOI. +} + +void AZMMOPlayerCharacter::ResolveZeusNetworkSubsystem() +{ + if (ZeusNetwork) + { + return; + } + + UGameInstance* GI = GetGameInstance(); + if (!GI) + { + return; + } + + ZeusNetwork = GI->GetSubsystem(); +} + +void AZMMOPlayerCharacter::BindZeusSpawnDelegate() +{ + if (bSpawnDelegateBound || !IsLocallyControlled()) + { + return; + } + if (!ZeusNetwork) + { + return; + } + + ZeusNetwork->OnPlayerSpawned.AddDynamic(this, &AZMMOPlayerCharacter::HandleZeusPlayerSpawned); + bSpawnDelegateBound = true; +} + +void AZMMOPlayerCharacter::UnbindZeusSpawnDelegate() +{ + if (!bSpawnDelegateBound || !ZeusNetwork) + { + bSpawnDelegateBound = false; + return; + } + ZeusNetwork->OnPlayerSpawned.RemoveDynamic(this, &AZMMOPlayerCharacter::HandleZeusPlayerSpawned); + bSpawnDelegateBound = false; +} + +void AZMMOPlayerCharacter::TryRegisterLocalEntityFromCachedSpawn() +{ + if (!ZeusNetwork) + { + return; + } + + int32 CachedEntityId = 0; + FVector CachedPosCm = FVector::ZeroVector; + float CachedYawDeg = 0.0f; + int64 CachedServerTimeMs = 0; + if (ZeusNetwork->TryGetLastLocalSpawn(CachedEntityId, CachedPosCm, CachedYawDeg, CachedServerTimeMs)) + { + HandleLocalSpawnReady(CachedEntityId, CachedPosCm, CachedYawDeg, CachedServerTimeMs); + } +} + +void AZMMOPlayerCharacter::HandleZeusPlayerSpawned(const int32 InEntityId, const bool bIsLocal, + const FVector PosCm, const float YawDeg, const int64 ServerTimeMs) +{ + if (!bIsLocal) + { + // Remote spawns sao tratados pelo `UZMMOWorldSubsystem`; aqui so reagimos + // ao spawn do pawn possessivel local (S_SPAWN_PLAYER com bIsLocal=true). + return; + } + HandleLocalSpawnReady(InEntityId, PosCm, YawDeg, ServerTimeMs); +} + +void AZMMOPlayerCharacter::HandleLocalSpawnReady(const int32 InEntityId, const FVector PosCm, + const float YawDeg, const int64 ServerTimeMs) +{ + if (InEntityId == 0) + { + return; + } + + const int64 EntityIdAsInt64 = static_cast(InEntityId); + if (ZMMOEntityId == EntityIdAsInt64) + { + return; + } + + ZMMOEntityId = EntityIdAsInt64; + + UE_LOG(LogZMMOPlayer, Log, + TEXT("AZMMOPlayerCharacter: local spawn captured EntityId=%d pos=(%s) yaw=%.1f t=%lld"), + InEntityId, *PosCm.ToString(), YawDeg, ServerTimeMs); + + if (UWorld* World = GetWorld()) + { + if (UZMMOWorldSubsystem* WorldSubsystem = World->GetSubsystem()) + { + WorldSubsystem->RegisterLocalEntity(EntityIdAsInt64, this); + } + } +} + +void AZMMOPlayerCharacter::FlushInputAxisToServer(const float DeltaSeconds) +{ + ResolveZeusNetworkSubsystem(); + if (!ZeusNetwork || !ZeusNetwork->IsConnected()) + { + return; + } + + const float SendInterval = 1.0f / FMath::Max(1, InputSendRateHz); + SendAccumulatorSec += DeltaSeconds; + TimeSinceLastSendSec += DeltaSeconds; + + const bool bMovingInput = !FMath::IsNearlyZero(PendingMoveForward) || !FMath::IsNearlyZero(PendingMoveRight); + const bool bJumpEvent = bPendingJumpPressed || bPendingJumpReleased; + const bool bRateReached = SendAccumulatorSec >= SendInterval; + const bool bHeartbeatReached = TimeSinceLastSendSec >= HeartbeatIntervalSec; + + const bool bShouldSend = bJumpEvent || (bMovingInput && bRateReached) || (!bMovingInput && bHeartbeatReached); + if (!bShouldSend) + { + return; + } + + ++InputSequence; + const int32 ClientTimeMs = static_cast(FPlatformTime::Seconds() * 1000.0); + ZeusNetwork->SendInputAxis( + PendingMoveForward, + PendingMoveRight, + bPendingJumpPressed, + bPendingJumpReleased, + InputSequence, + ClientTimeMs); + + SendAccumulatorSec = 0.0f; + TimeSinceLastSendSec = 0.0f; + bPendingJumpPressed = false; + bPendingJumpReleased = false; +} diff --git a/Source/ZMMO/Game/Entity/ZMMOPlayerCharacter.h b/Source/ZMMO/Game/Entity/ZMMOPlayerCharacter.h new file mode 100644 index 0000000..a617f3c --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOPlayerCharacter.h @@ -0,0 +1,158 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Character.h" +#include "Logging/LogMacros.h" +#include "ZMMOEntityInterface.h" +#include "ZMMOEntityTypes.h" +#include "ZMMOPlayerCharacter.generated.h" + +class USpringArmComponent; +class UCameraComponent; +class UInputAction; +class UZeusNetworkSubsystem; +struct FInputActionValue; + +DECLARE_LOG_CATEGORY_EXTERN(LogZMMOPlayer, Log, All); + +/** + * AZMMOPlayerCharacter + * + * Personagem do jogador local. Diferente do template `ThirdPersonCharacter` + * e do antigo `AZMMOCharacter`, este ator e parte do pipeline de rede Zeus: + * + * - Continua a usar o `UCharacterMovementComponent` LIVRE para correr a + * fisica do landscape (ADR 0038): o cliente e autoritativo localmente + * sobre Z/colisao com terreno; o servidor apenas valida input/velocidade. + * - Envia `C_INPUT_AXIS` ao `UZeusNetworkSubsystem` na cadencia + * `InputSendRateHz` (com heartbeat 5 Hz quando parado para evitar + * starvation do `MovementSystem` no servidor). + * - Implementa `IZMMOEntityInterface` para participar do registry do + * `UZMMOWorldSubsystem`, mas `ApplyEntitySnapshot` e `SetEntityRelevant` + * sao no-op em V0 — o cliente local nao reconcilia (cliente solto). + * + * TODO V1: reconciliacao opcional XY quando colisao de objetos chegar; AOI + * debug spheres; visual smoothing apos correcao do servidor. + */ +UCLASS(Blueprintable, BlueprintType) +class ZMMO_API AZMMOPlayerCharacter : public ACharacter, public IZMMOEntityInterface +{ + GENERATED_BODY() + + /** Camera boom positioning the camera behind the character */ + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true")) + USpringArmComponent* CameraBoom; + + /** Follow camera */ + UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true")) + UCameraComponent* FollowCamera; + +protected: + UPROPERTY(EditAnywhere, Category = "Input") + UInputAction* JumpAction; + + UPROPERTY(EditAnywhere, Category = "Input") + UInputAction* MoveAction; + + UPROPERTY(EditAnywhere, Category = "Input") + UInputAction* LookAction; + + UPROPERTY(EditAnywhere, Category = "Input") + UInputAction* MouseLookAction; + + /** Cadencia de envio dos pacotes `C_INPUT_AXIS` (Hz). */ + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "ZMMO|Networking", meta = (ClampMin = "1", ClampMax = "120")) + int32 InputSendRateHz = 30; + + /** + * Intervalo maximo (s) entre envios de `C_INPUT_AXIS` quando os inputs sao + * vazios (forward=0, right=0, sem jump). Mantem ~5 Hz de heartbeat para + * evitar starvation do servidor caso pacotes sejam perdidos. Em movimento + * o envio segue `InputSendRateHz` (30 Hz). + */ + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "ZMMO|Networking", meta = (ClampMin = "0.05", ClampMax = "5.0")) + float HeartbeatIntervalSec = 0.2f; + +public: + AZMMOPlayerCharacter(); + + virtual void Tick(float DeltaSeconds) override; + + // --- IZMMOEntityInterface --- + virtual int64 GetZMMOEntityId() const override { return ZMMOEntityId; } + virtual EZMMOEntityType GetZMMOEntityType() const override { return EZMMOEntityType::Player; } + virtual void ApplyEntitySnapshot(const FZMMOEntitySnapshot& Snapshot) override; + virtual void SetEntityRelevant(bool bRelevant) override; + + UFUNCTION(BlueprintCallable, Category = "ZMMO|Entity") + void SetZMMOEntityId(int64 InEntityId) { ZMMOEntityId = InEntityId; } + + FORCEINLINE USpringArmComponent* GetCameraBoom() const { return CameraBoom; } + FORCEINLINE UCameraComponent* GetFollowCamera() const { return FollowCamera; } + +protected: + virtual void BeginPlay() override; + virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; + + virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; + + void Move(const FInputActionValue& Value); + void MoveCompleted(const FInputActionValue& Value); + void Look(const FInputActionValue& Value); + void OnJumpPressed(); + void OnJumpReleased(); + +public: + /** Wrappers expostos a Blueprint (UI / mobile / automation). */ + UFUNCTION(BlueprintCallable, Category = "Input") + virtual void DoMove(float Right, float Forward); + + UFUNCTION(BlueprintCallable, Category = "Input") + virtual void DoLook(float Yaw, float Pitch); + + UFUNCTION(BlueprintCallable, Category = "Input") + virtual void DoJumpStart(); + + UFUNCTION(BlueprintCallable, Category = "Input") + virtual void DoJumpEnd(); + +private: + void ResolveZeusNetworkSubsystem(); + void FlushInputAxisToServer(float DeltaSeconds); + + /** Liga `OnPlayerSpawned` para captar EntityId local apos o handshake. */ + void BindZeusSpawnDelegate(); + void UnbindZeusSpawnDelegate(); + + /** Caso o spawn ja tenha chegado antes deste pawn existir, aplica via cache. */ + void TryRegisterLocalEntityFromCachedSpawn(); + + /** + * Memoriza `EntityId` autoritativo e regista o pawn no `UZMMOWorldSubsystem` + * para o registry partilhado por proxies remotos (filtra snapshots locais). + */ + void HandleLocalSpawnReady(int32 InEntityId, FVector PosCm, float YawDeg, int64 ServerTimeMs); + + UFUNCTION() + void HandleZeusPlayerSpawned(int32 InEntityId, bool bIsLocal, FVector PosCm, float YawDeg, int64 ServerTimeMs); + + UPROPERTY() + TObjectPtr ZeusNetwork; + + bool bSpawnDelegateBound = false; + + /** Identidade autoritativa atribuida quando o servidor envia S_SPAWN_PLAYER local. */ + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity", meta = (AllowPrivateAccess = "true")) + int64 ZMMOEntityId = 0; + + float PendingMoveForward = 0.0f; + float PendingMoveRight = 0.0f; + + bool bPendingJumpPressed = false; + bool bPendingJumpReleased = false; + bool bPreviousJumpHeld = false; + + float SendAccumulatorSec = 0.0f; + float TimeSinceLastSendSec = 0.0f; + int32 InputSequence = 0; +}; diff --git a/Source/ZMMO/Game/Entity/ZMMOPlayerProxy.cpp b/Source/ZMMO/Game/Entity/ZMMOPlayerProxy.cpp new file mode 100644 index 0000000..32d0c69 --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOPlayerProxy.cpp @@ -0,0 +1,91 @@ +#include "ZMMOPlayerProxy.h" + +#include "Components/CapsuleComponent.h" +#include "GameFramework/CharacterMovementComponent.h" + +AZMMOPlayerProxy::AZMMOPlayerProxy(const FObjectInitializer& ObjectInitializer) + : Super(ObjectInitializer) +{ + PrimaryActorTick.bCanEverTick = true; + PrimaryActorTick.bStartWithTickEnabled = true; + + UCapsuleComponent* Capsule = GetCapsuleComponent(); + if (Capsule) + { + Capsule->InitCapsuleSize(42.0f, 96.0f); + Capsule->SetCollisionEnabled(ECollisionEnabled::QueryOnly); + } + + UCharacterMovementComponent* CMC = GetCharacterMovement(); + if (CMC) + { + CMC->bOrientRotationToMovement = false; + CMC->SetMovementMode(MOVE_None); + } + + bUseControllerRotationPitch = false; + bUseControllerRotationYaw = false; + bUseControllerRotationRoll = false; +} + +void AZMMOPlayerProxy::Tick(const float DeltaSeconds) +{ + Super::Tick(DeltaSeconds); + RefreshAnimationDrivers(); +} + +void AZMMOPlayerProxy::SetZMMOIdentity(const int64 InEntityId, const EZMMOEntityType InEntityType) +{ + EntityId = InEntityId; + EntityType = InEntityType; +} + +void AZMMOPlayerProxy::ApplyEntitySnapshot(const FZMMOEntitySnapshot& Snapshot) +{ + const FRotator NewRotation(0.0f, Snapshot.YawDeg, 0.0f); + SetActorLocationAndRotation(Snapshot.PositionCm, NewRotation); + LastSnapshotPosition = Snapshot.PositionCm; + VisualVelocity = Snapshot.VelocityCmS; + bHasFirstSnapshot = true; + RefreshAnimationDrivers(); + ApplyCollisionPolicy(); +} + +void AZMMOPlayerProxy::SetEntityRelevant(const bool bRelevant) +{ + if (bIsZMMORelevant == bRelevant) + { + return; + } + + bIsZMMORelevant = bRelevant; + SetActorHiddenInGame(!bRelevant); + SetActorTickEnabled(bRelevant); + ApplyCollisionPolicy(); +} + +void AZMMOPlayerProxy::RefreshAnimationDrivers() +{ + UCharacterMovementComponent* CMC = GetCharacterMovement(); + if (!CMC) + { + return; + } + + // `Acceleration` em UCharacterMovementComponent e protected — o AnimBP usa + // `Velocity` como driver primario; quando precisarmos de Acceleration para + // blends mais finos, expomos via AddInputVector ou um CMC custom. + CMC->Velocity = VisualVelocity; +} + +void AZMMOPlayerProxy::ApplyCollisionPolicy() +{ + UCapsuleComponent* Capsule = GetCapsuleComponent(); + if (!Capsule) + { + return; + } + + const bool bShouldCollide = bIsZMMORelevant && bHasFirstSnapshot; + Capsule->SetCollisionEnabled(bShouldCollide ? ECollisionEnabled::QueryOnly : ECollisionEnabled::NoCollision); +} diff --git a/Source/ZMMO/Game/Entity/ZMMOPlayerProxy.h b/Source/ZMMO/Game/Entity/ZMMOPlayerProxy.h new file mode 100644 index 0000000..29506b5 --- /dev/null +++ b/Source/ZMMO/Game/Entity/ZMMOPlayerProxy.h @@ -0,0 +1,78 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Character.h" +#include "ZMMOEntityInterface.h" +#include "ZMMOEntityTypes.h" +#include "ZMMOPlayerProxy.generated.h" + +/** + * AZMMOPlayerProxy + * + * Proxy visual para jogadores remotos (e, no futuro, mobs com locomotion + * por capsula) cuja posicao vem 100% do servidor via snapshots + * (`UZeusNetworkSubsystem::OnPlayerStateUpdate`). + * + * Inspirado em `AZeusRemoteCharacter` (ZeusV1). Diferencas chave vs. + * `AZMMOPlayerCharacter` (jogador local): + * - SEM `EnhancedInput`, sem envio de `C_INPUT_AXIS`. + * - SEM buffer de pending inputs nem reconciliacao. + * - Posicao aplicada por snapshot (`ApplyEntitySnapshot`); a `ACharacter` + * continua a existir para preservar capsula + skeletal mesh + AnimBP, + * mas o CMC fica em modo "kinematic-ish" (nao integra fisica). + * + * TODO V1: interpolacao temporal entre snapshots (ring-buffer + lerp), + * network smoothing visual no mesh, AnimBP-friendly velocity drivers. + */ +UCLASS(Blueprintable, BlueprintType) +class ZMMO_API AZMMOPlayerProxy : public ACharacter, public IZMMOEntityInterface +{ + GENERATED_BODY() + +public: + AZMMOPlayerProxy(const FObjectInitializer& ObjectInitializer); + + virtual void Tick(float DeltaSeconds) override; + + // --- IZMMOEntityInterface --- + virtual int64 GetZMMOEntityId() const override { return EntityId; } + virtual EZMMOEntityType GetZMMOEntityType() const override { return EntityType; } + virtual void ApplyEntitySnapshot(const FZMMOEntitySnapshot& Snapshot) override; + virtual void SetEntityRelevant(bool bRelevant) override; + + UFUNCTION(BlueprintCallable, Category = "ZMMO|Entity") + void SetZMMOIdentity(int64 InEntityId, EZMMOEntityType InEntityType); + +protected: + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + int64 EntityId = 0; + + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + EZMMOEntityType EntityType = EZMMOEntityType::Player; + + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + bool bIsZMMORelevant = true; + + /** True apos o primeiro snapshot ser aplicado — antes disso o ator pode ficar oculto. */ + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + bool bHasFirstSnapshot = false; + + /** Ultima posicao recebida por snapshot (mundo, cm). */ + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + FVector LastSnapshotPosition = FVector::ZeroVector; + + /** + * Velocidade visual derivada para o AnimBP. Espelha `Snapshot.VelocityCmS` + * e e re-imposta no `CMC->Velocity` em cada `Tick` para manter os drivers + * de animacao alimentados entre updates de rede. + */ + UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category = "ZMMO|Entity") + FVector VisualVelocity = FVector::ZeroVector; + +private: + /** Reaplica `CMC->Velocity` a partir de `VisualVelocity`. */ + void RefreshAnimationDrivers(); + + /** Liga/desliga colisao da capsula consoante a relevancia + visual ready. */ + void ApplyCollisionPolicy(); +}; diff --git a/Source/ZMMO/Game/Modes/ZMMOGameInstance.cpp b/Source/ZMMO/Game/Modes/ZMMOGameInstance.cpp new file mode 100644 index 0000000..961bcf2 --- /dev/null +++ b/Source/ZMMO/Game/Modes/ZMMOGameInstance.cpp @@ -0,0 +1,93 @@ +#include "ZMMOGameInstance.h" + +#include "ZMMO.h" +#include "ZeusNetworkSubsystem.h" + +void UZMMOGameInstance::Init() +{ + Super::Init(); + + UE_LOG(LogZMMO, Log, TEXT("ZMMOGameInstance::Init AutoConnect=%s Host=%s Port=%d"), + bAutoConnectOnStart ? TEXT("true") : TEXT("false"), + *ZeusServerHost, + ZeusServerPort); + + UZeusNetworkSubsystem* ZeusNet = GetZeusNetwork(); + if (!ZeusNet) + { + UE_LOG(LogZMMO, Warning, TEXT("ZMMOGameInstance: ZeusNetworkSubsystem unavailable; ZeusNetwork plugin enabled?")); + return; + } + + BindZeusDelegates(ZeusNet); + + if (!bAutoConnectOnStart) + { + return; + } + + ZeusNet->ConnectToZeusServer(ZeusServerHost, ZeusServerPort); +} + +void UZMMOGameInstance::Shutdown() +{ + if (UZeusNetworkSubsystem* ZeusNet = GetZeusNetwork()) + { + UnbindZeusDelegates(ZeusNet); + if (ZeusNet->IsConnected()) + { + ZeusNet->DisconnectFromZeusServer(); + } + } + + Super::Shutdown(); +} + +UZeusNetworkSubsystem* UZMMOGameInstance::GetZeusNetwork() const +{ + return GetSubsystem(); +} + +void UZMMOGameInstance::BindZeusDelegates(UZeusNetworkSubsystem* Zeus) +{ + if (!Zeus) + { + return; + } + Zeus->OnConnected.AddDynamic(this, &UZMMOGameInstance::HandleZeusConnected); + Zeus->OnConnectionFailed.AddDynamic(this, &UZMMOGameInstance::HandleZeusConnectionFailed); + Zeus->OnDisconnected.AddDynamic(this, &UZMMOGameInstance::HandleZeusDisconnected); + Zeus->OnNetworkLog.AddDynamic(this, &UZMMOGameInstance::HandleZeusNetworkLog); +} + +void UZMMOGameInstance::UnbindZeusDelegates(UZeusNetworkSubsystem* Zeus) +{ + if (!Zeus) + { + return; + } + Zeus->OnConnected.RemoveDynamic(this, &UZMMOGameInstance::HandleZeusConnected); + Zeus->OnConnectionFailed.RemoveDynamic(this, &UZMMOGameInstance::HandleZeusConnectionFailed); + Zeus->OnDisconnected.RemoveDynamic(this, &UZMMOGameInstance::HandleZeusDisconnected); + Zeus->OnNetworkLog.RemoveDynamic(this, &UZMMOGameInstance::HandleZeusNetworkLog); +} + +void UZMMOGameInstance::HandleZeusConnected() +{ + UE_LOG(LogZMMO, Log, TEXT("[Zeus] Connected to server %s:%d"), *ZeusServerHost, ZeusServerPort); +} + +void UZMMOGameInstance::HandleZeusConnectionFailed(FString Reason) +{ + UE_LOG(LogZMMO, Warning, TEXT("[Zeus] Connection failed: %s"), *Reason); +} + +void UZMMOGameInstance::HandleZeusDisconnected() +{ + UE_LOG(LogZMMO, Log, TEXT("[Zeus] Disconnected.")); +} + +void UZMMOGameInstance::HandleZeusNetworkLog(FString Message) +{ + UE_LOG(LogZMMO, Log, TEXT("[Zeus] %s"), *Message); +} diff --git a/Source/ZMMO/Game/Modes/ZMMOGameInstance.h b/Source/ZMMO/Game/Modes/ZMMOGameInstance.h new file mode 100644 index 0000000..3a5d59f --- /dev/null +++ b/Source/ZMMO/Game/Modes/ZMMOGameInstance.h @@ -0,0 +1,68 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Engine/GameInstance.h" +#include "ZMMOGameInstance.generated.h" + +class UZeusNetworkSubsystem; + +/** + * UZMMOGameInstance + * + * Game instance do cliente Zeus MMO. O `UZeusNetworkSubsystem` (do plugin + * `ZeusNetwork`) e um `UGameInstanceSubsystem` e portanto e criado + * automaticamente em qualquer `UGameInstance`; esta classe existe sobretudo + * como ponto de extensao para: + * + * - Auto-connect ao servidor Zeus em `Init()` (`bAutoConnectOnStart`). + * - Expor a configuracao default (`Host`, `Port`) ao Project Settings. + * - Hooks de logout / shutdown limpos em `Shutdown()`. + * + * Marcada `Blueprintable, BlueprintType` para permitir um BP filho com + * overrides de configuracao por build (dev / staging / prod). + */ +UCLASS(Blueprintable, BlueprintType) +class ZMMO_API UZMMOGameInstance : public UGameInstance +{ + GENERATED_BODY() + +public: + virtual void Init() override; + virtual void Shutdown() override; + + /** + * Se `true`, tenta ligar ao servidor Zeus em `Init()` usando + * `ZeusServerHost`/`ZeusServerPort`. Default `true` em V0 (smoke test); + * passar a `false` quando existir UI de login que controle a conexao. + */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Config, Category = "ZMMO|Network") + bool bAutoConnectOnStart = true; + + /** Host (IPv4 ou hostname) do servidor Zeus. */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Config, Category = "ZMMO|Network") + FString ZeusServerHost = TEXT("127.0.0.1"); + + /** Porta UDP do servidor Zeus (1..65535). */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Config, Category = "ZMMO|Network", meta = (ClampMin = "1", ClampMax = "65535")) + int32 ZeusServerPort = 27777; + +protected: + /** Devolve o subsystem Zeus desta game instance (criado automaticamente pelo plugin). */ + UFUNCTION(BlueprintPure, Category = "ZMMO|Network") + UZeusNetworkSubsystem* GetZeusNetwork() const; + + void BindZeusDelegates(UZeusNetworkSubsystem* Zeus); + void UnbindZeusDelegates(UZeusNetworkSubsystem* Zeus); + + UFUNCTION() + void HandleZeusConnected(); + + UFUNCTION() + void HandleZeusConnectionFailed(FString Reason); + + UFUNCTION() + void HandleZeusDisconnected(); + + UFUNCTION() + void HandleZeusNetworkLog(FString Message); +}; diff --git a/Source/ZMMO/Game/Modes/ZMMOGameMode.cpp b/Source/ZMMO/Game/Modes/ZMMOGameMode.cpp new file mode 100644 index 0000000..48a5144 --- /dev/null +++ b/Source/ZMMO/Game/Modes/ZMMOGameMode.cpp @@ -0,0 +1,10 @@ +#include "ZMMOGameMode.h" + +#include "ZMMOPlayerCharacter.h" +#include "ZMMOPlayerController.h" + +AZMMOGameMode::AZMMOGameMode() +{ + DefaultPawnClass = AZMMOPlayerCharacter::StaticClass(); + PlayerControllerClass = AZMMOPlayerController::StaticClass(); +} diff --git a/Source/ZMMO/Game/Modes/ZMMOGameMode.h b/Source/ZMMO/Game/Modes/ZMMOGameMode.h new file mode 100644 index 0000000..32acfe9 --- /dev/null +++ b/Source/ZMMO/Game/Modes/ZMMOGameMode.h @@ -0,0 +1,25 @@ +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/GameModeBase.h" +#include "ZMMOGameMode.generated.h" + +/** + * AZMMOGameMode + * + * Game mode do cliente Zeus MMO. Configura `AZMMOPlayerCharacter` como + * `DefaultPawnClass` e `AZMMOPlayerController` como `PlayerControllerClass`. + * + * A classe e instanciavel directamente (apontada por + * `GlobalDefaultGameMode=/Script/ZMMO.ZMMOGameMode` em + * `Config/DefaultEngine.ini`); um BP filho e opcional para overrides + * por mapa / build (skeletal mesh, AnimBP custom, etc.). + */ +UCLASS(Blueprintable, BlueprintType) +class ZMMO_API AZMMOGameMode : public AGameModeBase +{ + GENERATED_BODY() + +public: + AZMMOGameMode(); +}; diff --git a/Source/ZMMO/Game/Network/ZMMOWorldSubsystem.cpp b/Source/ZMMO/Game/Network/ZMMOWorldSubsystem.cpp new file mode 100644 index 0000000..b65fa04 --- /dev/null +++ b/Source/ZMMO/Game/Network/ZMMOWorldSubsystem.cpp @@ -0,0 +1,239 @@ +#include "ZMMOWorldSubsystem.h" + +#include "Engine/GameInstance.h" +#include "Engine/World.h" +#include "ZMMO.h" +#include "ZMMOEntity.h" +#include "ZMMOEntityInterface.h" +#include "ZMMOPlayerProxy.h" +#include "ZeusNetworkSubsystem.h" + +void UZMMOWorldSubsystem::Initialize(FSubsystemCollectionBase& Collection) +{ + Super::Initialize(Collection); + + if (RemoteEntityClasses.IsEmpty()) + { + RemoteEntityClasses.Add(EZMMOEntityType::Player, AZMMOPlayerProxy::StaticClass()); + RemoteEntityClasses.Add(EZMMOEntityType::Mob, AZMMOEntity::StaticClass()); + RemoteEntityClasses.Add(EZMMOEntityType::NPC, AZMMOEntity::StaticClass()); + RemoteEntityClasses.Add(EZMMOEntityType::Object, AZMMOEntity::StaticClass()); + } + + if (UZeusNetworkSubsystem* ZeusNet = ResolveZeusNetworkSubsystem()) + { + ZeusNet->OnPlayerSpawned.AddDynamic(this, &UZMMOWorldSubsystem::HandlePlayerSpawned); + ZeusNet->OnPlayerDespawned.AddDynamic(this, &UZMMOWorldSubsystem::HandlePlayerDespawned); + ZeusNet->OnPlayerStateUpdate.AddDynamic(this, &UZMMOWorldSubsystem::HandlePlayerStateUpdate); + UE_LOG(LogZMMO, Log, TEXT("ZMMOWorldSubsystem bound to ZeusNetworkSubsystem delegates.")); + } + else + { + UE_LOG(LogZMMO, Warning, TEXT("ZMMOWorldSubsystem: ZeusNetworkSubsystem not found at Initialize.")); + } +} + +void UZMMOWorldSubsystem::Deinitialize() +{ + if (UZeusNetworkSubsystem* ZeusNet = ResolveZeusNetworkSubsystem()) + { + ZeusNet->OnPlayerSpawned.RemoveDynamic(this, &UZMMOWorldSubsystem::HandlePlayerSpawned); + ZeusNet->OnPlayerDespawned.RemoveDynamic(this, &UZMMOWorldSubsystem::HandlePlayerDespawned); + ZeusNet->OnPlayerStateUpdate.RemoveDynamic(this, &UZMMOWorldSubsystem::HandlePlayerStateUpdate); + } + + RemoteEntities.Reset(); + LocalEntityId = 0; + Super::Deinitialize(); +} + +void UZMMOWorldSubsystem::RegisterLocalEntity(const int64 EntityId, AActor* LocalActor) +{ + if (EntityId == 0 || LocalActor == nullptr) + { + return; + } + + LocalEntityId = EntityId; + RemoteEntities.Add(EntityId, TWeakObjectPtr(LocalActor)); + UE_LOG(LogZMMO, Log, TEXT("ZMMOWorldSubsystem: local entity registered EntityId=%lld actor=%s"), + EntityId, *GetNameSafe(LocalActor)); +} + +void UZMMOWorldSubsystem::HandlePlayerSpawned(const int32 EntityId, const bool bIsLocal, + const FVector PosCm, const float YawDeg, const int64 ServerTimeMs) +{ + if (EntityId == 0) + { + return; + } + + if (bIsLocal) + { + // O proprio AZMMOPlayerCharacter cuida da sua identidade quando recebe o + // delegate por outro caminho. Aqui apenas memorizamos para filtrar + // snapshots locais (cliente solto, sem reconciliacao em V0). + LocalEntityId = EntityId; + return; + } + + if (RemoteEntities.Contains(EntityId)) + { + // Ja existe um proxy: reactivar e re-snap. + if (AActor* Existing = RemoteEntities[EntityId].Get()) + { + if (IZMMOEntityInterface* AsEntity = Cast(Existing)) + { + AsEntity->SetEntityRelevant(true); + } + Existing->SetActorLocationAndRotation(PosCm, FRotator(0.0f, YawDeg, 0.0f)); + } + return; + } + + UWorld* World = GetWorld(); + if (!World) + { + return; + } + + UClass* ProxyClass = ResolveActorClass(EZMMOEntityType::Player); + if (!ProxyClass) + { + UE_LOG(LogZMMO, Warning, TEXT("ZMMOWorldSubsystem: no class registered for Player; spawn aborted.")); + return; + } + + FActorSpawnParameters Params; + Params.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + const FRotator SpawnRot(0.0f, YawDeg, 0.0f); + AActor* SpawnedActor = World->SpawnActor(ProxyClass, PosCm, SpawnRot, Params); + if (!SpawnedActor) + { + UE_LOG(LogZMMO, Warning, TEXT("ZMMOWorldSubsystem: SpawnActor failed for EntityId=%d"), EntityId); + return; + } + + if (IZMMOEntityInterface* AsEntity = Cast(SpawnedActor)) + { + // Inject identity via dedicated setter when the spawned actor exposes one. + if (AZMMOPlayerProxy* Proxy = Cast(SpawnedActor)) + { + Proxy->SetZMMOIdentity(EntityId, EZMMOEntityType::Player); + } + else if (AZMMOEntity* Entity = Cast(SpawnedActor)) + { + Entity->SetZMMOIdentity(EntityId, EZMMOEntityType::Player); + } + AsEntity->SetEntityRelevant(true); + } + + RemoteEntities.Add(EntityId, TWeakObjectPtr(SpawnedActor)); + UE_LOG(LogZMMO, Log, TEXT("ZMMOWorldSubsystem: spawned remote EntityId=%d at (%s) yaw=%.1f t=%lld"), + EntityId, *PosCm.ToString(), YawDeg, ServerTimeMs); +} + +void UZMMOWorldSubsystem::HandlePlayerDespawned(const int32 EntityId) +{ + const TWeakObjectPtr* Entry = RemoteEntities.Find(EntityId); + if (!Entry) + { + return; + } + + if (AActor* Actor = Entry->Get()) + { + if (IZMMOEntityInterface* AsEntity = Cast(Actor)) + { + AsEntity->SetEntityRelevant(false); + } + } + + UE_LOG(LogZMMO, Log, TEXT("ZMMOWorldSubsystem: despawn EntityId=%d"), EntityId); +} + +void UZMMOWorldSubsystem::HandlePlayerStateUpdate(const int32 EntityId, const int32 InputSeq, + const FVector PosCm, const FVector VelCmS, const bool bGrounded, const int64 ServerTimeMs) +{ + if (EntityId == 0) + { + return; + } + + if (LocalEntityId != 0 && static_cast(EntityId) == LocalEntityId) + { + // Cliente local solto: ignoramos snapshots autoritativos para o nosso + // proprio personagem em V0 (ADR 0038). Reconciliacao opcional pode ser + // activada por flag em `AZMMOPlayerCharacter` quando colisao de objetos + // chegar. + return; + } + + const TWeakObjectPtr* Entry = RemoteEntities.Find(EntityId); + if (!Entry) + { + // Snapshot antes de spawn: o spawn vira em `OnPlayerSpawned` em breve. + return; + } + + AActor* Actor = Entry->Get(); + if (!Actor) + { + RemoteEntities.Remove(EntityId); + return; + } + + IZMMOEntityInterface* AsEntity = Cast(Actor); + if (!AsEntity) + { + return; + } + + FZMMOEntitySnapshot Snapshot; + Snapshot.EntityId = EntityId; + Snapshot.EntityType = AsEntity->GetZMMOEntityType(); + Snapshot.LastProcessedInputSeq = InputSeq; + Snapshot.PositionCm = PosCm; + Snapshot.VelocityCmS = VelCmS; + // Yaw nao chega no opcode S_PLAYER_STATE actual; derivamos do XY da + // velocidade quando significativo, caso contrario mantemos rotacao do ator. + if (!FVector(VelCmS.X, VelCmS.Y, 0.0f).IsNearlyZero(1.0f)) + { + Snapshot.YawDeg = FMath::RadiansToDegrees(FMath::Atan2(VelCmS.Y, VelCmS.X)); + } + else + { + Snapshot.YawDeg = Actor->GetActorRotation().Yaw; + } + Snapshot.bGrounded = bGrounded; + Snapshot.ServerTimeMs = ServerTimeMs; + + AsEntity->ApplyEntitySnapshot(Snapshot); +} + +UClass* UZMMOWorldSubsystem::ResolveActorClass(const EZMMOEntityType EntityType) const +{ + if (const TSubclassOf* Found = RemoteEntityClasses.Find(EntityType)) + { + if (Found->Get()) + { + return Found->Get(); + } + } + return AZMMOEntity::StaticClass(); +} + +UZeusNetworkSubsystem* UZMMOWorldSubsystem::ResolveZeusNetworkSubsystem() const +{ + const UWorld* World = GetWorld(); + if (!World) + { + return nullptr; + } + UGameInstance* GI = World->GetGameInstance(); + if (!GI) + { + return nullptr; + } + return GI->GetSubsystem(); +} diff --git a/Source/ZMMO/Game/Network/ZMMOWorldSubsystem.h b/Source/ZMMO/Game/Network/ZMMOWorldSubsystem.h new file mode 100644 index 0000000..3359784 --- /dev/null +++ b/Source/ZMMO/Game/Network/ZMMOWorldSubsystem.h @@ -0,0 +1,95 @@ +#pragma once + +#include "CoreMinimal.h" +#include "Subsystems/WorldSubsystem.h" +#include "ZMMOEntityTypes.h" +#include "ZMMOWorldSubsystem.generated.h" + +class AActor; +class AZMMOPlayerCharacter; +class AZMMOPlayerProxy; +class UZeusNetworkSubsystem; + +/** + * UZMMOWorldSubsystem + * + * Subsistema por-mundo que orquestra a aplicacao de pacotes de replicacao + * recebidos do servidor (`S_SPAWN_PLAYER`, `S_DESPAWN_PLAYER`, + * `S_PLAYER_STATE`) em atores na cena. Mantem um registry + * `EntityId -> AActor*` e despacha cada mensagem para o ator correto. + * + * Por que `UWorldSubsystem` (e nao `UGameInstanceSubsystem`)? + * - Atores so existem dentro de um `UWorld`. Quando o mapa troca, este + * registry e descartado naturalmente — sem leak de ponteiros para + * atores do mundo anterior. + * - O `UZeusNetworkSubsystem` (per-game-instance) continua dono da + * conexao UDP e dos delegates; este subsistema apenas escuta os + * delegates e materializa atores na cena atual. + * + * Resolucao de classe por `EZMMOEntityType`: + * - `RemoteEntityClasses` e um TMap configuravel (BlueprintReadWrite) + * com defaults seguros em `Initialize`. Permite trocar + * `AZMMOPlayerProxy` por um BP filho com mesh customizada sem + * recompilar C++. + * + * Despawn: + * - V0: chama `IZMMOEntityInterface::SetEntityRelevant(false)` (preserva + * o ator para futuro pooling). + * - V1: pool real por `EntityType`, limites de memoria, expiracao. + */ +UCLASS() +class ZMMO_API UZMMOWorldSubsystem : public UWorldSubsystem +{ + GENERATED_BODY() + +public: + virtual void Initialize(FSubsystemCollectionBase& Collection) override; + virtual void Deinitialize() override; + + /** + * Regista o jogador local no registry. Chamado por `AZMMOPlayerCharacter` + * apos receber o `EntityId` autoritativo do servidor (delegate + * `OnPlayerSpawned` com `bIsLocal=true`). + */ + UFUNCTION(BlueprintCallable, Category = "ZMMO|World") + void RegisterLocalEntity(int64 EntityId, AActor* LocalActor); + + /** Numero de entidades remotas actualmente trackeadas. Util em debug overlays. */ + UFUNCTION(BlueprintPure, Category = "ZMMO|World") + int32 GetTrackedEntityCount() const { return RemoteEntities.Num(); } + +protected: + /** + * Mapa configuravel de classe a usar por `EZMMOEntityType`. Caso vazio, + * usamos defaults seguros (`AZMMOPlayerProxy` para Player, `AZMMOEntity` + * para Mob/NPC/Object — actualizado quando classes especificas existirem). + * + * Pode ser preenchido via Blueprint subclassing ou em runtime. + */ + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "ZMMO|World") + TMap> RemoteEntityClasses; + +private: + UFUNCTION() + void HandlePlayerSpawned(int32 EntityId, bool bIsLocal, FVector PosCm, float YawDeg, int64 ServerTimeMs); + + UFUNCTION() + void HandlePlayerDespawned(int32 EntityId); + + UFUNCTION() + void HandlePlayerStateUpdate(int32 EntityId, int32 InputSeq, FVector PosCm, FVector VelCmS, bool bGrounded, int64 ServerTimeMs); + + UClass* ResolveActorClass(EZMMOEntityType EntityType) const; + UZeusNetworkSubsystem* ResolveZeusNetworkSubsystem() const; + + /** + * Registry de proxies remotos. Chave = `EntityId` autoritativo do servidor. + * Usamos `TWeakObjectPtr` para nao impedir GC se algo der errado e o ator + * for destruido externamente (ex.: troca de mapa). + */ + UPROPERTY() + TMap> RemoteEntities; + + /** Cached id do jogador local, para ignorar snapshots dele (cliente solto). */ + int64 LocalEntityId = 0; +}; diff --git a/Source/ZMMO/ZMMO.Build.cs b/Source/ZMMO/ZMMO.Build.cs new file mode 100644 index 0000000..a547dc8 --- /dev/null +++ b/Source/ZMMO/ZMMO.Build.cs @@ -0,0 +1,33 @@ +using UnrealBuildTool; + +public class ZMMO : ModuleRules +{ + public ZMMO(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicDependencyModuleNames.AddRange(new string[] { + "Core", + "CoreUObject", + "Engine", + "InputCore", + "EnhancedInput", + "UMG", + "Slate", + "ZeusNetwork" + }); + + PrivateDependencyModuleNames.AddRange(new string[] { + "SlateCore" + }); + + PublicIncludePaths.AddRange(new string[] { + "ZMMO", + "ZMMO/Game", + "ZMMO/Game/Entity", + "ZMMO/Game/Controller", + "ZMMO/Game/Modes", + "ZMMO/Game/Network" + }); + } +} diff --git a/Source/ZMMO/ZMMO.cpp b/Source/ZMMO/ZMMO.cpp new file mode 100644 index 0000000..a6afa61 --- /dev/null +++ b/Source/ZMMO/ZMMO.cpp @@ -0,0 +1,8 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "ZMMO.h" +#include "Modules/ModuleManager.h" + +IMPLEMENT_PRIMARY_GAME_MODULE( FDefaultGameModuleImpl, ZMMO, "ZMMO" ); + +DEFINE_LOG_CATEGORY(LogZMMO) \ No newline at end of file diff --git a/Source/ZMMO/ZMMO.h b/Source/ZMMO/ZMMO.h new file mode 100644 index 0000000..69b4685 --- /dev/null +++ b/Source/ZMMO/ZMMO.h @@ -0,0 +1,8 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" + +/** Main log category used across the project */ +DECLARE_LOG_CATEGORY_EXTERN(LogZMMO, Log, All); \ No newline at end of file diff --git a/Source/ZMMOEditor.Target.cs b/Source/ZMMOEditor.Target.cs new file mode 100644 index 0000000..5c231d5 --- /dev/null +++ b/Source/ZMMOEditor.Target.cs @@ -0,0 +1,15 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; +using System.Collections.Generic; + +public class ZMMOEditorTarget : TargetRules +{ + public ZMMOEditorTarget(TargetInfo Target) : base(Target) + { + Type = TargetType.Editor; + DefaultBuildSettings = BuildSettingsVersion.V6; + IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7; + ExtraModuleNames.Add("ZMMO"); + } +} diff --git a/ZMMO.sln b/ZMMO.sln new file mode 100644 index 0000000..e9afd80 --- /dev/null +++ b/ZMMO.sln @@ -0,0 +1,1793 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31314.256 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Automation", "Automation", "{0BFBE63A-B98A-3411-8EEB-8918FEC737B3}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Engine", "Engine", "{233774A8-CC9D-3FA9-86D1-90573E92B704}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Games", "Games", "{DE1F8B53-6C02-3C13-9101-A7C8D96F3FF6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Programs", "Programs", "{A338B9E2-A559-34BE-A46D-F789DD488FAD}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Rules", "Rules", "{C2F57ECE-B26F-39D8-BDA7-C1D40BD8F180}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{57713676-9DBE-331C-AD10-26632AC9EE0C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "UnrealBuildTool.Plugins", "UnrealBuildTool.Plugins", "{7B5CFB44-F0FB-31DF-AE62-C3C096A29A7B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UE5ProgramRules", "D:\Program Files\Epic Games\UE_5.7\Engine\Intermediate\Build\BuildRulesProjects\UE5ProgramRules\UE5ProgramRules.csproj", "{1C50CA05-6FC0-3C82-A160-4DB1B6094B97}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UE5Rules", "D:\Program Files\Epic Games\UE_5.7\Engine\Intermediate\Build\BuildRulesProjects\UE5Rules\UE5Rules.csproj", "{13BA6964-1BDD-34BA-914D-3BE6833CC3B8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VisionOS.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Platforms\VisionOS\Source\Programs\AutomationTool\VisionOS.Automation.csproj", "{0758D39F-71CC-386B-9017-6511A43910F3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ScriptGeneratorUbtPlugin.ubtplugin", "D:\Program Files\Epic Games\UE_5.7\Engine\Plugins\ScriptPlugin\Source\ScriptGeneratorUbtPlugin\ScriptGeneratorUbtPlugin.ubtplugin.csproj", "{716F7D61-6061-37BE-8DBC-9DAEFA03948A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Android.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Android\Android.Automation.csproj", "{2732011C-4B90-37CC-8CD1-6EC406F9C8A2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Apple.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Apple\Apple.Automation.csproj", "{BE105D6C-3ADB-397B-B1B6-B6733718843B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutomationTool", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationTool.csproj", "{44911D81-0CFF-3E08-8352-835E4C69B7CE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutomationUtils.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\AutomationUtils\AutomationUtils.Automation.csproj", "{A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BuildGraph.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\BuildGraph\BuildGraph.Automation.csproj", "{6F7C28B1-1927-3F06-99E4-B4A959489234}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CookedEditor.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\CookedEditor\CookedEditor.Automation.csproj", "{F0D9F2A2-8AEC-37B5-A753-E56B2552085E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CrowdinLocalization.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\CrowdinLocalization\CrowdinLocalization.Automation.csproj", "{6CAD801D-8C4C-3582-A81A-8415490C554C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Gauntlet.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Gauntlet\Gauntlet.Automation.csproj", "{0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Insights.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Insights\Insights.Automation.csproj", "{9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IOS.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\IOS\IOS.Automation.csproj", "{C38BAAAE-14DE-3318-A2E8-43C05C551A51}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Linux.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Linux\Linux.Automation.csproj", "{FDAF387C-FAED-3CAF-B310-623FC852E6EC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LiveLinkHub.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\LiveLinkHub\LiveLinkHub.Automation.csproj", "{FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Localization.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Localization\Localization.Automation.csproj", "{363A4178-76DA-3B7D-8FF8-6B8662D16F0C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LowLevelTests.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\LowLevelTests\LowLevelTests.Automation.csproj", "{33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mac.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Mac\Mac.Automation.csproj", "{3F122036-09A8-3579-86A2-BAF96BF6CAC9}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mutable.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Mutable\Mutable.Automation.csproj", "{63CCA118-608D-393E-A41E-7FE1F51EF115}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OneSkyLocalization.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\OneSkyLocalization\OneSkyLocalization.Automation.csproj", "{76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AutomationScripts.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Scripts\AutomationScripts.Automation.csproj", "{E61938C1-7574-308A-A7AC-4BC2625930EB}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SmartlingLocalization.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\SmartlingLocalization\SmartlingLocalization.Automation.csproj", "{C2398C95-324E-3278-81C2-5C8CBBA2393E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamDeck.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\SteamDeck\SteamDeck.Automation.csproj", "{009F38A6-4359-3456-8286-9462725CBD8D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Turnkey.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Turnkey\Turnkey.Automation.csproj", "{5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TVOS.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\TVOS\TVOS.Automation.csproj", "{19878470-97AB-3EDE-816F-13479F23545F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Win.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\Win\Win.Automation.csproj", "{73D9597D-E7A7-3CCD-95C2-56B53F747769}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XLocLocalization.Automation", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\AutomationTool\XLocLocalization\XLocLocalization.Automation.csproj", "{FE43331B-3660-3177-B07B-033BEE8DAC52}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.AspNet", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.AspNet\EpicGames.AspNet.csproj", "{0208075D-8517-3AE3-A328-43ED5913CCD4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.BuildGraph", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.BuildGraph\EpicGames.BuildGraph.csproj", "{AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Build", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Build\EpicGames.Build.csproj", "{3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Core", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Core\EpicGames.Core.csproj", "{7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Horde", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Horde\EpicGames.Horde.csproj", "{715D55BB-F800-319F-BCEE-8DB5C44484BA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.IoHash", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.IoHash\EpicGames.IoHash.csproj", "{448C6C6E-2E5D-344A-82DD-E445F8918C45}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.MongoDB", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.MongoDB\EpicGames.MongoDB.csproj", "{DC799C37-F1D8-3496-9088-ABF579E15C90}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.MsBuild", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.MsBuild\EpicGames.MsBuild.csproj", "{FB63054A-7F67-37FC-9F4C-E52F3F193A01}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.OIDC", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.OIDC\EpicGames.OIDC.csproj", "{F400303E-787A-3921-B613-E7A867E3BD5B}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Oodle", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Oodle\EpicGames.Oodle.csproj", "{59F16592-A1CD-324B-81D4-6D6559EF2C9D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Perforce.Fixture", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Perforce.Fixture\EpicGames.Perforce.Fixture.csproj", "{F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Perforce.Managed", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Perforce.Managed\EpicGames.Perforce.Managed.csproj", "{AD1B2A72-9798-3625-95AD-0EC450E2C0AD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Perforce", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Perforce\EpicGames.Perforce.csproj", "{1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.ProjectStore", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.ProjectStore\EpicGames.ProjectStore.csproj", "{95710F86-0092-3EA4-8190-D8E2B2CBDDE6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Redis", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Redis\EpicGames.Redis.csproj", "{AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.ScriptBuild", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.ScriptBuild\EpicGames.ScriptBuild.csproj", "{324FFE80-24C0-3293-B9F0-B9751C72ECFC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Serialization", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Serialization\EpicGames.Serialization.csproj", "{A1BC96F9-49DF-337C-9ECD-248E8097C5CA}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Slack", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Slack\EpicGames.Slack.csproj", "{332ABBFE-34FF-325E-81BB-5D503438BD58}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.Tracing", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.Tracing\EpicGames.Tracing.csproj", "{3C73250E-9530-30FA-9D64-0F35D8E1A8A2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.UBA", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.UBA\EpicGames.UBA.csproj", "{F8E89206-179A-3069-AA9D-0D62D1083E16}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EpicGames.UHT", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\Shared\EpicGames.UHT\EpicGames.UHT.csproj", "{735DD4E8-5989-340C-A04A-E86E4B3CE4B2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnrealBuildTool", "D:\Program Files\Epic Games\UE_5.7\Engine\Source\Programs\UnrealBuildTool\UnrealBuildTool.csproj", "{F802EE66-2986-3334-A8B9-FC429CBFB2EF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ZMMOModuleRules", "Intermediate\Build\BuildRulesProjects\ZMMOModuleRules\ZMMOModuleRules.csproj", "{21650FD9-8F90-3C1A-9B97-B931123B0A36}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UE5", "Intermediate\ProjectFiles\UE5.vcxproj", "{F5D5D17F-7074-3025-AAC6-A47D888EF2BA}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ZMMO", "Intermediate\ProjectFiles\ZMMO.vcxproj", "{01681144-355A-36E4-B6C0-C6321FCFFA4C}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Visualizers", "Visualizers", "{1CCEC849-CC72-4C59-8C36-2F7C38706D4C}" + ProjectSection(SolutionItems) = preProject + D:\Program Files\Epic Games\UE_5.7\Engine\Extras\VisualStudioDebugging\Unreal.natvis = D:\Program Files\Epic Games\UE_5.7\Engine\Extras\VisualStudioDebugging\Unreal.natvis + D:\Program Files\Epic Games\UE_5.7\Engine\Extras\VisualStudioDebugging\Unreal.natstepfilter = D:\Program Files\Epic Games\UE_5.7\Engine\Extras\VisualStudioDebugging\Unreal.natstepfilter + D:\Program Files\Epic Games\UE_5.7\Engine\Extras\VisualStudioDebugging\Unreal.natjmc = D:\Program Files\Epic Games\UE_5.7\Engine\Extras\VisualStudioDebugging\Unreal.natjmc + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + DebugGame Editor|Win64 = DebugGame Editor|Win64 + DebugGame Editor|Win64-arm64 = DebugGame Editor|Win64-arm64 + DebugGame Editor|Win64-arm64ec = DebugGame Editor|Win64-arm64ec + DebugGame|Win64 = DebugGame|Win64 + DebugGame|Win64-arm64 = DebugGame|Win64-arm64 + DebugGame|Win64-arm64ec = DebugGame|Win64-arm64ec + Development Editor|Win64 = Development Editor|Win64 + Development Editor|Win64-arm64 = Development Editor|Win64-arm64 + Development Editor|Win64-arm64ec = Development Editor|Win64-arm64ec + Development|Win64 = Development|Win64 + Development|Win64-arm64 = Development|Win64-arm64 + Development|Win64-arm64ec = Development|Win64-arm64ec + Shipping|Win64 = Shipping|Win64 + Shipping|Win64-arm64 = Shipping|Win64-arm64 + Shipping|Win64-arm64ec = Shipping|Win64-arm64ec + EndGlobalSection + # UnrealVS Section + GlobalSection(ddbf523f-7eb6-4887-bd51-85a714ff87eb) = preSolution + AvailablePlatforms=Win64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame|Win64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development Editor|Win64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development|Win64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development|Win64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development|Win64-arm64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Shipping|Win64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Shipping|Win64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame|Win64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development Editor|Win64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development|Win64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development|Win64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development|Win64-arm64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Shipping|Win64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Shipping|Win64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame|Win64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development Editor|Win64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development|Win64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development|Win64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development|Win64-arm64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Shipping|Win64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Shipping|Win64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0758D39F-71CC-386B-9017-6511A43910F3}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame|Win64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development Editor|Win64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development|Win64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development|Win64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development|Win64-arm64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Shipping|Win64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Shipping|Win64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {716F7D61-6061-37BE-8DBC-9DAEFA03948A}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame|Win64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development Editor|Win64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development|Win64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development|Win64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development|Win64-arm64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Shipping|Win64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Shipping|Win64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame|Win64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development Editor|Win64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development|Win64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development|Win64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development|Win64-arm64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Shipping|Win64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Shipping|Win64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {BE105D6C-3ADB-397B-B1B6-B6733718843B}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame|Win64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development Editor|Win64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development|Win64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development|Win64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development|Win64-arm64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Shipping|Win64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Shipping|Win64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {44911D81-0CFF-3E08-8352-835E4C69B7CE}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame|Win64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development Editor|Win64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development|Win64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development|Win64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development|Win64-arm64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Shipping|Win64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Shipping|Win64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame|Win64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development Editor|Win64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development|Win64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development|Win64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development|Win64-arm64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Shipping|Win64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Shipping|Win64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6F7C28B1-1927-3F06-99E4-B4A959489234}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame|Win64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development Editor|Win64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development|Win64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development|Win64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development|Win64-arm64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Shipping|Win64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Shipping|Win64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame|Win64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development Editor|Win64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development|Win64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development|Win64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development|Win64-arm64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Shipping|Win64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Shipping|Win64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {6CAD801D-8C4C-3582-A81A-8415490C554C}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame|Win64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development Editor|Win64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development|Win64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development|Win64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development|Win64-arm64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Shipping|Win64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Shipping|Win64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame|Win64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development Editor|Win64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development|Win64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development|Win64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development|Win64-arm64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Shipping|Win64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Shipping|Win64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame|Win64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development Editor|Win64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development|Win64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development|Win64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development|Win64-arm64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Shipping|Win64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Shipping|Win64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C38BAAAE-14DE-3318-A2E8-43C05C551A51}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame|Win64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development Editor|Win64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development|Win64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development|Win64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development|Win64-arm64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Shipping|Win64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Shipping|Win64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FDAF387C-FAED-3CAF-B310-623FC852E6EC}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame|Win64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development Editor|Win64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development|Win64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development|Win64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development|Win64-arm64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Shipping|Win64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Shipping|Win64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame|Win64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development Editor|Win64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development|Win64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development|Win64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development|Win64-arm64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Shipping|Win64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Shipping|Win64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame|Win64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development Editor|Win64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development|Win64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development|Win64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development|Win64-arm64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Shipping|Win64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Shipping|Win64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame|Win64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development Editor|Win64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development|Win64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development|Win64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development|Win64-arm64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Shipping|Win64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Shipping|Win64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3F122036-09A8-3579-86A2-BAF96BF6CAC9}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame|Win64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development Editor|Win64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development|Win64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development|Win64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development|Win64-arm64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Shipping|Win64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Shipping|Win64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {63CCA118-608D-393E-A41E-7FE1F51EF115}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame|Win64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development Editor|Win64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development|Win64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development|Win64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development|Win64-arm64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Shipping|Win64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Shipping|Win64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame|Win64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development Editor|Win64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development|Win64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development|Win64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development|Win64-arm64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Shipping|Win64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Shipping|Win64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {E61938C1-7574-308A-A7AC-4BC2625930EB}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame|Win64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development Editor|Win64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development|Win64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development|Win64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development|Win64-arm64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Shipping|Win64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Shipping|Win64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {C2398C95-324E-3278-81C2-5C8CBBA2393E}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame|Win64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development Editor|Win64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development|Win64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development|Win64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development|Win64-arm64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Shipping|Win64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Shipping|Win64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {009F38A6-4359-3456-8286-9462725CBD8D}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame|Win64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development Editor|Win64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development|Win64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development|Win64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development|Win64-arm64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Shipping|Win64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Shipping|Win64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame|Win64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development Editor|Win64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development|Win64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development|Win64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development|Win64-arm64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Shipping|Win64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Shipping|Win64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {19878470-97AB-3EDE-816F-13479F23545F}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame|Win64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development Editor|Win64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development|Win64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development|Win64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development|Win64-arm64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Shipping|Win64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Shipping|Win64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {73D9597D-E7A7-3CCD-95C2-56B53F747769}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame|Win64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development Editor|Win64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development|Win64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development|Win64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development|Win64-arm64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Shipping|Win64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Shipping|Win64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FE43331B-3660-3177-B07B-033BEE8DAC52}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame|Win64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development Editor|Win64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development|Win64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development|Win64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development|Win64-arm64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Shipping|Win64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Shipping|Win64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {0208075D-8517-3AE3-A328-43ED5913CCD4}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame|Win64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development Editor|Win64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development|Win64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development|Win64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development|Win64-arm64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Shipping|Win64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Shipping|Win64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame|Win64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development Editor|Win64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development|Win64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development|Win64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development|Win64-arm64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Shipping|Win64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Shipping|Win64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame|Win64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development Editor|Win64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development|Win64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development|Win64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development|Win64-arm64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Shipping|Win64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Shipping|Win64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame|Win64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development Editor|Win64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development|Win64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development|Win64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development|Win64-arm64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Shipping|Win64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Shipping|Win64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {715D55BB-F800-319F-BCEE-8DB5C44484BA}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame|Win64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development Editor|Win64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development|Win64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development|Win64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development|Win64-arm64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Shipping|Win64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Shipping|Win64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {448C6C6E-2E5D-344A-82DD-E445F8918C45}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame|Win64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development Editor|Win64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development|Win64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development|Win64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development|Win64-arm64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Shipping|Win64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Shipping|Win64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {DC799C37-F1D8-3496-9088-ABF579E15C90}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame|Win64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development Editor|Win64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development|Win64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development|Win64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development|Win64-arm64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Shipping|Win64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Shipping|Win64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {FB63054A-7F67-37FC-9F4C-E52F3F193A01}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame|Win64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development Editor|Win64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development|Win64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development|Win64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development|Win64-arm64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Shipping|Win64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Shipping|Win64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F400303E-787A-3921-B613-E7A867E3BD5B}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame|Win64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development Editor|Win64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development|Win64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development|Win64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development|Win64-arm64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Shipping|Win64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Shipping|Win64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {59F16592-A1CD-324B-81D4-6D6559EF2C9D}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame|Win64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development Editor|Win64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development|Win64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development|Win64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development|Win64-arm64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Shipping|Win64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Shipping|Win64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame|Win64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development Editor|Win64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development|Win64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development|Win64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development|Win64-arm64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Shipping|Win64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Shipping|Win64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame|Win64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development Editor|Win64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development|Win64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development|Win64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development|Win64-arm64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Shipping|Win64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Shipping|Win64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame|Win64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development Editor|Win64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development|Win64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development|Win64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development|Win64-arm64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Shipping|Win64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Shipping|Win64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame|Win64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development Editor|Win64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development|Win64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development|Win64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development|Win64-arm64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Shipping|Win64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Shipping|Win64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame|Win64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development Editor|Win64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development|Win64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development|Win64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development|Win64-arm64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Shipping|Win64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Shipping|Win64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {324FFE80-24C0-3293-B9F0-B9751C72ECFC}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame|Win64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development Editor|Win64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development|Win64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development|Win64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development|Win64-arm64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Shipping|Win64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Shipping|Win64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame|Win64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development Editor|Win64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development|Win64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development|Win64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development|Win64-arm64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Shipping|Win64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Shipping|Win64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {332ABBFE-34FF-325E-81BB-5D503438BD58}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame|Win64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development Editor|Win64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development|Win64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development|Win64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development|Win64-arm64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Shipping|Win64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Shipping|Win64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame|Win64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development Editor|Win64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development|Win64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development|Win64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development|Win64-arm64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Shipping|Win64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Shipping|Win64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F8E89206-179A-3069-AA9D-0D62D1083E16}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame|Win64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development Editor|Win64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development|Win64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development|Win64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development|Win64-arm64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Shipping|Win64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Shipping|Win64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame|Win64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development Editor|Win64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development|Win64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development|Win64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development|Win64-arm64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Shipping|Win64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Shipping|Win64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {F802EE66-2986-3334-A8B9-FC429CBFB2EF}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame Editor|Win64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame Editor|Win64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame Editor|Win64-arm64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame|Win64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame|Win64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame|Win64-arm64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame|Win64-arm64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame|Win64-arm64ec.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.DebugGame|Win64-arm64ec.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development Editor|Win64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development Editor|Win64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development Editor|Win64-arm64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development Editor|Win64-arm64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development Editor|Win64-arm64ec.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development Editor|Win64-arm64ec.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development|Win64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development|Win64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development|Win64-arm64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development|Win64-arm64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development|Win64-arm64ec.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Development|Win64-arm64ec.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Shipping|Win64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Shipping|Win64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Shipping|Win64-arm64.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Shipping|Win64-arm64.Build.0 = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Shipping|Win64-arm64ec.ActiveCfg = Development|Any CPU + {21650FD9-8F90-3C1A-9B97-B931123B0A36}.Shipping|Win64-arm64ec.Build.0 = Development|Any CPU + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.DebugGame Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.DebugGame Editor|Win64-arm64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.DebugGame Editor|Win64-arm64ec.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.DebugGame|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.DebugGame|Win64-arm64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.DebugGame|Win64-arm64ec.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Development Editor|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Development Editor|Win64-arm64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Development Editor|Win64-arm64ec.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Development|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Development|Win64-arm64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Development|Win64-arm64ec.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Shipping|Win64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Shipping|Win64-arm64.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA}.Shipping|Win64-arm64ec.ActiveCfg = BuiltWithUnrealBuildTool|Win64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame Editor|Win64.ActiveCfg = DebugGame_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame Editor|Win64.Build.0 = DebugGame_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame Editor|Win64-arm64.ActiveCfg = Win64_arm64_DebugGame_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame Editor|Win64-arm64.Build.0 = Win64_arm64_DebugGame_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame Editor|Win64-arm64ec.ActiveCfg = Win64_arm64ec_DebugGame_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame Editor|Win64-arm64ec.Build.0 = Win64_arm64ec_DebugGame_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame|Win64.ActiveCfg = DebugGame|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame|Win64.Build.0 = DebugGame|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame|Win64-arm64.ActiveCfg = Win64_arm64_DebugGame|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame|Win64-arm64.Build.0 = Win64_arm64_DebugGame|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame|Win64-arm64ec.ActiveCfg = Win64_arm64ec_DebugGame|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.DebugGame|Win64-arm64ec.Build.0 = Win64_arm64ec_DebugGame|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development Editor|Win64.ActiveCfg = Development_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development Editor|Win64.Build.0 = Development_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development Editor|Win64-arm64.ActiveCfg = Win64_arm64_Development_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development Editor|Win64-arm64.Build.0 = Win64_arm64_Development_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development Editor|Win64-arm64ec.ActiveCfg = Win64_arm64ec_Development_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development Editor|Win64-arm64ec.Build.0 = Win64_arm64ec_Development_Editor|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development|Win64.ActiveCfg = Development|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development|Win64.Build.0 = Development|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development|Win64-arm64.ActiveCfg = Win64_arm64_Development|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development|Win64-arm64.Build.0 = Win64_arm64_Development|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development|Win64-arm64ec.ActiveCfg = Win64_arm64ec_Development|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Development|Win64-arm64ec.Build.0 = Win64_arm64ec_Development|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Shipping|Win64.ActiveCfg = Shipping|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Shipping|Win64.Build.0 = Shipping|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Shipping|Win64-arm64.ActiveCfg = Win64_arm64_Shipping|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Shipping|Win64-arm64.Build.0 = Win64_arm64_Shipping|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Shipping|Win64-arm64ec.ActiveCfg = Win64_arm64ec_Shipping|x64 + {01681144-355A-36E4-B6C0-C6321FCFFA4C}.Shipping|Win64-arm64ec.Build.0 = Win64_arm64ec_Shipping|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {F5D5D17F-7074-3025-AAC6-A47D888EF2BA} = {233774A8-CC9D-3FA9-86D1-90573E92B704} + {01681144-355A-36E4-B6C0-C6321FCFFA4C} = {DE1F8B53-6C02-3C13-9101-A7C8D96F3FF6} + {44911D81-0CFF-3E08-8352-835E4C69B7CE} = {A338B9E2-A559-34BE-A46D-F789DD488FAD} + {F802EE66-2986-3334-A8B9-FC429CBFB2EF} = {A338B9E2-A559-34BE-A46D-F789DD488FAD} + {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} = {A338B9E2-A559-34BE-A46D-F789DD488FAD} + {57713676-9DBE-331C-AD10-26632AC9EE0C} = {A338B9E2-A559-34BE-A46D-F789DD488FAD} + {7B5CFB44-F0FB-31DF-AE62-C3C096A29A7B} = {A338B9E2-A559-34BE-A46D-F789DD488FAD} + {0758D39F-71CC-386B-9017-6511A43910F3} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {2732011C-4B90-37CC-8CD1-6EC406F9C8A2} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {BE105D6C-3ADB-397B-B1B6-B6733718843B} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {A82FBBE6-14FE-3D7F-A4C6-51A19A2C50AE} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {6F7C28B1-1927-3F06-99E4-B4A959489234} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {F0D9F2A2-8AEC-37B5-A753-E56B2552085E} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {6CAD801D-8C4C-3582-A81A-8415490C554C} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {0D77A0C3-5AFD-3743-AB3B-08C6A21B93FF} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {9BFECF8A-7CC1-3310-84D2-5915BDA3E83B} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {C38BAAAE-14DE-3318-A2E8-43C05C551A51} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {FDAF387C-FAED-3CAF-B310-623FC852E6EC} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {FA1D5BFD-397C-3AB8-99FA-8232DC8AE373} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {363A4178-76DA-3B7D-8FF8-6B8662D16F0C} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {33C9FE81-22FD-3E55-94F8-45AA0A5DC3E3} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {3F122036-09A8-3579-86A2-BAF96BF6CAC9} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {63CCA118-608D-393E-A41E-7FE1F51EF115} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {76057381-70C4-3F44-BE7E-B8E0FFCC4AAF} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {E61938C1-7574-308A-A7AC-4BC2625930EB} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {C2398C95-324E-3278-81C2-5C8CBBA2393E} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {009F38A6-4359-3456-8286-9462725CBD8D} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {5C8EE782-8C26-3CE1-8364-09AE1DDCDA5F} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {19878470-97AB-3EDE-816F-13479F23545F} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {73D9597D-E7A7-3CCD-95C2-56B53F747769} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {FE43331B-3660-3177-B07B-033BEE8DAC52} = {0BFBE63A-B98A-3411-8EEB-8918FEC737B3} + {0208075D-8517-3AE3-A328-43ED5913CCD4} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {AF32A5A7-BD5A-3CC5-8952-6BCDA6877211} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {3C6C887A-71A0-34E5-AFE9-2DE22EEB6C7C} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {7E0AEF26-AD8B-3BC8-A7C3-B909C7E394DF} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {715D55BB-F800-319F-BCEE-8DB5C44484BA} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {448C6C6E-2E5D-344A-82DD-E445F8918C45} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {DC799C37-F1D8-3496-9088-ABF579E15C90} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {FB63054A-7F67-37FC-9F4C-E52F3F193A01} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {F400303E-787A-3921-B613-E7A867E3BD5B} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {59F16592-A1CD-324B-81D4-6D6559EF2C9D} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {F1CE44D8-BFD3-3560-BC54-E29B19AE74F3} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {AD1B2A72-9798-3625-95AD-0EC450E2C0AD} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {1B9DBDCC-68BA-309D-8E66-15FE98F09E8C} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {95710F86-0092-3EA4-8190-D8E2B2CBDDE6} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {AB7E34F9-2427-36F8-8F0F-99E8CFEE4D47} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {324FFE80-24C0-3293-B9F0-B9751C72ECFC} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {A1BC96F9-49DF-337C-9ECD-248E8097C5CA} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {332ABBFE-34FF-325E-81BB-5D503438BD58} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {3C73250E-9530-30FA-9D64-0F35D8E1A8A2} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {F8E89206-179A-3069-AA9D-0D62D1083E16} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {735DD4E8-5989-340C-A04A-E86E4B3CE4B2} = {57713676-9DBE-331C-AD10-26632AC9EE0C} + {716F7D61-6061-37BE-8DBC-9DAEFA03948A} = {7B5CFB44-F0FB-31DF-AE62-C3C096A29A7B} + {1C50CA05-6FC0-3C82-A160-4DB1B6094B97} = {C2F57ECE-B26F-39D8-BDA7-C1D40BD8F180} + {13BA6964-1BDD-34BA-914D-3BE6833CC3B8} = {C2F57ECE-B26F-39D8-BDA7-C1D40BD8F180} + {21650FD9-8F90-3C1A-9B97-B931123B0A36} = {C2F57ECE-B26F-39D8-BDA7-C1D40BD8F180} + EndGlobalSection +EndGlobal diff --git a/ZMMO.uproject b/ZMMO.uproject new file mode 100644 index 0000000..a79ad75 --- /dev/null +++ b/ZMMO.uproject @@ -0,0 +1,51 @@ +{ + "FileVersion": 3, + "EngineAssociation": "5.7", + "Category": "", + "Description": "", + "Modules": [ + { + "Name": "ZMMO", + "Type": "Runtime", + "LoadingPhase": "Default" + } + ], + "Plugins": [ + { + "Name": "ModelingToolsEditorMode", + "Enabled": true + }, + { + "Name": "StateTree", + "Enabled": true + }, + { + "Name": "GameplayStateTree", + "Enabled": true + }, + { + "Name": "VisualStudioTools", + "Enabled": true, + "SupportedTargetPlatforms": [ + "Win64" + ] + }, + { + "Name": "ZeusNetwork", + "Enabled": true + }, + { + "Name": "ZeusMapTools", + "Enabled": true, + "TargetAllowList": [ + "Editor" + ] + } + ], + "TargetPlatforms": [], + "AdditionalRootDirectories": [], + "AdditionalPluginDirectories": [ + "../../Server/Plugins/Unreal" + ], + "EpicSampleNameHash": "" +} \ No newline at end of file diff --git a/shadertoolsconfig.json b/shadertoolsconfig.json new file mode 100644 index 0000000..9e8ecb4 --- /dev/null +++ b/shadertoolsconfig.json @@ -0,0 +1,8 @@ +{ + "hlsl.preprocessorDefinitions": { + }, + " hlsl.additionalIncludeDirectories": [ + ], + "hlsl.virtualDirectoryMappings": { + } +}