Fake Tails Doll Tripwire XD
Key Required

Fake Tails Doll Tripwire XD

(ANNIVERSARY) Outcome Memories v0.2lil2kki_lil2kki_ 1K views 778 executesUpdated Sep 22, 2026
Unrated
00
Lua Script•356 lines (16066 chars)
print("[FAKETAILSDOLL] Now loading... Made by lil2kki <3")

game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.Skins.Default:Destroy()
game.ReplicatedStorage.ClientAssets.Characters.Survivors.Tails.Skins.Default:Clone().Parent = 
game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.Skins

game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate:Destroy()
game.ReplicatedStorage.ClientAssets.Characters.Survivors.Tails.scriptstuff.Animate:Clone().Parent = 
game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff
        
for _, v in ipairs(game.ReplicatedStorage.ClientAssets:FindFirstChild("FAKETAILSDOLL", true).Anims:GetChildren()) do
    game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims[v.Name]:Destroy()
    v:Clone().Parent = game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims
end

game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims.Canon.Walk:Clone().Parent = 
game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims.Canon
game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims.Canon.Walk.Name = "Run"

while game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims:FindFirstChild("SelectPose")
do game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims:FindFirstChild("SelectPose"):Destroy() end
game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims.Default.Run:Clone().Parent = 
game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims
game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate.Anims.Run.Name = "SelectPose"

game.ReplicatedStorage.ClientAssets.WinScreens.TailsDoll.WinAnim.AnimationId = "rbxassetid://92259033776440" -- tails sit

local model = game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.Skins.Default

local function find(name) return model:FindFirstChild(name, true) end

while find("Tails") do find("Tails").Name = "bruh. ability input script brokes so i had to rename it" end

-- details
for _, v in ipairs(model.Head:GetChildren()) do
    if v:IsA("BasePart") and v.Name == "MAD_HEAD" then v.Name = v.Name.."_PART" end
    if v:IsA("BasePart") and v.Name == "SAD_HEAD" then v.Name = v.Name.."_PART" end
end

local applycomestic = loadstring(game:HttpGet("https://pastebin.com/raw/qHzmXnbm"))()
model:SetAttribute("EquippedCosmetics", "FAKETAILSDOLL,")
model:SetAttribute("Character", "Tails")
applycomestic(model)

-- custom animmmm
local function playSwing(model)
	local body = model:FindFirstChild("Body", true)
	local waist = model:FindFirstChild("waist", true)
	if not body or not waist then return end

	local rArm = body:FindFirstChild("Cylinder.010", true)
	local lArm = body:FindFirstChild("Left Arm", true)
	local head = body:FindFirstChild("Head", true)
	local torso = waist:FindFirstChild("Body", true)
	if not rArm or not lArm or not head or not torso then return end

    if model:GetAttribute("playSwing") then return end
    model:SetAttribute("playSwing", true)

	-- base C0 positionsss (originals have identity rotation)
	local rb = CFrame.new(0.3922, 0.5312, 0.1235)
	local lb = CFrame.new(-0.4071, 0.5312, 0.1235)
	local hb = CFrame.new(0, 0.8754, 0.1455)
	local wb = CFrame.new(0.0003, 0.0453, -0.0847)

	-- rest pose
	local oR, oL, oH, oW = rArm.C0, lArm.C0, head.C0, torso.C0

    local rad = math.rad
    local Ang = CFrame.Angles
	local kfs = {
		-- windup
		{0.06, rb*Ang(rad(-130),rad(-25),rad(15)), lb*Ang(rad(40),rad(-15),0), hb*Ang(rad(-10),rad(-20),0), wb*Ang(0,rad(-15),0)},
		-- strike
		{0.05, rb*Ang(rad(20),rad(50),rad(-15)), lb*Ang(rad(-10),rad(35),0), hb*Ang(rad(5),rad(20),0), wb*Ang(0,rad(25),0)},
		-- impact
		{0.04, rb*Ang(rad(55),rad(70),rad(-25)), lb*Ang(rad(-30),rad(50),0), hb*Ang(rad(10),rad(30),0), wb*Ang(0,rad(35),0)},
		-- follow through
		{0.06, rb*Ang(rad(85),rad(90),rad(-35)), lb*Ang(rad(-45),rad(55),0), hb*Ang(rad(15),rad(35),0), wb*Ang(0,rad(40),0)},
		-- recovery
		{0.12, oR, oL, oH, oW},
	}

	local cur = {rArm.C0, lArm.C0, head.C0, torso.C0}

	for _, kf in ipairs(kfs) do
		local dur, tR, tL, tH, tW = kf[1], kf[2], kf[3], kf[4], kf[5]
		local steps = math.max(1, math.floor(dur / 0.015))
		local st = dur / steps
		for i = 1, steps do
			local a = i / steps
			rArm.C0 = cur[1]:Lerp(tR, a)
			lArm.C0 = cur[2]:Lerp(tL, a)
			head.C0 = cur[3]:Lerp(tH, a)
			torso.C0 = cur[4]:Lerp(tW, a)
			task.wait(st)
		end
		rArm.C0, lArm.C0, head.C0, torso.C0 = tR, tL, tH, tW
		cur = {tR, tL, tH, tW}
	end

    model:SetAttribute("playSwing", nil)
end

-- player upd

local function tryUpdatePlayer(player)
    if not player:IsA("Model") then return end
    if player:GetAttribute("Character") ~= "TailsDoll" then return end
    if player:GetAttribute("Skin") ~= "Default" then return end

    print("[FAKETAILSDOLL] Prebuild updating model for " .. player.Name .. "...")

    if player:FindFirstChild("OverlayModel") then
        warn("[FAKETAILSDOLL] Player already have OverlayModel, update cancelled")
        return
    end
    
    if player:WaitForChild("Animate") and player:WaitForChild("Humanoid") then
    
        local Animate = game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.scriptstuff.Animate:Clone()

        Animate.Name = "Tails"..Animate.Name
        Animate.Parent = player
        Animate.Enabled = true

        function loadTrack(id)
            local anim = Instance.new("Animation")
            anim.AnimationId = id
            local track = player.Humanoid.Animator:LoadAnimation(anim)
            return track
        end
        function playWhileTrack(track, myTrack)
            myTrack:Play(0.1)
            track.Stopped:Once(function() myTrack:Stop(0.1) end)
            return myTrack
        end

        local ServerBrustHit = loadTrack("rbxassetid://75852355428865")
        
        local Strangled = player.Humanoid.Animator:LoadAnimation(Animate.Anims.Strangled)
        local Jump = player.Humanoid.Animator:LoadAnimation(Animate.Anims.Jump)

        local Glide = player.Humanoid.Animator:LoadAnimation(Animate.Anims.alt.Run)

        local SitTails = loadTrack("rbxassetid://132926716277265")
        local Pipebomb = loadTrack("rbxassetid://137946742808216")
        local Cory = loadTrack("rbxassetid://118810363050448")

        player.Humanoid.Animator.AnimationPlayed:Connect(function(track)
            --            print("PLAYED: "..track.Name.." - "..track.Animation.AnimationId)
            local id = track.Animation.AnimationId
            if id == "rbxassetid://92259033776440" then playWhileTrack(track, SitTails) end
            if id == "rbxassetid://112656139256072" then playWhileTrack(track, Cory) end
            if id == "rbxassetid://100732265533480" then playWhileTrack(track, Pipebomb):AdjustSpeed(0.815) end
            if track.Name == "DoubleJump" then 
                Jump:Play(0.1)
                Jump:AdjustSpeed(2)
            end
            if (track.Name == "Glide" or id == player.Glide.ANIMS.Glide.AnimationId) and Glide.Animation.AnimationId ~= track.Animation.AnimationId then -- Glide
                Glide:Play(0.2)
                track.Stopped:Once(function() Glide:Stop(0.2) end)
            end
            if id == "rbxassetid://138468646867674" or id == "rbxassetid://101931899083669" then -- swings
                --if math.random() < 0.2 then
                    ServerBrustHit:Play(0.1)
                    ServerBrustHit:AdjustSpeed(2)
                    return
            end
            if id == "rbxassetid://107665101569245" then -- kill
                Strangled:Play(0.1)
                Strangled:AdjustSpeed(0.1)
                track.Stopped:Once(function() Strangled:Stop(0.1) end)
                return
            end
            if track.Name == "Animation" then
                -- try to sync server anims
                if game.Players.LocalPlayer.Name ~= player.Name then
                    for _, Anim in ipairs(player.Animate.Anims:GetDescendants()) do
                        if not Anim:IsA("Animation") then continue end
                        if id ~= Anim.AnimationId then continue end
                        -- print("^ Thats", Anim:GetFullName())
                        local MyAnim = Animate:FindFirstChild(Anim.Parent.Name, true):FindFirstChild(Anim.Name)
                        local TempTrack = player.Humanoid.Animator:LoadAnimation(MyAnim)
                        TempTrack:Play(0.1)
                        TempTrack:AdjustSpeed(track.Speed)
                        track.Stopped:Once(function() TempTrack:Stop(0.1) end)
                        return
                    end
                end
            end
        end)

        local StrangledR = player.Humanoid.Animator:LoadAnimation(Animate.Anims.StrangledR)
        player.AttributeChanged:Connect(function(attr)
            if attr == "StunDur" or attr == "BurnDur" then
                local val = player:GetAttribute(attr)
                if val and val > 0 then
                	if player:GetAttribute("State") == "default" then task.spawn(function()
                        StrangledR:Play(0.1)
                        StrangledR:AdjustSpeed(1.51)
                        task.wait(0.9)
                        StrangledR:Stop(0.3)
                	end) end
                    player:SetAttribute("State", "alt")
                elseif not val or val <= 0 then
                    player:SetAttribute("State", "default")
                end
            end
        end)

        print("[FAKETAILSDOLL] Tails animatior added!")
    end

    print("[FAKETAILSDOLL] Character ready! Updating " .. player:GetFullName() .. "...")
    
    -- Char Model
    local ogHRP = player:FindFirstChild("HumanoidRootPart", true)
    if not ogHRP then return end

    for _, v in ipairs(player:GetDescendants()) do
        if v:IsA("BasePart") and v.Name ~= "HumanoidRootPart" then
            v.Color = Color3.new(0/255, 0/255, 0/255)
            v.Material = Enum.Material.Neon
            v.LocalTransparencyModifier = 1
            v.Changed:Connect(function(property)
                if property == "LocalTransparencyModifier" then
                    v.LocalTransparencyModifier = 1
                end
                if property == "Transparency" and v.Name == "Head" then
                    --warn(v:GetFullName(), v.Transparency)
                    for _, ov in ipairs(player.OverlayModel:GetDescendants()) do 
                        if not ov:GetAttribute("IgnoreTransparency") then
                            pcall(function() ov.Transparency = v.Transparency end)
                        end
                    end
                end
            end)
        end
        if v:IsA("SurfaceGui") then v.Enabled = false end
        if v:IsA("SurfaceAppearance") then v:Destroy() end
    end

    -- Overlay Model
    local OverlayModel = game.ReplicatedStorage.ClientAssets.Characters.EXE.TailsDoll.Skins.Default:Clone()
    OverlayModel.Name = "OverlayModel"
    OverlayModel.Parent = player

    local myHRP = OverlayModel:FindFirstChild("HumanoidRootPart", true)
    if not myHRP then OverlayModel:Destroy() return end

    for _, v in ipairs(OverlayModel:GetDescendants()) do
        if v:IsA("Humanoid") then v:Destroy() end
        if v:IsA("Animator") then v:Destroy() end
        if v:IsA("BasePart") then
            v.CanCollide = false
            v.Anchored = false
            v.CanTouch = false
            v.CanQuery = false
            v.Massless = true
            if v.Transparency > 0 then v:SetAttribute("IgnoreTransparency", true) end
        end
    end

    -- yooo (im stupidoo)
    local hrpY = -0.0
    local weld = Instance.new("Weld")
    weld.Part0 = ogHRP
    weld.Part1 = myHRP
    weld.C0 = CFrame.new()
    weld.C1 = CFrame.new(0, -hrpY, 0) 
    weld.Parent = myHRP
    myHRP:PivotTo(ogHRP.CFrame * CFrame.new(0, hrpY, 0))

    pcall(function()
    	-- retarget camera
        player.Waist.MainBody.Part0 = OverlayModel.waist
        player.MainBody.Head.Part0 = OverlayModel.Head
    end)

    -- sounds and stuff...
    player.DescendantAdded:Connect(function(desc)
        -- if desc:GetFullName():find(".FOVMultiplier") then return end
        -- print(desc.ClassName, desc:GetFullName())

        if desc.Name == "Rolling" then desc:Destroy() end -- NO ROLL VELOC
        if desc.Name == "_BLOOD" then
        	desc.Name = "_BLOOD_HANDLED"
            local depth1 = {}
            local depth2 = {}
            local depth3 = {}
            for _, v in ipairs(OverlayModel:GetDescendants()) do
            	if not v:IsA("MeshPart") then continue end
                if #v:GetFullName():split(".") - #OverlayModel:GetFullName():split(".") <= 1 then table.insert(depth1, v) end
                if #v:GetFullName():split(".") - #OverlayModel:GetFullName():split(".") <= 2 then table.insert(depth2, v) end
                if #v:GetFullName():split(".") - #OverlayModel:GetFullName():split(".") <= 3 then table.insert(depth3, v) end
            end
            -- depth 1
            if #depth1 > 0 then desc.Parent = depth1[math.random(#depth1)] end -- move org and then clone it
            if #depth1 > 0 then desc:Clone().Parent = depth1[math.random(#depth1)] end
            -- depth 2
            if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end
            if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end
            if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end
            if #depth2 > 0 then desc:Clone().Parent = depth2[math.random(#depth2)] end
            -- depth 3
            if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end
            if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end
            if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end
            if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end
            if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end
            if #depth3 > 0 then desc:Clone().Parent = depth3[math.random(#depth3)] end
        end

        if not desc:IsA("Sound") then return end
        if not desc.Parent or not desc.Parent.Parent then return end
        if desc:GetAttribute("IsMyCloneToIgnore") then return end

        --print(desc.ClassName, desc:GetFullName())
        
        if desc.Name:find("Retract") then desc:Destroy() end
        if desc.Name:find("Unleashed") then desc:Destroy() end
        if desc.Name:find("Swings") then
            desc.SoundId = game.ReplicatedStorage.ClientAssets.Sounds.sfx.Game.EXE.Swing.SoundId
            return
        end
    end)

    print("[FAKETAILSDOLL] Updating finished for", player.Name .. "!")
end


local function onPlayerAdded(player)
    -- Check if they already spawned in
    if player.Character then tryUpdatePlayer(player.Character) end
    -- Listen for the player (re)spawning
    _G.FAKETAILSDOLLCharacterAddedConn = _G.FAKETAILSDOLLCharacterAddedConn or {}
    if _G.FAKETAILSDOLLCharacterAddedConn[player.Name] then
        _G.FAKETAILSDOLLCharacterAddedConn[player.Name]:Disconnect()
        print("[FAKETAILSDOLL] Previous FAKETAILSDOLLCharacterAddedConn disconnected for", player.Name)
    end
    _G.FAKETAILSDOLLCharacterAddedConn[player.Name] = player.CharacterAdded:Connect(tryUpdatePlayer) 
end

for _, player in game.Players:GetPlayers() do onPlayerAdded(player) end

if _G.FAKETAILSDOLLPlayerAddedConn then
    _G.FAKETAILSDOLLPlayerAddedConn:Disconnect()
    print("[FAKETAILSDOLL] Previous FAKETAILSDOLLPlayerAddedConn disconnected")
end
_G.FAKETAILSDOLLPlayerAddedConn = game.Players.PlayerAdded:Connect(onPlayerAdded)

-- debug xd
pcall(function()
    -- game:GetService("Players").LocalPlayer.PlayerGui.FUNPanel.RemoteEvent:FireServer("changeascharacter", {"TailsDoll", "EXE"})
end)

Features & Information

silly little thing https://youtu.be/C3FPGwaI8a0 #sonicexe #outcomememories

Community Comments (0)

No comments yet for this script.

More Scripts for (ANNIVERSARY) Outcome Memories v0.2