KALEIDOSCOPE morph overhaul
Key RequiredUniversal

KALEIDOSCOPE morph overhaul

Universal Scriptimdisplayimdisplay 510 views 442 executesUpdated Feb 7, 2026
Unrated
00
Lua Script•799 lines (17722 chars)
local Players = game:GetService("Players")
local Lighting = game:GetService("Lighting")
local RunService = game:GetService("RunService")

local LocalPlayer = Players.LocalPlayer
math.randomseed(tick())

local function rgb(r,g,b)
	return Color3.fromRGB(r,g,b)
end

local function randomColor()
	return Color3.new(math.random(), math.random(), math.random())
end

local function invertColor(c)
	return Color3.new(1 - c.R, 1 - c.G, 1 - c.B)
end

local function hsvToRgb(h, s, v)
	local c = v * s
	local x = c * (1 - math.abs((h / 60) % 2 - 1))
	local m = v - c
	
	local r, g, b = 0, 0, 0
	if h < 60 then r, g, b = c, x, 0
	elseif h < 120 then r, g, b = x, c, 0
	elseif h < 180 then r, g, b = 0, c, x
	elseif h < 240 then r, g, b = 0, x, c
	elseif h < 300 then r, g, b = x, 0, c
	else r, g, b = c, 0, x end
	
	return Color3.new(r + m, g + m, b + m)
end

local PALETTE = {
	GREY = rgb(140,140,140),
	DARK_GREY = rgb(85,85,85),
	ALMOST_BLACK = rgb(30,30,30),
	PINK = rgb(255,170,200),
	LIGHT_PINK = rgb(255,200,220),
	CRIMSON = rgb(120,30,40),
	WHITE = rgb(235,235,235),
	BLACK = rgb(0,0,0),
	CYAN = rgb(0,200,255),
	NEON_GREEN = rgb(50,255,100),
	PURPLE = rgb(180,50,255),
	ORANGE = rgb(255,140,0),
	GOLD = rgb(255,215,0)
}

do
	Lighting.Ambient = rgb(120,120,120)
	Lighting.OutdoorAmbient = rgb(90,90,90)
	Lighting.Brightness = 2

	local cc = Instance.new("ColorCorrectionEffect")
	cc.TintColor = rgb(255,200,215)
	cc.Brightness = 0.1
	cc.Contrast = 0.15
	cc.Saturation = -0.25
	cc.Parent = Lighting

	local bloom = Instance.new("BloomEffect")
	bloom.Intensity = 0.6
	bloom.Size = 24
	bloom.Threshold = 0.8
	bloom.Parent = Lighting
end

local PHIGHTING_FACES = {
	--banhammer
	"rbxassetid://12663739973",
	"rbxassetid://15201503293",
	"rbxassetid://15201503858",
	"rbxassetid://15201504904",

	--boombox
	"rbxassetid://11362511478",
	"rbxassetid://11362512500",
	"rbxassetid://11362513651",

	--astrobox
	"rbxassetid://7294779767",

	--coil
	"rbxassetid://18964052238",
	"rbxassetid://18964052057",
	"rbxassetid://18964052393",

	--hyperlaserkatana
	"rbxassetid://10666225215",
	"rbxassetid://10666225117",
	"rbxassetid://10666224987",

	--medkit
	"rbxassetid://12996388651",
	"rbxassetid://13035024570",
	"rbxassetid://13035026041",
	"rbxassetid://13035027563",

	--rocket
	"rbxassetid://79456612925473",
	"rbxassetid://114172010068200",
	"rbxassetid://77487540847740",

	--skateboard
	"rbxassetid://79444090478332",
	"rbxassetid://129692254425837",
	"rbxassetid://112369994631553",
	"rbxassetid://117789483333523",
	"rbxassetid://103737043081386",

	--slingshot/catshot
	"rbxassetid://11362362820",
	"rbxassetid://11362363896",
	"rbxassetid://11362365140",
	"rbxassetid://9136774350",
	"rbxassetid://10651080555",
	"rbxassetid://10651080326",
	"rbxassetid://10651080056",

	--subspace/grieferspace
	"rbxassetid://15398700458",
	"rbxassetid://81638130989263",
	"rbxassetid://128033514971806",
	"rbxassetid://121317942950887",
	"rbxassetid://87657165335729",
	"rbxassetid://138748378825337",
	"rbxassetid://127159459680988",
	"rbxassetid://76183115695777",

	--sword(john phihting)
	"rbxassetid://7502110493",
	"rbxassetid://18271727904",
	"rbxassetid://18271950515",
	"rbxassetid://18271950368",
	"rbxassetid://18271950214",

	--marshmallowsword
	"rbxassetid://10753371621",
	"rbxassetid://10753371196",
	"rbxassetid://10753371129",

	--npcs
	"rbxassetid://10651079103", --valk
	"rbxassetid://9127752391",  --dom
	"rbxassetid://3868600",     --settoing
	"rbxassetid://11219882791", --broker
	"rbxassetid://11614952566", --zuka
	"rbxassetid://14054828639"  --traffic
}

local REMOVE_ACCESSORIES = {
	"Hair",
	"Hat",
	"FaceAccessory",
	"Mask",
	"Hood",
	"Helmet",
	"Cap",
	"Beanie",
	"Crown",
	"Bandana",
	"Visor",
	"Headband"
}

local function shouldRemoveAccessory(accessory)
	local name = accessory.Name:lower()
	
	for _, keyword in ipairs(REMOVE_ACCESSORIES) do
		if name:find(keyword:lower()) then
			return true
		end
	end
	
	if accessory:IsA("Accessory") then
		local accType = tostring(accessory.AccessoryType)
		for _, keyword in ipairs(REMOVE_ACCESSORIES) do
			if accType:find(keyword) then
				return true
			end
		end
	end
	
	return false
end

local DUMMIES = {
	starterdummy = {
		Head = PALETTE.GREY,
		Torso = PALETTE.ALMOST_BLACK,
		Limbs = PALETTE.DARK_GREY,
		Accessories = PALETTE.DARK_GREY
	},

	horrordummy = {
		All = PALETTE.ALMOST_BLACK,
		Accessories = PALETTE.ALMOST_BLACK
	},

	rig = {
		All = PALETTE.GREY,
		Accessories = PALETTE.GREY
	},

	saddummy = {
		Head = PALETTE.GREY,
		Arms = PALETTE.GREY,
		Torso = PALETTE.ALMOST_BLACK,
		Legs = PALETTE.DARK_GREY,
		Accessories = PALETTE.GREY
	},

	partydummy = {
		Head = PALETTE.GREY,
		Torso = PALETTE.LIGHT_PINK,
		Limbs = PALETTE.GREY,
		Accessories = PALETTE.LIGHT_PINK
	},

	clowndummy = {
		Head = PALETTE.GREY,
		Torso = PALETTE.WHITE,
		LeftLeg = PALETTE.LIGHT_PINK,
		RightLeg = PALETTE.PINK,
		Arms = PALETTE.GREY,
		Accessories = PALETTE.PINK
	},

	lovedummy = {
		Head = PALETTE.GREY,
		Arms = PALETTE.GREY,
		Torso = PALETTE.ALMOST_BLACK,
		Legs = PALETTE.CRIMSON,
		Accessories = PALETTE.CRIMSON
	},

	chilldummy = {
		Head = PALETTE.GREY,
		Arms = PALETTE.GREY,
		Torso = PALETTE.DARK_GREY,
		Legs = PALETTE.DARK_GREY,
		Accessories = PALETTE.GREY
	},

	rainbowdummy = {
		Rainbow = true,
		Accessories = "Rainbow"
	},

	neondummy = {
		Head = PALETTE.NEON_GREEN,
		Torso = PALETTE.CYAN,
		Arms = PALETTE.PURPLE,
		Legs = PALETTE.ORANGE,
		Accessories = PALETTE.NEON_GREEN,
		Neon = true
	},

	golddummy = {
		All = PALETTE.GOLD,
		Accessories = PALETTE.GOLD,
		Neon = true
	},

	frozendummy = {
		Head = PALETTE.WHITE,
		Torso = PALETTE.CYAN,
		Limbs = rgb(150,200,255),
		Accessories = PALETTE.CYAN
	},

	lavadummy = {
		Head = PALETTE.ALMOST_BLACK,
		Torso = rgb(255,80,0),
		Limbs = rgb(200,50,0),
		Accessories = rgb(255,80,0),
		Neon = true
	},

	ghostdummy = {
		All = PALETTE.WHITE,
		Accessories = PALETTE.WHITE,
		Transparency = 0.3
	},

	checkerdummy = {
		Checker = true,
		Accessories = PALETTE.BLACK
	},

	randomskin = { 
		Random = true,
		Accessories = "Random"
	},
	
	inverted = { 
		Invert = true,
		Accessories = "Invert"
	},
	
	random_inverted = { 
		RandomInvert = true,
		Accessories = "RandomInvert"
	}
}

local DUMMY_FACE_MAP = {
	starterdummy = "STARTER",
	horrordummy = "HORROR",
	rig = "RIG",
	saddummy = "LOVE",
	partydummy = "PARTY",
	clowndummy = "CLOWN",
	lovedummy = "SAD",
	chilldummy = "CHILL",
	rainbowdummy = "ALL",
	neondummy = "ALL",
	golddummy = "ALL",
	frozendummy = "CHILL",
	lavadummy = "HORROR",
	ghostdummy = "HORROR",
	checkerdummy = "ALL",

	randomskin = "ALL",
	inverted = "ALL",
	random_inverted = "ALL"
}

local FACE_POOLS = {
	ALL = PHIGHTING_FACES,

	STARTER = {
		"rbxassetid://910076130"
	},

	HORROR = {
		"rbxassetid://15398700458",
		"rbxassetid://81638130989263",
		"rbxassetid://128033514971806",
		"rbxassetid://121317942950887",
		"rbxassetid://87657165335729",
		"rbxassetid://138748378825337",
		"rbxassetid://127159459680988",
		"rbxassetid://76183115695777"
	},

	RIG = {
		"rbxassetid://3868600",
		"rbxassetid://7502110493"
	},

	SAD = {
		"rbxassetid://11362362820",
		"rbxassetid://11362363896",
		"rbxassetid://11362365140",
		"rbxassetid://9136774350"
	},

	PARTY = {
		"rbxassetid://11362511478",
		"rbxassetid://11362512500",
		"rbxassetid://11362513651",
		"rbxassetid://79444090478332"
	},

	CLOWN = {
		"rbxassetid://9136774350",
		"rbxassetid://10651080555"
	},

	LOVE = {
		"rbxassetid://10753371621",
		"rbxassetid://10753371196",
		"rbxassetid://10753371129"
	},

	CHILL = {
		"rbxassetid://11614952566",
		"rbxassetid://12996388651",
		"rbxassetid://13035024570"
	}
}

local NPC_DUMMY_MAP = {
	StarterDummy = "starterdummy",
	TutorialDummy = "rig",
	ObbyDummy = "rig",
	TapeDummy = "chilldummy",
	LoveDummy = "lovedummy",
	PartyDummy = "partydummy",
	ClownDummy = "clowndummy",
	SadDummy = "saddummy",
	ChillDummy = "chilldummy",

	Valk = "chilldummy",
	Dom = "rig",
	Broker = "rig",
	Zuka = "chilldummy",
	Traffic = "rig",
	Settoing = "rig"
}

local DUMMY_KEYS = {}
for k in pairs(DUMMIES) do
	if k ~= "starterdummy" then
		table.insert(DUMMY_KEYS, k)
	end
end

local rainbowCharacters = {}

RunService.Heartbeat:Connect(function()
	local hue = (tick() * 50) % 360
	
	for character, _ in pairs(rainbowCharacters) do
		if character and character.Parent then
			for _, part in ipairs(character:GetChildren()) do
				if part:IsA("BasePart") then
					part.Color = hsvToRgb(hue, 1, 1)
				end
			end
			
			for _, accessory in ipairs(character:GetChildren()) do
				if accessory:IsA("Accessory") then
					local handle = accessory:FindFirstChild("Handle")
					if handle and handle:IsA("BasePart") then
						handle.Color = hsvToRgb(hue, 1, 1)
					end
				end
			end
		else
			rainbowCharacters[character] = nil
		end
	end
end)

local function stripCharacter(character)
	for _,obj in ipairs(character:GetChildren()) do
		if obj:IsA("Shirt")
		or obj:IsA("Pants")
		or obj:IsA("ShirtGraphic") then
			obj:Destroy()
		end
		
		if obj:IsA("Accessory") and shouldRemoveAccessory(obj) then
			obj:Destroy()
		end
	end
end

local function removeBodyColors(character)
	local bc = character:FindFirstChildOfClass("BodyColors")
	if bc then
		bc:Destroy()
	end
end

local function forceBlocky(character)
	for _,obj in ipairs(character:GetDescendants()) do
		if obj:IsA("CharacterMesh") then
			obj:Destroy()
		end

		if obj:IsA("SpecialMesh") and obj.Parent then
			local parent = obj.Parent
			local isBodyPart = parent.Name == "Head" 
				or parent.Name == "Torso" 
				or parent.Name == "UpperTorso"
				or parent.Name == "LowerTorso"
				or parent.Name:find("Arm")
				or parent.Name:find("Leg")
			
			if isBodyPart and parent.Name ~= "Head" then
				obj:Destroy()
			end
		end
	end
end

local function recolorAccessories(character, dummy, baseColor)
	local accessoryColor = dummy.Accessories
	
	for _, accessory in ipairs(character:GetChildren()) do
		if accessory:IsA("Accessory") then
			local handle = accessory:FindFirstChild("Handle")
			if handle and handle:IsA("BasePart") then
				local mesh = handle:FindFirstChildOfClass("SpecialMesh")
				if mesh then
					mesh.TextureId = ""
				end
				
				local c = handle.Color
				
				if accessoryColor == "Rainbow" then
				elseif accessoryColor == "Random" then
					c = randomColor()
				elseif accessoryColor == "Invert" then
					c = invertColor(c)
				elseif accessoryColor == "RandomInvert" then
					c = invertColor(baseColor)
				elseif type(accessoryColor) == "userdata" then
					c = accessoryColor
				end
				
				handle.Color = c
				
				if dummy.Neon then
					handle.Material = Enum.Material.Neon
				else
					handle.Material = Enum.Material.SmoothPlastic
				end
				
				if dummy.Transparency then
					handle.Transparency = dummy.Transparency
				end
			end
		end
	end
end

local STANDARD_LIMBS = {
	"Head", "Torso", "UpperTorso", "LowerTorso",
	"Left Arm", "Right Arm", "LeftUpperArm", "RightUpperArm",
	"LeftLowerArm", "RightLowerArm", "LeftHand", "RightHand",
	"Left Leg", "Right Leg", "LeftUpperLeg", "RightUpperLeg",
	"LeftLowerLeg", "RightLowerLeg", "LeftFoot", "RightFoot",
	"HumanoidRootPart"
}

local function isStandardLimb(partName)
	for _, limb in ipairs(STANDARD_LIMBS) do
		if partName == limb then
			return true
		end
	end
	return false
end

local function recolorNPCParts(character, dummy, baseColor)
	local accessoryColor = dummy.Accessories or dummy.All
	
	for _, part in ipairs(character:GetChildren()) do
		if part:IsA("BasePart") and not isStandardLimb(part.Name) then

			local mesh = part:FindFirstChildOfClass("SpecialMesh")
			if mesh then
				mesh.TextureId = ""
			end
			
			local c = part.Color
			
			if accessoryColor == "Rainbow" then
			elseif accessoryColor == "Random" or dummy.Random then
				c = randomColor()
			elseif accessoryColor == "Invert" or dummy.Invert then
				c = invertColor(c)
			elseif accessoryColor == "RandomInvert" or dummy.RandomInvert then
				c = invertColor(baseColor)
			elseif type(accessoryColor) == "userdata" then
				c = accessoryColor
			end
			
			part.Color = c

			if dummy.Neon then
				part.Material = Enum.Material.Neon
			else
				part.Material = Enum.Material.SmoothPlastic
			end
			
			if dummy.Transparency then
				part.Transparency = dummy.Transparency
			end
		end
	end
end

local function applyDummy(character, dummyName)
	local dummy = DUMMIES[dummyName]
	if not dummy then return end

	stripCharacter(character)

	local baseColor = randomColor()
	local isRainbow = dummy.Rainbow
	
	if isRainbow then
		rainbowCharacters[character] = true
	else
		rainbowCharacters[character] = nil
	end

	local partIndex = 0
	for _,part in ipairs(character:GetChildren()) do
		if part:IsA("BasePart") and isStandardLimb(part.Name) then
			part.Material = dummy.Neon and Enum.Material.Neon or Enum.Material.SmoothPlastic

			local c = part.Color

			if dummy.Rainbow then
				c = hsvToRgb((tick() * 50) % 360, 1, 1)
			elseif dummy.Checker then
				partIndex = partIndex + 1
				c = (partIndex % 2 == 0) and PALETTE.WHITE or PALETTE.BLACK
			elseif dummy.Random then
				c = randomColor()
			elseif dummy.Invert then
				c = invertColor(c)
			elseif dummy.RandomInvert then
				c = invertColor(baseColor)
			elseif dummy.All then
				c = dummy.All
			elseif part.Name == "Head" and dummy.Head then
				c = dummy.Head
			elseif part.Name:find("Arm") and dummy.Arms then
				c = dummy.Arms
			elseif part.Name:find("Leg") and dummy.Legs then
				c = dummy.Legs
			elseif (part.Name == "Torso" or part.Name == "UpperTorso") and dummy.Torso then
				c = dummy.Torso
			elseif part.Name == "LeftLeg" and dummy.LeftLeg then
				c = dummy.LeftLeg
			elseif part.Name == "RightLeg" and dummy.RightLeg then
				c = dummy.RightLeg
			elseif dummy.Limbs then
				c = dummy.Limbs
			end

			part.Color = c
			
			if dummy.Transparency then
				part.Transparency = dummy.Transparency
			end
		end
	end

	recolorAccessories(character, dummy, baseColor)
	
	recolorNPCParts(character, dummy, baseColor)

	local head = character:FindFirstChild("Head")
	if head then
		local face = head:FindFirstChildOfClass("Decal")
		if face then
			local poolName = DUMMY_FACE_MAP[dummyName] or "ALL"
			local pool = FACE_POOLS[poolName] or FACE_POOLS.ALL

			face.Texture = pool[math.random(#pool)]
			face.Color3 =
				(head.Color:Luminance() < 0.45)
				and PALETTE.WHITE
				or PALETTE.BLACK
		end
	end
end

local function safeApplyDummy(character, dummyName)
	if not character or not character.Parent then return end

	local humanoid = character:WaitForChild("Humanoid", 5)
	local head = character:WaitForChild("Head", 5)
	if not humanoid or not head then return end

	removeBodyColors(character)
	forceBlocky(character)
	stripCharacter(character)

	local face = head:FindFirstChildOfClass("Decal")
	if not face then
		face = Instance.new("Decal")
		face.Name = "face"
		face.Parent = head
	end

	task.wait()
	task.wait()

	applyDummy(character, dummyName)
end

local processedCharacters = {}

local function onCharacterAdded(player, character)
	processedCharacters[character] = true
	
	local humanoid = character:WaitForChild("Humanoid", 5)
	local head = character:WaitForChild("Head", 5)
	if not humanoid or not head then return end

	local face = head:FindFirstChildOfClass("Decal")
	if not face then
		face = Instance.new("Decal")
		face.Name = "face"
		face.Parent = head
	end

	task.wait(0.5)

	if player == LocalPlayer then
		safeApplyDummy(character, "starterdummy")
	else
		safeApplyDummy(character, DUMMY_KEYS[math.random(#DUMMY_KEYS)])
	end
	
	local lastCheck = tick()
	local connection
	connection = RunService.Heartbeat:Connect(function()
		if not character or not character.Parent then
			connection:Disconnect()
			processedCharacters[character] = nil
			return
		end
		
		if tick() - lastCheck > 2 then
			lastCheck = tick()
			
			local hasClothing = false
			for _, obj in ipairs(character:GetChildren()) do
				if obj:IsA("Shirt") or obj:IsA("Pants") or obj:IsA("ShirtGraphic") then
					hasClothing = true
					break
				end
				
				if obj:IsA("Accessory") and shouldRemoveAccessory(obj) then
					hasClothing = true
					break
				end
			end
			
			if hasClothing then
				if player == LocalPlayer then
					safeApplyDummy(character, "starterdummy")
				else
					safeApplyDummy(character, DUMMY_KEYS[math.random(#DUMMY_KEYS)])
				end
			end
		end
	end)
	
	humanoid.Died:Connect(function()
		if connection then
			connection:Disconnect()
		end
		processedCharacters[character] = nil
	end)
end

for _,player in ipairs(Players:GetPlayers()) do
	if player.Character and not processedCharacters[player.Character] then
		task.spawn(onCharacterAdded, player, player.Character)
	end

	player.CharacterAdded:Connect(function(char)
		task.spawn(onCharacterAdded, player, char)
	end)
end

Players.PlayerAdded:Connect(function(player)
	player.CharacterAdded:Connect(function(char)
		task.spawn(onCharacterAdded, player, char)
	end)
	
	if player.Character and not processedCharacters[player.Character] then
		task.spawn(onCharacterAdded, player, player.Character)
	end
end)

local function handleNPC(model)
	if not model:IsA("Model") then return end
	if Players:GetPlayerFromCharacter(model) then return end

	local humanoid = model:FindFirstChildOfClass("Humanoid")
	if not humanoid then
		humanoid = model:WaitForChild("Humanoid", 5)
	end
	if not humanoid then return end

	task.wait()

	local dummyName = NPC_DUMMY_MAP[model.Name] or "rig"
	safeApplyDummy(model, dummyName)
end

for _,desc in ipairs(workspace:GetDescendants()) do
	if desc:IsA("Model") then
		task.spawn(handleNPC, desc)
	end
end

workspace.DescendantAdded:Connect(function(desc)
	if desc:IsA("Model") then
		task.spawn(handleNPC, desc)
	end
end)

print("Trapped.")

Features & Information

"when i say Ka you say leiodoscope" a script based on the probably abandoned KALEIDOSCOPE game that replaces humanoids with dummies (reuses phighting faces) the script also forces r6 blocky rig fall elseif himself spawns and watches the localplayer (lie) awesome server https://discord.com/invite/EnXNUGePs4

Community Comments (0)

No comments yet for this script.

More Scripts for Universal Scripts