local Recoil = require(game:GetService("ReplicatedStorage").Shared.Weapons.RecoilConfig) local fields = { "VelocityDegPerSec", "MagnitudeVariance", "RecoilAngleDeg", "AngleVarianceDeg", "AimPunchScale", "ViewRecoilTracking", "ViewPunchExtraFrac", "ViewPunchDecay", "DecayExp", "DecayLin", "VelDecay" } local function punchee(punch) if not punch then return end for _, key in ipairs(fields) do punch[key] = 0 end end punchee(Recoil.Punch) Recoil.PatternResetTime = 0 for _, config in pairs(Recoil.Configs or {}) do if config.Primary then punchee(config.Primary.Punch) punchee(config.Secondary.Punch) else punchee(config.Punch) end config.PatternResetTime = 0 end local oldGet = Recoil.Get Recoil.Get = function(weapon, mode) local config = oldGet(weapon, mode) if config.Primary then punchee(config.Primary.Punch) punchee(config.Secondary.Punch) else punchee(config.Punch) end config.PatternResetTime = 0 return config end local oldR8Punch = Recoil.r8Punch Recoil.r8Punch = function(...) local punch = oldR8Punch(...) punchee(punch) return punch end --ok i used AI on that sh