Run it
Copy the script and paste it into your executor.
()
()
()
(, :(, ))
()
(, :(, ))
(:(, ))()
(:(, ))()
(()
Player = :().LocalPlayer
({, , , , , , , , , , , , , , , , , })
.()
Functions[]()
.()
(:(, ))()
Mouse = Player:()
runservice = :()
Players = :()
uis = :()
ins = .new
v3 = .new
cf = .new
angles = .Angles
rad = .rad
sin = .sin
cos = .cos
random = .random
clamp = .clamp
sphereIDs = {
, , , ,
, , , ,
, , , ,
, , , ,
,
}
sphereNames = {
, , , ,
, , , ,
, , , ,
, , , ,
,
}
.()
(()
_, conn ((Mouse.Button1Down)) conn:()
)
.()
(()
_, conn ((Mouse.Button1Down)) conn:()
_, conn ((Mouse.Button1Up)) conn:()
)
.()
(()
_, conn ((Mouse.Button1Down)) conn:()
_, conn ((Mouse.Button1Up)) conn:()
)
char = Player.Character
()
i = ,
char char:() char:() char:()
char:() char:()
char:() char:()
.()
()
h = char.Head
t = char.Torso
ra = char[]
la = char[]
rl = char[]
ll = char[]
rut = char.HumanoidRootPart
hum = char:()
(()
char:() char.Animate:()
hum hum:() hum.Animator:()
)
(()
hum.MaxHealth =
hum.Health = hum.MaxHealth
)
nec = t:() t:()
rutj = rut:() rut:()
rs = t:() t:()
ls = t:() t:()
rh = t:() t:()
lh = t:() t:()
necc0,necc1 = (,t.Size.Y/,),(,-h.Size.Y/,)
rutjc0,rutjc1 = (,,),(,,)
rsc0,rsc1 = (t.Size.X/,t.Size.Y/,),(-ra.Size.X/,ra.Size.Y/,)
lsc0,lsc1 = (-t.Size.X/,t.Size.Y/,),(la.Size.X/,la.Size.Y/,)
rhc0,rhc1 = (t.Size.X/,-t.Size.Y/,),(,rl.Size.Y/,)
lhc0,lhc1 = (-t.Size.X/,-t.Size.Y/,),(,ll.Size.Y/,)
(() nec.Parent = )
(() rutj.Parent = )
(() rs.Parent = )
(() ls.Parent = )
(() rh.Parent = )
(() lh.Parent = )
nec = (,t) nec.Name = nec.Part0 = t nec.Part1 = h
nec.C1 = necc1; nec.C0 = necc0
rutj = (,rut) rutj.Name = rutj.Part0 = t rutj.Part1 = rut
rutj.C1 = rutjc1; rutj.C0 = rutjc0
rs = (,t) rs.Name = rs.Part0 = t rs.Part1 = ra
rs.C1 = rsc1; rs.C0 = rsc0
ls = (,t) ls.Name = ls.Part0 = t ls.Part1 = la
ls.C1 = lsc1; ls.C0 = lsc0
rh = (,t) rh.Name = rh.Part0 = t rh.Part1 = rl
rh.C1 = rhc1; rh.C0 = rhc0
lh = (,t) lh.Name = lh.Part0 = t lh.Part1 = ll
lh.C1 = lhc1; lh.C0 = lhc0
anim =
sine =
change =
ws =
jp =
()
runservice.Stepped:()
(spos, direc, ignore, dist)
rai = Ray.(spos, direc.Unit * dist)
:(rai, ignore, , )
spheres = {}
totalSpheres =
crownRadius =
crownHeight =
(index, acc, handle)
_, w (handle:())
w:() w:() w:()
w:()
.()
handle.Anchored =
handle.Massless =
handle.CanCollide =
handle.CustomPhysicalProperties = PhysicalProperties.(, , , , )
(() handle:(Player) )
bp = (, handle)
bp.MaxForce = (.huge, .huge, .huge)
bp.P =
bp.D =
bg = (, handle)
bg.MaxTorque = (.huge, .huge, .huge)
bg.P =
bg.D =
hitbox = (, )
hitbox.Name = .. index
hitbox.Size = (, , )
hitbox.Transparency =
hitbox.CanCollide =
hitbox.Massless =
hitbox.Anchored =
hitbox.CustomPhysicalProperties = PhysicalProperties.(, , , , )
(() hitbox:(Player) )
hitboxWeld = (, hitbox)
hitboxWeld.Part0 = handle
hitboxWeld.Part1 = hitbox
hitboxWeld.C0 = (, , )
hitboxWeld.C1 = (, , )
spheres[index] = {
handle = handle,
accessory = acc,
bp = bp,
bg = bg,
hitbox = hitbox,
hitboxWeld = hitboxWeld,
state = ,
orbitAngle = (index - ) * (.pi * / totalSpheres),
bobPhase = () * .pi * ,
abilityTarget = ,
abilityVelocity = (, , ),
abilityReturnTimer = ,
lastFlingTime =
}
_, acc (char:())
acc:() acc:()
accName = acc.Name
i, name (sphereNames)
spheres[i] .(accName, name)
(i, acc, acc.Handle)
i = , totalSpheres
spheres[i]
(()
insertService = :()
asset = insertService:(sphereIDs[i])
asset
_, v (asset:())
v:() v:()
v.Parent = char
.()
(i, v, v.Handle)
asset:()
)
.()
_, acc (char:())
acc:() acc:()
used =
_, s (spheres)
s s.accessory == acc used = ;
used
i = , totalSpheres
spheres[i]
(i, acc, acc.Handle)
(targetChar, sourcePart)
targetChar
rootPart = targetChar:() targetChar:()
rootPart
origin = sourcePart sourcePart.Position rut.Position
flingDir = (rootPart.Position - origin).Unit
flingDir = flingDir + ((-, ), , (-, ))
flingForce = flingDir.Unit *
rootPart.AssemblyLinearVelocity = flingForce + (, , )
rootPart.AssemblyAngularVelocity = ((-,), (-,), (-,))
_, part (targetChar:())
part:() part ~= rootPart
part.AssemblyLinearVelocity = flingForce * + ((-,), (,), (-,))
part.AssemblyAngularVelocity = ((-,), (-,), (-,))
clickActiveSphere =
Mouse.Button1Down:(()
abilityActive
clickActiveSphere
clickPos = Mouse.Hit.Position
nearestChar =
nearestDist = .huge
_, plr (Players:())
plr ~= Player plr.Character plr.Character:()
targetHum = plr.Character:()
targetHum targetHum.Health >
dist = (plr.Character.HumanoidRootPart.Position - clickPos).Magnitude
dist < nearestDist dist <
nearestDist = dist
nearestChar = plr.Character
nearestChar
i = , totalSpheres
spheres[i] spheres[i].state ==
s = spheres[i]
clickActiveSphere = s
s.state =
s.abilityTarget = nearestChar
s.abilityReturnTimer = ()
targetRoot = nearestChar.HumanoidRootPart nearestChar:()
targetRoot
dir = (targetRoot.Position - s.handle.Position).Unit
s.abilityVelocity = dir *
)
i = , totalSpheres
spheres[i]
sData = spheres[i]
(hit)
sData.state ==
() < sData.lastFlingTime +
hit:(char)
targetChar = hit.Parent
_ = ,
targetChar targetChar:()
targetChar targetChar = targetChar.Parent
targetChar
targetHum = targetChar:()
targetHum targetHum.Health > targetHum ~= hum
(targetChar, sData.handle)
sData.lastFlingTime = ()
sData.state ==
sData.state =
sData.abilityReturnTimer = ()
sData.hitbox.Touched:(onTouched)
sData.handle.Touched:(onTouched)
abilityActive =
abilityName =
abilityStartTime =
cooldowns = {q = , e = , r = , f = , c = }
(fromPos, count, excludeChar)
playerList = {}
_, plr (Players:())
plr ~= Player plr.Character plr.Character:()
targetHum = plr.Character:()
targetHum targetHum.Health > plr.Character ~= excludeChar
dist = (plr.Character.HumanoidRootPart.Position - fromPos).Magnitude
dist <
.(playerList, {char = plr.Character, dist = dist})
.(playerList, (a, b) a.dist < b.dist )
result = {}
i = , .(count, #playerList)
result[i] = playerList[i].char
result
()
abilityActive crownizeActive
() < cooldowns.q
abilityActive =
abilityName =
abilityStartTime = ()
cooldowns.q = () +
i = , totalSpheres
spheres[i]
spheres[i].state =
spheres[i].abilityTarget = (i - ) *
()
abilityActive crownizeActive
() < cooldowns.e
abilityActive =
abilityName =
abilityStartTime = ()
cooldowns.e = () +
targetPos = Mouse.Hit.Position
baseDir = (targetPos - rut.Position).Unit
i = , totalSpheres
spheres[i]
spheres[i].state =
spreadAngle = ((i - ) - totalSpheres / ) *
right = baseDir:((, , )).Unit
up = (, , )
dir = (baseDir + right * spreadAngle + up * (-, )).Unit
spheres[i].abilityVelocity = dir *
spheres[i].abilityTarget = targetPos + dir *
()
abilityActive crownizeActive
() < cooldowns.r
abilityActive =
abilityName =
abilityStartTime = ()
cooldowns.r = () +
i = , totalSpheres
spheres[i]
spheres[i].state =
()
abilityActive crownizeActive
() < cooldowns.f
abilityActive =
abilityName =
abilityStartTime = ()
cooldowns.f = () +
targets = (rut.Position, totalSpheres)
i = , totalSpheres
spheres[i]
spheres[i].state =
targets[i]
spheres[i].abilityTarget = targets[i]
spheres[i].abilityTarget =
crownizeActive =
bindMode =
bindStep =
bindSelectedSphere =
playerBindings = {}
()
abilityActive
bindMode =
bindStep =
bindSelectedSphere =
(, )
bindClickConn =
bindClickConn = Mouse.Button1Down:(()
bindMode
bindStep ==
clickPos = Mouse.Hit.Position
closestSphere =
closestDist = .huge
i = , totalSpheres
spheres[i] spheres[i].handle spheres[i].handle.Parent
dist = (spheres[i].handle.Position - clickPos).Magnitude
dist < closestDist dist <
closestDist = dist
closestSphere = i
closestSphere
bindSelectedSphere = closestSphere
bindStep =
( .. closestSphere .. , )
(, )
bindStep ==
clickPos = Mouse.Hit.Position
nearestPlayer =
nearestDist = .huge
_, plr (Players:())
plr ~= Player plr.Character plr.Character:()
tHum = plr.Character:()
tHum tHum.Health >
dist = (plr.Character.HumanoidRootPart.Position - clickPos).Magnitude
dist < nearestDist dist <
nearestDist = dist
nearestPlayer = plr
nearestPlayer
playerBindings[nearestPlayer.Name] = bindSelectedSphere
( .. nearestPlayer.Name .. .. bindSelectedSphere .. , )
bindList =
count =
name, idx (playerBindings)
bindList = bindList .. name .. .. idx ..
count = count +
count >
( .. bindList, )
(, )
bindMode =
bindStep =
bindSelectedSphere =
)
()
abilityActive
crownizeActive = crownizeActive
crownizeActive
assignedSpheres = {}
plrName, sphereIdx (playerBindings)
targetPlr = Players:(plrName)
targetPlr targetPlr.Character targetPlr.Character:()
targetHum = targetPlr.Character:()
targetHum targetHum.Health > spheres[sphereIdx]
spheres[sphereIdx].state =
spheres[sphereIdx].abilityTarget = targetPlr.Character
assignedSpheres[sphereIdx] =
remainingTargets = (rut.Position, totalSpheres)
targetIdx =
i = , totalSpheres
spheres[i] assignedSpheres[i]
spheres[i].state =
targetIdx <= #remainingTargets
tChar = remainingTargets[targetIdx]
alreadyBound =
_, s (spheres)
s s.state == s.abilityTarget == tChar
alreadyBound =
alreadyBound
spheres[i].abilityTarget = tChar
targetIdx = targetIdx +
targetIdx = targetIdx +
targetIdx > #remainingTargets
spheres[i].abilityTarget =
( .. (#playerBindings > .. #playerBindings .. ), )
i = , totalSpheres
spheres[i] spheres[i].state ==
spheres[i].state =
spheres[i].abilityReturnTimer = ()
spheres[i].abilityTarget =
()
abilityActive crownizeActive
() < cooldowns.c
abilityActive =
abilityName =
abilityStartTime = ()
cooldowns.c = () +
i = , totalSpheres
spheres[i]
spheres[i].state =
spheres[i].abilityTarget = (i - ) * (.pi * / totalSpheres)
uis.InputBegan:((input, gp)
gp
input.KeyCode == .KeyCode.Q
()
input.KeyCode == .KeyCode.E
()
input.KeyCode == .KeyCode.R
()
input.KeyCode == .KeyCode.F
()
input.KeyCode == .KeyCode.C
()
input.KeyCode == .KeyCode.G
()
input.KeyCode == .KeyCode.H
()
)
runservice.Heartbeat:((dt)
now = ()
abilityActive
elapsed = now - abilityStartTime
shouldEnd =
abilityName == elapsed > shouldEnd =
abilityName == elapsed > shouldEnd =
abilityName == elapsed > shouldEnd =
abilityName ==
i = , totalSpheres
spheres[i] spheres[i].state ==
sPos = spheres[i].handle.Position
_, plr (Players:())
plr ~= Player plr.Character plr.Character:()
tRoot = plr.Character.HumanoidRootPart
(tRoot.Position - sPos).Magnitude <
tHum = plr.Character:()
tHum tHum.Health >
(plr.Character, spheres[i].handle)
abilityName == elapsed > shouldEnd =
abilityName == elapsed > shouldEnd =
shouldEnd
abilityActive =
abilityName =
i = , totalSpheres
spheres[i] spheres[i].state ==
spheres[i].state =
spheres[i].abilityReturnTimer = now
i = , totalSpheres
s = spheres[i]
s
s.handle s.handle.Parent
s.bp s.bp.Parent s.bg s.bg.Parent
s.bobPhase = s.bobPhase + dt *
s.state ==
s.orbitAngle = s.orbitAngle + dt *
ox = .(s.orbitAngle) * crownRadius
oz = .(s.orbitAngle) * crownRadius
oy = crownHeight + .(s.bobPhase) *
targetPos = rut.CFrame * (ox, oy, oz)
s.bp.Position = targetPos.Position
s.bg.CFrame = targetPos
s.handle.Velocity = (, , )
s.handle.RotVelocity = (, , )
s.state ==
s.bp.Position = s.bp.Position + s.abilityVelocity * dt
s.bg.CFrame = (s.handle.Position, s.handle.Position + s.abilityVelocity)
s.handle.RotVelocity = s.abilityVelocity *
now - s.abilityReturnTimer >
s.state =
s.abilityReturnTimer = now
s.abilityTarget s.abilityTarget.Parent
tRoot = s.abilityTarget:()
tRoot (s.handle.Position - tRoot.Position).Magnitude <
(s.abilityTarget, s.handle)
s.lastFlingTime = now
s.state =
s.abilityReturnTimer = now
s.state ==
elapsed = now - abilityStartTime
abilityName ==
= s.abilityTarget
jTime = elapsed -
cycleTime =
t = (jTime % cycleTime) / cycleTime
jTime <
s.bp.Position = s.bp.Position
s.bg.CFrame = s.bg.CFrame
handOffset = (i % == ) -
xPos = handOffset * * ( - * t)
arcHeight = + (totalSpheres - i) *
yPos = arcHeight * (t * .pi)
zPos = .(t * .pi) *
jugglePos = rut.CFrame * (xPos, + yPos, - + zPos)
s.bp.Position = jugglePos.Position
s.bg.CFrame = jugglePos
s.handle.RotVelocity = ((-,), * ( - .(t - ) * ), (-,))
abilityName ==
s.bp.Position = s.bp.Position + s.abilityVelocity * dt
s.bg.CFrame = (s.handle.Position, s.handle.Position + s.abilityVelocity)
s.handle.RotVelocity = s.abilityVelocity *
(s.handle.Position - s.abilityTarget).Magnitude <
s.state =
s.abilityReturnTimer = now
elapsed >
s.state =
s.abilityReturnTimer = now
abilityName ==
vortexAngle = s.orbitAngle + elapsed *
vortexR = + .(s.bobPhase) *
heightOff = .(s.bobPhase + i * ) *
ox = .(vortexAngle) * vortexR
oz = .(vortexAngle) * vortexR
oy = crownHeight + heightOff
targetPos = rut.CFrame * (ox, oy, oz)
s.bp.Position = targetPos.Position
s.bg.CFrame = (s.handle.Position, rut.Position)
s.handle.RotVelocity = ((-,), (-,), (-,))
abilityName ==
s.abilityTarget s.abilityTarget.Parent s.abilityTarget:()
targetRoot = s.abilityTarget.HumanoidRootPart
targetHum = s.abilityTarget:()
targetHum targetHum.Health >
targetPos = targetRoot.Position + (, , )
s.bp.Position = targetPos
s.bg.CFrame = (s.handle.Position, targetPos)
s.handle.RotVelocity = ((-,), , (-,))
s.abilityTarget =
s.abilityTarget
angle = s.orbitAngle + elapsed *
ox = .(angle) *
oz = .(angle) *
targetPos = rut.CFrame * (ox, crownHeight, oz)
s.bp.Position = targetPos.Position
s.bg.CFrame = targetPos
s.handle.RotVelocity = (, , )
abilityName ==
sphereAngle = s.abilityTarget
ringRadius =
elapsed <
spinSpeed = elapsed *
currentAngle = sphereAngle + elapsed * spinSpeed
gx = .(currentAngle) * ringRadius
gz = .(currentAngle) * ringRadius
groundPos = rut.CFrame * (gx, -rut.Size.Y / + , gz)
s.bp.Position = groundPos.Position
s.bg.CFrame = (s.handle.Position, s.handle.Position + (, , ))
s.handle.RotVelocity = ((-,), , (-,))
elapsed <
launchProgress = ((elapsed - ) / , , )
towerY = launchProgress * (totalSpheres * )
stackIndex = i -
sphereY = - + stackIndex *
lerpY = sphereY * launchProgress
towerPos = rut.CFrame * (, rut.Size.Y / + lerpY + , )
s.bp.Position = towerPos.Position
s.bg.CFrame = towerPos
s.handle.RotVelocity = (, , )
elapsed <
holdEnd =
fallStart = holdEnd
elapsed < holdEnd
sphereY = (i - ) *
towerPos = rut.CFrame * (, rut.Size.Y / + sphereY + , )
s.bp.Position = towerPos.Position
s.bg.CFrame = towerPos
s.handle.RotVelocity = (, , )
fallTime = elapsed - fallStart
sphereY = (i - ) *
gravity =
fallDist = * gravity * fallTime * fallTime
fallY = .(-fallDist + sphereY, -)
backOffset = - - fallTime *
towerPos = rut.CFrame * (, rut.Size.Y / + fallY + , backOffset)
s.bp.Position = towerPos.Position
s.bg.CFrame = towerPos
s.handle.RotVelocity = ((-,), (-,), (-,))
settleProgress = ((elapsed - ) / , , )
ease = settleProgress * settleProgress * ( - * settleProgress)
backAngle = sphereAngle
backRadius =
backX = .(backAngle) * backRadius
backZ = .(backAngle) * backRadius -
backY = rut.Size.Y / +
backPos = rut.CFrame * (backX, backY, backZ)
s.bp.Position = s.bp.Position:(backPos.Position, ease * )
s.bg.CFrame = backPos
s.handle.RotVelocity = (, * ( - ease), )
s.state ==
s.abilityTarget s.abilityTarget.Parent s.abilityTarget:()
targetRoot = s.abilityTarget.HumanoidRootPart
targetHum = s.abilityTarget:()
targetHum targetHum.Health >
petPos = targetRoot.CFrame * (, + .(s.bobPhase) * , -)
s.bp.Position = petPos.Position
s.bg.CFrame = petPos
s.handle.RotVelocity = (, , )
newTargets = (rut.Position, totalSpheres)
_, t (newTargets)
taken =
j = , totalSpheres
spheres[j] spheres[j].abilityTarget == t taken = ;
taken
s.abilityTarget = t
newTargets = (rut.Position, totalSpheres)
found =
_, t (newTargets)
taken =
j = , totalSpheres
spheres[j] spheres[j].abilityTarget == t taken = ;
taken
s.abilityTarget = t
found =
found
s.state =
s.abilityReturnTimer = now
s.abilityTarget =
s.state ==
returnElapsed = now - s.abilityReturnTimer
returnElapsed <
s.orbitAngle = s.orbitAngle + dt *
ox = .(s.orbitAngle) * crownRadius
oz = .(s.orbitAngle) * crownRadius
oy = crownHeight + .(s.bobPhase) *
orbitPos = rut.CFrame * (ox, oy, oz)
s.bp.Position = orbitPos.Position
s.bg.CFrame = orbitPos
s.handle.RotVelocity = (, , )
s.state =
s == clickActiveSphere
clickActiveSphere =
)
runservice.Heartbeat:(()
sine = sine + change
verVel = rut.Velocity.Y
horVel = (rut.Velocity * (,,)).Magnitude
Ccf = rut.CFrame
dir = hum.MoveDirection
dir == (,,)
dir = rut.Velocity /
hum.WalkSpeed = ws
hum.JumpPower = jp
Walktest1 = dir * Ccf.LookVector
Walktest2 = dir * Ccf.RightVector
rotfb = Walktest1.X + Walktest1.Z
rotrl = Walktest2.X + Walktest2.Z
rotfb > rotfb = rotfb < - rotfb = -
rotrl > rotrl = rotrl < - rotrl = -
hit = (rut.Position + (,-rut.Size.Y/,), (rut.Position.x,-,rut.Position.z), {char}, )
abilityActive
elapsed = () - abilityStartTime
a =
abilityName ==
(()
juggleCycle = elapsed *
rightThrow = (juggleCycle)
leftThrow = (juggleCycle + .pi)
rUp = (rightThrow, , )
rDown = (-rightThrow, , )
lUp = (leftThrow, , )
lDown = (-leftThrow, , )
nec.C0 = nec.C0:(necc0 * ((- + rightThrow * ), , ), a)
nec.C1 = nec.C1:(necc1 * ((- + rightThrow * ), (rightThrow * ), ), a)
rutj.C0 = rutj.C0:(rutjc0 * ((elapsed * ) * , , ) * ((- + rightThrow * ), , ), a)
rutj.C1 = rutj.C1:(rutjc1 * ((elapsed * ) * , , ) * ((- + rightThrow * ), , ), a)
-- Right arm: up = throwing (arm goes up and out), down = catching
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, rUp * 0.5 - rDown * 0.2, -rUp * 0.8 + rDown * 0.3) * angles(rad(-170 * rUp + 10 * rDown), rad(rUp * 15), rad(-30 + rUp * 60)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, rUp * 0.5 - rDown * 0.2, -rUp * 0.8 + rDown * 0.3) * angles(rad(-170 * rUp + 10 * rDown), rad(rUp * 15), rad(-30 + rUp * 60)), a)
-- Left arm: opposite phase
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, lUp * 0.5 - lDown * 0.2, -lUp * 0.8 + lDown * 0.3) * angles(rad(-170 * lUp + 10 * lDown), rad(-lUp * 15), rad(30 - lUp * 60)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, lUp * 0.5 - lDown * 0.2, -lUp * 0.8 + lDown * 0.3) * angles(rad(-170 * lUp + 10 * lDown), rad(-lUp * 15), rad(30 - lUp * 60)), a)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0, sin(elapsed * 4) * 0.05, 0), a * 0.5)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, sin(elapsed * 4) * 0.05, 0), a * 0.5)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0, -sin(elapsed * 4) * 0.05, 0), a * 0.5)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, -sin(elapsed * 4) * 0.05, 0), a * 0.5)
end)
elseif abilityName == 'e' then
pcall(function()
-- E: Both arms thrust forward (punch/shotgun blast)
local punchPhase = clamp(elapsed / 0.25, 0, 1)
local punch = sin(punchPhase * rad(90))
local recoil = elapsed > 0.3 and sin((elapsed - 0.3) * 8) * 0.1 or 0
nec.C0 = nec.C0:Lerp(necc0 * angles(rad(-10), rad(0), rad(0)), a)
nec.C1 = nec.C1:Lerp(necc1 * angles(rad(-8), rad(0), rad(0)), a)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0, 0, -0.25 * punch) * angles(rad(-8 * punch), rad(0), rad(0)), a)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0.3 * punch + recoil, 0, -0.4 * punch) * angles(rad(-15 * punch), rad(0), rad(0)), a)
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, -0.1 * punch, -0.6 * punch) * angles(rad(-95 * punch), rad(0), rad(-5)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, -0.1 * punch, -0.6 * punch) * angles(rad(-95 * punch), rad(0), rad(-5)), a)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, -0.1 * punch, -0.6 * punch) * angles(rad(-95 * punch), rad(0), rad(5)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, -0.1 * punch, -0.6 * punch) * angles(rad(-95 * punch), rad(0), rad(5)), a)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0, -0.3 * punch, -0.15 * punch) * angles(rad(-15), rad(0), rad(0)), a)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, -0.3 * punch, -0.15 * punch) * angles(rad(-15), rad(0), rad(0)), a)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0, -0.3 * punch, -0.15 * punch) * angles(rad(-15), rad(0), rad(0)), a)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, -0.3 * punch, -0.15 * punch) * angles(rad(-15), rad(0), rad(0)), a)
end)
elseif abilityName == 'r' then
pcall(function()
-- R: Arms raised up, floating/hovering, slight spin
local hover = sin(elapsed * 5) * 0.15
local sway = sin(elapsed * 3) * 0.05
nec.C0 = nec.C0:Lerp(necc0 * angles(rad(-10), 0, rad(0)), a)
nec.C1 = nec.C1:Lerp(necc1 * angles(rad(-10), sway * rad(20), 0), a)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0, hover, 0), a)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0, hover, 0) * angles(rad(-8), sin(elapsed * 4) * rad(8), rad(0)), a)
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, 0.3 + sin(elapsed * 5) * 0.1, -0.2) * angles(rad(-155 + sin(elapsed * 6) * 12), rad(0), rad(-25 + sin(elapsed * 4) * 10)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, 0.3 + sin(elapsed * 5) * 0.1, -0.2) * angles(rad(-155 + sin(elapsed * 6) * 12), rad(0), rad(-25 + sin(elapsed * 4) * 10)), a)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, 0.3 + sin(elapsed * 5) * 0.1, -0.2) * angles(rad(-155 + sin(elapsed * 6) * 12), rad(0), rad(25 - sin(elapsed * 4) * 10)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, 0.3 + sin(elapsed * 5) * 0.1, -0.2) * angles(rad(-155 + sin(elapsed * 6) * 12), rad(0), rad(25 - sin(elapsed * 4) * 10)), a)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0, hover * 0.3, 0.1) * angles(rad(-8), rad(0), rad(5)), a)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, hover * 0.3, 0.1) * angles(rad(-8), rad(0), rad(5)), a)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0, hover * 0.3, 0.1) * angles(rad(-8), rad(0), rad(-5)), a)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, hover * 0.3, 0.1) * angles(rad(-8), rad(0), rad(-5)), a)
end)
elseif abilityName == 'f' then
pcall(function()
-- F: Casting/throwing pose - one arm forward, other back, alternating
local castPulse = sin(elapsed * 6)
local armSwitch = elapsed % 2 < 1
nec.C0 = nec.C0:Lerp(necc0 * angles(rad(-12), rad(0), rad(0)), a)
nec.C1 = nec.C1:Lerp(necc1 * angles(rad(-15), rad(0), rad(0)), a)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0, 0, -0.15) * angles(rad(-5), rad(0), rad(0)), a)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0, castPulse * 0.1, -0.15) * angles(rad(-10), rad(0), rad(0)), a)
if armSwitch then
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, -0.1, -0.4) * angles(rad(-85 + castPulse * rad(10)), rad(0), rad(-15)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, -0.1, -0.4) * angles(rad(-85 + castPulse * rad(10)), rad(0), rad(-15)), a)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, 0.15, 0.2) * angles(rad(-40 + castPulse * rad(10)), rad(0), rad(15)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, 0.15, 0.2) * angles(rad(-40 + castPulse * rad(10)), rad(0), rad(15)), a)
else
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, 0.15, 0.2) * angles(rad(-40 + castPulse * rad(10)), rad(0), rad(-15)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, 0.15, 0.2) * angles(rad(-40 + castPulse * rad(10)), rad(0), rad(-15)), a)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, -0.1, -0.4) * angles(rad(-85 + castPulse * rad(10)), rad(0), rad(15)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, -0.1, -0.4) * angles(rad(-85 + castPulse * rad(10)), rad(0), rad(15)), a)
end
rh.C0 = rh.C0:Lerp(rhc0 * cf(0, -0.1, 0), a)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, -0.1, 0), a)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0, -0.1, 0), a)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, -0.1, 0), a)
end)
elseif abilityName == 'c' then
pcall(function()
-- C: SPIN TOWER animation
local spinRate = elapsed * 300
if elapsed < 1.2 then
-- Spinning on ground - arm out, body spinning
local spinPulse = sin(elapsed * 12)
nec.C0 = nec.C0:Lerp(necc0 * angles(rad(-8), 0, 0), a)
nec.C1 = nec.C1:Lerp(necc1 * angles(rad(-5), rad(spinRate % 360), 0), a)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0, -0.2, 0) * angles(rad(-15), 0, 0), a)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0, -0.3 + spinPulse * 0.05, 0) * angles(rad(-15), rad(spinRate % 360), 0), a)
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, 0.2, -0.5) * angles(rad(-100), rad(0), rad(-90)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, 0.2, -0.5) * angles(rad(-95), rad(0), rad(-90)), a)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, -0.1, 0.3) * angles(rad(-30), rad(0), rad(50)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, -0.1, 0.3) * angles(rad(-30), rad(0), rad(50)), a)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0, -0.2, -0.1) * angles(rad(-20), rad(0), rad(5)), a)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, -0.2, -0.1) * angles(rad(-20), rad(0), rad(5)), a)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0, -0.2, -0.1) * angles(rad(-20), rad(0), rad(-5)), a)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, -0.2, -0.1) * angles(rad(-20), rad(0), rad(-5)), a)
elseif elapsed < 3.8 then
-- Launch pose - both arms thrust UP, looking up
local upPulse = sin(elapsed * 8) * 0.05
nec.C0 = nec.C0:Lerp(necc0 * angles(rad(-25), 0, 0), a)
nec.C1 = nec.C1:Lerp(necc1 * angles(rad(-25), 0, 0), a)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0, 0, -0.1) * angles(rad(-10), 0, 0), a)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0, upPulse, -0.1) * angles(rad(-12), 0, 0), a)
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, 0.4, -0.2) * angles(rad(-170), rad(0), rad(-20)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, 0.4, -0.2) * angles(rad(-170), rad(0), rad(-20)), a)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, 0.4, -0.2) * angles(rad(-170), rad(0), rad(20)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, 0.4, -0.2) * angles(rad(-170), rad(0), rad(20)), a)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0, -0.15, 0) * angles(rad(-5), 0, 0), a)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, -0.15, 0) * angles(rad(-5), 0, 0), a)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0, -0.15, 0) * angles(rad(-5), 0, 0), a)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, -0.15, 0) * angles(rad(-5), 0, 0), a)
elseif elapsed < 7 then
-- Watching them fall - arms down slightly, crouching
local fallWatch = sin(elapsed * 4) * 0.05
nec.C0 = nec.C0:Lerp(necc0 * angles(rad(-10), 0, 0), a)
nec.C1 = nec.C1:Lerp(necc1 * angles(rad(-10), 0, 0), a)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0, -0.2, 0.1) * angles(rad(8), 0, 0), a)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0, -0.25 + fallWatch, 0.1) * angles(rad(10), 0, 0), a)
rs.C0 = rs.C0:Lerp(rsc0 * cf(0, 0.1, 0.1) * angles(rad(-40), 0, rad(-10)), a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, 0.1, 0.1) * angles(rad(-40), rad(0), rad(-10)), a)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0, 0.1, 0.1) * angles(rad(-40), 0, rad(10)), a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, 0.1, 0.1) * angles(rad(-40), rad(0), rad(10)), a)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0, -0.3, 0.15) * angles(rad(10), 0, rad(5)), a)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, -0.3, 0.15) * angles(rad(10), 0, rad(5)), a)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0, -0.3, 0.15) * angles(rad(10), 0, rad(-5)), a)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, -0.3, 0.15) * angles(rad(10), 0, rad(-5)), a)
else
-- Settled - standing straight, slight lean back from weight
local settleBreath = sin(elapsed * 3) * 0.02
nec.C0 = nec.C0:Lerp(necc0 * angles(rad(-8), 0, 0), a)
nec.C1 = nec.C1:Lerp(necc1 * angles(rad(-8), 0, 0), a)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0, 0, -0.08) * angles(rad(5), 0, 0), a)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0, settleBreath, -0.1) * angles(rad(5), 0, 0), a)
rs.C0 = rs.C0:Lerp(rsc0, a)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0, 0, 0) * angles(rad(-10), rad(0), rad(-5)), a)
ls.C0 = ls.C0:Lerp(lsc0, a)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0, 0, 0) * angles(rad(-10), rad(0), rad(5)), a)
rh.C0 = rh.C0:Lerp(rhc0, a)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0, -0.1, 0), a)
lh.C0 = lh.C0:Lerp(lhc0, a)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0, -0.1, 0), a)
end
end)
end
else
-- ==========================================
-- NORMAL ANIMATIONS (same as BallThrower)
-- ==========================================
pcall(function()
if anim == 'idle' and hit then
nec.C1 = nec.C1:Lerp(necc1 * cf(0,0,0) * angles(sin(sine/20) * rad(2.5),sin(sine/40) * rad(1),sin(sine/40) * rad(5)),.1)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(sin(sine/40)/15,sin(sine/20)/15,sin(sine/60)/15) * angles(sin(sine/20) * rad(2.5),sin(sine/80) * rad(5),sin(sine/40) * rad(2.5)),.1)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0,-sin(sine/20)/15,0) * angles(-sin(sine/20) * rad(1.5),sin(sine/80) * rad(5),sin(sine/40) * rad(1.5)),.1)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0,sin(sine/20)/15,0) * angles(-cos(sine/20) * rad(7.5),sin(sine/80) * rad(5),sin(sine/40) * rad(2.5)),.1)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0,(sin(sine/20)/15) + (sin(sine/40)/25),0) * angles((sin(sine/20) * rad(3.5)) + (sin(sine/80) * rad(2.5)),rad(0),sin(sine/40) * rad(5)),.1)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0,(sin(sine/20)/15) + (-sin(sine/40)/25),0) * angles((sin(sine/20) * rad(3.5)) - (sin(sine/80) * rad(2.5)),rad(0),sin(sine/40) * rad(5)),.1)
elseif anim == 'fall' and not hit then
nec.C1 = nec.C1:Lerp(necc1, .1)
rutj.C1 = rutj.C1:Lerp(rutjc1, .1)
rs.C1 = rs.C1:Lerp(rsc1, .1)
ls.C1 = ls.C1:Lerp(lsc1, .1)
rh.C1 = rh.C1:Lerp(rhc1, .1)
lh.C1 = lh.C1:Lerp(lhc1, .1)
elseif anim == 'jump' and not hit then
nec.C1 = nec.C1:Lerp(necc1, .1)
rutj.C1 = rutj.C1:Lerp(rutjc1, .1)
rs.C1 = rs.C1:Lerp(rsc1, .1)
ls.C1 = ls.C1:Lerp(lsc1, .1)
rh.C1 = rh.C1:Lerp(rhc1, .1)
lh.C1 = lh.C1:Lerp(lhc1, .1)
elseif anim == 'walk' and hit then
nec.C1 = nec.C1:Lerp(necc1 * cf(0,0,0) * angles(-sin(sine/1.75) * rad(1),sin(sine/3.5) * rad(3.5),sin(sine/3.5) * rad(2.5)) * angles(0,rotrl/1.5,0),.2)
rutj.C1 = rutj.C1:Lerp(rutjc1 * cf(0,sin(sine/1.75)/7.5,0) * angles(sin(sine/1.75) * rad(5),sin(sine/3.5) * rad(5),rad(0)) * angles(-rotfb/7.5,0,-rotrl/6),.2)
rs.C1 = rs.C1:Lerp(rsc1 * cf(0,sin(sine/1.75)/10,0) * angles(sin(sine/3.5) * rad(5) * rotfb,rad(0),rad(0)),.2)
ls.C1 = ls.C1:Lerp(lsc1 * cf(0,-sin(sine/1.75)/10,-cos(sine/3.5)/10) * angles(sin(sine/3.5) * rad(65) * rotfb,sin(sine/1.75) * rad(7.5),sin(sine/1.75) * rad(1.5)),.2)
rh.C1 = rh.C1:Lerp(rhc1 * cf(0,cos(sine/3.5)/5,-cos(sine/3.5)/3.5) * angles((sin(sine/3.5) * rad(60) + rad(7.5)) * rotfb,rad(0),sin(sine/3.5) * rad(45) * rotrl) * angles(rad(0),cos(sine/3.5) * rad(2.5),rad(0)),.2)
lh.C1 = lh.C1:Lerp(lhc1 * cf(0,-cos(sine/3.5)/5,cos(sine/3.5)/3.5) * angles((-sin(sine/3.5) * rad(60) + rad(7.5)) * rotfb,rad(0),-sin(sine/3.5) * rad(45) * rotrl) * angles(rad(0),cos(sine/3.5) * rad(2.5),rad(0)),.2)
end
end)
-- C0 lerps (only when NOT in ability/crownize)
if not abilityActive and not crownizeActive then
if horVel > 5 and verVel >-10 and verVel <10 then
anim = 'walk'
change = .6
pcall(function()
nec.C0 = nec.C0:Lerp(necc0, .2)
rutj.C0 = rutj.C0:Lerp(rutjc0, .2)
rs.C0 = rs.C0:Lerp(rsc0, .2)
ls.C0 = ls.C0:Lerp(lsc0, .2)
rh.C0 = rh.C0:Lerp(rhc0, .2)
lh.C0 = lh.C0:Lerp(lhc0, .2)
end)
elseif verVel >10 then
anim = 'jump'
change = 1
pcall(function()
nec.C0 = nec.C0:Lerp(necc0 * cf(0,0,0) * angles(rad(15),rad(0),rad(0)),.2)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0,0,0) * angles(rad(-5),rad(0),rad(0)),.2)
rs.C0 = rs.C0:Lerp(rsc0, .2)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0,0,0) * angles(rad(145),rad(0),rad(-8)),.2)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0,.1,-.1) * angles(rad(-3.5),rad(0),rad(2)),.2)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0,.3,-.25) * angles(rad(-9),rad(0),rad(-3.5)),.2)
end)
elseif verVel <-10 then
anim = 'fall'
change = 1
pcall(function()
nec.C0 = nec.C0:Lerp(necc0 * cf(0,0,0) * angles(rad(-5),rad(0),rad(0)),.2)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0,0,0) * angles(rad(5),rad(0),rad(0)),.2)
rs.C0 = rs.C0:Lerp(rsc0, .2)
ls.C0 = ls.C0:Lerp(lsc0 * cf(-.45,-.44,0) * angles(rad(6),rad(0),rad(-97.5)),.2)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0,.3,-.25) * angles(rad(-9),rad(0),rad(2)),.2)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0,.1,-.1) * angles(rad(-3.5),rad(0),rad(-3.5)),.2)
end)
elseif horVel < 5 and verVel >-10 and verVel <10 then
anim = 'idle'
change = 1
pcall(function()
nec.C0 = nec.C0:Lerp(necc0 * cf(0,0,0) * angles(rad(-10),rad(0),rad(0)),.1)
rutj.C0 = rutj.C0:Lerp(rutjc0 * cf(0,0,-.05) * angles(rad(-5),rad(0),rad(0)),.1)
rs.C0 = rs.C0:Lerp(rsc0, .1)
ls.C0 = ls.C0:Lerp(lsc0 * cf(0,-.15,.1) * angles(rad(-6.5),rad(15),rad(-3.5)),.1)
rh.C0 = rh.C0:Lerp(rhc0 * cf(0,0,0) * angles(rad(-5),rad(-5),rad(2.5)),.1)
lh.C0 = lh.C0:Lerp(lhc0 * cf(0,0,0) * angles(rad(-5),rad(5),rad(-2.5)),.1)
end)
end
end -- not abilityActive
end
end)
end)Loads code from the internet. It downloads more code when it runs (loadstring + HttpGet), which can change after it was posted. From: github.com.
yes very much pets for just a baseplate

Universal