Morph Script - v1.1.0
A nice little module that lets you morph into any character
Grab the module here!
VVV
How to use:
Insert the module anywhere in your game that is accessible by a Server Script. Next require the Module and you’ll be able to call these two functions:
1. Morph Player
MorphModule.MorphPlayer(Player, Model, Extra)
--[[
The above function will turn the desired player into the Model inputted.
If no Model is inputted into the function then it will instead Revert the
Player back to their original avatar.
The third parameter, Extra, is optional, where Extra is An array of instances.
Having this will clone all instances in the array into the character model after
morphing.
]]
2. Revert Player
MorphModule.RevertPlayer(Player, Extra)
--[[
The above function will turn the desired player back to their original avatar.
The second parameter, Extra, as mentioned previously, is optional.
]]
Make sure your models are properly rigged! (aka: has Humanoid, HumanoidRootPart, is unanchored, etc…)
In order for Roblox’s default ‘Animate’ script to work with multiplayer make sure you have a ‘Animator’ instance under your Humanoid.
Module:
Update - 5/18/25
--!strict
--[[
MORPH SCRIPT by Meat Make
v1.1.0
The Morph Script can Morph any player, as well as turn them back. Recommended for server side only.
-- [API] --
MorphPlayer(Player: Player, Model: Model?, Extra: {Instance}?)
RevertPlayer(Player: Player, Extra: {Instance}?)
-- Change Logs
Added function RevertPlayer to change the player character back to their own avatar
Bug fix for when var 'oldCharacter' is nil
]]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[Variables]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
local StarterCharacterScripts = game:GetService("StarterPlayer").StarterCharacterScripts
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[Types]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
type Extra = {Instance}?
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[Helper]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function GetCharacter(Player: Player): Model
local Character = Player.Character
while Character == nil do
Character = Player.Character
task.wait()
end
return (Character :: any) :: Model
end
function AddExtra(Character, Extra: Extra)
if Extra then
for _, instance in ipairs(Extra) do
local newInstance = instance:Clone()
instance.Parent = Character
end
end
end
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--[Module]
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
local module = {}
-- Morphs the player into the Model. If no model is given, RevertPlayer function is ran automatically.
function module.MorphPlayer(Player: Player, Model: Model?, Extra: Extra)
if not Model then
module.RevertPlayer(Player)
return
end
-- Morph into Model
local oldCharacter:any = GetCharacter(Player)
local newCharacter:any = Model:Clone()
newCharacter.Name = Player.Name
newCharacter.HumanoidRootPart.Anchored = false
newCharacter:PivotTo(oldCharacter:WaitForChild("HumanoidRootPart").CFrame)
Player.Character = newCharacter
newCharacter.Parent = workspace
oldCharacter:Destroy()
-- Add back all scripts from StarterCharacterScrits
for i, charScript in pairs(StarterCharacterScripts:GetChildren()) do
local charScriptClone = charScript:Clone()
charScriptClone.Parent = newCharacter
end
-- Add all Extra instances
AddExtra(newCharacter, Extra)
end
-- Morphs the player back into their original avatar.
function module.RevertPlayer(Player: Player, Extra: Extra)
local oldCharacter:any = GetCharacter(Player)
local oldCframe = oldCharacter:WaitForChild("HumanoidRootPart").CFrame
Player:LoadCharacter()
local newCharacter = GetCharacter(Player)
newCharacter:PivotTo(oldCframe)
-- Add all Extra instances
AddExtra(newCharacter, Extra)
end
return module
Try it out here!
Uncopylocked example place: