diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/Claw/Claw_Combo_120F_M.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/Claw/Claw_Combo_120F_M.uasset new file mode 100644 index 00000000..922f1504 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/Claw/Claw_Combo_120F_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/DualWield_Harvesting_Combo_M.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/DualWield_Harvesting_Combo_M.uasset new file mode 100644 index 00000000..321cc486 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/DualWield_Harvesting_Combo_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/Fists/Fists_Combo_120F_M.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/Fists/Fists_Combo_120F_M.uasset new file mode 100644 index 00000000..687c895d Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/DualWield/Fists/Fists_Combo_120F_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/Galileo_Ferry/Galileo_Ferry_Harvesting_Combo_Montage.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/Galileo_Ferry/Galileo_Ferry_Harvesting_Combo_Montage.uasset new file mode 100644 index 00000000..959a33a4 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/Galileo_Ferry/Galileo_Ferry_Harvesting_Combo_Montage.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/BR_sword/BRsword_Combo_60F_M.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/BR_sword/BRsword_Combo_60F_M.uasset new file mode 100644 index 00000000..3274b6ef Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/BR_sword/BRsword_Combo_60F_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/CAS/CAS_Pickaxe_Harvesting_Combo_CMM_M.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/CAS/CAS_Pickaxe_Harvesting_Combo_CMM_M.uasset new file mode 100644 index 00000000..f101b037 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/CAS/CAS_Pickaxe_Harvesting_Combo_CMM_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/Ethereal/Ethereal_Pickaxe_Harvesting_Combo_CMF_M.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/Ethereal/Ethereal_Pickaxe_Harvesting_Combo_CMF_M.uasset new file mode 100644 index 00000000..7106e772 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/Ethereal/Ethereal_Pickaxe_Harvesting_Combo_CMF_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/sythe/Sythe_Pickaxe_Harvesting_Combo_CMM_M.uasset b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/sythe/Sythe_Pickaxe_Harvesting_Combo_CMM_M.uasset new file mode 100644 index 00000000..0d9d6098 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Combat/Melee/OneHanded/sythe/Sythe_Pickaxe_Harvesting_Combo_CMM_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/AdditiveTestAnimBP.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/AdditiveTestAnimBP.uasset new file mode 100644 index 00000000..121ef6e9 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/AdditiveTestAnimBP.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/EmoteMusic3P_MyEffort.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/EmoteMusic3P_MyEffort.uasset new file mode 100644 index 00000000..faa21a9e Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/EmoteMusic3P_MyEffort.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/EmoteMusic_MyEffort.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/EmoteMusic_MyEffort.uasset new file mode 100644 index 00000000..7b405ef9 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/EmoteMusic_MyEffort.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/Emote_MyEffort.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/Emote_MyEffort.uasset new file mode 100644 index 00000000..702cf75c Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Assets/Emote_MyEffort.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMF.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMF.uasset new file mode 100644 index 00000000..efc96e44 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMF.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMF_M.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMF_M.uasset new file mode 100644 index 00000000..ce4ec086 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMF_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMM.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMM.uasset new file mode 100644 index 00000000..592c7a8d Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMM.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMM_M.uasset b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMM_M.uasset new file mode 100644 index 00000000..cf564a23 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Emotes/MyEffort/Emote_MyEffort_CMM_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/2hands/FrontEnd_PickAxe_Idle_M.uasset b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/2hands/FrontEnd_PickAxe_Idle_M.uasset new file mode 100644 index 00000000..fe8abc49 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/2hands/FrontEnd_PickAxe_Idle_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/2hands/FrontEnd_PickAxe_Swing_M.uasset b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/2hands/FrontEnd_PickAxe_Swing_M.uasset new file mode 100644 index 00000000..d3bfb5e6 Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/2hands/FrontEnd_PickAxe_Swing_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/Dual/FrontEnd_DualWield_Idle_M.uasset b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/Dual/FrontEnd_DualWield_Idle_M.uasset new file mode 100644 index 00000000..770e0eaa Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/Dual/FrontEnd_DualWield_Idle_M.uasset differ diff --git a/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/Dual/FrontEnd_DualWield_Swing_M.uasset b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/Dual/FrontEnd_DualWield_Swing_M.uasset new file mode 100644 index 00000000..4bf19c1d Binary files /dev/null and b/Content/Animation/Game/MainPlayer/Montages/FrontendPickAxe/Dual/FrontEnd_DualWield_Swing_M.uasset differ diff --git a/Content/Athena/Cosmetics/Contrails/SkydivePreview_mix_F.uasset b/Content/Athena/Cosmetics/Contrails/SkydivePreview_mix_F.uasset new file mode 100644 index 00000000..09552279 Binary files /dev/null and b/Content/Athena/Cosmetics/Contrails/SkydivePreview_mix_F.uasset differ diff --git a/Content/Athena/Cosmetics/Contrails/SkydivePreview_mix_M.uasset b/Content/Athena/Cosmetics/Contrails/SkydivePreview_mix_M.uasset new file mode 100644 index 00000000..0ea66a65 Binary files /dev/null and b/Content/Athena/Cosmetics/Contrails/SkydivePreview_mix_M.uasset differ diff --git a/Content/Athena/HUD/Transparent1x1.uasset b/Content/Athena/HUD/Transparent1x1.uasset new file mode 100644 index 00000000..bd952f52 Binary files /dev/null and b/Content/Athena/HUD/Transparent1x1.uasset differ diff --git a/Content/Athena/Heroes/Hero_RoseDust.uasset b/Content/Athena/Heroes/Hero_RoseDust.uasset new file mode 100644 index 00000000..01036b07 Binary files /dev/null and b/Content/Athena/Heroes/Hero_RoseDust.uasset differ diff --git a/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_HenchmanBadShorts.uasset b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_HenchmanBadShorts.uasset new file mode 100644 index 00000000..f300488a Binary files /dev/null and b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_HenchmanBadShorts.uasset differ diff --git a/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_HenchmanGoodShorts.uasset b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_HenchmanGoodShorts.uasset new file mode 100644 index 00000000..b7e27c2c Binary files /dev/null and b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_HenchmanGoodShorts.uasset differ diff --git a/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_MarauderGrunt.uasset b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_MarauderGrunt.uasset new file mode 100644 index 00000000..5319c70e Binary files /dev/null and b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_MarauderGrunt.uasset differ diff --git a/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_RebirthSoldier.uasset b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_RebirthSoldier.uasset new file mode 100644 index 00000000..e23137e9 Binary files /dev/null and b/Content/Athena/Heroes/Meshes/Bodies/CP_Athena_Body_M_RebirthSoldier.uasset differ diff --git a/Content/Athena/Heroes/Meshes/Bodies/CP_Body_Commando_F_RebirthDefaultA.uasset b/Content/Athena/Heroes/Meshes/Bodies/CP_Body_Commando_F_RebirthDefaultA.uasset new file mode 100644 index 00000000..28bbbbc0 Binary files /dev/null and b/Content/Athena/Heroes/Meshes/Bodies/CP_Body_Commando_F_RebirthDefaultA.uasset differ diff --git a/Content/Athena/Heroes/Specializations/HS_RoseDust.uasset b/Content/Athena/Heroes/Specializations/HS_RoseDust.uasset new file mode 100644 index 00000000..55ef2d3c Binary files /dev/null and b/Content/Athena/Heroes/Specializations/HS_RoseDust.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_003_RedKnight.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_003_RedKnight.uasset new file mode 100644 index 00000000..5179d588 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_003_RedKnight.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_004_BlackKnight.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_004_BlackKnight.uasset new file mode 100644 index 00000000..a6153623 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_004_BlackKnight.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_031_Dinosaur.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_031_Dinosaur.uasset new file mode 100644 index 00000000..1a0b7aa4 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_031_Dinosaur.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_043_Pizza.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_043_Pizza.uasset new file mode 100644 index 00000000..d2e82d36 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_043_Pizza.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_051_Merman.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_051_Merman.uasset new file mode 100644 index 00000000..09b1d0ba Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_051_Merman.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_053_JailbirdMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_053_JailbirdMale.uasset new file mode 100644 index 00000000..0ec6e079 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_053_JailbirdMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_055_PSBurnout.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_055_PSBurnout.uasset new file mode 100644 index 00000000..a651977f Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_055_PSBurnout.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_057_Visitor.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_057_Visitor.uasset new file mode 100644 index 00000000..10526269 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_057_Visitor.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_058_DarkEagle.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_058_DarkEagle.uasset new file mode 100644 index 00000000..ceb49a75 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_058_DarkEagle.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_065_CarbideBlack.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_065_CarbideBlack.uasset new file mode 100644 index 00000000..d80d02b7 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_065_CarbideBlack.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_076_Shark.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_076_Shark.uasset new file mode 100644 index 00000000..466ac2fa Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_076_Shark.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_080_StreetRacerCobraMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_080_StreetRacerCobraMale.uasset new file mode 100644 index 00000000..42e27bd6 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_080_StreetRacerCobraMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_081_ScubaMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_081_ScubaMale.uasset new file mode 100644 index 00000000..580d1208 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_081_ScubaMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_082_ScubaFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_082_ScubaFemale.uasset new file mode 100644 index 00000000..3627a06d Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_082_ScubaFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_083_LifeguardMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_083_LifeguardMale.uasset new file mode 100644 index 00000000..0be88203 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_083_LifeguardMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_087_ExerciseMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_087_ExerciseMale.uasset new file mode 100644 index 00000000..ed74a0ee Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_087_ExerciseMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_089_StreetRacerWhiteFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_089_StreetRacerWhiteFemale.uasset new file mode 100644 index 00000000..f408af7c Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_089_StreetRacerWhiteFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_090_StreetRacerWhiteMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_090_StreetRacerWhiteMale.uasset new file mode 100644 index 00000000..65d60eb0 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_090_StreetRacerWhiteMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_093_HippieMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_093_HippieMale.uasset new file mode 100644 index 00000000..1ef19c81 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_093_HippieMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_094_HippieFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_094_HippieFemale.uasset new file mode 100644 index 00000000..ac86992a Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_094_HippieFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_095_RavenQuillFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_095_RavenQuillFemale.uasset new file mode 100644 index 00000000..12fe008a Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_095_RavenQuillFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_107_GarageBandFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_107_GarageBandFemale.uasset new file mode 100644 index 00000000..a1cde7cb Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_107_GarageBandFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_119_VampireFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_119_VampireFemale.uasset new file mode 100644 index 00000000..0bbf4525 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_119_VampireFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_123_FortniteDJ.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_123_FortniteDJ.uasset new file mode 100644 index 00000000..292539bf Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_123_FortniteDJ.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_124_ScarecrowMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_124_ScarecrowMale.uasset new file mode 100644 index 00000000..b3fd37e2 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_124_ScarecrowMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_125_ScarecrowFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_125_ScarecrowFemale.uasset new file mode 100644 index 00000000..9117d499 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_125_ScarecrowFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_146_AnimalJacketsFemale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_146_AnimalJacketsFemale.uasset new file mode 100644 index 00000000..a9dcb4a3 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_146_AnimalJacketsFemale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_147_LilKev.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_147_LilKev.uasset new file mode 100644 index 00000000..618b144b Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_147_LilKev.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_163_IceKing.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_163_IceKing.uasset new file mode 100644 index 00000000..ea87cb68 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_163_IceKing.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_186_GingerbreadMale.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_186_GingerbreadMale.uasset new file mode 100644 index 00000000..745877ef Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_186_GingerbreadMale.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Backpacks/BID_Random.uasset b/Content/Athena/Items/Cosmetics/Backpacks/BID_Random.uasset new file mode 100644 index 00000000..01f8ba76 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Backpacks/BID_Random.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_009_Athena_Commando_M.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_009_Athena_Commando_M.uasset new file mode 100644 index 00000000..e9a8f283 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_009_Athena_Commando_M.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_010_Athena_Commando_M.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_010_Athena_Commando_M.uasset new file mode 100644 index 00000000..b11440bc Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_010_Athena_Commando_M.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_031_Athena_Commando_M_Retro.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_031_Athena_Commando_M_Retro.uasset new file mode 100644 index 00000000..49bce470 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_031_Athena_Commando_M_Retro.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_035_Athena_Commando_M_Medieval.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_035_Athena_Commando_M_Medieval.uasset new file mode 100644 index 00000000..a08f5086 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_035_Athena_Commando_M_Medieval.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_039_Athena_Commando_F_Disco.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_039_Athena_Commando_F_Disco.uasset new file mode 100644 index 00000000..84677993 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_039_Athena_Commando_F_Disco.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_043_Athena_Commando_F_Stealth.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_043_Athena_Commando_F_Stealth.uasset new file mode 100644 index 00000000..4fecb32b Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_043_Athena_Commando_F_Stealth.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_044_Athena_Commando_F_SciPop.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_044_Athena_Commando_F_SciPop.uasset new file mode 100644 index 00000000..76c74ae9 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_044_Athena_Commando_F_SciPop.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_046_Athena_Commando_F_HolidaySweater.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_046_Athena_Commando_F_HolidaySweater.uasset new file mode 100644 index 00000000..42fbf47d Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_046_Athena_Commando_F_HolidaySweater.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_048_Athena_Commando_F_HolidayGingerbread.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_048_Athena_Commando_F_HolidayGingerbread.uasset new file mode 100644 index 00000000..cc99d66c Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_048_Athena_Commando_F_HolidayGingerbread.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_051_Athena_Commando_M_HolidayElf.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_051_Athena_Commando_M_HolidayElf.uasset new file mode 100644 index 00000000..b77873f3 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_051_Athena_Commando_M_HolidayElf.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_061_Athena_Commando_F_SkiGirl.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_061_Athena_Commando_F_SkiGirl.uasset new file mode 100644 index 00000000..9a020afa Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_061_Athena_Commando_F_SkiGirl.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_072_Athena_Commando_M_Scout.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_072_Athena_Commando_M_Scout.uasset new file mode 100644 index 00000000..77e30814 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_072_Athena_Commando_M_Scout.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_073_Athena_Commando_F_Scuba.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_073_Athena_Commando_F_Scuba.uasset new file mode 100644 index 00000000..7103662f Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_073_Athena_Commando_F_Scuba.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_082_Athena_Commando_M_Scavenger.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_082_Athena_Commando_M_Scavenger.uasset new file mode 100644 index 00000000..0e4d29db Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_082_Athena_Commando_M_Scavenger.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_084_Athena_Commando_M_Assassin.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_084_Athena_Commando_M_Assassin.uasset new file mode 100644 index 00000000..37964122 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_084_Athena_Commando_M_Assassin.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_094_Athena_Commando_M_Rider.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_094_Athena_Commando_M_Rider.uasset new file mode 100644 index 00000000..98a1d34a Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_094_Athena_Commando_M_Rider.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_095_Athena_Commando_M_Founder.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_095_Athena_Commando_M_Founder.uasset new file mode 100644 index 00000000..c7ce7b34 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_095_Athena_Commando_M_Founder.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_104_Athena_Commando_F_Bunny.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_104_Athena_Commando_F_Bunny.uasset new file mode 100644 index 00000000..de7447e1 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_104_Athena_Commando_F_Bunny.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_107_Athena_Commando_F_PajamaParty.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_107_Athena_Commando_F_PajamaParty.uasset new file mode 100644 index 00000000..b15298ec Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_107_Athena_Commando_F_PajamaParty.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_115_Athena_Commando_M_CarbideBlue.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_115_Athena_Commando_M_CarbideBlue.uasset new file mode 100644 index 00000000..817e0271 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_115_Athena_Commando_M_CarbideBlue.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_116_Athena_Commando_M_CarbideBlack.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_116_Athena_Commando_M_CarbideBlack.uasset new file mode 100644 index 00000000..cb31d683 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_116_Athena_Commando_M_CarbideBlack.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_119_Athena_Commando_F_Candy.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_119_Athena_Commando_F_Candy.uasset new file mode 100644 index 00000000..7ad4dcaa Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_119_Athena_Commando_F_Candy.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_122_Athena_Commando_M_Metal.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_122_Athena_Commando_M_Metal.uasset new file mode 100644 index 00000000..28ab7fcb Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_122_Athena_Commando_M_Metal.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_123_Athena_Commando_F_Metal.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_123_Athena_Commando_F_Metal.uasset new file mode 100644 index 00000000..434ba366 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_123_Athena_Commando_F_Metal.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_125_Athena_Commando_M_TacticalWoodland.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_125_Athena_Commando_M_TacticalWoodland.uasset new file mode 100644 index 00000000..03ff4177 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_125_Athena_Commando_M_TacticalWoodland.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_129_Athena_Commando_M_Deco.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_129_Athena_Commando_M_Deco.uasset new file mode 100644 index 00000000..e282113c Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_129_Athena_Commando_M_Deco.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_131_Athena_Commando_M_Warpaint.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_131_Athena_Commando_M_Warpaint.uasset new file mode 100644 index 00000000..d62d8c93 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_131_Athena_Commando_M_Warpaint.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_134_Athena_Commando_M_Jailbird.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_134_Athena_Commando_M_Jailbird.uasset new file mode 100644 index 00000000..23209698 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_134_Athena_Commando_M_Jailbird.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_135_Athena_Commando_F_Jailbird.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_135_Athena_Commando_F_Jailbird.uasset new file mode 100644 index 00000000..c6c4bf5d Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_135_Athena_Commando_F_Jailbird.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_136_Athena_Commando_M_StreetBasketball.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_136_Athena_Commando_M_StreetBasketball.uasset new file mode 100644 index 00000000..2c632673 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_136_Athena_Commando_M_StreetBasketball.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_137_Athena_Commando_F_StreetBasketball.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_137_Athena_Commando_F_StreetBasketball.uasset new file mode 100644 index 00000000..ff907e97 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_137_Athena_Commando_F_StreetBasketball.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_150_Athena_Commando_F_SoccerGirlC.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_150_Athena_Commando_F_SoccerGirlC.uasset new file mode 100644 index 00000000..723d38ed Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_150_Athena_Commando_F_SoccerGirlC.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_154_Athena_Commando_M_Gumshoe.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_154_Athena_Commando_M_Gumshoe.uasset new file mode 100644 index 00000000..7d1ce2b9 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_154_Athena_Commando_M_Gumshoe.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_159_Athena_Commando_M_GumshoeDark.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_159_Athena_Commando_M_GumshoeDark.uasset new file mode 100644 index 00000000..3bb33fac Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_159_Athena_Commando_M_GumshoeDark.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_165_Athena_Commando_M_DarkViking.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_165_Athena_Commando_M_DarkViking.uasset new file mode 100644 index 00000000..ed3bdec9 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_165_Athena_Commando_M_DarkViking.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_166_Athena_Commando_F_Lifeguard.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_166_Athena_Commando_F_Lifeguard.uasset new file mode 100644 index 00000000..f9a076e8 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_166_Athena_Commando_F_Lifeguard.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_176_Athena_Commando_M_Lifeguard.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_176_Athena_Commando_M_Lifeguard.uasset new file mode 100644 index 00000000..456bd835 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_176_Athena_Commando_M_Lifeguard.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_179_Athena_Commando_F_Scuba.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_179_Athena_Commando_F_Scuba.uasset new file mode 100644 index 00000000..51121add Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_179_Athena_Commando_F_Scuba.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_188_Athena_Commando_F_StreetRacerWhite.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_188_Athena_Commando_F_StreetRacerWhite.uasset new file mode 100644 index 00000000..7a30ec7c Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_188_Athena_Commando_F_StreetRacerWhite.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_199_Athena_Commando_F_BlueSamurai.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_199_Athena_Commando_F_BlueSamurai.uasset new file mode 100644 index 00000000..390f72b7 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_199_Athena_Commando_F_BlueSamurai.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_206_Athena_Commando_M_Bling.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_206_Athena_Commando_M_Bling.uasset new file mode 100644 index 00000000..8f2ab18a Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_206_Athena_Commando_M_Bling.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_229_Athena_Commando_F_DarkBomber.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_229_Athena_Commando_F_DarkBomber.uasset new file mode 100644 index 00000000..c7dcde05 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_229_Athena_Commando_F_DarkBomber.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_245_Athena_Commando_F_DurrburgerPjs.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_245_Athena_Commando_F_DurrburgerPjs.uasset new file mode 100644 index 00000000..f6ae7045 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_245_Athena_Commando_F_DurrburgerPjs.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_255_Athena_Commando_F_HalloweenBunny.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_255_Athena_Commando_F_HalloweenBunny.uasset new file mode 100644 index 00000000..4fa01e8f Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_255_Athena_Commando_F_HalloweenBunny.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_271_Athena_Commando_F_SushiChef.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_271_Athena_Commando_F_SushiChef.uasset new file mode 100644 index 00000000..5ce15fab Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_271_Athena_Commando_F_SushiChef.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_278_Athena_Commando_M_Yeti.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_278_Athena_Commando_M_Yeti.uasset new file mode 100644 index 00000000..3aeab27e Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_278_Athena_Commando_M_Yeti.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_286_Athena_Commando_F_NeonCat.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_286_Athena_Commando_F_NeonCat.uasset new file mode 100644 index 00000000..94b5ec08 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_286_Athena_Commando_F_NeonCat.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_288_Athena_Commando_M_IceKing.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_288_Athena_Commando_M_IceKing.uasset new file mode 100644 index 00000000..90deeae5 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_288_Athena_Commando_M_IceKing.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_297_Athena_Commando_F_Math.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_297_Athena_Commando_F_Math.uasset new file mode 100644 index 00000000..8e853da4 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_297_Athena_Commando_F_Math.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_315_Athena_Commando_M_TeriyakiFish.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_315_Athena_Commando_M_TeriyakiFish.uasset new file mode 100644 index 00000000..64932d4e Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_315_Athena_Commando_M_TeriyakiFish.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_328_Athena_Commando_F_Tennis.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_328_Athena_Commando_F_Tennis.uasset new file mode 100644 index 00000000..38f319ec Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_328_Athena_Commando_F_Tennis.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_352_Athena_Commando_F_Shiny.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_352_Athena_Commando_F_Shiny.uasset new file mode 100644 index 00000000..38aa4ea5 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_352_Athena_Commando_F_Shiny.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_557_Athena_Commando_F_RebirthDefaultB.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_557_Athena_Commando_F_RebirthDefaultB.uasset new file mode 100644 index 00000000..28ffb5e0 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_557_Athena_Commando_F_RebirthDefaultB.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_558_Athena_Commando_F_RebirthDefaultC.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_558_Athena_Commando_F_RebirthDefaultC.uasset new file mode 100644 index 00000000..4bc64e35 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_558_Athena_Commando_F_RebirthDefaultC.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_559_Athena_Commando_F_RebirthDefaultDCID_559_Athena_Commando_F_RebirthDefaultD.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_559_Athena_Commando_F_RebirthDefaultDCID_559_Athena_Commando_F_RebirthDefaultD.uasset new file mode 100644 index 00000000..ec9763d8 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_559_Athena_Commando_F_RebirthDefaultDCID_559_Athena_Commando_F_RebirthDefaultD.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_560_Athena_Commando_M_RebirthDefaultA.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_560_Athena_Commando_M_RebirthDefaultA.uasset new file mode 100644 index 00000000..959a4ece Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_560_Athena_Commando_M_RebirthDefaultA.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_561_Athena_Commando_M_RebirthDefaultB.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_561_Athena_Commando_M_RebirthDefaultB.uasset new file mode 100644 index 00000000..6f64b471 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_561_Athena_Commando_M_RebirthDefaultB.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_562_Athena_Commando_M_RebirthDefaultC.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_562_Athena_Commando_M_RebirthDefaultC.uasset new file mode 100644 index 00000000..fdbcc889 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_562_Athena_Commando_M_RebirthDefaultC.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_563_Athena_Commando_M_RebirthDefaultD.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_563_Athena_Commando_M_RebirthDefaultD.uasset new file mode 100644 index 00000000..23ccf29c Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_563_Athena_Commando_M_RebirthDefaultD.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/CID_Random.uasset b/Content/Athena/Items/Cosmetics/Characters/CID_Random.uasset new file mode 100644 index 00000000..8a355f8e Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/CID_Random.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Characters/Character_RoseDust.uasset b/Content/Athena/Items/Cosmetics/Characters/Character_RoseDust.uasset new file mode 100644 index 00000000..d2614ddb Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Characters/Character_RoseDust.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Contrails/Trails_Random.uasset b/Content/Athena/Items/Cosmetics/Contrails/Trails_Random.uasset new file mode 100644 index 00000000..502e8d0e Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Contrails/Trails_Random.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Dances/EID_MyEffort.uasset b/Content/Athena/Items/Cosmetics/Dances/EID_MyEffort.uasset new file mode 100644 index 00000000..68947d27 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Dances/EID_MyEffort.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Gliders/Glider_Random.uasset b/Content/Athena/Items/Cosmetics/Gliders/Glider_Random.uasset new file mode 100644 index 00000000..8a946872 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Gliders/Glider_Random.uasset differ diff --git a/Content/Athena/Items/Cosmetics/ItemWraps/Wrap_Random.uasset b/Content/Athena/Items/Cosmetics/ItemWraps/Wrap_Random.uasset new file mode 100644 index 00000000..0213a007 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/ItemWraps/Wrap_Random.uasset differ diff --git a/Content/Athena/Items/Cosmetics/LoadingScreens/LSID_Random.uasset b/Content/Athena/Items/Cosmetics/LoadingScreens/LSID_Random.uasset new file mode 100644 index 00000000..17a05d29 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/LoadingScreens/LSID_Random.uasset differ diff --git a/Content/Athena/Items/Cosmetics/MusicPacks/MusicPack_Random.uasset b/Content/Athena/Items/Cosmetics/MusicPacks/MusicPack_Random.uasset new file mode 100644 index 00000000..85da7612 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/MusicPacks/MusicPack_Random.uasset differ diff --git a/Content/Athena/Items/Cosmetics/Pickaxes/Pickaxe_Random.uasset b/Content/Athena/Items/Cosmetics/Pickaxes/Pickaxe_Random.uasset new file mode 100644 index 00000000..cce78c71 Binary files /dev/null and b/Content/Athena/Items/Cosmetics/Pickaxes/Pickaxe_Random.uasset differ diff --git a/Content/Balance/DefaultGameDataCosmetics.uasset b/Content/Balance/DefaultGameDataCosmetics.uasset new file mode 100644 index 00000000..a5c0112d Binary files /dev/null and b/Content/Balance/DefaultGameDataCosmetics.uasset differ diff --git a/Content/Banners/BannerColorCategories.uasset b/Content/Banners/BannerColorCategories.uasset new file mode 100644 index 00000000..af0a0ccc Binary files /dev/null and b/Content/Banners/BannerColorCategories.uasset differ diff --git a/Content/Banners/BannerColorMap.uasset b/Content/Banners/BannerColorMap.uasset new file mode 100644 index 00000000..1e9b51ca Binary files /dev/null and b/Content/Banners/BannerColorMap.uasset differ diff --git a/Content/Banners/BannerColors.uasset b/Content/Banners/BannerColors.uasset new file mode 100644 index 00000000..28476a64 Binary files /dev/null and b/Content/Banners/BannerColors.uasset differ diff --git a/Content/Banners/BannerIconCategories.uasset b/Content/Banners/BannerIconCategories.uasset new file mode 100644 index 00000000..99c1a5ef Binary files /dev/null and b/Content/Banners/BannerIconCategories.uasset differ diff --git a/Content/Characters/CharacterParts/Backpacks/NoBackpack.uasset b/Content/Characters/CharacterParts/Backpacks/NoBackpack.uasset new file mode 100644 index 00000000..f96c73f3 Binary files /dev/null and b/Content/Characters/CharacterParts/Backpacks/NoBackpack.uasset differ diff --git a/Content/Characters/CharacterParts/FaceAccessories/CP_M_MED_Henchman_Bad_FaceAcc.uasset b/Content/Characters/CharacterParts/FaceAccessories/CP_M_MED_Henchman_Bad_FaceAcc.uasset new file mode 100644 index 00000000..a09ad92a Binary files /dev/null and b/Content/Characters/CharacterParts/FaceAccessories/CP_M_MED_Henchman_Bad_FaceAcc.uasset differ diff --git a/Content/Characters/CharacterParts/Female/Medium/Heads/CP_Head_F_RebirthDefaultA.uasset b/Content/Characters/CharacterParts/Female/Medium/Heads/CP_Head_F_RebirthDefaultA.uasset new file mode 100644 index 00000000..81510407 Binary files /dev/null and b/Content/Characters/CharacterParts/Female/Medium/Heads/CP_Head_F_RebirthDefaultA.uasset differ diff --git a/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_HenchmanBadShorts.uasset b/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_HenchmanBadShorts.uasset new file mode 100644 index 00000000..7c990415 Binary files /dev/null and b/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_HenchmanBadShorts.uasset differ diff --git a/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_HenchmandGoodShorts.uasset b/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_HenchmandGoodShorts.uasset new file mode 100644 index 00000000..c1d29786 Binary files /dev/null and b/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_HenchmandGoodShorts.uasset differ diff --git a/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_MarauderGrunt.uasset b/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_MarauderGrunt.uasset new file mode 100644 index 00000000..502c3ccb Binary files /dev/null and b/Content/Characters/CharacterParts/Male/Medium/Heads/CP_Athena_Head_M_MarauderGrunt.uasset differ diff --git a/Content/Characters/Player/Common/LODSettings/Medium_Player_LODSettings.uasset b/Content/Characters/Player/Common/LODSettings/Medium_Player_LODSettings.uasset new file mode 100644 index 00000000..6fe76e4c Binary files /dev/null and b/Content/Characters/Player/Common/LODSettings/Medium_Player_LODSettings.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/F_MED_RoseDust.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/F_MED_RoseDust.uasset new file mode 100644 index 00000000..58e99d43 Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/F_MED_RoseDust.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc.uasset new file mode 100644 index 00000000..08d2c9a0 Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_AnimBP.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_AnimBP.uasset new file mode 100644 index 00000000..ca6e350d Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_AnimBP.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_PhysicsAsset.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_PhysicsAsset.uasset new file mode 100644 index 00000000..1b82f5d9 Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_PhysicsAsset.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_Skeleton.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_Skeleton.uasset new file mode 100644 index 00000000..6db8ca1d Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_FaceAcc_Skeleton.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_Mask_FaceAcc.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_Mask_FaceAcc.uasset new file mode 100644 index 00000000..5ee324d8 Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_Mask_FaceAcc.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_Mask_FaceAcc_PhysicsAsset.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_Mask_FaceAcc_PhysicsAsset.uasset new file mode 100644 index 00000000..d009fe5a Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_MED_RoseDust/Meshes/Parts/F_MED_RoseDust_Mask_FaceAcc_PhysicsAsset.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Bodies/F_Med_Soldier_01/Meshes/F_Med_Soldier_01_ShadowVolumes.uasset b/Content/Characters/Player/Female/Medium/Bodies/F_Med_Soldier_01/Meshes/F_Med_Soldier_01_ShadowVolumes.uasset new file mode 100644 index 00000000..8148f72f Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Bodies/F_Med_Soldier_01/Meshes/F_Med_Soldier_01_ShadowVolumes.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Heads/F_MED_RoseDust_Head/F_MED_RoseDust_Head.uasset b/Content/Characters/Player/Female/Medium/Heads/F_MED_RoseDust_Head/F_MED_RoseDust_Head.uasset new file mode 100644 index 00000000..663900f7 Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Heads/F_MED_RoseDust_Head/F_MED_RoseDust_Head.uasset differ diff --git a/Content/Characters/Player/Female/Medium/Heads/F_Med_Empty_Head_01/Meshes/F_Med_Empty_Head_01.uasset b/Content/Characters/Player/Female/Medium/Heads/F_Med_Empty_Head_01/Meshes/F_Med_Empty_Head_01.uasset new file mode 100644 index 00000000..99c847a8 Binary files /dev/null and b/Content/Characters/Player/Female/Medium/Heads/F_Med_Empty_Head_01/Meshes/F_Med_Empty_Head_01.uasset differ diff --git a/Content/Male.uasset b/Content/Male.uasset new file mode 100644 index 00000000..364ba818 Binary files /dev/null and b/Content/Male.uasset differ diff --git a/Content/Packages/Fortress_SharedMaterials/Base_Material_Functions/HitEffectBounceAnimation.uasset b/Content/Packages/Fortress_SharedMaterials/Base_Material_Functions/HitEffectBounceAnimation.uasset new file mode 100644 index 00000000..88c8d0ac Binary files /dev/null and b/Content/Packages/Fortress_SharedMaterials/Base_Material_Functions/HitEffectBounceAnimation.uasset differ diff --git a/Content/UI/Foundation/Input/CosmeticPreviewActionDataTable.uasset b/Content/UI/Foundation/Input/CosmeticPreviewActionDataTable.uasset new file mode 100644 index 00000000..239267bd Binary files /dev/null and b/Content/UI/Foundation/Input/CosmeticPreviewActionDataTable.uasset differ diff --git a/Content/Zylox/Animations/Idle/RoseDust/RoseDust_Female_Idle.uasset b/Content/Zylox/Animations/Idle/RoseDust/RoseDust_Female_Idle.uasset new file mode 100644 index 00000000..d55b52c1 Binary files /dev/null and b/Content/Zylox/Animations/Idle/RoseDust/RoseDust_Female_Idle.uasset differ diff --git a/Content/Zylox/Animations/Idle/RoseDust/RoseDust_Female_Idle_Montage.uasset b/Content/Zylox/Animations/Idle/RoseDust/RoseDust_Female_Idle_Montage.uasset new file mode 100644 index 00000000..2f1ac7eb Binary files /dev/null and b/Content/Zylox/Animations/Idle/RoseDust/RoseDust_Female_Idle_Montage.uasset differ diff --git a/Content/Zylox/CharacterParts/RoseDust/CP_FaceAcc_RoseDust.uasset b/Content/Zylox/CharacterParts/RoseDust/CP_FaceAcc_RoseDust.uasset new file mode 100644 index 00000000..e2927bac Binary files /dev/null and b/Content/Zylox/CharacterParts/RoseDust/CP_FaceAcc_RoseDust.uasset differ diff --git a/Content/Zylox/CharacterParts/RoseDust/CP_Head_Empty_RoseDust.uasset b/Content/Zylox/CharacterParts/RoseDust/CP_Head_Empty_RoseDust.uasset new file mode 100644 index 00000000..59722fb0 Binary files /dev/null and b/Content/Zylox/CharacterParts/RoseDust/CP_Head_Empty_RoseDust.uasset differ diff --git a/Content/Zylox/UI/Icons/RoseDust/T-Soldier-Hero-RoseDust-L.uasset b/Content/Zylox/UI/Icons/RoseDust/T-Soldier-Hero-RoseDust-L.uasset new file mode 100644 index 00000000..599adfd3 Binary files /dev/null and b/Content/Zylox/UI/Icons/RoseDust/T-Soldier-Hero-RoseDust-L.uasset differ diff --git a/Content/Zylox/UI/Icons/RoseDust/T-Soldier-Hero-RoseDust.uasset b/Content/Zylox/UI/Icons/RoseDust/T-Soldier-Hero-RoseDust.uasset new file mode 100644 index 00000000..22555d4c Binary files /dev/null and b/Content/Zylox/UI/Icons/RoseDust/T-Soldier-Hero-RoseDust.uasset differ diff --git a/Content/Zylox/UI/Icons/RoseDust/T-Variant-RoseDust-MaskOFF.uasset b/Content/Zylox/UI/Icons/RoseDust/T-Variant-RoseDust-MaskOFF.uasset new file mode 100644 index 00000000..2d7ea0bb Binary files /dev/null and b/Content/Zylox/UI/Icons/RoseDust/T-Variant-RoseDust-MaskOFF.uasset differ diff --git a/Plugins/JsonAsAsset/JsonAsAsset.uplugin b/Plugins/JsonAsAsset/JsonAsAsset.uplugin new file mode 100644 index 00000000..69ae10c3 --- /dev/null +++ b/Plugins/JsonAsAsset/JsonAsAsset.uplugin @@ -0,0 +1,24 @@ +{ + "FileVersion": 3, + "Version": 1, + "VersionName": "1.1", + "FriendlyName": "JsonAsAsset", + "Description": "A editor plugin to allow JSON files from FModel to a asset in the Content Browser.", + "Category": "Other", + "CreatedBy": "Tector", + "CreatedByURL": "https://github.com/Tectors", + "DocsURL": "", + "MarketplaceURL": "", + "SupportURL": "https://github.com/Tectors", + "EngineVersion": "4.25.0", + "CanContainContent": false, + "IsBetaVersion": true, + "Installed": true, + "Modules": [ + { + "Name": "JsonAsAsset", + "Type": "Editor", + "LoadingPhase": "Default" + } + ] +} \ No newline at end of file diff --git a/Plugins/JsonAsAsset/Resources/ButtonIcon_40x.png b/Plugins/JsonAsAsset/Resources/ButtonIcon_40x.png new file mode 100644 index 00000000..0b9048fe Binary files /dev/null and b/Plugins/JsonAsAsset/Resources/ButtonIcon_40x.png differ diff --git a/Plugins/JsonAsAsset/Resources/Icon128.png b/Plugins/JsonAsAsset/Resources/Icon128.png new file mode 100644 index 00000000..1231d4aa Binary files /dev/null and b/Plugins/JsonAsAsset/Resources/Icon128.png differ diff --git a/Plugins/JsonAsAsset/Source/JsonAsAsset/JsonAsAsset.Build.cs b/Plugins/JsonAsAsset/Source/JsonAsAsset/JsonAsAsset.Build.cs new file mode 100644 index 00000000..ac9671be --- /dev/null +++ b/Plugins/JsonAsAsset/Source/JsonAsAsset/JsonAsAsset.Build.cs @@ -0,0 +1,58 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +using UnrealBuildTool; + +public class JsonAsAsset : ModuleRules +{ + public JsonAsAsset(ReadOnlyTargetRules Target) : base(Target) + { + PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs; + + PublicIncludePaths.AddRange( + new string[] { + // ... add public include paths required here ... + } + ); + + + PrivateIncludePaths.AddRange( + new string[] { + // ... add other private include paths required here ... + } + ); + + + PublicDependencyModuleNames.AddRange( + new string[] + { + "Core", + // ... add other public dependencies that you statically link with here ... + } + ); + + PublicDependencyModuleNames.AddRange(new string[] { "Json", "JsonUtilities" }); + + PrivateDependencyModuleNames.AddRange( + new string[] + { + "Projects", + "InputCore", + "UnrealEd", + "ToolMenus", + "CoreUObject", + "Engine", + "Slate", + "SlateCore", + // ... add private dependencies that you statically link with here ... + } + ); + + + DynamicallyLoadedModuleNames.AddRange( + new string[] + { + // ... add any modules that your module loads dynamically here ... + } + ); + } +} diff --git a/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAsset.cpp b/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAsset.cpp new file mode 100644 index 00000000..fe1fc85b --- /dev/null +++ b/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAsset.cpp @@ -0,0 +1,540 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "JsonAsAsset.h" +#include "JsonAsAssetStyle.h" +#include "JsonAsAssetCommands.h" +#include "Developer/DesktopPlatform/Public/IDesktopPlatform.h" +#include "Developer/DesktopPlatform/Public/DesktopPlatformModule.h" +#include "Editor/MainFrame/Public/Interfaces/IMainFrameModule.h" +#include "HAL/PlatformApplicationMisc.h" +#include "Misc/MessageDialog.h" +#include "Json.h" +#include "Animation/AnimSequence.h" +#include "Factories/CurveFactory.h" +#include "Factories/DataAssetFactory.h" +#include "Misc/FileHelper.h" +#include "Curves/CurveLinearColor.h" +#include "IAssetTools.h" +#include "Engine/SkeletalMeshLODSettings.h" +#include "AssetRegistryModule.h" +#include "AssetToolsModule.h" +#include "Animation/BlendSpaceBase.h" +#include "Factories/BlendSpaceFactoryNew.h" +#include "Animation/BlendSpace.h" +#include "Factories/PhysicsAssetFactory.h" +#include "Factories/PhysicalMaterialFactoryNew.h" +#include "ToolMenus.h" + +static const FName JsonAsAssetTabName("JsonAsAsset"); + +#define LOCTEXT_NAMESPACE "FJsonAsAssetModule" + +// --------------------------------------- +// --------------------------------------- +/*|| THIS ARE USED TO OVERRIDE PROTECTED VARIABLES ||*/ +/*|| AND ARE NEVER ACCESSED ||*/ + + +// We use this to set variables +// in the LOD asset +class LODAssetDerived : public USkeletalMeshLODSettings { + public: + void SetLODGroups(TArray LODGroupsInput) { + this->LODGroups = LODGroupsInput; + } + void AddLODGroup(FSkeletalMeshLODGroupSettings LODGroupInput) { + this->LODGroups.Add(LODGroupInput); + } + void EmptyLODGroups() { + this->LODGroups.Empty(); + } +}; + +// We use this to set variables +// in the blend space asset +class BlendSpaceDerived : public UBlendSpace { +public: + void SetAxisToScaleAnimationInput(EBlendSpaceAxis AxisToScaleAnimationInput) { + this->AxisToScaleAnimation = AxisToScaleAnimationInput; + } + void SetBlendParameterPrimary(FBlendParameter BlendParametersInput) { + this->BlendParameters[0] = BlendParametersInput; + } + void SetBlendParameterSecondary(FBlendParameter BlendParametersInput) { + this->BlendParameters[1] = BlendParametersInput; + } + void SetInterpolationParamPrimary(FInterpolationParameter InterpolationParamInput) { + this->InterpolationParam[0] = InterpolationParamInput; + } + void SetInterpolationParamSecondary(FInterpolationParameter InterpolationParamInput) { + this->InterpolationParam[1] = InterpolationParamInput; + } + void SetNotifyTriggerMode(ENotifyTriggerMode::Type NotifyTriggerModeInput) { + this->NotifyTriggerMode = NotifyTriggerModeInput; + } +}; + +// --------------------------------------- +// --------------------------------------- + +void FJsonAsAssetModule::StartupModule() +{ + // This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module + + FJsonAsAssetStyle::Initialize(); + FJsonAsAssetStyle::ReloadTextures(); + + FJsonAsAssetCommands::Register(); + + PluginCommands = MakeShareable(new FUICommandList); + + PluginCommands->MapAction( + FJsonAsAssetCommands::Get().PluginAction, + FExecuteAction::CreateRaw(this, &FJsonAsAssetModule::PluginButtonClicked), + FCanExecuteAction()); + + UToolMenus::RegisterStartupCallback(FSimpleMulticastDelegate::FDelegate::CreateRaw(this, &FJsonAsAssetModule::RegisterMenus)); +} + +void FJsonAsAssetModule::ShutdownModule() +{ + // This function may be called during shutdown to clean up your module. For modules that support dynamic reloading, + // we call this function before unloading the module. + + UToolMenus::UnRegisterStartupCallback(this); + + UToolMenus::UnregisterOwner(this); + + FJsonAsAssetStyle::Shutdown(); + + FJsonAsAssetCommands::Unregister(); +} + +void FJsonAsAssetModule::PluginButtonClicked() +{ + // Put your "OnButtonClicked" stuff here + /*FText DialogText = FText::Format( + LOCTEXT("PluginButtonDialogText", "Add code to {0} in {1} to override this button's actions"), + FText::FromString(TEXT("FJsonAsAssetModule::PluginButtonClicked()")), + FText::FromString(TEXT("JsonAsAsset.cpp")) + ); + FMessageDialog::Open(EAppMsgType::Ok, DialogText);*/ + + + TArray OutFileNames; + + void* ParentWindowHandle = nullptr; + + IMainFrameModule& MainFrameModule = IMainFrameModule::Get(); + TSharedPtr MainWindow = MainFrameModule.GetParentWindow(); + + if (MainWindow.IsValid() && MainWindow->GetNativeWindow().IsValid()) + { + ParentWindowHandle = MainWindow->GetNativeWindow()->GetOSWindowHandle(); + } + + IDesktopPlatform* DesktopPlatform = FDesktopPlatformModule::Get(); + if (DesktopPlatform) + { + uint32 SelectionFlag = 0; + DesktopPlatform->OpenFileDialog(ParentWindowHandle, TEXT("Open a JSON file"), TEXT(""), FString(""), TEXT("JSON Files|*.json"), SelectionFlag, OutFileNames); + } + + if (OutFileNames.Num() != 0 && OutFileNames[0] != "") { + FString ContentBefore; + FFileHelper::LoadFileToString(ContentBefore, *OutFileNames[0]); + + // For some reason a array + // without it being in a object. + FString Content = FString(TEXT("{\"data\": ")); + Content.Append(ContentBefore); + Content.Append(FString("}")); + + TSharedPtr JsonParsed; + TSharedRef> JsonReader = TJsonReaderFactory::Create(Content); + if (FJsonSerializer::Deserialize(JsonReader, JsonParsed)) + { + GLog->Log("JsonAsAsset: Deserialized file, reading the contents."); + + TArray> DataObjects = JsonParsed->GetArrayField("data"); + for (int32 index = 0; index < DataObjects.Num(); index++) + { + TSharedPtr DataObject = DataObjects[index]->AsObject(); + + FString Type = DataObject->GetStringField("Type"); + FString Name = DataObject->GetStringField("Name"); + + // If it's a curve float + // since those are supported + // at the moment. + if (Type == "CurveFloat") { + GLog->Log("JsonAsAsset: Found a curve by the name of " + Name + ", parsing.."); + + // Get the curves by the object + // tree. + TArray> Keys = DataObject->GetObjectField("Properties")->GetObjectField("FloatCurve")->GetArrayField("Keys"); + + // Let's create the curve now + // to add the keys. + + // The path that the file + // was imported from (RAW) + FString IMPath = OutFileNames[0]; + FString Path; + + IMPath.Split("FortniteGame/Content/", nullptr, &Path); + Path.Split("/", &Path, nullptr, ESearchCase::IgnoreCase, ESearchDir::FromEnd); + + FString PathWithGame = "/Game/" + Path + "/" + Name; + UPackage* Package = CreatePackage(NULL, *PathWithGame); + UPackage* OutermostPkg = Package->GetOutermost(); + + auto CurveFactory = NewObject(); + UCurveFloat* CurveAsset = Cast(CurveFactory->FactoryCreateNew(UCurveFloat::StaticClass(), OutermostPkg, *Name, RF_Standalone | RF_Public, NULL, GWarn)); + + FAssetRegistryModule::AssetCreated(CurveAsset); + CurveAsset->MarkPackageDirty(); + Package->SetDirtyFlag(true); + CurveAsset->PostEditChange(); + CurveAsset->AddToRoot(); + + for (int32 key_index = 0; key_index < Keys.Num(); key_index++) + { + // RCIM_Cubic + TSharedPtr Key = Keys[key_index]->AsObject(); + ERichCurveInterpMode InterpMode = + Key->GetStringField("InterpMode") == "RCIM_Linear" ? ERichCurveInterpMode::RCIM_Linear : // Linear + Key->GetStringField("InterpMode") == "RCIM_Cubic" ? ERichCurveInterpMode::RCIM_Cubic : // Cubic + Key->GetStringField("InterpMode") == "RCIM_Constant" ? ERichCurveInterpMode::RCIM_Constant : // Constant + ERichCurveInterpMode::RCIM_None; + + FRichCurveKey RichKey = FRichCurveKey(float(Key->GetNumberField("Time")), float(Key->GetNumberField("Value")), float(Key->GetNumberField("ArriveTangent")), float(Key->GetNumberField("LeaveTangent")), InterpMode); + + CurveAsset->FloatCurve.Keys.Add(RichKey); + } + } + else if (Type == "CurveLinearColor") { + GLog->Log("JsonAsAsset: Found a linear curve by the name of " + Name + ", parsing.."); + + FString ReConstructed = Content; + int FCIndex = Content.Find("FloatCurves"); + + // I spent hours of thinking + // the ways I could fix FModel's + // JSON data. + + // Basically FModel doesn't care if + // a property has the same name, it + // adds it anyways so there would be + // two properties with the same name. + // JSON Don't Work Like That! + + // So that's why we have these lines that + // split them into RGBA. + + ReConstructed.RemoveAt(FCIndex, 11); + ReConstructed.InsertAt(FCIndex, "InputR"); + + FCIndex = ReConstructed.Find("FloatCurves"); + ReConstructed.RemoveAt(FCIndex, 11); + ReConstructed.InsertAt(FCIndex, "InputG"); + + FCIndex = ReConstructed.Find("FloatCurves"); + ReConstructed.RemoveAt(FCIndex, 11); + ReConstructed.InsertAt(FCIndex, "InputB"); + + FCIndex = ReConstructed.Find("FloatCurves"); + ReConstructed.RemoveAt(FCIndex, 11); + ReConstructed.InsertAt(FCIndex, "InputA"); + + TSharedPtr JsonParsedCon; + TSharedRef> JsonReaderCon = TJsonReaderFactory::Create(ReConstructed); + if (FJsonSerializer::Deserialize(JsonReaderCon, JsonParsedCon)) + { + TArray> CurveI = JsonParsedCon->GetArrayField("data"); + for (int32 indexa = 0; indexa < CurveI.Num(); indexa++) + { + TSharedPtr ObjectI = CurveI[indexa]->AsObject(); + + if (ObjectI->GetStringField("Type") == "CurveLinearColor") { + FString IMPath = OutFileNames[0]; + FString Path; + + IMPath.Split("FortniteGame/Content/", nullptr, &Path); + Path.Split("/", &Path, nullptr, ESearchCase::IgnoreCase, ESearchDir::FromEnd); + + FString PathWithGame = "/Game/" + Path + "/" + Name; + UPackage* Package = CreatePackage(NULL, *PathWithGame); + UPackage* OutermostPkg = Package->GetOutermost(); + + auto CurveFactory = NewObject(); + UCurveLinearColor* LinearCurveAsset = Cast(CurveFactory->FactoryCreateNew(UCurveLinearColor::StaticClass(), OutermostPkg, *Name, RF_Standalone | RF_Public, NULL, GWarn)); + + FAssetRegistryModule::AssetCreated(LinearCurveAsset); + LinearCurveAsset->MarkPackageDirty(); + Package->SetDirtyFlag(true); + LinearCurveAsset->PostEditChange(); + LinearCurveAsset->AddToRoot(); + + for (const TPair>& pair : ObjectI->GetObjectField("Properties")->Values) + { + TArray> Keys = pair.Value->AsObject()->GetArrayField("Keys"); + + // Empty the array for the new curves + LinearCurveAsset->FloatCurves[pair.Key.EndsWith("R") ? 0 : pair.Key.EndsWith("G") ? 1 : pair.Key.EndsWith("B") ? 2 : 3].Keys.Empty(); + + FRichCurve RichCurveObject = FRichCurve(); + + for (int32 key_index = 0; key_index < Keys.Num(); key_index++) + { + // RCIM_Cubic + TSharedPtr Key = Keys[key_index]->AsObject(); + ERichCurveInterpMode InterpMode = + Key->GetStringField("InterpMode") == "RCIM_Linear" ? ERichCurveInterpMode::RCIM_Linear : // Linear + Key->GetStringField("InterpMode") == "RCIM_Cubic" ? ERichCurveInterpMode::RCIM_Cubic : // Cubic + Key->GetStringField("InterpMode") == "RCIM_Constant" ? ERichCurveInterpMode::RCIM_Constant : // Constant + ERichCurveInterpMode::RCIM_None; + + FRichCurveKey RichKey = FRichCurveKey(float(Key->GetNumberField("Time")), float(Key->GetNumberField("Value")), float(Key->GetNumberField("ArriveTangent")), float(Key->GetNumberField("LeaveTangent")), InterpMode); + + LinearCurveAsset->FloatCurves[pair.Key.EndsWith("R") ? 0 : pair.Key.EndsWith("G") ? 1 : pair.Key.EndsWith("B") ? 2 : 3].Keys.Add(RichKey); + } + } + } + } + } + } + else if (Type == "CurveVector") { + FText DialogText = FText::FromString(TEXT("CurveVectors are not supported at the moment, only reason being is that I don't have a json file to test with. Contact me at Tector#7383 if you do.")); + FMessageDialog::Open(EAppMsgType::Ok, DialogText); + } + /* else if (Type == "AnimSequence") { + GLog->Log("JsonAsAsset: Found a facial curve from the animation of " + Name + ", parsing.."); + + + TArray> Keys = DataObject->GetObjectField("Properties")->GetObjectField("FloatCurves")->GetArrayField("Keys"); + + for (int32 key_index = 0; key_index < Keys.Num(); key_index++) + { + // RCIM_Cubic + TSharedPtr Key = Keys[key_index]->AsObject(); + ERichCurveInterpMode InterpMode = + Key->GetStringField("InterpMode") == "RCIM_Linear" ? ERichCurveInterpMode::RCIM_Linear : // Linear + Key->GetStringField("InterpMode") == "RCIM_Cubic" ? ERichCurveInterpMode::RCIM_Cubic : // Cubic + Key->GetStringField("InterpMode") == "RCIM_Constant" ? ERichCurveInterpMode::RCIM_Constant : // Constant + ERichCurveInterpMode::RCIM_None; + + FRichCurveKey RichKey = FRichCurveKey(float(Key->GetNumberField("Time")), float(Key->GetNumberField("Value")), float(Key->GetNumberField("ArriveTangent")), float(Key->GetNumberField("LeaveTangent")), InterpMode); + + AnimSequence->FloatCurve.Keys.Add(RichKey); + } +}*/ + // USkeletalMeshLODSettings + else if(Type == "SkeletalMeshLODSettings") { + GLog->Log("JsonAsAsset: Found a skeletal mesh lod asset by the name of " + Name + ", parsing.."); + + // The path that the file + // was imported from (RAW) + + FString IMPath = OutFileNames[0]; + FString Path; + + IMPath.Split("FortniteGame/Content/", nullptr, &Path); + Path.Split("/", &Path, nullptr, ESearchCase::IgnoreCase, ESearchDir::FromEnd); + + FString PathWithGame = "/Game/" + Path + "/" + Name; + UPackage* Package = CreatePackage(NULL, *PathWithGame); + UPackage* OutermostPkg = Package->GetOutermost(); + + // We create assets using these lines + // and by using the Data Asset factory. + + auto DataAssetFactory = NewObject(); + LODAssetDerived* LODDataAsset = Cast(DataAssetFactory->FactoryCreateNew(USkeletalMeshLODSettings::StaticClass(), OutermostPkg, *Name, RF_Standalone | RF_Public, NULL, GWarn)); + FAssetRegistryModule::AssetCreated(LODDataAsset); + LODDataAsset->MarkPackageDirty(); + Package->SetDirtyFlag(true); + LODDataAsset->PostEditChange(); + LODDataAsset->AddToRoot(); + + // Empty the LODGroups + // (there's pre-defined) + LODDataAsset->EmptyLODGroups(); + + // The LODGroups inside FModel's json. + TArray> LODGroupsObject = DataObject->GetObjectField("Properties")->GetArrayField("LODGroups"); + + // Iterate through each lod group + // to add into the emptied array. + for (int32 lod_group_index = 0; lod_group_index < LODGroupsObject.Num(); lod_group_index++) + { + TSharedPtr LODDataObject = LODGroupsObject[lod_group_index]->AsObject(); + FSkeletalMeshLODGroupSettings SkeletalMeshLODGroup = FSkeletalMeshLODGroupSettings(); + const TSharedPtr* BakePose; + + // If there is a BakePose animation + // sequence, then we handle the reference. + if (LODDataObject->TryGetObjectField("BakePose", BakePose) == true) { + FStringAssetReference BakePoseReference; + + // Get the base pose type. (AnimSequence) + FString BakePoseType; + FString BakePoseName; + BakePose->Get()->GetStringField("ObjectName").Split(" ", &BakePoseType, &BakePoseName); + FString BakePosePath; + BakePose->Get()->GetStringField("ObjectPath").Split(".", &BakePosePath, nullptr); + // Create the reference + BakePoseReference = FStringAssetReference(BakePoseType + "'" + BakePosePath + "." + BakePoseName + "'"); + + // Now we use the reference, and load the asset + // to be used in the data asset. + UAnimSequence* BakePoseSequence = Cast(BakePoseReference.TryLoad()); + SkeletalMeshLODGroup.BakePose = BakePoseSequence; + } + + SkeletalMeshLODGroup.LODHysteresis = LODDataObject->GetNumberField("LODHysteresis"); + SkeletalMeshLODGroup.WeightOfPrioritization = LODDataObject->GetNumberField("WeightOfPrioritization"); + SkeletalMeshLODGroup.ScreenSize = FPerPlatformFloat(LODDataObject->GetObjectField("ScreenSize")->GetNumberField("Default")); + + // The first LOD element does not have + // the following variables: + // + // 1. BoneFilterActionOption + // 2. BoneList + if (lod_group_index != 0) { + // Set the BoneFilterActionOption using variables provided + SkeletalMeshLODGroup.BoneFilterActionOption = + LODDataObject->GetStringField("BoneFilterActionOption").EndsWith("Remove") ? EBoneFilterActionOption::Remove : + LODDataObject->GetStringField("BoneFilterActionOption").EndsWith("Keep") ? EBoneFilterActionOption::Keep + : EBoneFilterActionOption::Invalid; + + // Add all the bones under: BoneList + for (int32 bone_list_index = 0; bone_list_index < LODDataObject->GetArrayField("BoneList").Num(); bone_list_index++) + { + TSharedPtr BoneListed = LODDataObject->GetArrayField("BoneList")[bone_list_index]->AsObject(); + FBoneFilter BoneFilter; + + BoneFilter.bExcludeSelf = BoneListed->GetBoolField("bExcludeSelf"); + BoneFilter.BoneName = FName(*BoneListed->GetStringField("BoneName")); + + SkeletalMeshLODGroup.BoneList.Add(BoneFilter); + } + } + + // Add all the bones under: BonesToPrioritize + for (int32 bones_to_prior_index = 0; bones_to_prior_index < LODDataObject->GetArrayField("BonesToPrioritize").Num(); bones_to_prior_index++) + { + FName BonePrioritized = FName(*LODDataObject->GetArrayField("BonesToPrioritize")[bones_to_prior_index]->AsString()); + + SkeletalMeshLODGroup.BonesToPrioritize.Add(BonePrioritized); + } + + // Here we are going to do the reduction settings + // that is the core of the LOD asset. + FSkeletalMeshOptimizationSettings OptimizationSettings; + TSharedPtr ReductionSettings = LODDataObject->GetObjectField("ReductionSettings"); + + OptimizationSettings.BaseLOD = ReductionSettings->GetIntegerField("BaseLOD"); + OptimizationSettings.bEnforceBoneBoundaries = ReductionSettings->GetBoolField("bEnforceBoneBoundaries"); + OptimizationSettings.bLockColorBounaries = ReductionSettings->GetBoolField("bLockColorBounaries"); + OptimizationSettings.bLockEdges = ReductionSettings->GetBoolField("bLockEdges"); + OptimizationSettings.bRecalcNormals = ReductionSettings->GetBoolField("bRecalcNormals"); + OptimizationSettings.bRemapMorphTargets = ReductionSettings->GetBoolField("bRemapMorphTargets"); + OptimizationSettings.MaxBonesPerVertex = ReductionSettings->GetIntegerField("MaxBonesPerVertex"); + OptimizationSettings.MaxDeviationPercentage = ReductionSettings->GetNumberField("MaxDeviationPercentage"); + OptimizationSettings.MaxNumOfTriangles = ReductionSettings->GetIntegerField("MaxNumOfTriangles"); + OptimizationSettings.MaxNumOfVerts = ReductionSettings->GetIntegerField("MaxNumOfVerts"); + OptimizationSettings.NormalsThreshold = ReductionSettings->GetNumberField("NormalsThreshold"); + OptimizationSettings.NumOfTrianglesPercentage = ReductionSettings->GetNumberField("NumOfTrianglesPercentage"); + OptimizationSettings.NumOfVertPercentage = ReductionSettings->GetNumberField("NumOfVertPercentage"); + OptimizationSettings.VolumeImportance = ReductionSettings->GetNumberField("VolumeImportance"); + OptimizationSettings.WeldingThreshold = ReductionSettings->GetNumberField("WeldingThreshold"); + + OptimizationSettings.ReductionMethod = + ReductionSettings->GetStringField("ReductionMethod").EndsWith("SMOT_NumOfTriangles") ? SkeletalMeshOptimizationType::SMOT_NumOfTriangles : + ReductionSettings->GetStringField("ReductionMethod").EndsWith("SMOT_MaxDeviation") ? SkeletalMeshOptimizationType::SMOT_MaxDeviation : + ReductionSettings->GetStringField("ReductionMethod").EndsWith("SMOT_TriangleOrDeviation") ? SkeletalMeshOptimizationType::SMOT_TriangleOrDeviation : + SkeletalMeshOptimizationType::SMOT_MAX; + + OptimizationSettings.ShadingImportance = + ReductionSettings->GetStringField("ShadingImportance").EndsWith("SMOI_Off") ? SkeletalMeshOptimizationImportance::SMOI_Off : + ReductionSettings->GetStringField("ShadingImportance").EndsWith("SMOI_Lowest") ? SkeletalMeshOptimizationImportance::SMOI_Lowest : + ReductionSettings->GetStringField("ShadingImportance").EndsWith("SMOI_Low") ? SkeletalMeshOptimizationImportance::SMOI_Low : + ReductionSettings->GetStringField("ShadingImportance").EndsWith("SMOI_Normal") ? SkeletalMeshOptimizationImportance::SMOI_Normal : + ReductionSettings->GetStringField("ShadingImportance").EndsWith("SMOI_High") ? SkeletalMeshOptimizationImportance::SMOI_High : + ReductionSettings->GetStringField("ShadingImportance").EndsWith("SMOI_Highest") ? SkeletalMeshOptimizationImportance::SMOI_Highest : + SkeletalMeshOptimizationImportance::SMOI_MAX; + + OptimizationSettings.SilhouetteImportance = + ReductionSettings->GetStringField("SilhouetteImportance").EndsWith("SMOI_Off") ? SkeletalMeshOptimizationImportance::SMOI_Off : + ReductionSettings->GetStringField("SilhouetteImportance").EndsWith("SMOI_Lowest") ? SkeletalMeshOptimizationImportance::SMOI_Lowest : + ReductionSettings->GetStringField("SilhouetteImportance").EndsWith("SMOI_Low") ? SkeletalMeshOptimizationImportance::SMOI_Low : + ReductionSettings->GetStringField("SilhouetteImportance").EndsWith("SMOI_Normal") ? SkeletalMeshOptimizationImportance::SMOI_Normal : + ReductionSettings->GetStringField("SilhouetteImportance").EndsWith("SMOI_High") ? SkeletalMeshOptimizationImportance::SMOI_High : + ReductionSettings->GetStringField("SilhouetteImportance").EndsWith("SMOI_Highest") ? SkeletalMeshOptimizationImportance::SMOI_Highest : + SkeletalMeshOptimizationImportance::SMOI_MAX; + + OptimizationSettings.SkinningImportance = + ReductionSettings->GetStringField("SkinningImportance").EndsWith("SMOI_Off") ? SkeletalMeshOptimizationImportance::SMOI_Off : + ReductionSettings->GetStringField("SkinningImportance").EndsWith("SMOI_Lowest") ? SkeletalMeshOptimizationImportance::SMOI_Lowest : + ReductionSettings->GetStringField("SkinningImportance").EndsWith("SMOI_Low") ? SkeletalMeshOptimizationImportance::SMOI_Low : + ReductionSettings->GetStringField("SkinningImportance").EndsWith("SMOI_Normal") ? SkeletalMeshOptimizationImportance::SMOI_Normal : + ReductionSettings->GetStringField("SkinningImportance").EndsWith("SMOI_High") ? SkeletalMeshOptimizationImportance::SMOI_High : + ReductionSettings->GetStringField("SkinningImportance").EndsWith("SMOI_Highest") ? SkeletalMeshOptimizationImportance::SMOI_Highest : + SkeletalMeshOptimizationImportance::SMOI_MAX; + + OptimizationSettings.TerminationCriterion = + ReductionSettings->GetStringField("TerminationCriterion").EndsWith("SMTC_NumOfTriangles") ? SkeletalMeshTerminationCriterion::SMTC_NumOfTriangles : + ReductionSettings->GetStringField("TerminationCriterion").EndsWith("SMTC_NumOfVerts") ? SkeletalMeshTerminationCriterion::SMTC_NumOfVerts : + ReductionSettings->GetStringField("TerminationCriterion").EndsWith("SMTC_TriangleOrVert") ? SkeletalMeshTerminationCriterion::SMTC_TriangleOrVert : + ReductionSettings->GetStringField("TerminationCriterion").EndsWith("SMTC_AbsNumOfTriangles") ? SkeletalMeshTerminationCriterion::SMTC_AbsNumOfTriangles : + ReductionSettings->GetStringField("TerminationCriterion").EndsWith("SMTC_AbsNumOfVerts") ? SkeletalMeshTerminationCriterion::SMTC_AbsNumOfVerts : + ReductionSettings->GetStringField("TerminationCriterion").EndsWith("SMTC_AbsTriangleOrVert") ? SkeletalMeshTerminationCriterion::SMTC_AbsTriangleOrVert : + SkeletalMeshTerminationCriterion::SMTC_MAX; + + OptimizationSettings.TextureImportance = + ReductionSettings->GetStringField("TextureImportance").EndsWith("SMOI_Off") ? SkeletalMeshOptimizationImportance::SMOI_Off : + ReductionSettings->GetStringField("TextureImportance").EndsWith("SMOI_Lowest") ? SkeletalMeshOptimizationImportance::SMOI_Lowest : + ReductionSettings->GetStringField("TextureImportance").EndsWith("SMOI_Low") ? SkeletalMeshOptimizationImportance::SMOI_Low : + ReductionSettings->GetStringField("TextureImportance").EndsWith("SMOI_Normal") ? SkeletalMeshOptimizationImportance::SMOI_Normal : + ReductionSettings->GetStringField("TextureImportance").EndsWith("SMOI_High") ? SkeletalMeshOptimizationImportance::SMOI_High : + ReductionSettings->GetStringField("TextureImportance").EndsWith("SMOI_Highest") ? SkeletalMeshOptimizationImportance::SMOI_Highest : + SkeletalMeshOptimizationImportance::SMOI_MAX; + + SkeletalMeshLODGroup.ReductionSettings = OptimizationSettings; + LODDataAsset->AddLODGroup(SkeletalMeshLODGroup); + } + } + } + } + } +} + +void FJsonAsAssetModule::RegisterMenus() +{ + // Owner will be used for cleanup in call to UToolMenus::UnregisterOwner + FToolMenuOwnerScoped OwnerScoped(this); + + { + UToolMenu* Menu = UToolMenus::Get()->ExtendMenu("LevelEditor.MainMenu.Window"); + { + FToolMenuSection& Section = Menu->FindOrAddSection("WindowLayout"); + Section.AddMenuEntryWithCommandList(FJsonAsAssetCommands::Get().PluginAction, PluginCommands); + } + } + + { + UToolMenu* ToolbarMenu = UToolMenus::Get()->ExtendMenu("LevelEditor.LevelEditorToolBar"); + { + FToolMenuSection& Section = ToolbarMenu->FindOrAddSection("Settings"); + { + FToolMenuEntry& Entry = Section.AddEntry(FToolMenuEntry::InitToolBarButton(FJsonAsAssetCommands::Get().PluginAction)); + Entry.SetCommandList(PluginCommands); + } + } + } +} + +#undef LOCTEXT_NAMESPACE + +IMPLEMENT_MODULE(FJsonAsAssetModule, JsonAsAsset) \ No newline at end of file diff --git a/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAssetCommands.cpp b/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAssetCommands.cpp new file mode 100644 index 00000000..16e6ba99 --- /dev/null +++ b/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAssetCommands.cpp @@ -0,0 +1,12 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "JsonAsAssetCommands.h" + +#define LOCTEXT_NAMESPACE "FJsonAsAssetModule" + +void FJsonAsAssetCommands::RegisterCommands() +{ + UI_COMMAND(PluginAction, "JsonAsAsset", "Execute JsonAsAsset action", EUserInterfaceActionType::Button, FInputGesture()); +} + +#undef LOCTEXT_NAMESPACE diff --git a/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAssetStyle.cpp b/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAssetStyle.cpp new file mode 100644 index 00000000..40d44e17 --- /dev/null +++ b/Plugins/JsonAsAsset/Source/JsonAsAsset/Private/JsonAsAssetStyle.cpp @@ -0,0 +1,71 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#include "JsonAsAssetStyle.h" +#include "JsonAsAsset.h" +#include "Framework/Application/SlateApplication.h" +#include "Styling/SlateStyleRegistry.h" +#include "Slate/SlateGameResources.h" +#include "Interfaces/IPluginManager.h" + +TSharedPtr< FSlateStyleSet > FJsonAsAssetStyle::StyleInstance = NULL; + +void FJsonAsAssetStyle::Initialize() +{ + if (!StyleInstance.IsValid()) + { + StyleInstance = Create(); + FSlateStyleRegistry::RegisterSlateStyle(*StyleInstance); + } +} + +void FJsonAsAssetStyle::Shutdown() +{ + FSlateStyleRegistry::UnRegisterSlateStyle(*StyleInstance); + ensure(StyleInstance.IsUnique()); + StyleInstance.Reset(); +} + +FName FJsonAsAssetStyle::GetStyleSetName() +{ + static FName StyleSetName(TEXT("JsonAsAssetStyle")); + return StyleSetName; +} + +#define IMAGE_BRUSH( RelativePath, ... ) FSlateImageBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ ) +#define BOX_BRUSH( RelativePath, ... ) FSlateBoxBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ ) +#define BORDER_BRUSH( RelativePath, ... ) FSlateBorderBrush( Style->RootToContentDir( RelativePath, TEXT(".png") ), __VA_ARGS__ ) +#define TTF_FONT( RelativePath, ... ) FSlateFontInfo( Style->RootToContentDir( RelativePath, TEXT(".ttf") ), __VA_ARGS__ ) +#define OTF_FONT( RelativePath, ... ) FSlateFontInfo( Style->RootToContentDir( RelativePath, TEXT(".otf") ), __VA_ARGS__ ) + +const FVector2D Icon16x16(16.0f, 16.0f); +const FVector2D Icon20x20(20.0f, 20.0f); +const FVector2D Icon40x40(40.0f, 40.0f); + +TSharedRef< FSlateStyleSet > FJsonAsAssetStyle::Create() +{ + TSharedRef< FSlateStyleSet > Style = MakeShareable(new FSlateStyleSet("JsonAsAssetStyle")); + Style->SetContentRoot(IPluginManager::Get().FindPlugin("JsonAsAsset")->GetBaseDir() / TEXT("Resources")); + + Style->Set("JsonAsAsset.PluginAction", new IMAGE_BRUSH(TEXT("ButtonIcon_40x"), Icon40x40)); + + return Style; +} + +#undef IMAGE_BRUSH +#undef BOX_BRUSH +#undef BORDER_BRUSH +#undef TTF_FONT +#undef OTF_FONT + +void FJsonAsAssetStyle::ReloadTextures() +{ + if (FSlateApplication::IsInitialized()) + { + FSlateApplication::Get().GetRenderer()->ReloadTextureResources(); + } +} + +const ISlateStyle& FJsonAsAssetStyle::Get() +{ + return *StyleInstance; +} diff --git a/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAsset.h b/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAsset.h new file mode 100644 index 00000000..66002e18 --- /dev/null +++ b/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAsset.h @@ -0,0 +1,35 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Modules/ModuleManager.h" + +struct ImportOptionsBase { + bool bImportWithPath; +}; + + + +class FToolBarBuilder; +class FMenuBuilder; + +class FJsonAsAssetModule : public IModuleInterface +{ +public: + + /** IModuleInterface implementation */ + virtual void StartupModule() override; + virtual void ShutdownModule() override; + + /** This function will be bound to Command. */ + void PluginButtonClicked(); + +private: + + void RegisterMenus(); + + +private: + TSharedPtr PluginCommands; +}; diff --git a/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAssetCommands.h b/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAssetCommands.h new file mode 100644 index 00000000..6a302f07 --- /dev/null +++ b/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAssetCommands.h @@ -0,0 +1,23 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Framework/Commands/Commands.h" +#include "JsonAsAssetStyle.h" + +class FJsonAsAssetCommands : public TCommands +{ +public: + + FJsonAsAssetCommands() + : TCommands(TEXT("JsonAsAsset"), NSLOCTEXT("Contexts", "JsonAsAsset", "JsonAsAsset Plugin"), NAME_None, FJsonAsAssetStyle::GetStyleSetName()) + { + } + + // TCommands<> interface + virtual void RegisterCommands() override; + +public: + TSharedPtr< FUICommandInfo > PluginAction; +}; diff --git a/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAssetStyle.h b/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAssetStyle.h new file mode 100644 index 00000000..977c7203 --- /dev/null +++ b/Plugins/JsonAsAsset/Source/JsonAsAsset/Public/JsonAsAssetStyle.h @@ -0,0 +1,31 @@ +// Copyright Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Styling/SlateStyle.h" + +class FJsonAsAssetStyle +{ +public: + + static void Initialize(); + + static void Shutdown(); + + /** reloads textures used by slate renderer */ + static void ReloadTextures(); + + /** @return The Slate style set for the Shooter game */ + static const ISlateStyle& Get(); + + static FName GetStyleSetName(); + +private: + + static TSharedRef< class FSlateStyleSet > Create(); + +private: + + static TSharedPtr< class FSlateStyleSet > StyleInstance; +}; \ No newline at end of file diff --git a/Source/FortniteGame/Private/Athena/Items/AthenaGliderItemDefinition.cpp b/Source/FortniteGame/Private/Athena/Items/AthenaGliderItemDefinition.cpp new file mode 100644 index 00000000..5bf70568 --- /dev/null +++ b/Source/FortniteGame/Private/Athena/Items/AthenaGliderItemDefinition.cpp @@ -0,0 +1,5 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + + +#include "Athena/Items/AthenaGliderItemDefinition.h" + diff --git a/Source/FortniteGame/Private/GameDataCosmetics.cpp b/Source/FortniteGame/Private/GameDataCosmetics.cpp new file mode 100644 index 00000000..d5fc5a74 --- /dev/null +++ b/Source/FortniteGame/Private/GameDataCosmetics.cpp @@ -0,0 +1,5 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + + +#include "GameDataCosmetics.h" + diff --git a/Source/FortniteGame/Private/Heroes/FortTokenType.cpp b/Source/FortniteGame/Private/Heroes/FortTokenType.cpp new file mode 100644 index 00000000..1a03f53f --- /dev/null +++ b/Source/FortniteGame/Private/Heroes/FortTokenType.cpp @@ -0,0 +1,5 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + + +#include "Heroes/FortTokenType.h" + diff --git a/Source/FortniteGame/Public/Athena/Items/AthenaGliderItemDefinition.h b/Source/FortniteGame/Public/Athena/Items/AthenaGliderItemDefinition.h new file mode 100644 index 00000000..9d214580 --- /dev/null +++ b/Source/FortniteGame/Public/Athena/Items/AthenaGliderItemDefinition.h @@ -0,0 +1,17 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Athena/Items/AthenaCosmeticItemDefinition.h" +#include "AthenaGliderItemDefinition.generated.h" + +/** + * + */ +UCLASS() +class FORTNITEGAME_API UAthenaGliderItemDefinition : public UAthenaCosmeticItemDefinition +{ + GENERATED_BODY() + +}; diff --git a/Source/FortniteGame/Public/GameDataCosmetics.h b/Source/FortniteGame/Public/GameDataCosmetics.h new file mode 100644 index 00000000..6f1fa57d --- /dev/null +++ b/Source/FortniteGame/Public/GameDataCosmetics.h @@ -0,0 +1,402 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Engine/DataAsset.h" +#include "Customization/CustomCharacterPart.h" +#include "Athena/Items/AthenaPickaxeItemDefinition.h" +#include "Athena/Items/AthenaDanceItemDefinition.h" +#include "Athena/Items/AthenaBackpackItemDefinition.h" +#include "Athena/Items/AthenaGliderItemDefinition.h" +#include "Athena/Items/AthenaBattleBusItemDefinition.h" +#include "Athena/Items/AthenaSkyDiveContrailItemDefinition.h" +#include "Athena/Items/AthenaMusicPackItemDefinition.h" +#include "Engine/DataTable.h" +#include "GameDataCosmetics.generated.h" + + +UCLASS(BlueprintType) +class FORTNITEGAME_API UFortCosmeticItemFilterTable : public UDataAsset +{ + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere) + TArray FilterTagTables; + +}; +USTRUCT(BlueprintType) +struct FORTNITEGAME_API FEmoteActivationTrigger +{ + GENERATED_BODY() + +public: + UPROPERTY(EditAnywhere) + FGameplayTagQuery EmoteTagQuery; + + UPROPERTY(EditAnywhere) + FGameplayTagQuery PlayerTagQuery; + + UPROPERTY(EditAnywhere) + FGameplayTagContainer TagsToApply; + + UPROPERTY(EditAnywhere) + float Duration; + +}; + +UCLASS(BlueprintType) +class FORTNITEGAME_API UFortCharmsMappingData : public UDataAsset +{ + GENERATED_BODY() + +public: + + //UPROPERTY(EditAnywhere) + //TArray SlotMetadata; + + //UPROPERTY(EditAnywhere) + //TArray NonSlotPreviewList; + + UPROPERTY(EditAnywhere) + FGameplayTag DoNotApplyCharmsTag; + +}; + +USTRUCT(BlueprintType) +struct FORTNITEGAME_API FFallbackAIPawnCustomizationMapper +{ + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere) + FGameplayTag RequiredTag; + + UPROPERTY(EditAnywhere) + FSoftObjectPath CustomizationFallback; +}; + +USTRUCT(BlueprintType) +struct FFortHarvestingToolMontageOverrideData +{ + GENERATED_USTRUCT_BODY() + +public: + UPROPERTY(EditAnywhere) + FGameplayTag CosmeticTag; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr MontageToPlay; +}; + + +USTRUCT(BlueprintType) +struct FORTNITEGAME_API FFallbackCharacterPartsMapper +{ + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere) + FGameplayTag RequiredTag; + + UPROPERTY(EditAnywhere) + TArray> CharacterParts; +}; + +UCLASS(BlueprintType) +class FORTNITEGAME_API UFortCosmeticItemMarkupTable : public UDataAsset +{ + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere) + TArray SetDescriptions; + + UPROPERTY(EditAnywhere) + TArray MarkupTagDescriptions; + +}; +USTRUCT(BlueprintType) +struct FFortHarvestingToolMontageOverrides +{ + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere) + TArray MontageOverrideData; +}; + +UCLASS(BlueprintType) +class FORTNITEGAME_API UGameDataCosmetics : public UPrimaryDataAsset +{ + GENERATED_BODY() + +public: + + UPROPERTY(EditAnywhere) + class UClass* EmoteGameplayAbility; + + UPROPERTY(EditAnywhere) + class UClass* SprayGameplayAbility; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr DefaultBackpackCharacterPart; + + UPROPERTY(EditAnywhere) + TArray DefaultCharacterParts; + + + + UPROPERTY(EditAnywhere) + TArray FallbackCharacterParts; + + UPROPERTY(EditAnywhere) + TArray FallbackCustomizations; + + + + UPROPERTY(EditAnywhere) + TSoftObjectPtr BannerIconCategoryData; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr BannerColorData; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr BannerColorCategoryData; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr BannerColorMap; + + + + UPROPERTY(EditAnywhere) + UAthenaPickaxeItemDefinition* FallbackPickaxe; + + UPROPERTY(EditAnywhere) + UAthenaDanceItemDefinition* FallbackDance; + + + + UPROPERTY(EditAnywhere) + TArray> ShuffleTileItemDefinitions; + + + + UPROPERTY(EditAnywhere) + UAthenaBackpackItemDefinition* STWHeroBackpackItemDefinition; + + UPROPERTY(EditAnywhere) + UAthenaBackpackItemDefinition* STWHeroNoDefaultBackpackItemDefinition; + + + + UPROPERTY(EditAnywhere) + UAthenaBattleBusItemDefinition* DefaultBattleBusSkin; + + UPROPERTY(EditAnywhere) + UAthenaGliderItemDefinition* DefaultGliderSkin; + + UPROPERTY(EditAnywhere) + UAthenaSkyDiveContrailItemDefinition* DefaultContrailEffect; + + UPROPERTY(EditAnywhere) + UAthenaMusicPackItemDefinition* DefaultMusicPack; + + + + UPROPERTY(EditAnywhere) + TArray ValidMaleSkinsForAnonymousMode; + + UPROPERTY(EditAnywhere) + TArray ValidFemaleSkinsForAnonymousMode; + + UPROPERTY(EditAnywhere) + TArray ValidBackPacksForAnonymousMode; + + + + UPROPERTY(EditAnywhere) + UFortCosmeticItemFilterTable* FilterTagTable; + + UPROPERTY(EditAnywhere) + UFortCosmeticItemMarkupTable* CosmeticMarkupTable; + + + + UPROPERTY(EditAnywhere) + TSoftObjectPtr CosmeticPreviewActionList; + + UPROPERTY(EditAnywhere) + class UClass* CharacterPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* EmotePreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* EmotePreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* ItemWrapPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* ItemWrapPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* LoadingScreenPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* LoadingScreenPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* SprayPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* SprayPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* MusicPackPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* MusicPackPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* SkyDiveContrailPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* SkyDiveContrailPreviewCameraActorClass; + + + + UPROPERTY(EditAnywhere) + TSoftObjectPtr SkyDiveContrailAnimation_Male; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr SkyDiveContrailAnimation_Female; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr PickaxePreviewMontage_Idle2H; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr PickaxePreviewMontage_Swing2H; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr PickaxePreviewMontage_IdleDualWield; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr PickaxePreviewMontage_SwingDualWield; + + + + UPROPERTY(EditAnywhere) + class UClass* GliderPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* BodyPartOverridePreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* BodyPartPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* CharmPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* CharmPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* WeaponCharmPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* WeaponCharmPreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* PickaxeCosmeticPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* PickaxePreviewCameraActorClass; + + UPROPERTY(EditAnywhere) + class UClass* BannerItemPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* CurrencyItemPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* BattlePassItemPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* ToyItemPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* DefaultPreviewActorClass; + + UPROPERTY(EditAnywhere) + class UClass* DefaultPreviewPawnAnimInstanceClass; + + + + UPROPERTY(EditAnywhere) + float ItemPreviewLODStreamingTimeout; + + + //Missed Offset + + + //UPROPERTY(EditAnywhere) + //TMap<> CosmeticPreviewActionMap; + + + UPROPERTY(EditAnywhere) + UFortCharmsMappingData* CharmConfigAsset; + + + + UPROPERTY(EditAnywhere) + TSoftObjectPtr NoneTexture; + + UPROPERTY(EditAnywhere) + TSoftObjectPtr DeniedCosmeticThumbnail; + + UPROPERTY(EditAnywhere) + UFortItemDefinition* PlaceholderItemToShowForDeniedCosmetics; + + UPROPERTY(EditAnywhere) + TArray RandomCharacters; + + + + UPROPERTY(EditAnywhere) + UCurveFloat* CameraPositionTransitionCurve; + + UPROPERTY(EditAnywhere) + float CameraPositionTransitionDuration; + + UPROPERTY(EditAnywhere) + float CameraPositionTargetMaxLerpDistance; + + //Missed Offset + + UPROPERTY(EditAnywhere) + FFortHarvestingToolMontageOverrides HarvestingToolMontageOverrides; + + UPROPERTY(EditAnywhere) + TArray BakedThumbnailData; + + UPROPERTY(EditAnywhere) + TArray EmoteActivationTriggers; + + + + //Credits + UPROPERTY(EditAnywhere) + FName Credits; + virtual FPrimaryAssetId GetPrimaryAssetId() const override + { + return FPrimaryAssetId("GameDataCosmetics", GetFName()); + } +}; diff --git a/Source/FortniteGame/Public/Heroes/FortTokenType.h b/Source/FortniteGame/Public/Heroes/FortTokenType.h new file mode 100644 index 00000000..f6ebaa7c --- /dev/null +++ b/Source/FortniteGame/Public/Heroes/FortTokenType.h @@ -0,0 +1,34 @@ +// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved. + +#pragma once + +#include "CoreMinimal.h" +#include "Items/FortAccountItemDefinition.h" +#include "Styling/SlateColor.h" +#include "FortniteGame/FortniteGame.h" +#include "FortTokenType.generated.h" + +/** + * + */ +UCLASS() +class FORTNITEGAME_API UFortTokenType : public UFortAccountItemDefinition +{ + GENERATED_BODY() + +public: + UPROPERTY(EditAnywhere) + class UClass* ScriptedAction; + + UPROPERTY(EditAnywhere) + FSlateColor NodeTintColour; + + UPROPERTY(EditAnywhere) + bool bPercentageRepresentation; + + UPROPERTY(EditAnywhere) + EItemProfileType ProfileType; + + UPROPERTY(EditAnywhere) + class UClass* ItemPreviewActorClass; +};