Run it
Copy the script and paste it into your executor.
guiParent = (gethui ()) :()
guiParent:()
()
REFRESH =
Players = :()
UIS = :()
TweenService = :()
RunService = :()
Debris = :()
lp = Players.LocalPlayer
pg = lp:()
SHAPES = {
[] = , [] = , [] = , [] = ,
[] = , [] = , [] = , [] = ,
}
TOTAL_SHAPES =
(img)
.(, img.ImageRectOffset.X, img.ImageRectOffset.Y)
(img)
SHAPES[img.ImageRectOffset.X] ( .. (img))
()
bp = lp:()
t = (bp bp:())
(lp.Character lp.Character:())
t t
rooms = :()
rooms rooms:(, )
()
perm = pg:()
perm perm:()
librarySeen =
()
rooms = :()
room = rooms rooms:()
assets = room room:()
assets
librarySeen =
assets:(, )
librarySeen =
librarySeen
(ui, i)
s = ui:((i))
s
s:() s:() s
s:(, )
()
res = {paper = , hintCount = , slots = {}}
byRect = {}
hints = ()
hints
_, c (hints:())
c.Name == c:()
tl = c:()
num = tl (tl.Text):()
num
byRect[(c)] = {icon = c, num = num}
res.hintCount +=
paper = ()
ui = paper paper:()
ui res
res.paper =
i = ,
img = (ui, i)
img
h = byRect[(img)]
res.slots[i] = {
img = img, name = (img),
hint = h h.icon, digit = h h.num,
}
res.slots[i] = {name = }
res
C = {
bgTop = .(, , ),
bgBot = .(, , ),
bar = .(, , ),
card = .(, , ),
cardOk = .(, , ),
cardBad = .(, , ),
stroke = .(, , ),
text = .(, , ),
sub = .(, , ),
accent = .(, , ),
accent2 = .(, , ),
ok = .(, , ),
bad = .(, , ),
= .(, , ),
btn = .(, , ),
btnHover = .(, , ),
white = .(, , ),
}
STATE = {
none = {text = C.sub, box = C.card, boxStroke = C.stroke, card = C.card, cardStroke = C.stroke, cardStrokeT = },
ok = {text = C.ok, box = C.cardOk, boxStroke = C.ok, card = C.cardOk, cardStroke = C.ok, cardStrokeT = },
bad = {text = C.bad, box = C.cardBad, boxStroke = C.bad, card = C.cardBad, cardStroke = C.bad, cardStrokeT = },
}
(o, t, props, style, dir)
tw = TweenService:(o, TweenInfo.(t, style .EasingStyle.Quint, dir .EasingDirection.Out), props)
tw:()
tw
(class, props, par)
o = .(class)
k, v (props) o[k] = v
par o.Parent = par
o
(o, r)
(, {CornerRadius = .(, r)}, o)
(par, props)
p = {
BackgroundTransparency = , TextColor3 = C.text, Font = .Font.Gotham,
TextSize = , TextXAlignment = .TextXAlignment.Left,
}
k, v (props) p[k] = v
(, p, par)
(a, b)
ColorSequence.({
ColorSequenceKeypoint.(, a),
ColorSequenceKeypoint.(, b),
ColorSequenceKeypoint.(, a),
})
(thumb, src)
src thumb.Visible =
thumb.Visible =
thumb.Image = src.Image
thumb.ImageRectOffset = src.ImageRectOffset
thumb.ImageRectSize = src.ImageRectSize
thumb.ImageColor3 = src.ImageColor3
thumb.ImageTransparency =
parent = guiParent
gui = (, {
Name = , ResetOnSpawn = , ZIndexBehavior = .ZIndexBehavior.Sibling,
}, parent)
WIDTH, FULL_H, MINI_H, NOTICE_H, HOME_Y = , , , ,
win = (, {
Size = .(, WIDTH, , FULL_H),
AnchorPoint = .(, ),
Position = .(, , , -),
BackgroundColor3 = C.white, BorderSizePixel = , ClipsDescendants = ,
}, gui)
(win, )
(, {Color = ColorSequence.(C.bgTop, C.bgBot), Rotation = }, win)
winScale = (, {Scale = }, win)
winStroke = (, {Color = C.white, Thickness = , Transparency = }, win)
strokeGrad = (, {Color = (C.accent, C.accent2)}, winStroke)
themeGrads = {strokeGrad}
currentTheme
THEMES = {
idle = {C.accent, C.accent2},
ok = {C.ok, C.accent2},
= {C.warn, C.accent},
}
(name)
currentTheme == name
currentTheme = name
t = THEMES[name]
_, g (themeGrads) g.Color = (t[], t[])
bar = (, {Size = .(, , , ), BackgroundColor3 = C.bar, BorderSizePixel = }, win)
(bar, )
(, {
Size = .(, , , ), Position = .(, , , -),
BackgroundColor3 = C.bar, BorderSizePixel = ,
}, bar)
titleLbl = (bar, {
Size = .(, -, , ), Position = .(, , , ),
Text = , TextColor3 = C.white, Font = .Font.GothamBold, TextSize = ,
})
titleGrad = (, {Color = (C.accent, C.accent2)}, titleLbl)
themeGrads[#themeGrads + ] = titleGrad
subLbl = (bar, {
Size = .(, -, , ), Position = .(, , , ),
Text = .. TOTAL_SHAPES, TextColor3 = C.sub, TextSize = ,
})
accentLine = (, {
Size = .(, , , ), Position = .(, , , ),
BackgroundColor3 = C.white, BorderSizePixel = ,
}, win)
lineGrad = (, {Color = (C.accent, C.accent2)}, accentLine)
themeGrads[#themeGrads + ] = lineGrad
(text, xFromRight, w, cb, hoverCol)
b = (, {
Size = .(, w, , ), Position = .(, -xFromRight, , ),
BackgroundColor3 = C.btn, TextColor3 = C.text, Font = .Font.GothamBold,
TextSize = , Text = text, AutoButtonColor = ,
}, bar)
(b, )
st = (, {Color = C.stroke, Thickness = , Transparency = }, b)
sc = (, {}, b)
hc = hoverCol C.accent2
b.MouseEnter:(()
(b, , {BackgroundColor3 = C.btnHover})
(st, , {Color = hc, Transparency = })
)
b.MouseLeave:(()
(b, , {BackgroundColor3 = C.btn})
(st, , {Color = C.stroke, Transparency = })
(sc, , {Scale = })
)
b.MouseButton1Down:(() (sc, , {Scale = }) )
b.MouseButton1Up:(() (sc, , {Scale = }, .EasingStyle.Back) )
b.MouseButton1Click:(cb)
b
dragging, dragStart, startPos = , ,
bar.InputBegan:((i)
i.UserInputType == .UserInputType.MouseButton1 i.UserInputType == .UserInputType.Touch
dragging, dragStart, startPos = , i.Position, win.Position
i.Changed:(()
i.UserInputState == .UserInputState.End dragging =
)
)
dragConn
dragConn = UIS.InputChanged:((i)
gui.Parent dragConn:()
dragging (i.UserInputType == .UserInputType.MouseMovement
i.UserInputType == .UserInputType.Touch)
d = i.Position - dragStart
win.Position = .(startPos.X.Scale, startPos.X.Offset + d.X,
startPos.Y.Scale, startPos.Y.Offset + d.Y)
)
digitBoxes, digitScales, boxStrokes = {}, {}, {}
BOX_W, BOX_H, BOX_GAP, BOX_Y = , , ,
boxStart = (WIDTH - ( * BOX_W + * BOX_GAP)) /
i = ,
b = (, {
Size = .(, BOX_W, , BOX_H),
AnchorPoint = .(, ),
Position = .(, boxStart + (i - ) * (BOX_W + BOX_GAP) + BOX_W / , , BOX_Y + BOX_H / ),
BackgroundColor3 = C.card, TextColor3 = C.sub, Font = .Font.GothamBold,
TextSize = , Text = ,
}, win)
(b, )
boxStrokes[i] = (, {Color = C.stroke, Thickness = }, b)
digitScales[i] = (, {Scale = }, b)
digitBoxes[i] = b
track = (, {
Size = .(, -, , ), Position = .(, , , ),
BackgroundColor3 = C.card, BorderSizePixel = ,
}, win)
(track, )
fill = (, {Size = .(, , , ), BackgroundColor3 = C.white, BorderSizePixel = }, track)
(fill, )
fillGrad = (, {Color = (C.accent, C.accent2)}, fill)
themeGrads[#themeGrads + ] = fillGrad
statusBox = (, {
Size = .(, -, , ), Position = .(, , , ),
BackgroundColor3 = C.card, BorderSizePixel = ,
}, win)
(statusBox, )
(, {Color = C.stroke, Thickness = , Transparency = }, statusBox)
dot = (, {
Size = .(, , , ), Position = .(, , , -),
BackgroundColor3 = C.sub, BorderSizePixel = ,
}, statusBox)
(dot, )
statusLbl = (statusBox, {
Size = .(, -, , -), Position = .(, , , ),
Text = , TextSize = , TextColor3 = C.sub,
TextWrapped = , TextTruncate = .TextTruncate.AtEnd,
TextYAlignment = .TextYAlignment.Center,
})
noticeFrame = (, {
Size = .(, -, , ), AnchorPoint = .(, ),
Position = .(, , , ), BackgroundTransparency = , Visible = ,
}, win)
noticeScale = (, {Scale = }, noticeFrame)
noticeIcon = (, {
Size = .(, , , ), Position = .(, , , -),
BackgroundColor3 = C.warn, BorderSizePixel = ,
}, noticeFrame)
(noticeIcon, )
(noticeIcon, {
Size = .(, , , ), Text = , TextColor3 = C.bgBot, Font = .Font.GothamBold,
TextSize = , TextXAlignment = .TextXAlignment.Center,
})
noticeLbl = (noticeFrame, {
Size = .(, -, , ), Position = .(, , , ),
Text = , TextColor3 = C.warn, Font = .Font.GothamBold,
TextSize = , TextTruncate = .TextTruncate.AtEnd,
})
rowsFrame = (, {
Size = .(, -, , ), Position = .(, , , ), BackgroundTransparency = ,
}, win)
(, {Padding = .(, ), SortOrder = .SortOrder.LayoutOrder}, rowsFrame)
rows, rowScales = {}, {}
i = ,
holder = (, {
Size = .(, , , ), BackgroundTransparency = , LayoutOrder = i,
}, rowsFrame)
card = (, {
Size = .(, , , ), AnchorPoint = .(, ),
Position = .(, , , ), BackgroundColor3 = C.card, BorderSizePixel = ,
}, holder)
(card, )
cardStroke = (, {Color = C.stroke, Thickness = , Transparency = }, card)
rowScales[i] = (, {Scale = }, card)
(card, {
Size = .(, , , ), Position = .(, , , ),
Text = (i), TextColor3 = C.sub, TextSize = , Font = .Font.GothamBold,
})
pThumb = (, {
Size = .(, , , ), Position = .(, , , ),
BackgroundColor3 = .(, , ), ScaleType = .ScaleType.Fit,
}, card)
(pThumb, )
nameLbl = (card, {
Size = .(, , , ), Position = .(, , , ),
Text = , TextSize = , TextTruncate = .TextTruncate.AtEnd,
})
arrow = (card, {
Size = .(, , , ), Position = .(, , , ),
Text = , TextColor3 = C.accent2, TextSize = , Font = .Font.GothamBold,
TextXAlignment = .TextXAlignment.Center,
})
hThumb = (, {
Size = .(, , , ), Position = .(, , , ),
BackgroundColor3 = .(, , ), ScaleType = .ScaleType.Fit, Visible = ,
}, card)
(hThumb, )
valLbl = (card, {
Size = .(, , , ), Position = .(, , , ),
Text = , TextSize = , Font = .Font.GothamBold, TextTruncate = .TextTruncate.AtEnd,
})
emptyLbl = (card, {
Size = .(, -, , ), Position = .(, , , ),
Text = , TextColor3 = C.warn, Font = .Font.GothamBold,
TextSize = , Visible = , TextTruncate = .TextTruncate.AtEnd,
})
rows[i] = {
card = card, stroke = cardStroke, pThumb = pThumb, nameLbl = nameLbl, arrow = arrow,
hThumb = hThumb, valLbl = valLbl, empty = emptyLbl, state = ,
}
fx = (, {
Size = .(, , , ), BackgroundTransparency = , ZIndex = ,
}, win)
closed =
finished =
pulse =
notLibrary, absentSince = ,
mode =
lastCompleteCode, lastCelebrated = ,
completeCode =
flashText, flashColor, flashUntil = , C.text,
lastCount = -
statusColor
(text, color, pulsing)
pulse = pulsing
statusLbl.Text ~= text
statusLbl.Text = text
statusLbl.TextTransparency =
(statusLbl, , {TextTransparency = })
statusColor ~= color
statusColor = color
(statusLbl, , {TextColor3 = color})
(dot, , {BackgroundColor3 = color})
(text, color, duration)
flashText, flashColor, flashUntil = text, color C.text, .() + (duration )
(flashText, flashColor, )
(i, )
.( , ()
closed
s = digitScales[i]
s.Scale =
(s, , {Scale = }, .EasingStyle.Back)
)
(cx, cy, count)
ox, oy = cx WIDTH / , cy (BOX_Y + BOX_H / )
i = , (count )
p = (, {
Size = .(, , , ), AnchorPoint = .(, ),
Position = .(, ox, , oy), BorderSizePixel = , ZIndex = ,
BackgroundColor3 = (i % == ) C.white ((i % == ) C.ok C.accent2),
}, fx)
(p, )
ang = .() * .pi *
dist = + .() *
(p, + .() * , {
Position = .(, ox + .(ang) * dist, , oy + .(ang) * dist * ),
BackgroundTransparency = ,
Size = .(, , , ),
Rotation = .(-, ),
})
Debris:(p, )
()
i = , (i, (i - ) * )
()
(winStroke, , {Thickness = })
.(, ()
closed (winStroke, , {Thickness = })
)
minimized =
SEND_H =
sendExtra =
placeSend
()
minimized MINI_H FULL_H
(v)
i = , digitBoxes[i].Visible = v
track.Visible = v
statusBox.Visible = v
()
finished
m
notLibrary m = m = minimized
m == mode
mode = m
m ==
(win, , {Size = .(, WIDTH, , NOTICE_H)})
.(, ()
closed mode ~=
()
rowsFrame.Visible =
noticeScale.Scale =
noticeFrame.Visible =
(noticeScale, , {Scale = }, .EasingStyle.Back)
)
noticeFrame.Visible =
()
m ==
rowsFrame.Visible =
(win, , {Size = .(, WIDTH, , FULL_H + sendExtra)}, .EasingStyle.Back)
(win, , {Size = .(, WIDTH, , MINI_H + sendExtra)})
.(, ()
mode == rowsFrame.Visible =
)
placeSend ()
()
closed
closed =
dragConn:()
(winScale, , {Scale = }, .EasingStyle.Back, .EasingDirection.In)
.(, () gui:() )
(, , , closeGui, C.bad)
miniBtn
miniBtn = (, , , ()
minimized = minimized
miniBtn.Text = minimized
()
)
copyBtn
copyBtn = (, , , ()
mode == finished
completeCode setclipboard
(completeCode)
( .. completeCode, C.ok)
copyBtn.Text =
.(, ()
copyBtn.Parent copyBtn.Text =
)
completeCode
(, C.warn)
(, C.bad)
)
ReplicatedStorage = :()
READY_BASE = .(, , )
READY_HOVER = .(, , )
sending, sendShown, hideToken, lastLabelCode = , , ,
completedCode =
sendBtn = (, {
Size = .(, -, , ), AnchorPoint = .(, ),
Position = .(, , , FULL_H - ),
BackgroundColor3 = READY_BASE, BorderSizePixel = , AutoButtonColor = ,
Text = , ClipsDescendants = , Visible = , ZIndex = ,
}, win)
(sendBtn, )
sendStroke = (, {Color = C.white, Thickness = }, sendBtn)
sendStrokeGrad = (, {Color = (C.ok, C.accent2)}, sendStroke)
sendScale = (, {Scale = }, sendBtn)
sendFill = (, {
Size = .(, , , ), BackgroundColor3 = C.accent2,
BackgroundTransparency = , BorderSizePixel = , ZIndex = ,
}, sendBtn)
sendShine = (, {
Size = .(, , , ), BackgroundColor3 = C.white, BorderSizePixel = , ZIndex = ,
}, sendBtn)
shineGrad = (, {
Transparency = NumberSequence.({
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
NumberSequenceKeypoint.(, ),
}),
Rotation = ,
}, sendShine)
sendLbl = (sendBtn, {
Size = .(, , , ), Text = , TextColor3 = C.ok,
Font = .Font.GothamBold, TextSize = ,
TextXAlignment = .TextXAlignment.Center, ZIndex = ,
})
(code)
folder = ReplicatedStorage:(, )
remote = folder folder:(, )
remote ,
args = {code}
(()
remote:((args))
)
(obj)
base = obj.Position
.(()
_, dx ({-, , -, , -, , })
closed
(obj, , {Position = base + .(, dx, , )}, .EasingStyle.Sine)
.()
obj.Position = base
)
()
.(, , , () - )
placeSend = ()
sendShown (sendBtn, , {Position = ()})
(grow)
mode ==
(win, , {Size = .(, WIDTH, , () + sendExtra)},
grow .EasingStyle.Back .EasingStyle.Quint)
()
sendShown =
hideToken +=
sendExtra = SEND_H
sendBtn.Position = ()
sendBtn.Visible =
sendScale.Scale =
(sendScale, , {Scale = }, .EasingStyle.Back)
()
()
sendShown =
lastLabelCode =
sendExtra =
hideToken +=
tok = hideToken
(sendScale, , {Scale = }, .EasingStyle.Back, .EasingDirection.In)
.(, ()
hideToken == tok sendShown sendBtn.Parent sendBtn.Visible =
)
()
()
closed finished
completeCode completedCode =
want = completeCode ~= mode ~=
want
sendShown ()
sending lastLabelCode ~= completeCode
lastLabelCode = completeCode
sendLbl.Text = .. completeCode
sendShown
()
CONFETTI = {C.ok, C.accent, C.accent2, C.warn, C.bad, C.white}
(cx, cy, , col, size)
.(, ()
closed
r = (, {
Size = .(, , , ), AnchorPoint = .(, ),
Position = .(, cx, , cy), BackgroundTransparency = , ZIndex = ,
}, fx)
(r, )
st = (, {Color = col, Thickness = }, r)
(r, , {Size = .(, size, , size)})
(st, , {Transparency = , Thickness = })
Debris:(r, )
)
(count)
h = () + sendExtra
_ = , count
.(.() * , ()
closed
w = .(, )
x = .(, WIDTH)
rot = .(, )
p = (, {
Size = .(, w, , w * .(, )),
AnchorPoint = .(, ),
Position = .(, x, , -),
BackgroundColor3 = CONFETTI[.(#CONFETTI)],
BorderSizePixel = , ZIndex = , Rotation = rot,
}, fx)
t = + .() *
(p, t, {
Position = .(, x + .(-, ), , h + ),
Rotation = rot + .(-, ),
}, .EasingStyle.Quad, .EasingDirection.In)
.(t * , ()
p.Parent (p, t * , {BackgroundTransparency = })
)
Debris:(p, t + )
)
(cx, cy, count)
_ = , count
.(.() * , ()
closed
sz = .(, )
sp = (, {
Size = .(, , , ), AnchorPoint = .(, ),
Position = .(, cx + .(-, ), , cy + .(-, )),
BackgroundColor3 = C.white, BorderSizePixel = , Rotation = , ZIndex = ,
}, fx)
(sp, , {Size = .(, sz, , sz)}, .EasingStyle.Back)
.(, ()
sp.Parent
(sp, , {Size = .(, , , ), BackgroundTransparency = , Rotation = })
)
Debris:(sp, )
)
()
h = () + sendExtra
pill = (, {
Size = .(, , , ), AnchorPoint = .(, ),
Position = .(, , , h / ), BackgroundColor3 = C.cardOk,
BorderSizePixel = , ZIndex = ,
}, fx)
(pill, )
st = (, {Color = C.white, Thickness = }, pill)
sg = (, {Color = (C.ok, C.accent2)}, st)
sc = (, {Scale = }, pill)
lbl = (pill, {
Size = .(, , , ), Text = , TextColor3 = C.ok,
Font = .Font.GothamBold, TextSize = ,
TextXAlignment = .TextXAlignment.Center, ZIndex = ,
})
(sc, , {Scale = }, .EasingStyle.Back)
.(()
t0 = .()
pill.Parent closed .() - t0 <
e = .() - t0
sg.Rotation = (e * ) %
lbl.TextColor3 = C.ok:(C.white, * ( + * .(e * )))
.()
closed pill.Parent
(sc, , {Scale = }, .EasingStyle.Back, .EasingDirection.In)
Debris:(pill, )
)
()
cx = WIDTH /
cy = () - +
()
(cx, cy, )
(cx, cy, , C.ok, )
(cx, cy, , C.accent2, )
(cx, cy, , C.white, )
()
(cx, cy, )
()
f = (, {
Size = .(, , , ), BackgroundColor3 = C.white,
BackgroundTransparency = , BorderSizePixel = , ZIndex = ,
}, fx)
(f, )
(f, , {BackgroundTransparency = })
Debris:(f, )
winScale.Scale =
(winScale, , {Scale = }, .EasingStyle.Back)
i = ,
.( * (i - ), ()
closed
(boxStrokes[i], , {Thickness = })
.(, ()
closed
(boxStrokes[i], , {Thickness = })
)
)
(obj, )
sc = obj:() (, {}, obj)
.(, ()
closed
(sc, , {Scale = }, .EasingStyle.Back, .EasingDirection.In)
)
()
finished closed
finished =
pulse =
track.AnchorPoint = .(, )
track.Position = .(, , , )
statusBox.AnchorPoint = .(, )
statusBox.Position = .(, , , )
i = ,
(digitBoxes[i], (i - ) * )
(rows[i].card, + (i - ) * )
(track, )
(statusBox, )
(sendBtn, )
.(, ()
closed
(win, , {Size = .(, WIDTH, , )})
)
.(, closeGui)
()
closed sending sendShown
code = completeCode
code
sending =
sendLbl.Text =
sendLbl.TextColor3 = C.white
(sendBtn, , {BackgroundColor3 = READY_BASE})
sendFill.Size = .(, , , )
sendFill.BackgroundTransparency =
(sendFill, , {Size = .(, , , )}, .EasingStyle.Sine, .EasingDirection.InOut)
( .. code .. , C.accent2, )
i = ,
.((i - ) * , ()
closed
(i, )
(boxStrokes[i], , {Color = C.accent2, Thickness = })
.(, ()
closed
(boxStrokes[i], , {Color = C.ok, Thickness = })
)
)
.(()
.()
closed
ok, err = (code)
closed
(sendFill, , {BackgroundTransparency = })
ok
(, code)
completedCode = code
sendLbl.Text =
sendLbl.TextColor3 = C.bgBot
(sendBtn, , {BackgroundColor3 = C.ok})
()
(, C.ok, )
(, err)
sendLbl.Text =
sendLbl.TextColor3 = C.bad
(sendBtn, , {BackgroundColor3 = C.cardBad})
(sendBtn)
( .. (err), C.bad, )
.(ok )
closed
ok
()
sending =
sendFill.Size = .(, , , )
sendLbl.TextColor3 = C.ok
(sendBtn, , {BackgroundColor3 = READY_BASE})
lastLabelCode =
()
)
sendBtn.MouseEnter:(()
sending
(sendBtn, , {BackgroundColor3 = READY_HOVER})
(sendStroke, , {Thickness = })
)
sendBtn.MouseLeave:(()
(sendStroke, , {Thickness = })
(sendScale, , {Scale = })
sending (sendBtn, , {BackgroundColor3 = READY_BASE})
)
sendBtn.MouseButton1Down:(() (sendScale, , {Scale = }) )
sendBtn.MouseButton1Up:(() (sendScale, , {Scale = }, .EasingStyle.Back) )
sendBtn.MouseButton1Click:(sendCode)
(i, s)
r, box = rows[i], digitBoxes[i]
dg = s s.digit
state = ( s) (dg )
txt = dg (s )
box.Text ~= txt
box.Text = txt
dg (i, )
r.state ~= state
r.state = state
st = STATE[state]
(box, , {TextColor3 = st.text, BackgroundColor3 = st.box})
(boxStrokes[i], , {Color = st.boxStroke})
(r.card, , {BackgroundColor3 = st.card})
(r.stroke, , {Color = st.cardStroke, Transparency = st.cardStrokeT})
none = state ==
r.empty.Visible = none
r.nameLbl.Visible = none
r.arrow.Visible = none
r.valLbl.Visible = none
(r.pThumb, s s.img)
r.nameLbl.Text = s s.name
(r.hThumb, s s.hint)
state ==
r.valLbl.Text = dg
r.valLbl.TextColor3 = C.ok
r.valLbl.TextSize =
state ==
r.valLbl.Text =
r.valLbl.TextColor3 = C.bad
r.valLbl.TextSize =
r.valLbl.Text =
()
finished
d = ()
flashing = flashText .() < flashUntil
(text, color, pulsing)
flashing
(flashText, flashColor, )
(text, color, pulsing)
d.hintCount ~= lastCount
lastCount = d.hintCount
subLbl.Text = .(, d.hintCount, TOTAL_SHAPES)
(fill, , {Size = .(.(d.hintCount / TOTAL_SHAPES, , ), , , )})
() d.paper d.hintCount >
absentSince =
notLibrary =
absentSince = absentSince .()
.() - absentSince > notLibrary =
()
notLibrary
i = , (i, )
completeCode, lastCelebrated = ,
()
d.paper
i = , (i, )
completeCode, lastCelebrated = ,
()
(, C.warn, )
digits, missing = {}, {}
i = ,
s = d.slots[i]
(i, s)
digits[i] = (s s.digit)
(s s.digit)
missing[#missing + ] = s s.name ( .. i)
#missing ==
code = .(digits)
completeCode = code
()
completedCode == code
(, C.ok, )
(, C.ok, )
code ~= lastCelebrated
lastCelebrated = code
(, code)
()
completeCode, lastCelebrated = ,
()
shown = {}
i = , .(, #missing) shown[i] = missing[i]
txt = .. .(shown, )
#missing > txt = txt .. .(, #missing - )
(txt, C.warn, )
t0 = .()
hbConn
hbConn = RunService.Heartbeat:(()
gui.Parent hbConn:()
t = .() - t0
strokeGrad.Rotation = (t * ) %
lineGrad.Offset = .(((t * ) % ) - , )
titleGrad.Offset = .(((t * ) % ) - , )
pulse
dot.BackgroundTransparency = + * ( + * .(t * ))
dot.BackgroundTransparency =
()
sendShown
sendStrokeGrad.Rotation = (t * ) %
sending
shineGrad.Offset = .(.(((t * ) % ) - , -, ), )
sendLbl.TextColor3 = C.ok:(C.white, * ( + * .(t * )))
notLibrary
col = C.warn:(C.bad, ( + * .(t * )) * )
noticeLbl.TextColor3 = col
noticeIcon.BackgroundColor3 = col
)
(win, , {Position = .(, , , HOME_Y)}, .EasingStyle.Back)
(winScale, , {Scale = }, .EasingStyle.Back)
i = ,
.( + i * , ()
closed
(digitScales[i], , {Scale = }, .EasingStyle.Back)
)
.( + i * , ()
closed
(rowScales[i], , {Scale = }, .EasingStyle.Back)
)
.(()
gui.Parent closed
ok, err = (update)
ok ( .. (err), C.bad, )
.(REFRESH)
)Automatically matches hints from books to library paper, and allows you to send the code padlock to unlock it

DOORS ๐๏ธ