diff --git a/Content/FXVillesBloodVFXPack/MaterialFunctions/MF_SmoothStep.uasset b/Content/FXVillesBloodVFXPack/MaterialFunctions/MF_SmoothStep.uasset new file mode 100644 index 00000000..c01e280e --- /dev/null +++ b/Content/FXVillesBloodVFXPack/MaterialFunctions/MF_SmoothStep.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6ccafea982df26bdfaca31ec6b27e8203d709e1b5abc5b12015185d2318a87b +size 35646 diff --git a/Content/FXVillesBloodVFXPack/Materials/MAT_BloodClip_Master.uasset b/Content/FXVillesBloodVFXPack/Materials/MAT_BloodClip_Master.uasset new file mode 100644 index 00000000..2d3cf7fc --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Materials/MAT_BloodClip_Master.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bae54ec5bdabc6546c01ab000555561e57a14257967b5cd6b07cd3f8700b5a5 +size 89729 diff --git a/Content/FXVillesBloodVFXPack/Materials/MIC_BloodClip_A.uasset b/Content/FXVillesBloodVFXPack/Materials/MIC_BloodClip_A.uasset new file mode 100644 index 00000000..8e56e8f6 --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Materials/MIC_BloodClip_A.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32f3236ebcc0c30b39364c4e0f5d514ca415a1284829c7f2b0e8c073f3242c7e +size 58487 diff --git a/Content/FXVillesBloodVFXPack/Materials/MIC_BloodClip_Splat_2x2.uasset b/Content/FXVillesBloodVFXPack/Materials/MIC_BloodClip_Splat_2x2.uasset new file mode 100644 index 00000000..18338a71 --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Materials/MIC_BloodClip_Splat_2x2.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a18654b7e7dc0a40fb1d0c3dcb427325c33d86b330d277556c612e9d7de3428 +size 58562 diff --git a/Content/FXVillesBloodVFXPack/Particles/PS_Blood_Spurt_02.uasset b/Content/FXVillesBloodVFXPack/Particles/PS_Blood_Spurt_02.uasset new file mode 100644 index 00000000..08ec60d1 --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Particles/PS_Blood_Spurt_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86a09c35b5d6c7733c84985def4baddb4656edecf8ab1fca7b416ac4bf980ef5 +size 123403 diff --git a/Content/FXVillesBloodVFXPack/Textures/T_Blood_Clip_A.uasset b/Content/FXVillesBloodVFXPack/Textures/T_Blood_Clip_A.uasset new file mode 100644 index 00000000..d0ad114e --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Textures/T_Blood_Clip_A.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2222679be739830b0d98d9162440fef72a8aa34d7abe867371b69e4cbbede4af +size 395447 diff --git a/Content/FXVillesBloodVFXPack/Textures/T_Blood_Clip_N.uasset b/Content/FXVillesBloodVFXPack/Textures/T_Blood_Clip_N.uasset new file mode 100644 index 00000000..cff78ca0 --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Textures/T_Blood_Clip_N.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:009f0d85c028942360f9a41858c5151f04db15d2f67263517e6b55cc91ed95cb +size 777573 diff --git a/Content/FXVillesBloodVFXPack/Textures/T_Blood_Reflection.uasset b/Content/FXVillesBloodVFXPack/Textures/T_Blood_Reflection.uasset new file mode 100644 index 00000000..612d5c44 --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Textures/T_Blood_Reflection.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8c311577ce5ba7a6253bc503fa4995384898599f9a3fd1f24ab2a1ac7d05560a +size 31223 diff --git a/Content/FXVillesBloodVFXPack/Textures/T_Blood_SubUV_2x2_01.uasset b/Content/FXVillesBloodVFXPack/Textures/T_Blood_SubUV_2x2_01.uasset new file mode 100644 index 00000000..fe1bbfec --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Textures/T_Blood_SubUV_2x2_01.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dba3c44d706d0e598cc2aeaed0e2273d23decb7ed1498df056e89fbb76c823d1 +size 344949 diff --git a/Content/FXVillesBloodVFXPack/Textures/T_Blood_SubUV_2x2_01_N.uasset b/Content/FXVillesBloodVFXPack/Textures/T_Blood_SubUV_2x2_01_N.uasset new file mode 100644 index 00000000..35758677 --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Textures/T_Blood_SubUV_2x2_01_N.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab56705bb108332e7e8a28883d4e21cea3454bacea291f6ac51c9257c822a602 +size 389203 diff --git a/Content/FXVillesBloodVFXPack/Textures/T_Noise_N_02.uasset b/Content/FXVillesBloodVFXPack/Textures/T_Noise_N_02.uasset new file mode 100644 index 00000000..b0cad902 --- /dev/null +++ b/Content/FXVillesBloodVFXPack/Textures/T_Noise_N_02.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:919dc034cec23c50e5380435e65a03d1408c72eb6e2d6aed3f21c7b40210fe61 +size 129571 diff --git a/Content/ParagonGrux/Characters/Heroes/Grux/Meshes/Grux_Skeleton.uasset b/Content/ParagonGrux/Characters/Heroes/Grux/Meshes/Grux_Skeleton.uasset index 682efa5c..e51c9d97 100644 --- a/Content/ParagonGrux/Characters/Heroes/Grux/Meshes/Grux_Skeleton.uasset +++ b/Content/ParagonGrux/Characters/Heroes/Grux/Meshes/Grux_Skeleton.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:106e9beb5cd50a30ebf8a4e94e2fcb7fe8b090b7f588acc7c58134cb195a8a75 -size 68822 +oid sha256:712a87757400c6d70d6339e34fb925ba838cc8478d6d37218d0055953f0c8dcd +size 68885 diff --git a/Content/ParagonLtBelica/Characters/Heroes/Belica/Meshes/Belica_Skeleton.uasset b/Content/ParagonLtBelica/Characters/Heroes/Belica/Meshes/Belica_Skeleton.uasset index 3634ac52..4d09b6f0 100644 --- a/Content/ParagonLtBelica/Characters/Heroes/Belica/Meshes/Belica_Skeleton.uasset +++ b/Content/ParagonLtBelica/Characters/Heroes/Belica/Meshes/Belica_Skeleton.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2da4ffc1f04b2c48a190331ed68a14a88ea8a34f2e3c8db371f783e3c94d806b -size 67563 +oid sha256:92186592f96c8309b795cfee975e855dcaad751def90c01a9d1e4b3806d6bce4 +size 67715 diff --git a/Content/_Game/Character/Belica/BelicaAnimBP.uasset b/Content/_Game/Character/Belica/BelicaAnimBP.uasset index 42f35b87..5b69d281 100644 --- a/Content/_Game/Character/Belica/BelicaAnimBP.uasset +++ b/Content/_Game/Character/Belica/BelicaAnimBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:7eaedb8ebb6affc0fce63e00be2cd08804993500fee99a80179e039871529245 -size 1854667 +oid sha256:1381978f51e7ba50f5818637a75430772e04dc2aef8c2f2753bb404bb28593dc +size 1943573 diff --git a/Content/_Game/Character/Belica/BelicaCharacterBP.uasset b/Content/_Game/Character/Belica/BelicaCharacterBP.uasset index 10351b1c..2014a5c1 100644 --- a/Content/_Game/Character/Belica/BelicaCharacterBP.uasset +++ b/Content/_Game/Character/Belica/BelicaCharacterBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:87c8949a75cf2a4b338ff3e2d6810cc574a91d1939b6951020a507494180c91a -size 45906 +oid sha256:88040b9917ec91a46245ba5c9a5566fa7985d0958c3f23b1551e1983bdf692f9 +size 45118 diff --git a/Content/_Game/Character/Belica/Death/DeathMontage.uasset b/Content/_Game/Character/Belica/Death/DeathMontage.uasset new file mode 100644 index 00000000..10ff41ce --- /dev/null +++ b/Content/_Game/Character/Belica/Death/DeathMontage.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34f761c55f140647d05a2fec7012b70686c29fafdadd42737cff9210db3e1308 +size 11053 diff --git a/Content/_Game/Character/Belica/Death/Death_A.uasset b/Content/_Game/Character/Belica/Death/Death_A.uasset new file mode 100644 index 00000000..c1676a49 --- /dev/null +++ b/Content/_Game/Character/Belica/Death/Death_A.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01ddbfaa07f7f1e341143282269e6d4ef780cceff9602d8b933fd9cf0ad0a957 +size 673622 diff --git a/Content/_Game/Character/Belica/Death/Death_A_end.uasset b/Content/_Game/Character/Belica/Death/Death_A_end.uasset new file mode 100644 index 00000000..f12ccbfd --- /dev/null +++ b/Content/_Game/Character/Belica/Death/Death_A_end.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:999e15fec53721148be836b9f2b402614b294bfd20d69f2fc1a798a8c5e8afc4 +size 166188 diff --git a/Content/_Game/Character/Belica/HitReact/HitReactMontage.uasset b/Content/_Game/Character/Belica/HitReact/HitReactMontage.uasset new file mode 100644 index 00000000..f9aa5e83 --- /dev/null +++ b/Content/_Game/Character/Belica/HitReact/HitReactMontage.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baa7ac57893f91f7d4f45d40b496e9c2d2d467184f2e91d7b3676490daead08c +size 10340 diff --git a/Content/_Game/Character/Belica/HitReact/HitReact_Front.uasset b/Content/_Game/Character/Belica/HitReact/HitReact_Front.uasset new file mode 100644 index 00000000..1892d56f --- /dev/null +++ b/Content/_Game/Character/Belica/HitReact/HitReact_Front.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e7d9c57628d3a56d5d0b3c4fadcecc24c521ca2e569d5fc18ef0583349ade63 +size 416952 diff --git a/Content/_Game/Character/Revenant/Death/DeathMontage.uasset b/Content/_Game/Character/Revenant/Death/DeathMontage.uasset new file mode 100644 index 00000000..2b8401bd --- /dev/null +++ b/Content/_Game/Character/Revenant/Death/DeathMontage.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6576028a645a3ed9bfdb28308713d4fff73c6dea2dcd9431aed2d14f7e09454a +size 11547 diff --git a/Content/_Game/Character/Revenant/Death/Death_A.uasset b/Content/_Game/Character/Revenant/Death/Death_A.uasset new file mode 100644 index 00000000..26386f77 --- /dev/null +++ b/Content/_Game/Character/Revenant/Death/Death_A.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38c239dafdad80ecbb029dc5b775246d95278e45a75b936b980c18c7688639aa +size 824359 diff --git a/Content/_Game/Character/Revenant/Death/Death_A_end.uasset b/Content/_Game/Character/Revenant/Death/Death_A_end.uasset new file mode 100644 index 00000000..780f4680 --- /dev/null +++ b/Content/_Game/Character/Revenant/Death/Death_A_end.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e77fc4a3d6cb5dc2ae3cc8ad569f9c3c64f89e265a90261e2a4250a2723fde45 +size 178058 diff --git a/Content/_Game/Character/Revenant/HitReact/HitReactMontage.uasset b/Content/_Game/Character/Revenant/HitReact/HitReactMontage.uasset new file mode 100644 index 00000000..4989ca22 --- /dev/null +++ b/Content/_Game/Character/Revenant/HitReact/HitReactMontage.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a92db01205016a57dc43f10be06a7b192ee52f59e20fffcdc385bf00c818d69f +size 10272 diff --git a/Content/_Game/Character/Revenant/HitReact/HitReact_Front.uasset b/Content/_Game/Character/Revenant/HitReact/HitReact_Front.uasset new file mode 100644 index 00000000..edb83e9f --- /dev/null +++ b/Content/_Game/Character/Revenant/HitReact/HitReact_Front.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a518fb38a62adfda4c0ca365a1042527d3e2888815a303cd3a356eb5429d6bc +size 287912 diff --git a/Content/_Game/Character/Revenant/Idle/Idle_Zero_Pose.uasset b/Content/_Game/Character/Revenant/Idle/Idle_Zero_Pose.uasset index f69a8d6f..0c131397 100644 --- a/Content/_Game/Character/Revenant/Idle/Idle_Zero_Pose.uasset +++ b/Content/_Game/Character/Revenant/Idle/Idle_Zero_Pose.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f4bedb9c804a4329359fe12d1351ca5f3ad3ec0e2de6c4c3634e1f8d5f3361b3 -size 235250 +oid sha256:00379825a82513b15ea8cc783f89d966fb8f3bf2fa0488bfad20fdba09443a02 +size 235251 diff --git a/Content/_Game/Character/Revenant/RevenantAnimBP.uasset b/Content/_Game/Character/Revenant/RevenantAnimBP.uasset index 7be82092..6103c541 100644 --- a/Content/_Game/Character/Revenant/RevenantAnimBP.uasset +++ b/Content/_Game/Character/Revenant/RevenantAnimBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ac86302a9d2a50652e40689eea22bde47103efb302a91b7251700981eb893cca -size 1978796 +oid sha256:fe48804b880fd0aa4d9a9d05a74a6df347fc6122c8ef6ae43aab3214280fd629 +size 1938066 diff --git a/Content/_Game/Character/Revenant/RevenantCharacterBP.uasset b/Content/_Game/Character/Revenant/RevenantCharacterBP.uasset index 167c1be7..9cb7e8ec 100644 --- a/Content/_Game/Character/Revenant/RevenantCharacterBP.uasset +++ b/Content/_Game/Character/Revenant/RevenantCharacterBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d0925c0463852f8c3fc0c1d5dfb16ecdf7d7ac0027b757ea0204366b1474be6e -size 46716 +oid sha256:60dbb302653cac10267055e0233864c31ffbba572d7f95037dff0f642197693a +size 47516 diff --git a/Content/_Game/Character/TwinBlast/Death/DeathMontage.uasset b/Content/_Game/Character/TwinBlast/Death/DeathMontage.uasset new file mode 100644 index 00000000..e42093d1 --- /dev/null +++ b/Content/_Game/Character/TwinBlast/Death/DeathMontage.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1c988616f165960fd50a893b997e3b7541e3af663c60a73a860eb49154c3506d +size 10963 diff --git a/Content/_Game/Character/TwinBlast/Death/Death_A.uasset b/Content/_Game/Character/TwinBlast/Death/Death_A.uasset new file mode 100644 index 00000000..b92c1c27 --- /dev/null +++ b/Content/_Game/Character/TwinBlast/Death/Death_A.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d28ddc590c989e895b6cf9bfb5b442e730042667de05db5f05ecdb55f66ef29 +size 431667 diff --git a/Content/_Game/Character/TwinBlast/Death/Death_A_end.uasset b/Content/_Game/Character/TwinBlast/Death/Death_A_end.uasset new file mode 100644 index 00000000..7d4eb2d3 --- /dev/null +++ b/Content/_Game/Character/TwinBlast/Death/Death_A_end.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b507b58417cfef1d4b1c1bbab9d86e6044329b6e298478a4f55a330704d6f40d +size 180803 diff --git a/Content/_Game/Character/TwinBlast/HitReact/HitReactMontage.uasset b/Content/_Game/Character/TwinBlast/HitReact/HitReactMontage.uasset new file mode 100644 index 00000000..d41d7570 --- /dev/null +++ b/Content/_Game/Character/TwinBlast/HitReact/HitReactMontage.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcfe86ff3b6c9fdf748b4470242edfaa1e2a3d5417936cea6e395cf49cc436bc +size 10260 diff --git a/Content/_Game/Character/TwinBlast/HitReact/HitReact_Front.uasset b/Content/_Game/Character/TwinBlast/HitReact/HitReact_Front.uasset new file mode 100644 index 00000000..3474efff --- /dev/null +++ b/Content/_Game/Character/TwinBlast/HitReact/HitReact_Front.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4763f1ec293d944dd6356817291a1fc820ea8385950db4ce296496ac0630653f +size 361654 diff --git a/Content/_Game/Character/TwinBlast/Idle/Idle_Zero_Pose.uasset b/Content/_Game/Character/TwinBlast/Idle/Idle_Zero_Pose.uasset index 8d374c4e..c4bf0116 100644 --- a/Content/_Game/Character/TwinBlast/Idle/Idle_Zero_Pose.uasset +++ b/Content/_Game/Character/TwinBlast/Idle/Idle_Zero_Pose.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:390196dcd6c93735ce25cb2cbe6b12ab067a2c53f647e48d90a60c6efd5795f5 -size 312584 +oid sha256:b529a559fa7ea3c0eae6c3c5dab7351de591d794ec1ec7234ac83a1646385b26 +size 312488 diff --git a/Content/_Game/Character/TwinBlast/TwinBlastAnimBP.uasset b/Content/_Game/Character/TwinBlast/TwinBlastAnimBP.uasset index 44df4660..35b149bc 100644 --- a/Content/_Game/Character/TwinBlast/TwinBlastAnimBP.uasset +++ b/Content/_Game/Character/TwinBlast/TwinBlastAnimBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:603811c67ab8ae8ea056ce067124284420dcbb97179bcc0b455a796ade1b4b79 -size 1872450 +oid sha256:c768a414b6ed8737995e57ceb112b7cb7a32001edd0eeef888fe1485ec4c7271 +size 1963954 diff --git a/Content/_Game/Character/TwinBlast/TwinBlastCharacterBP.uasset b/Content/_Game/Character/TwinBlast/TwinBlastCharacterBP.uasset index 3769885b..ec666732 100644 --- a/Content/_Game/Character/TwinBlast/TwinBlastCharacterBP.uasset +++ b/Content/_Game/Character/TwinBlast/TwinBlastCharacterBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e3a140091e797fb2ae54369da7bf7987092628423dfdb9ce4fecf1da1ce178c9 -size 45451 +oid sha256:e0b5fc8177d848b22ec921e4277ee27df9240b99aa9984e2adb4e371863e2c7c +size 45953 diff --git a/Content/_Game/Enemies/Animations/Death_A.uasset b/Content/_Game/Enemies/Animations/Death_A.uasset new file mode 100644 index 00000000..d9273c3d --- /dev/null +++ b/Content/_Game/Enemies/Animations/Death_A.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6c38f3529ff9cb7c2adef3041a2f3d1bda3383f90e8d32180c2d7b9d0f13dc7 +size 347487 diff --git a/Content/_Game/Enemies/Animations/Death_B.uasset b/Content/_Game/Enemies/Animations/Death_B.uasset new file mode 100644 index 00000000..9bb003bc --- /dev/null +++ b/Content/_Game/Enemies/Animations/Death_B.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d837ca569d2dd78828a6a9b98401aebf4fb6236785e5a07f286ad5dd5eb3ecdd +size 340682 diff --git a/Content/_Game/Enemies/Animations/EnemyDeath.uasset b/Content/_Game/Enemies/Animations/EnemyDeath.uasset new file mode 100644 index 00000000..b9534b3e --- /dev/null +++ b/Content/_Game/Enemies/Animations/EnemyDeath.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e76afdf9ac20209010909d335b528e83eb6ac27fc571057f5284d7555c3fcd08 +size 10219 diff --git a/Content/_Game/Enemies/Animations/EnemyHit.uasset b/Content/_Game/Enemies/Animations/EnemyHit.uasset index 1b498c74..b357bd31 100644 --- a/Content/_Game/Enemies/Animations/EnemyHit.uasset +++ b/Content/_Game/Enemies/Animations/EnemyHit.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a6d4f71b4233b843ad62c71eb9b5d60f2a3b92fa759f45d07743221cbac31924 -size 16371 +oid sha256:fb7ba2db4c32ffd5e75428b21e79515b7ac4cce18195858ff9b806939bc0f9d0 +size 16244 diff --git a/Content/_Game/Enemies/Animations/HitReact_Back.uasset b/Content/_Game/Enemies/Animations/HitReact_Back.uasset new file mode 100644 index 00000000..a4a33707 --- /dev/null +++ b/Content/_Game/Enemies/Animations/HitReact_Back.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3387f63406f6d12d81755973e126e74b0fcbabb55a0ba2650c410b40de0c1552 +size 245671 diff --git a/Content/_Game/Enemies/Animations/HitReact_Front.uasset b/Content/_Game/Enemies/Animations/HitReact_Front.uasset new file mode 100644 index 00000000..f9ea1b15 --- /dev/null +++ b/Content/_Game/Enemies/Animations/HitReact_Front.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2805c3b1828665873b8e238ef2023a316f1eb8c8d8d0c0d91c72d4a7555d5f0d +size 229715 diff --git a/Content/_Game/Enemies/Animations/HitReact_Left.uasset b/Content/_Game/Enemies/Animations/HitReact_Left.uasset new file mode 100644 index 00000000..751e2902 --- /dev/null +++ b/Content/_Game/Enemies/Animations/HitReact_Left.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52c9992a15e9af645865bfaea0205acafa0b2cc3f3cd3a41ed7a87a857df8e19 +size 245560 diff --git a/Content/_Game/Enemies/Animations/HitReact_Right.uasset b/Content/_Game/Enemies/Animations/HitReact_Right.uasset new file mode 100644 index 00000000..469e6c33 --- /dev/null +++ b/Content/_Game/Enemies/Animations/HitReact_Right.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f628840bb1d714256b8774be42e669ae12fc5b9a430e1a15f567203e2fef44f7 +size 243943 diff --git a/Content/_Game/Enemies/EnemyBP.uasset b/Content/_Game/Enemies/EnemyBP.uasset index 63d4ee3c..d32d444e 100644 --- a/Content/_Game/Enemies/EnemyBP.uasset +++ b/Content/_Game/Enemies/EnemyBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6bae38e1675b163348fed4a1e916fd6a68eeef1587449307018376b2cfc6e5e2 -size 134062 +oid sha256:bb5331f53fb63137423d3cbea023b885038bb0f93e8ac910f7be829620a9e62e +size 134448 diff --git a/Content/_Game/Enemies/GruxAnimBP.uasset b/Content/_Game/Enemies/GruxAnimBP.uasset index 5d54c2f1..3360b17f 100644 --- a/Content/_Game/Enemies/GruxAnimBP.uasset +++ b/Content/_Game/Enemies/GruxAnimBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:8e9e0e2ec5cda94f9b58c378e7683ba45e1a77838e9ddbbe8aec647e9333750a -size 123136 +oid sha256:4ef47c33d2a38fab0215ec1808900ae501a93e1bc5a85c393fa61b2754d57d20 +size 135075 diff --git a/Content/_Game/EnemyController/EnemyBehaviorTree.uasset b/Content/_Game/EnemyController/EnemyBehaviorTree.uasset index 5fcde49d..62270425 100644 --- a/Content/_Game/EnemyController/EnemyBehaviorTree.uasset +++ b/Content/_Game/EnemyController/EnemyBehaviorTree.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b179280f2e58e1e3525378a1317ed9c8e56fcd2c8d9eb4f8ebaf2c32e55bd22d -size 20979 +oid sha256:0c38810c4d4fb129db1a6bdb7a4e75ea552fe4f98bcc5bb43266c1811a049ee1 +size 29430 diff --git a/Content/_Game/EnemyController/EnemyBlackboard.uasset b/Content/_Game/EnemyController/EnemyBlackboard.uasset index 3558f588..d544ecbb 100644 --- a/Content/_Game/EnemyController/EnemyBlackboard.uasset +++ b/Content/_Game/EnemyController/EnemyBlackboard.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:db02a2547f0e0c899923180e90ef5d5acdbda469f84c91f8df6f47dcb242205a -size 3857 +oid sha256:c8eb31359e50f479881739ee2c0a49007941398adce96ff06d37de11cee0f948 +size 4720 diff --git a/Content/_Game/GameMode/ShooterGameModeBaseBP.uasset b/Content/_Game/GameMode/ShooterGameModeBaseBP.uasset index 0b6959cc..8cd678cb 100644 --- a/Content/_Game/GameMode/ShooterGameModeBaseBP.uasset +++ b/Content/_Game/GameMode/ShooterGameModeBaseBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:d7865e61b7bf5c193741780ca5e78b64c8ffb4181c1788c863491019c3db9b98 +oid sha256:2a0f4b0ceea4e1f6288f5dd2750175d1b5350749af48a6a738c09af796776693 size 20850 diff --git a/Content/_Game/Maps/DefaultMap.umap b/Content/_Game/Maps/DefaultMap.umap index 0fad0e41..21c40d6a 100644 --- a/Content/_Game/Maps/DefaultMap.umap +++ b/Content/_Game/Maps/DefaultMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:1394f2e7127bc77feac2564e98a89a6d569d77f8967c0784ddc67b1f14cfd6e1 +oid sha256:cda44da7ccaf58287891017dcd1bd0dfb734686011f63fe97eb142f865c0935f size 3652563 diff --git a/Source/Shooter/Enemy.cpp b/Source/Shooter/Enemy.cpp index e24e1b7f..45f179c1 100644 --- a/Source/Shooter/Enemy.cpp +++ b/Source/Shooter/Enemy.cpp @@ -15,6 +15,7 @@ #include "ShooterCharacter.h" #include "Components/BoxComponent.h" #include "Components/CapsuleComponent.h" +#include "Engine/SkeletalMeshSocket.h" // Sets default values AEnemy::AEnemy() : @@ -31,7 +32,13 @@ AEnemy::AEnemy() : AttackRFast(TEXT("AttackRFast")), AttackL(TEXT("AttackL")), AttackR(TEXT("AttackR")), - BaseDamage(20.f) + BaseDamage(20.f), + LeftWeaponSocket(TEXT("FX_Trail_L_02")), + RightWeaponSocket(TEXT("FX_Trail_R_02")), + bCanAttack(true), + AttackWaitTime(1.f), + bDying(false), + DeathTime(4.f) { // Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; @@ -82,12 +89,17 @@ void AEnemy::BeginPlay() // Get the AI Controller EnemyController = Cast(GetController()); + + if (EnemyController) + { + EnemyController->GetBlackboardComponent()->SetValueAsBool(TEXT("CanAttack"), true); + } const FVector WorldPatrolPoint = UKismetMathLibrary::TransformLocation(GetActorTransform(), PatrolPoint); - DrawDebugSphere(GetWorld(), WorldPatrolPoint, 25.f, 12, FColor::Red, true); + //DrawDebugSphere(GetWorld(), WorldPatrolPoint, 25.f, 12, FColor::Red, true); const FVector WorldPatrolPoint2 = UKismetMathLibrary::TransformLocation(GetActorTransform(), PatrolPoint2); - DrawDebugSphere(GetWorld(), WorldPatrolPoint2, 25.f, 12, FColor::Blue, true); + //DrawDebugSphere(GetWorld(), WorldPatrolPoint2, 25.f, 12, FColor::Blue, true); if (EnemyController) { @@ -105,7 +117,34 @@ void AEnemy::ShowHealthBar_Implementation() void AEnemy::Die() { + if (bDying) return; + bDying = true; + HideHealthBar(); + + if (EnemyController) + { + EnemyController->GetBlackboardComponent()->SetValueAsBool("Dead", true); + EnemyController->StopMovement(); + } + + if (!DeathMontage) return; + + UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance(); + if (!AnimInstance) return; + + AnimInstance->Montage_Play(DeathMontage); +} + +void AEnemy::FinishDeath() +{ + GetMesh()->bPauseAnims = true; + GetWorldTimerManager().SetTimer(DeathTimer, this, &AEnemy::DestroyEnemy, DeathTime); +} + +void AEnemy::DestroyEnemy() +{ + Destroy(); } void AEnemy::PlayHitMontage(FName Section, float PlayRate) @@ -188,7 +227,7 @@ void AEnemy::CombatRangeOverlap(UPrimitiveComponent* OverlappedComponent, AActor if (!EnemyController) return; EnemyController->GetBlackboardComponent()->SetValueAsBool(TEXT("InAttackRange"), true); - UE_LOG(LogTemp, Warning, TEXT("overlap player")); + //UE_LOG(LogTemp, Warning, TEXT("overlap player")); } void AEnemy::CombatRangeEndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, @@ -201,7 +240,7 @@ void AEnemy::CombatRangeEndOverlap(UPrimitiveComponent* OverlappedComponent, AAc if (!EnemyController) return; EnemyController->GetBlackboardComponent()->SetValueAsBool(TEXT("InAttackRange"), false); - UE_LOG(LogTemp, Warning, TEXT("end overlap player")); + //UE_LOG(LogTemp, Warning, TEXT("end overlap player")); } void AEnemy::PlayAttackMontage(FName Section, float PlayRate) @@ -212,6 +251,12 @@ void AEnemy::PlayAttackMontage(FName Section, float PlayRate) AnimInstance->Montage_Play(AttackMontage, PlayRate); AnimInstance->Montage_JumpToSection(Section, AttackMontage); } + bCanAttack = false; + GetWorldTimerManager().SetTimer(AttackWaitTimer, this, &AEnemy::ResetCanAttack, AttackWaitTime); + if (EnemyController) + { + EnemyController->GetBlackboardComponent()->SetValueAsBool(TEXT("CanAttack"), false); + } } FName AEnemy::GetAttackSectionName() const @@ -231,29 +276,73 @@ FName AEnemy::GetAttackSectionName() const } } -void AEnemy::DoDamage(AActor* Victim) +void AEnemy::DoDamage(AShooterCharacter* Victim) { if (!Victim) return; - if (auto const Character = Cast(Victim)) + + UGameplayStatics::ApplyDamage(Victim, BaseDamage, EnemyController, this, UDamageType::StaticClass()); + if (USoundCue* MeleeImpactSound = Victim->GetMeleeImpactSound()) { - UGameplayStatics::ApplyDamage(Character, BaseDamage, EnemyController, this, UDamageType::StaticClass()); - if (USoundCue* MeleeImpactSound = Character->GetMeleeImpactSound()) - { - UGameplayStatics::PlaySoundAtLocation(this, MeleeImpactSound, GetActorLocation()); - } + UGameplayStatics::PlaySoundAtLocation(this, MeleeImpactSound, GetActorLocation()); } } -void AEnemy::OnLeftWeaponOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) +void AEnemy::SpawnBlood(AShooterCharacter* Victim, FName WeaponSocket) { - DoDamage(OtherActor); + if (!Victim) return; + + UParticleSystem* Particles = Victim->GetBloodParticles(); + if (!Particles) return; + + const USkeletalMeshSocket* TipSocket{ GetMesh()->GetSocketByName(WeaponSocket) }; + if (!TipSocket) return; + + const FTransform SocketTransform{ TipSocket->GetSocketTransform(GetMesh()) }; + UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), Particles, SocketTransform); +} + +void AEnemy::StunCharacter(AShooterCharacter* Victim) +{ + if (!Victim) return; + + const float Stun{ FMath::RandRange(0.f,1.f) }; + + if (Stun <= Victim->GetStunChance()) + { + Victim->Stun(); + } +} + +void AEnemy::ResetCanAttack() +{ + bCanAttack = true; + + if (!EnemyController) return; + EnemyController->GetBlackboardComponent()->SetValueAsBool(TEXT("CanAttack"), true); +} + +void AEnemy::OnLeftWeaponOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) +{ + auto const Character = Cast(OtherActor); + if (Character) + { + DoDamage(Character); + SpawnBlood(Character, LeftWeaponSocket); + StunCharacter(Character); + } } void AEnemy::OnRightWeaponOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) { - DoDamage(OtherActor); + auto const Character = Cast(OtherActor); + if (Character) + { + DoDamage(Character); + SpawnBlood(Character, RightWeaponSocket); + StunCharacter(Character); + } } void AEnemy::ActivateLeftWeapon() @@ -302,6 +391,8 @@ void AEnemy::BulletHit_Implementation(FHitResult HitResult) { UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), ImpactParticles, HitResult.Location, FRotator(0.f), true); } + + if (bDying) return; ShowHealthBar(); @@ -318,6 +409,12 @@ void AEnemy::BulletHit_Implementation(FHitResult HitResult) float AEnemy::TakeDamage(float DamageAmount, FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) { + // Set the Target blackboard key to aggro the character + if (EnemyController) + { + EnemyController->GetBlackboardComponent()->SetValueAsObject(FName("Target"), DamageCauser); + } + float DamageInflicted = DamageAmount; if (Health - DamageAmount <= 0.f) { diff --git a/Source/Shooter/Enemy.h b/Source/Shooter/Enemy.h index fc530053..ec95ab18 100644 --- a/Source/Shooter/Enemy.h +++ b/Source/Shooter/Enemy.h @@ -14,6 +14,7 @@ class UBehaviorTree; class AEnemyController; class USphereComponent; class UBoxComponent; +class AShooterCharacter; UCLASS() class SHOOTER_API AEnemy : public ACharacter, public IBulletHitInterface @@ -99,7 +100,18 @@ protected: UFUNCTION(BlueprintCallable) void DeactivateRightWeapon(); - void DoDamage(AActor* Victim); + void DoDamage(AShooterCharacter* Victim); + void SpawnBlood(AShooterCharacter* Victim, FName WeaponSocket); + + // Attemp to stun character + void StunCharacter(AShooterCharacter* Victim); + + void ResetCanAttack(); + + UFUNCTION(BlueprintCallable) + void FinishDeath(); + + void DestroyEnemy(); private: /** Particles to spawn when hit by bullets */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) @@ -202,6 +214,34 @@ private: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) float BaseDamage; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + FName LeftWeaponSocket; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + FName RightWeaponSocket; + + /** True when Enemy can attack */ + UPROPERTY(VisibleAnywhere, Category = Combat, meta = (AllowPrivateAccess = true)) + bool bCanAttack; + + FTimerHandle AttackWaitTimer; + + /** Min wait time between attacks */ + UPROPERTY(EditAnywhere, Category = Combat, meta = (AllowPrivateAccess = true)) + float AttackWaitTime; + + /** Death anim montage */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + UAnimMontage* DeathMontage; + + bool bDying; + + FTimerHandle DeathTimer; + + /** Time after death until Destroy */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + float DeathTime; public: // Called every frame virtual void Tick(float DeltaTime) override; diff --git a/Source/Shooter/ShooterCharacter.cpp b/Source/Shooter/ShooterCharacter.cpp index bd751a39..d59fa597 100644 --- a/Source/Shooter/ShooterCharacter.cpp +++ b/Source/Shooter/ShooterCharacter.cpp @@ -18,6 +18,8 @@ #include "BulletHitInterface.h" #include "Enemy.h" #include "PhysicalMaterials/PhysicalMaterial.h" +#include "EnemyController.h" +#include "BehaviorTree/BlackboardComponent.h" // Sets default values AShooterCharacter::AShooterCharacter() : @@ -79,7 +81,8 @@ AShooterCharacter::AShooterCharacter() : // Icon animation property HighlightedSlot(-1), Health(100.f), - MaxHealth(100.f) + MaxHealth(100.f), + StunChance(.25f) { // Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; @@ -212,7 +215,13 @@ float AShooterCharacter::TakeDamage(float DamageAmount, FDamageEvent const& Dama { DamageInflicted = Health; Health = 0.f; - //Die(); + Die(); + + auto EnemyController = Cast(EventInstigator); + if (EnemyController) + { + EnemyController->GetBlackboardComponent()->SetValueAsBool(FName("CharacterDead"), true); + } } else { @@ -221,6 +230,26 @@ float AShooterCharacter::TakeDamage(float DamageAmount, FDamageEvent const& Dama return DamageInflicted; } +void AShooterCharacter::Die() +{ + if (!DeathMontage) return; + + UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance(); + if (!AnimInstance) return; + + AnimInstance->Montage_Play(DeathMontage); +} + +void AShooterCharacter::FinishDeath() +{ + GetMesh()->bPauseAnims = true; + APlayerController* PC = UGameplayStatics::GetPlayerController(this, 0); + if (PC) + { + DisableInput(PC); + } +} + // Called every frame void AShooterCharacter::Tick(float DeltaTime) { @@ -309,7 +338,9 @@ void AShooterCharacter::LookUp(float Value) void AShooterCharacter::AimingButtonPressed() { bAimingButtonPressed = true; - if (CombatState != ECombatState::ECS_Reloading && CombatState != ECombatState::ECS_Equipping) + if (CombatState != ECombatState::ECS_Reloading && + CombatState != ECombatState::ECS_Equipping && + CombatState != ECombatState::ECS_Stunned) { Aim(); } @@ -504,6 +535,16 @@ EPhysicalSurface AShooterCharacter::GetSurfaceType() return UPhysicalMaterial::DetermineSurfaceType(HitResult.PhysMaterial.Get()); } +void AShooterCharacter::EndStun() +{ + CombatState = ECombatState::ECS_Unoccupied; + + if (bAimingButtonPressed) + { + Aim(); + } +} + void AShooterCharacter::UnhighlightInventorySlot() { if (HighlightedSlot != -1) @@ -513,6 +554,19 @@ void AShooterCharacter::UnhighlightInventorySlot() } } +void AShooterCharacter::Stun() +{ + if (Health <= 0.f) return; + if (!HitReactMontage) return; + + UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance(); + if (!AnimInstance) return; + + CombatState = ECombatState::ECS_Stunned; + + AnimInstance->Montage_Play(HitReactMontage); +} + int32 AShooterCharacter::GetInterpLocationIndex() { int32 LowestIndex = 1; @@ -632,7 +686,8 @@ void AShooterCharacter::StartFireTimer() void AShooterCharacter::AutoFireReset() { if (!EquippedWeapon) return; - + if (CombatState == ECombatState::ECS_Stunned) return; + CombatState = ECombatState::ECS_Unoccupied; if (WeaponHasAmmo()) @@ -1135,6 +1190,7 @@ void AShooterCharacter::ReloadWeapon() void AShooterCharacter::FinishReloading() { if (!EquippedWeapon) return; + if (CombatState == ECombatState::ECS_Stunned) return; CombatState = ECombatState::ECS_Unoccupied; @@ -1175,6 +1231,8 @@ void AShooterCharacter::FinishReloading() void AShooterCharacter::FinishEquipping() { + if (CombatState == ECombatState::ECS_Stunned) return; + CombatState = ECombatState::ECS_Unoccupied; if (bAimingButtonPressed) diff --git a/Source/Shooter/ShooterCharacter.h b/Source/Shooter/ShooterCharacter.h index a0f3cffe..47f3007f 100644 --- a/Source/Shooter/ShooterCharacter.h +++ b/Source/Shooter/ShooterCharacter.h @@ -21,12 +21,13 @@ class AAmmo; UENUM(BlueprintType) enum class ECombatState : uint8 { - ECS_Unoccupied UMETA(DisplayName = "Unoccupied"), + ECS_Unoccupied UMETA(DisplayName = "Unoccupied"), ECS_FireTimerInProgress UMETA(DisplayName = "FireTimerInProgress"), - ECS_Reloading UMETA(DisplayName = "Reloading"), - ECS_Equipping UMETA(DisplayName = "Equipping"), + ECS_Reloading UMETA(DisplayName = "Reloading"), + ECS_Equipping UMETA(DisplayName = "Equipping"), + ECS_Stunned UMETA(DisplayName = "Stunned"), - ECS_MAX UMETA(DisplayName = "DefaultMax") + ECS_MAX UMETA(DisplayName = "DefaultMax") }; USTRUCT(BlueprintType) @@ -221,6 +222,13 @@ protected: UFUNCTION(BlueprintCallable) EPhysicalSurface GetSurfaceType(); + UFUNCTION(BlueprintCallable) + void EndStun(); + + void Die(); + + UFUNCTION(BlueprintCallable) + void FinishDeath(); private: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = true)) USpringArmComponent* CameraBoom; @@ -500,6 +508,22 @@ private: /** Sound made when character gets hit by a melee attack */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) USoundCue* MeleeImpactSound; + + /** Blood splatter particles for melee hit */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + UParticleSystem* BloodParticles; + + /** Hit react anim montage; for when the character is stunned */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + UAnimMontage* HitReactMontage; + + /** Chance of being stunned when hit by an enemy */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + float StunChance; + + /** Character death anim montage */ + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Combat, meta = (AllowPrivateAccess = true)) + UAnimMontage* DeathMontage; public: /* Returns CameraBoom SubObject */ FORCEINLINE USpringArmComponent* GetCameraBoom() const { return CameraBoom; } @@ -557,4 +581,8 @@ public: float GetMaxHealth() const { return MaxHealth; } FORCEINLINE USoundCue* GetMeleeImpactSound() const { return MeleeImpactSound; } + FORCEINLINE UParticleSystem* GetBloodParticles() const { return BloodParticles; } + + void Stun(); + FORCEINLINE float GetStunChance() const { return StunChance; } };