local Players = game:GetService("Players") local player = Players.LocalPlayer local playerGui = player:WaitForChild("PlayerGui") local ORIGINAL_ID = "136536827155962" local REPLACEMENT_ID = "128779949980528" local ANIMATION_DURATION = 1 local COOLDOWN = 1 local lastAnimationTime = 0 local currentTrack local active = false -- CLEANUP OLD GUI local old = playerGui:FindFirstChild("JJS Dropkick Script") if old then old:Destroy() end -- STARTUP NOTE local gui = Instance.new("ScreenGui") gui.Name = "JJS Dropkick Script" gui.ResetOnSpawn = false gui.DisplayOrder = 999999 gui.Parent = playerGui local note = Instance.new("Frame") note.Size = UDim2.fromOffset(300, 150) note.Position = UDim2.new(0.5, -150, 0.5, -75) note.BackgroundColor3 = Color3.fromRGB(20, 24, 35) note.BorderSizePixel = 0 note.Parent = gui Instance.new("UICorner", note).CornerRadius = UDim.new(0, 15) local outline = Instance.new("UIStroke") outline.Color = Color3.fromRGB(65, 140, 255) outline.Thickness = 1.5 outline.Parent = note local heading = Instance.new("TextLabel") heading.Size = UDim2.new(1, -20, 0, 35) heading.Position = UDim2.fromOffset(10, 10) heading.BackgroundTransparency = 1 heading.Text = "JJS DROPKICK" heading.TextColor3 = Color3.fromRGB(100, 170, 255) heading.Font = Enum.Font.GothamBold heading.TextSize = 20 heading.Parent = note local message = Instance.new("TextLabel") message.Size = UDim2.new(1, -24, 0, 42) message.Position = UDim2.fromOffset(12, 48) message.BackgroundTransparency = 1 message.Text = "Requires the Switcher / Todo character." message.TextColor3 = Color3.fromRGB(225, 230, 240) message.Font = Enum.Font.Gotham message.TextSize = 13 message.TextWrapped = true message.Parent = note local button = Instance.new("TextButton") button.Size = UDim2.new(1, -24, 0, 35) button.Position = UDim2.fromOffset(12, 103) button.BackgroundColor3 = Color3.fromRGB(55, 115, 235) button.Text = "OK • ACTIVATE" button.TextColor3 = Color3.new(1, 1, 1) button.Font = Enum.Font.GothamBold button.TextSize = 13 button.Parent = note Instance.new("UICorner", button).CornerRadius = UDim.new(0, 9) -- MOVE LABELS local unwantedMoves = { ["swift kick"] = true, ["pebble throw"] = true, ["elbow drop"] = true } local function normalize(text) return string.lower((text or ""):gsub("^%s+", ""):gsub("%s+$", "")) end -- Find the individual move card without hiding the whole panel. local function findMoveCard(label) local candidate = label for _ = 1, 8 do local parent = candidate.Parent if not parent or not parent:IsA("GuiObject") then break end -- Stop before reaching a shared moveset container. local otherMoveFound = false for _, descendant in ipairs(parent:GetDescendants()) do if descendant ~= label and (descendant:IsA("TextLabel") or descendant:IsA("TextButton")) then local name = normalize(descendant.Text) if unwantedMoves[name] or name == "brute force" or name == "dropkick" then otherMoveFound = true break end end end if otherMoveFound then break end candidate = parent end return candidate end local function updateMoveset() for _, obj in ipairs(playerGui:GetDescendants()) do if obj:IsA("TextLabel") or obj:IsA("TextButton") then local name = normalize(obj.Text) if name == "brute force" then obj.Text = "Dropkick" elseif unwantedMoves[name] then local card = findMoveCard(obj) if card and card:IsA("GuiObject") then card.Visible = false end end end end end -- ANIMATION local function stopCurrent() if currentTrack then pcall(function() currentTrack:Stop(0) currentTrack:Destroy() end) currentTrack = nil end end local function playReplacement(humanoid) if not humanoid or humanoid.Health <= 0 then return end if os.clock() - lastAnimationTime < COOLDOWN then return end lastAnimationTime = os.clock() stopCurrent() local animator = humanoid:FindFirstChildOfClass("Animator") if not animator then return end local animation = Instance.new("Animation") animation.AnimationId = "rbxassetid://" .. REPLACEMENT_ID local success, track = pcall(function() return animator:LoadAnimation(animation) end) animation:Destroy() if not success or not track then return end currentTrack = track track.Priority = Enum.AnimationPriority.Action4 track.Looped = false local startingHealth = humanoid.Health local cancelled = false local damageConnection = humanoid.HealthChanged:Connect(function(newHealth) if newHealth < startingHealth and not cancelled then cancelled = true stopCurrent() end end) track:Play(0.05) task.delay(ANIMATION_DURATION, function() if currentTrack == track then stopCurrent() end if damageConnection then damageConnection:Disconnect() end end) end local function setupCharacter(character) local humanoid = character:WaitForChild("Humanoid") local animator = humanoid:WaitForChild("Animator") stopCurrent() animator.AnimationPlayed:Connect(function(track) if not active or not track.Animation then return end local id = track.Animation.AnimationId:match("%d+") if id == ORIGINAL_ID then playReplacement(humanoid) end end) end -- ACTIVATE button.MouseButton1Click:Connect(function() if active then return end active = true note:Destroy() if player.Character then task.spawn(setupCharacter, player.Character) end player.CharacterAdded:Connect(function(character) task.spawn(setupCharacter, character) end) task.spawn(function() while active and gui.Parent do updateMoveset() task.wait(0.25) end end) end)