A few weeks ago, I came up with the projectile parry idea and fully implemented the system in my PVE game, Muffin Assault. The mechanic is inspired by Ultrakill’s and Bleed 2’s, which you reflect projectiles by using normal/quick melee attacks. Here’s the thing, though: it communicates through the client (melee), and all enemy projectiles are purely server-based. So here’s when I tested 3 kinds of server projectiles:
- Fireball: This projectile is fired with 40 studs/s. The player can easily parry it
- Rocket: Fired with 100 studs/s. The player still can parry that, but has to stand by the side, as the rocket will be unsynchronized and likely to hit in front of them
- Boulder: Lobbed with 1 second interval (based on @/EgoMoose’s projectile motion) and Roblox physics. Often not registering a parry hit when the boulder’s falling velocity is high
Based on testing, the efficiency of the parrying system and projectile raycast is heavily reliant on server pings (including ping check and distance check). The slower the projectile is, the more likely the parry will land. But as for some game like Combat Initiation, it features only client-sided melee and enemy projectiles which the player can seamlessly reflect them, even in front of them (like I mentioned in the rocket part), without having to worry about exploits(?) and other clients. Note that both melee systems use OverlapParams, but mine has 5-time task.wait() loop for each attack frame.
(pardon high pings. i had unexpectedly slow connection. but it might have proved something, maybe?)
Any ideas to achieve something Combat Initiation had?