local Players = game:GetService("Players") local RunService = game:GetService("RunService") local UserInputService = game:GetService("UserInputService") local TweenService = game:GetService("TweenService") local Debris = game:GetService("Debris") local player = Players.LocalPlayer local character = player.Character or player.CharacterAdded:Wait() local humanoid = character:WaitForChild("Humanoid") local rootPart = character:FindFirstChild("HumanoidRootPart") or character local abilityInProgress = false local malShrineActive = false local m1Cooldown = 2 local disCooldownTime = 5 local shrineCooldownTime = 18 local grappleCooldownTime = 5 local disNextAvailableTime = 0 local grappleNextAvailableTime = 0 local idleAnimId = "rbxassetid://115268929362938" local walkAnimId = "rbxassetid://123678890237669" local runAnimId = "rbxassetid://132086389849889" local m1AnimId = "rbxassetid://135853087227453" local function createAnimation(animId) local anim = Instance.new("Animation") anim.AnimationId = animId return anim end local idleTrack = humanoid:LoadAnimation(createAnimation(idleAnimId)) local walkTrack = humanoid:LoadAnimation(createAnimation(walkAnimId)) local runTrack = humanoid:LoadAnimation(createAnimation(runAnimId)) local m1Track = humanoid:LoadAnimation(createAnimation(m1AnimId)) local walkingSoundBase = Instance.new("Sound") walkingSoundBase.SoundId = "rbxassetid://99809965759734" walkingSoundBase.Looped = false walkingSoundBase.Volume = 1 walkingSoundBase.Parent = rootPart local runningSoundBase = Instance.new("Sound") runningSoundBase.SoundId = "rbxassetid://79222929114377" runningSoundBase.Looped = false runningSoundBase.Volume = 1 runningSoundBase.Parent = rootPart local slashSfx = Instance.new("Sound") slashSfx.SoundId = "rbxassetid://81361259756089" slashSfx.Volume = 1 slashSfx.Parent = rootPart local lastWalkingTime = 0 local lastRunningTime = 0 local walkingFootstepInterval = 0.5 local runningFootstepInterval = 0.3 local function updateAnimations() if abilityInProgress then return end local isMoving = humanoid.MoveDirection.Magnitude > 0 local isRunning = humanoid.WalkSpeed > 16 if isMoving then if isRunning then if not runTrack.IsPlaying then idleTrack:Stop() walkTrack:Stop() runTrack:Play() end else if not walkTrack.IsPlaying then idleTrack:Stop() runTrack:Stop() walkTrack:Play() end end else if not idleTrack.IsPlaying then walkTrack:Stop() runTrack:Stop() idleTrack:Play() end end end RunService.Heartbeat:Connect(function() updateAnimations() local currentTime = tick() local isMoving = humanoid.MoveDirection.Magnitude > 0 local isRunning = humanoid.WalkSpeed > 16 if isMoving then if isRunning and (currentTime - lastRunningTime >= runningFootstepInterval) then local runSound = runningSoundBase:Clone() runSound.Parent = rootPart runSound:Play() Debris:AddItem(runSound, runSound.TimeLength + 1) lastRunningTime = currentTime elseif (not isRunning) and (currentTime - lastWalkingTime >= walkingFootstepInterval) then local walkSound = walkingSoundBase:Clone() walkSound.Parent = rootPart walkSound:Play() Debris:AddItem(walkSound, walkSound.TimeLength + 1) lastWalkingTime = currentTime end end end) local function stopAllAnimations() local animator = humanoid:FindFirstChildOfClass("Animator") if animator then for _, track in ipairs(animator:GetPlayingAnimationTracks()) do track:Stop() end end end local function playCustomAnimation(animationId, loop) local anim = Instance.new("Animation") anim.AnimationId = "rbxassetid://" .. animationId local track = humanoid:LoadAnimation(anim) track.Looped = loop or false track:Play() return track end local function playCustomSound(soundId) local sound = Instance.new("Sound") sound.SoundId = "rbxassetid://" .. soundId sound.Volume = 1 sound.Looped = false sound.Parent = rootPart sound:Play() return sound end local originalWalkSpeed = humanoid.WalkSpeed local originalJumpPower = humanoid.JumpPower local freezeCFrame = rootPart.CFrame local freezeConnection local function freezeCharacter() humanoid.WalkSpeed = 0 humanoid.JumpPower = 0 freezeCFrame = rootPart.CFrame freezeConnection = RunService.Heartbeat:Connect(function() rootPart.CFrame = freezeCFrame end) end local function unfreezeCharacter() humanoid.WalkSpeed = originalWalkSpeed humanoid.JumpPower = originalJumpPower if freezeConnection then freezeConnection:Disconnect() freezeConnection = nil end end local screenGui = Instance.new("ScreenGui") screenGui.Parent = player:WaitForChild("PlayerGui") local function createLabel(size, pos, bgColor, txtColor, font, text) local label = Instance.new("TextLabel") label.Size = size label.Position = pos label.BackgroundColor3 = bgColor or Color3.new(1,0,0) label.TextColor3 = txtColor or Color3.new(1,1,1) label.Font = font or Enum.Font.SourceSansBold label.TextScaled = true label.Text = text or "" label.Parent = screenGui return label end local disLabel = createLabel(UDim2.new(0,200,0,50), UDim2.new(1,-210,1,-60), Color3.fromRGB(139,0,0), Color3.fromRGB(255,0,0), Enum.Font.SourceSansBold, "Dismantle") local abilityLabel = createLabel(UDim2.new(0,300,0,50), UDim2.new(1,-320,0,20), Color3.new(1,1,1), Color3.fromRGB(255,200,0), Enum.Font.GothamBlack, "malevolent shrine") local messageLabel = createLabel(UDim2.new(0,400,0,100), UDim2.new(0.5,-200,1,-150), Color3.new(1,1,1), Color3.fromRGB(255,0,0), Enum.Font.GothamBlack, "") messageLabel.BackgroundTransparency = 1 local grappleLabel = createLabel(UDim2.new(0,300,0,50), UDim2.new(0,20,1,-70), Color3.new(1,1,1), Color3.fromRGB(255,200,0), Enum.Font.GothamBlack, "Grapple Ready") grappleLabel.BackgroundTransparency = 1 local function updateDisLabel() local remaining = disNextAvailableTime - tick() if remaining > 0 then disLabel.Text = string.format("Cooldown: %.1f", remaining) else disLabel.Text = "Dismantle" end end local function updateAbilityLabel(text) abilityLabel.Text = text or "malevolent shrine" end local function updateGrappleLabel(cooldown) if cooldown and cooldown > 0 then grappleLabel.Text = "Grapple - cooldown: " .. cooldown .. "s" else grappleLabel.Text = "Grapple Ready" end end RunService.Heartbeat:Connect(updateDisLabel) local function onM1Click() if abilityInProgress or malShrineActive then return end abilityInProgress = true stopAllAnimations() m1Track:Play() slashSfx:Play() task.wait(m1Cooldown) abilityInProgress = false end UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed then return end if input.UserInputType == Enum.UserInputType.MouseButton1 then onM1Click() end end) UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed or abilityInProgress or malShrineActive then return end if input.KeyCode == Enum.KeyCode.V then local currentTime = tick() if currentTime < disNextAvailableTime then return end disNextAvailableTime = currentTime + disCooldownTime abilityInProgress = true stopAllAnimations() local anim = Instance.new("Animation") anim.AnimationId = "rbxassetid://121162477402224" local animTrack = humanoid:LoadAnimation(anim) animTrack:Play() local sound = Instance.new("Sound") sound.SoundId = "rbxassetid://81361259756089" sound.Volume = 1 sound.Parent = rootPart sound:Play() Debris:AddItem(sound, sound.TimeLength + 1) local played, err = pcall(function() animTrack.Stopped:Wait() end) if not played then task.wait(1) end abilityInProgress = false end end) local canActivateShrine = true local shrineCooldownRemaining = shrineCooldownTime UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed or abilityInProgress then return end if input.KeyCode == Enum.KeyCode.B and canActivateShrine then abilityInProgress = true malShrineActive = true canActivateShrine = false updateAbilityLabel("Activating...") stopAllAnimations() freezeCharacter() messageLabel.Text = "I'm tired of this" local anim1 = playCustomAnimation("122580527125278", true) task.wait(3) anim1:Stop() messageLabel.Text = "Let's end this NOW" local anim2 = playCustomAnimation("96173779255396", true) task.wait(3) anim2:Stop() messageLabel.Text = "Ryƍiki Tenkai Fukuma Mizushi" local anim3 = playCustomAnimation("101816924844805", false) local sound = playCustomSound("88406027536494") anim3.Stopped:Wait() task.wait(3) messageLabel.Text = "" unfreezeCharacter() malShrineActive = false abilityInProgress = false shrineCooldownRemaining = shrineCooldownTime while shrineCooldownRemaining > 0 do updateAbilityLabel("malevolent shrine - cooldown: " .. shrineCooldownRemaining .. "s") task.wait(1) shrineCooldownRemaining = shrineCooldownRemaining - 1 end canActivateShrine = true updateAbilityLabel() end end) local canActivateGrapple = true local grappleCooldownRemaining = grappleCooldownTime UserInputService.InputBegan:Connect(function(input, gameProcessed) if gameProcessed or abilityInProgress or malShrineActive then return end if input.KeyCode == Enum.KeyCode.N and canActivateGrapple then if tick() < grappleNextAvailableTime then return end grappleNextAvailableTime = tick() + grappleCooldownTime abilityInProgress = true canActivateGrapple = false stopAllAnimations() local grappleAnim = playCustomAnimation("121162477402224", false) playCustomSound("118208498013260") local mouse = player:GetMouse() local targetPosition = mouse.Hit.p local tweenInfo = TweenInfo.new(0.5, Enum.EasingStyle.Linear, Enum.EasingDirection.Out) local goal = {Position = targetPosition} local tween = TweenService:Create(rootPart, tweenInfo, goal) tween:Play() tween.Completed:Wait() task.wait(0.2) abilityInProgress = false grappleCooldownRemaining = grappleCooldownTime while grappleCooldownRemaining > 0 do updateGrappleLabel(grappleCooldownRemaining) task.wait(1) grappleCooldownRemaining = grappleCooldownRemaining - 1 end canActivateGrapple = true updateGrappleLabel() end end)