
KeylessUniversal

local Players = game:GetService("Players")
local UserInputService = game:GetService("UserInputService")
local RunService = game:GetService("RunService")
local HttpService = game:GetService("HttpService")
local player = Players.LocalPlayer
-- Create the Tool
local Tool = Instance.new("Tool")
Tool.Name = "Phone"
Tool.RequiresHandle = false
Tool.Parent = player:WaitForChild("Backpack")
-- State Variables
local battery = 100
local jumpCount = 0
local freeCamActive = false
local flashlightActive = false
local flashlightInstance = nil
local lastPhotoTaken = nil
local screenGui, phoneFrame, mainContent, backBtn
local deadOverlay, deadLabel
local originalCameraType
local phoneThemeColor = Color3.fromRGB(20, 20, 20)
--------------------------------------------------
-- BATTERY & JUMP MECHANICS
--------------------------------------------------
local function updateBatteryUI(chargeLabel)
if chargeLabel then
chargeLabel.Text = string.format("%d%%", math.floor(battery))
if battery <= 0 then
chargeLabel.TextColor3 = Color3.fromRGB(255, 50, 50)
else
chargeLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
end
end
if battery <= 0 then
if deadOverlay then
deadOverlay.Visible = true
deadLabel.Text = string.format("⚠️Phone Battery Died Jump 10 Times to Charge⚠️\n(%d/10 Jumps)", jumpCount)
end
else
if deadOverlay then
deadOverlay.Visible = false
end
end
end
task.spawn(function()
while true do
task.wait(1)
if battery > 0 then
battery = battery - 1
end
end
end)
local function setupJumpTracker()
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
humanoid.Jumping:Connect(function()
if battery <= 0 then
jumpCount = jumpCount + 1
if jumpCount >= 10 then
battery = 100
jumpCount = 0
end
end
end)
end
--------------------------------------------------
-- FLASHLIGHT HELPER
--------------------------------------------------
local function toggleAvatarFlashlight(enable)
flashlightActive = enable
if flashlightInstance then
flashlightInstance:Destroy()
flashlightInstance = nil
end
if flashlightActive then
local character = player.Character
if character then
local attachPart = character:FindFirstChild("UpperTorso") or character:FindFirstChild("Torso") or character:FindFirstChild("Head") or character:FindFirstChild("HumanoidRootPart")
if attachPart then
local light = Instance.new("SpotLight")
light.Name = "PhoneFlashlight"
light.Brightness = 5
light.Range = 60
light.Angle = 70
light.Face = Enum.NormalId.Front
light.Shadows = true
light.Parent = attachPart
flashlightInstance = light
end
end
end
end
--------------------------------------------------
-- APP VIEWS & HELPERS
--------------------------------------------------
local function clearContent()
if not mainContent then return end
for _, child in ipairs(mainContent:GetChildren()) do
child:Destroy()
end
end
local openHomeScreen
-- 1. Notes App
local function openTextApp()
clearContent()
if backBtn then backBtn.Visible = true end
local textBox = Instance.new("TextBox")
textBox.Size = UDim2.new(1, -12, 1, -12)
textBox.Position = UDim2.new(0, 6, 0, 6)
textBox.PlaceholderText = "Type notes here..."
textBox.Text = ""
textBox.MultiLine = true
textBox.ClearTextOnFocus = false
textBox.TextWrapped = true
textBox.TextSize = 12
textBox.TextYAlignment = Enum.TextYAlignment.Top
textBox.TextXAlignment = Enum.TextXAlignment.Left
textBox.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
textBox.TextColor3 = Color3.fromRGB(255, 255, 255)
textBox.Parent = mainContent
end
-- 2. Camera App
local function openCameraApp()
clearContent()
if backBtn then backBtn.Visible = true end
local snapBtn = Instance.new("TextButton")
snapBtn.Size = UDim2.new(0, 110, 0, 30)
snapBtn.Position = UDim2.new(0.5, -55, 0.15, 0)
snapBtn.Text = "📷 Take Photo"
snapBtn.TextSize = 12
snapBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
snapBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
snapBtn.Parent = mainContent
local viewPhotoBtn = Instance.new("TextButton")
viewPhotoBtn.Size = UDim2.new(0, 110, 0, 30)
viewPhotoBtn.Position = UDim2.new(0.5, -55, 0.4, 0)
viewPhotoBtn.Text = "🖼️ View Photo"
viewPhotoBtn.TextSize = 12
viewPhotoBtn.BackgroundColor3 = Color3.fromRGB(50, 150, 250)
viewPhotoBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
viewPhotoBtn.Visible = (lastPhotoTaken ~= nil)
viewPhotoBtn.Parent = mainContent
snapBtn.MouseButton1Click:Connect(function()
local flash = Instance.new("Frame")
flash.Size = UDim2.new(1, 0, 1, 0)
flash.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
flash.Parent = screenGui
task.delay(0.1, function() flash:Destroy() end)
lastPhotoTaken = os.date("%X")
viewPhotoBtn.Visible = true
end)
viewPhotoBtn.MouseButton1Click:Connect(function()
clearContent()
if backBtn then backBtn.Visible = true end
local photoLabel = Instance.new("TextLabel")
photoLabel.Size = UDim2.new(1, -20, 0.8, 0)
photoLabel.Position = UDim2.new(0, 10, 0.1, 0)
photoLabel.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
photoLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
photoLabel.TextSize = 12
photoLabel.TextWrapped = true
photoLabel.Text = "Captured Photo Snapshot\n\nTimestamp: " .. tostring(lastPhotoTaken)
photoLabel.Parent = mainContent
end)
local freeCamBtn = Instance.new("TextButton")
freeCamBtn.Size = UDim2.new(0, 110, 0, 30)
freeCamBtn.Position = UDim2.new(0.5, -55, 0.65, 0)
freeCamBtn.Text = "Toggle FreeCam"
freeCamBtn.TextSize = 12
freeCamBtn.BackgroundColor3 = Color3.fromRGB(80, 80, 80)
freeCamBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
freeCamBtn.Parent = mainContent
freeCamBtn.MouseButton1Click:Connect(function()
local camera = workspace.CurrentCamera
freeCamActive = not freeCamActive
if freeCamActive then
originalCameraType = camera.CameraType
camera.CameraType = Enum.CameraType.Scriptable
freeCamBtn.Text = "Disable FreeCam"
else
camera.CameraType = originalCameraType or Enum.CameraType.Custom
freeCamBtn.Text = "Toggle FreeCam"
end
end)
end
-- 3. Google App
local function openGoogleApp()
clearContent()
if backBtn then backBtn.Visible = true end
local incognitoFrame = Instance.new("Frame")
incognitoFrame.Size = UDim2.new(1, 0, 1, 0)
incognitoFrame.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
incognitoFrame.Parent = mainContent
local logo = Instance.new("TextLabel")
logo.Size = UDim2.new(1, 0, 0, 25)
logo.Position = UDim2.new(0, 0, 0.02, 0)
logo.Text = "🌐 Google Search"
logo.TextColor3 = Color3.fromRGB(200, 200, 200)
logo.TextSize = 13
logo.BackgroundTransparency = 1
logo.Parent = incognitoFrame
local searchBar = Instance.new("TextBox")
searchBar.Size = UDim2.new(0.6, 0, 0, 25)
searchBar.Position = UDim2.new(0.05, 0, 0.12, 0)
searchBar.PlaceholderText = "Search..."
searchBar.Text = ""
searchBar.TextSize = 11
searchBar.BackgroundColor3 = Color3.fromRGB(50, 50, 50)
searchBar.TextColor3 = Color3.fromRGB(255, 255, 255)
searchBar.Parent = incognitoFrame
local searchBtn = Instance.new("TextButton")
searchBtn.Size = UDim2.new(0.28, 0, 0, 25)
searchBtn.Position = UDim2.new(0.67, 0, 0.12, 0)
searchBtn.Text = "Search"
searchBtn.TextSize = 11
searchBtn.BackgroundColor3 = Color3.fromRGB(60, 120, 210)
searchBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
searchBtn.Parent = incognitoFrame
local resultScroll = Instance.new("ScrollingFrame")
resultScroll.Size = UDim2.new(0.9, 0, 0.72, 0)
resultScroll.Position = UDim2.new(0.05, 0, 0.24, 0)
resultScroll.BackgroundColor3 = Color3.fromRGB(20, 20, 20)
resultScroll.CanvasSize = UDim2.new(0, 0, 0, 0)
resultScroll.Parent = incognitoFrame
local resultLabel = Instance.new("TextLabel")
resultLabel.Size = UDim2.new(1, -10, 1, 0)
resultLabel.Position = UDim2.new(0, 5, 0, 0)
resultLabel.BackgroundTransparency = 1
resultLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
resultLabel.TextSize = 10
resultLabel.TextWrapped = true
resultLabel.TextYAlignment = Enum.TextYAlignment.Top
resultLabel.TextXAlignment = Enum.TextXAlignment.Left
resultLabel.Text = "Type something to search online..."
resultLabel.Parent = resultScroll
searchBtn.MouseButton1Click:Connect(function()
local query = searchBar.Text
if query == "" then return end
resultLabel.Text = "Searching..."
task.spawn(function()
local success, response = pcall(function()
local url = "https://en.wikipedia.org/w/api.php?action=query&list=search&srsearch=" .. HttpService:UrlEncode(query) .. "&format=json"
return HttpService:GetAsync(url)
end)
if success then
local data = HttpService:JSONDecode(response)
local searchResults = data.query and data.query.search
if searchResults and #searchResults > 0 then
local formattedText = ""
for i = 1, math.min(3, #searchResults) do
local title = searchResults[i].title
local snippet = searchResults[i].snippet:gsub("<[^>]-%", "")
formattedText = formattedText .. string.format("📌 %s\n%s...\n\n", title, snippet)
end
resultLabel.Text = formattedText
else
resultLabel.Text = "No web results found."
end
else
resultLabel.Text = "❌ Search Failed.\nEnsure HttpService is enabled in game settings."
end
end)
end)
end
--------------------------------------------------
-- GAMES & FUNCTIONAL APPS DEFINITION
--------------------------------------------------
local allApps = {
{Name = "Notes", Color = Color3.fromRGB(50, 150, 250), Action = openTextApp},
{Name = "Camera", Color = Color3.fromRGB(250, 100, 50), Action = openCameraApp},
{Name = "Google", Color = Color3.fromRGB(50, 200, 100), Action = openGoogleApp},
-- Flashlight App
{Name = "Flashlight", Color = Color3.fromRGB(240, 200, 40), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local toggleBtn = Instance.new("TextButton")
toggleBtn.Size = UDim2.new(0.7, 0, 0.4, 0)
toggleBtn.Position = UDim2.new(0.15, 0, 0.3, 0)
toggleBtn.Text = flashlightActive and "🔦 Flashlight: ON" or "🔦 Flashlight: OFF"
toggleBtn.TextSize = 14
toggleBtn.BackgroundColor3 = flashlightActive and Color3.fromRGB(50, 180, 80) or Color3.fromRGB(180, 50, 50)
toggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
toggleBtn.Parent = mainContent
toggleBtn.MouseButton1Click:Connect(function()
toggleAvatarFlashlight(not flashlightActive)
toggleBtn.Text = flashlightActive and "🔦 Flashlight: ON" or "🔦 Flashlight: OFF"
toggleBtn.BackgroundColor3 = flashlightActive and Color3.fromRGB(50, 180, 80) or Color3.fromRGB(180, 50, 50)
end)
end},
-- Game 1: Tic-Tac-Toe
{Name = "TicTacToe", Color = Color3.fromRGB(220, 80, 140), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local turn = "X"
local board = {"", "", "", "", "", "", "", "", ""}
local status = Instance.new("TextLabel")
status.Size = UDim2.new(1, 0, 0, 25)
status.Text = "Turn: Player (X)"
status.TextColor3 = Color3.fromRGB(255, 255, 255)
status.BackgroundTransparency = 1
status.TextSize = 12
status.Parent = mainContent
local grid = Instance.new("Frame")
grid.Size = UDim2.new(0, 150, 0, 150)
grid.Position = UDim2.new(0.5, -75, 0.2, 0)
grid.BackgroundTransparency = 1
grid.Parent = mainContent
local layout = Instance.new("UIGridLayout")
layout.CellSize = UDim2.new(0, 46, 0, 46)
layout.CellPadding = UDim2.new(0, 4, 0, 4)
layout.Parent = grid
for i = 1, 9 do
local btn = Instance.new("TextButton")
btn.Text = ""
btn.TextSize = 18
btn.BackgroundColor3 = Color3.fromRGB(60, 60, 60)
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Parent = grid
btn.MouseButton1Click:Connect(function()
if board[i] == "" and turn == "X" then
board[i] = "X"
btn.Text = "X"
turn = "O"
status.Text = "Bot thinking..."
task.wait(0.4)
local emptyIndices = {}
for idx, val in ipairs(board) do
if val == "" then table.insert(emptyIndices, idx) end
end
if #emptyIndices > 0 then
local choice = emptyIndices[math.random(1, #emptyIndices)]
board[choice] = "O"
grid:GetChildren()[choice + 1].Text = "O"
turn = "X"
status.Text = "Turn: Player (X)"
else
status.Text = "Game Over - Draw!"
end
end
end)
end
end},
-- Game 2: Flappy Bird Mini
{Name = "Flappy", Color = Color3.fromRGB(230, 160, 40), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local birdY = 0.5
local score = 0
local pipeX = 1.0
local gapY = 0.5
local gapSize = 0.35
local isGameOver = false
local scoreLabel = Instance.new("TextLabel")
scoreLabel.Size = UDim2.new(1, 0, 0, 20)
scoreLabel.Text = "Score: 0"
scoreLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
scoreLabel.BackgroundTransparency = 1
scoreLabel.TextSize = 12
scoreLabel.Parent = mainContent
local gameBox = Instance.new("TextButton")
gameBox.Size = UDim2.new(0.9, 0, 0.75, 0)
gameBox.Position = UDim2.new(0.05, 0, 0.15, 0)
gameBox.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
gameBox.Text = "Tap to Flap!"
gameBox.TextColor3 = Color3.fromRGB(150, 150, 150)
gameBox.TextSize = 10
gameBox.ClipsDescendants = true
gameBox.Parent = mainContent
local bird = Instance.new("Frame")
bird.Size = UDim2.new(0, 14, 0, 14)
bird.Position = UDim2.new(0.2, 0, birdY, 0)
bird.BackgroundColor3 = Color3.fromRGB(255, 220, 0)
bird.BorderSizePixel = 0
bird.Parent = gameBox
local topPipe = Instance.new("Frame")
topPipe.BackgroundColor3 = Color3.fromRGB(200, 40, 40)
topPipe.BorderSizePixel = 0
topPipe.Parent = gameBox
local bottomPipe = Instance.new("Frame")
bottomPipe.BackgroundColor3 = Color3.fromRGB(200, 40, 40)
bottomPipe.BorderSizePixel = 0
bottomPipe.Parent = gameBox
local function updatePipes()
topPipe.Size = UDim2.new(0.12, 0, gapY - (gapSize / 2), 0)
topPipe.Position = UDim2.new(pipeX, 0, 0, 0)
local bottomTop = gapY + (gapSize / 2)
bottomPipe.Size = UDim2.new(0.12, 0, 1 - bottomTop, 0)
bottomPipe.Position = UDim2.new(pipeX, 0, bottomTop, 0)
end
local function resetGame()
birdY = 0.5
score = 0
pipeX = 1.0
gapY = math.random(30, 70) / 100
isGameOver = false
scoreLabel.Text = "Score: 0"
gameBox.Text = "Tap to Flap!"
end
updatePipes()
gameBox.MouseButton1Click:Connect(function()
if isGameOver then
resetGame()
return
end
birdY = math.clamp(birdY - 0.12, 0.02, 0.92)
bird.Position = UDim2.new(0.2, 0, birdY, 0)
end)
task.spawn(function()
while gameBox.Parent do
task.wait(0.05)
if not isGameOver then
birdY = math.clamp(birdY + 0.025, 0.02, 0.92)
bird.Position = UDim2.new(0.2, 0, birdY, 0)
pipeX = pipeX - 0.04
if pipeX < -0.15 then
pipeX = 1.0
gapY = math.random(30, 70) / 100
score = score + 1
scoreLabel.Text = "Score: " .. tostring(score)
end
updatePipes()
local topLimit = gapY - (gapSize / 2)
local bottomLimit = gapY + (gapSize / 2)
if pipeX <= 0.28 and pipeX >= 0.1 then
if birdY < topLimit or birdY > bottomLimit then
isGameOver = true
gameBox.Text = "💥 GAME OVER!\nClick to retry"
end
end
if birdY >= 0.92 or birdY <= 0.02 then
isGameOver = true
gameBox.Text = "💥 GAME OVER!\nClick to retry"
end
end
end
end)
end},
-- Game 3: Reaction Speed Test
{Name = "Reaction", Color = Color3.fromRGB(180, 50, 200), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local testBtn = Instance.new("TextButton")
testBtn.Size = UDim2.new(0.8, 0, 0.6, 0)
testBtn.Position = UDim2.new(0.1, 0, 0.2, 0)
testBtn.Text = "Click to Start Test"
testBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 200)
testBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
testBtn.TextSize = 14
testBtn.Parent = mainContent
local state = "idle"
local startTime = 0
testBtn.MouseButton1Click:Connect(function()
if state == "idle" then
state = "waiting"
testBtn.Text = "Wait for GREEN..."
testBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
task.wait(math.random(2, 5))
if state == "waiting" then
state = "ready"
startTime = os.clock()
testBtn.Text = "CLICK NOW!"
testBtn.BackgroundColor3 = Color3.fromRGB(50, 200, 50)
end
elseif state == "ready" then
local reactionTime = math.floor((os.clock() - startTime) * 1000)
testBtn.Text = string.format("Time: %d ms!\nClick to retry", reactionTime)
testBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 200)
state = "idle"
elseif state == "waiting" then
testBtn.Text = "Too Early!\nClick to try again."
testBtn.BackgroundColor3 = Color3.fromRGB(50, 50, 200)
state = "idle"
end
end)
end},
-- App 4: Paint Studio
{Name = "Paint", Color = Color3.fromRGB(240, 120, 40), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local canvas = Instance.new("Frame")
canvas.Size = UDim2.new(0.9, 0, 0.75, 0)
canvas.Position = UDim2.new(0.05, 0, 0.05, 0)
canvas.BackgroundColor3 = Color3.fromRGB(255, 255, 255)
canvas.ClipsDescendants = true
canvas.Parent = mainContent
local clearCanvasBtn = Instance.new("TextButton")
clearCanvasBtn.Size = UDim2.new(0.8, 0, 0, 25)
clearCanvasBtn.Position = UDim2.new(0.1, 0, 0.85, 0)
clearCanvasBtn.Text = "Clear Canvas"
clearCanvasBtn.BackgroundColor3 = Color3.fromRGB(180, 50, 50)
clearCanvasBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
clearCanvasBtn.TextSize = 11
clearCanvasBtn.Parent = mainContent
clearCanvasBtn.MouseButton1Click:Connect(function()
for _, child in ipairs(canvas:GetChildren()) do
child:Destroy()
end
end)
local isDrawing = false
canvas.InputBegan:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
isDrawing = true
end
end)
canvas.InputEnded:Connect(function(input)
if input.UserInputType == Enum.UserInputType.MouseButton1 or input.UserInputType == Enum.UserInputType.Touch then
isDrawing = false
end
end)
canvas.InputChanged:Connect(function(input)
if isDrawing and (input.UserInputType == Enum.UserInputType.MouseMovement or input.UserInputType == Enum.UserInputType.Touch) then
local dot = Instance.new("Frame")
dot.Size = UDim2.new(0, 6, 0, 6)
dot.Position = UDim2.new(0, input.Position.X - canvas.AbsolutePosition.X - 3, 0, input.Position.Y - canvas.AbsolutePosition.Y - 3)
dot.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
dot.BorderSizePixel = 0
dot.Parent = canvas
end
end)
end},
-- App 5: Music Player
{Name = "Music", Color = Color3.fromRGB(200, 50, 150), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local title = Instance.new("TextLabel")
title.Size = UDim2.new(1, 0, 0, 25)
title.Position = UDim2.new(0, 0, 0.05, 0)
title.Text = "🎵 Sound Player"
title.TextColor3 = Color3.fromRGB(255, 255, 255)
title.BackgroundTransparency = 1
title.TextSize = 14
title.Parent = mainContent
local sound = Instance.new("Sound")
sound.SoundId = "rbxassetid://183784924"
sound.Parent = mainContent
local idBox = Instance.new("TextBox")
idBox.Size = UDim2.new(0.85, 0, 0, 30)
idBox.Position = UDim2.new(0.075, 0, 0.22, 0)
idBox.PlaceholderText = "Enter Sound ID..."
idBox.Text = "183784924"
idBox.TextSize = 12
idBox.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
idBox.TextColor3 = Color3.fromRGB(255, 255, 255)
idBox.ClearTextOnFocus = false
idBox.Parent = mainContent
local playBtn = Instance.new("TextButton")
playBtn.Size = UDim2.new(0.4, 0, 0, 35)
playBtn.Position = UDim2.new(0.075, 0, 0.42, 0)
playBtn.Text = "▶️ Play"
playBtn.BackgroundColor3 = Color3.fromRGB(50, 180, 80)
playBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
playBtn.TextSize = 12
playBtn.Parent = mainContent
local pauseBtn = Instance.new("TextButton")
pauseBtn.Size = UDim2.new(0.4, 0, 0, 35)
pauseBtn.Position = UDim2.new(0.525, 0, 0.42, 0)
pauseBtn.Text = "⏸️ Pause"
pauseBtn.BackgroundColor3 = Color3.fromRGB(200, 140, 40)
pauseBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
pauseBtn.TextSize = 12
pauseBtn.Parent = mainContent
local stopBtn = Instance.new("TextButton")
stopBtn.Size = UDim2.new(0.85, 0, 0, 30)
stopBtn.Position = UDim2.new(0.075, 0, 0.6, 0)
stopBtn.Text = "⏹️ Stop"
stopBtn.BackgroundColor3 = Color3.fromRGB(200, 50, 50)
stopBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
stopBtn.TextSize = 12
stopBtn.Parent = mainContent
local function updateSoundId()
local rawId = idBox.Text:gsub("%D", "")
if rawId ~= "" then
sound.SoundId = "rbxassetid://" .. rawId
end
end
playBtn.MouseButton1Click:Connect(function()
updateSoundId()
sound:Play()
end)
pauseBtn.MouseButton1Click:Connect(function()
sound:Pause()
end)
stopBtn.MouseButton1Click:Connect(function()
sound:Stop()
end)
end},
-- App 6: Stopwatch
{Name = "Stopwatch", Color = Color3.fromRGB(70, 190, 150), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local running = false
local timeElapsed = 0
local display = Instance.new("TextLabel")
display.Size = UDim2.new(1, 0, 0.3, 0)
display.Position = UDim2.new(0, 0, 0.15, 0)
display.Text = "00:00.0"
display.TextColor3 = Color3.fromRGB(255, 255, 255)
display.TextSize = 22
display.BackgroundTransparency = 1
display.Parent = mainContent
local toggleBtn = Instance.new("TextButton")
toggleBtn.Size = UDim2.new(0.4, 0, 0, 35)
toggleBtn.Position = UDim2.new(0.08, 0, 0.55, 0)
toggleBtn.Text = "Start"
toggleBtn.BackgroundColor3 = Color3.fromRGB(50, 180, 80)
toggleBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
toggleBtn.TextSize = 12
toggleBtn.Parent = mainContent
local resetBtn = Instance.new("TextButton")
resetBtn.Size = UDim2.new(0.4, 0, 0, 35)
resetBtn.Position = UDim2.new(0.52, 0, 0.55, 0)
resetBtn.Text = "Reset"
resetBtn.BackgroundColor3 = Color3.fromRGB(180, 50, 50)
resetBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
resetBtn.TextSize = 12
resetBtn.Parent = mainContent
toggleBtn.MouseButton1Click:Connect(function()
running = not running
toggleBtn.Text = running and "Pause" or "Start"
toggleBtn.BackgroundColor3 = running and Color3.fromRGB(200, 150, 40) or Color3.fromRGB(50, 180, 80)
end)
resetBtn.MouseButton1Click:Connect(function()
running = false
timeElapsed = 0
toggleBtn.Text = "Start"
toggleBtn.BackgroundColor3 = Color3.fromRGB(50, 180, 80)
display.Text = "00:00.0"
end)
task.spawn(function()
while display.Parent do
if running then
timeElapsed = timeElapsed + 0.1
local mins = math.floor(timeElapsed / 60)
local secs = math.floor(timeElapsed % 60)
local millis = math.floor((timeElapsed % 1) * 10)
display.Text = string.format("%02d:%02d.%d", mins, secs, millis)
end
task.wait(0.1)
end
end)
end},
-- App 7: Fixed Functional Calculator
{Name = "Calculator", Color = Color3.fromRGB(240, 160, 40), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local currentInput = "0"
local firstOperand = nil
local currentOperator = nil
local newOperand = false
local display = Instance.new("TextLabel")
display.Size = UDim2.new(1, -12, 0, 35)
display.Position = UDim2.new(0, 6, 0, 6)
display.Text = currentInput
display.TextSize = 16
display.TextXAlignment = Enum.TextXAlignment.Right
display.BackgroundColor3 = Color3.fromRGB(30, 30, 30)
display.TextColor3 = Color3.fromRGB(255, 255, 255)
display.Parent = mainContent
local grid = Instance.new("Frame")
grid.Size = UDim2.new(1, -12, 1, -50)
grid.Position = UDim2.new(0, 6, 0, 46)
grid.BackgroundTransparency = 1
grid.Parent = mainContent
local layout = Instance.new("UIGridLayout")
layout.CellSize = UDim2.new(0, 40, 0, 30)
layout.CellPadding = UDim2.new(0, 4, 0, 4)
layout.Parent = grid
local buttons = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"C", "0", "=", "+"
}
local function calculate()
local num1 = firstOperand
local num2 = tonumber(currentInput)
if not num1 or not num2 or not currentOperator then return end
local result = 0
if currentOperator == "+" then result = num1 + num2
elseif currentOperator == "-" then result = num1 - num2
elseif currentOperator == "*" then result = num1 * num2
elseif currentOperator == "/" then result = num2 ~= 0 and (num1 / num2) or "Error" end
currentInput = tostring(result)
display.Text = currentInput
firstOperand = nil
currentOperator = nil
newOperand = true
end
for _, char in ipairs(buttons) do
local btn = Instance.new("TextButton")
btn.Text = char
btn.TextSize = 12
btn.BackgroundColor3 = (tonumber(char) or char == "0") and Color3.fromRGB(60, 60, 60) or Color3.fromRGB(180, 100, 30)
if char == "C" then btn.BackgroundColor3 = Color3.fromRGB(180, 50, 50) end
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Parent = grid
btn.MouseButton1Click:Connect(function()
if tonumber(char) or char == "0" then
if currentInput == "0" or newOperand then
currentInput = char
newOperand = false
else
currentInput = currentInput .. char
end
display.Text = currentInput
elseif char == "C" then
currentInput = "0"
firstOperand = nil
currentOperator = nil
newOperand = false
display.Text = currentInput
elseif char == "=" then
calculate()
else
firstOperand = tonumber(currentInput)
currentOperator = char
newOperand = true
end
end)
end
end},
{Name = "Clicker", Color = Color3.fromRGB(150, 50, 250), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local score = 0
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0.8, 0, 0.4, 0)
btn.Position = UDim2.new(0.1, 0, 0.3, 0)
btn.Text = "CLICK ME!\nScore: 0"
btn.TextSize = 16
btn.BackgroundColor3 = Color3.fromRGB(120, 40, 200)
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Parent = mainContent
btn.MouseButton1Click:Connect(function()
score = score + 1
btn.Text = "CLICK ME!\nScore: " .. tostring(score)
end)
end},
{Name = "CoinFlip", Color = Color3.fromRGB(220, 180, 30), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0.3, 0)
lbl.Position = UDim2.new(0, 0, 0.2, 0)
lbl.Text = "🪙 Flip a Coin"
lbl.TextSize = 16
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.BackgroundTransparency = 1
lbl.Parent = mainContent
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0.6, 0, 0, 35)
btn.Position = UDim2.new(0.2, 0, 0.55, 0)
btn.Text = "Flip!"
btn.TextSize = 14
btn.BackgroundColor3 = Color3.fromRGB(200, 150, 20)
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Parent = mainContent
btn.MouseButton1Click:Connect(function()
lbl.Text = math.random(1, 2) == 1 and "HEADS!" or "TAILS!"
end)
end},
{Name = "Dice", Color = Color3.fromRGB(230, 80, 80), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0.3, 0)
lbl.Position = UDim2.new(0, 0, 0.2, 0)
lbl.Text = "🎲 Roll: ?"
lbl.TextSize = 20
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.BackgroundTransparency = 1
lbl.Parent = mainContent
local btn = Instance.new("TextButton")
btn.Size = UDim2.new(0.6, 0, 0, 35)
btn.Position = UDim2.new(0.2, 0, 0.55, 0)
btn.Text = "Roll Dice"
btn.TextSize = 14
btn.BackgroundColor3 = Color3.fromRGB(180, 50, 50)
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.Parent = mainContent
btn.MouseButton1Click:Connect(function()
lbl.Text = "🎲 Roll: " .. tostring(math.random(1, 6))
end)
end},
{Name = "Clock", Color = Color3.fromRGB(70, 190, 150), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local lbl = Instance.new("TextLabel")
lbl.Size = UDim2.new(1, 0, 0.5, 0)
lbl.Position = UDim2.new(0, 0, 0.25, 0)
lbl.Text = os.date("%X")
lbl.TextSize = 22
lbl.TextColor3 = Color3.fromRGB(255, 255, 255)
lbl.BackgroundTransparency = 1
lbl.Parent = mainContent
task.spawn(function()
while lbl.Parent do
lbl.Text = os.date("%X")
task.wait(1)
end
end)
end},
{Name = "Maps", Color = Color3.fromRGB(50, 180, 80), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local mapLabel = Instance.new("TextLabel")
mapLabel.Size = UDim2.new(1, -20, 0.8, 0)
mapLabel.Position = UDim2.new(0, 10, 0.1, 0)
mapLabel.BackgroundColor3 = Color3.fromRGB(30, 80, 40)
mapLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
mapLabel.TextSize = 11
mapLabel.TextWrapped = true
mapLabel.Parent = mainContent
task.spawn(function()
while mapLabel.Parent do
local pos = player.Character and player.Character:FindFirstChild("HumanoidRootPart") and player.Character.HumanoidRootPart.Position or Vector3.new(0,0,0)
mapLabel.Text = string.format("🗺️ Live GPS Tracking\n\nX: %.1f\nY: %.1f\nZ: %.1f", pos.X, pos.Y, pos.Z)
task.wait(0.5)
end
end)
end},
{Name = "Settings", Color = Color3.fromRGB(120, 120, 120), Action = function()
clearContent()
if backBtn then backBtn.Visible = true end
local infoLabel = Instance.new("TextLabel")
infoLabel.Size = UDim2.new(1, -20, 0.45, 0)
infoLabel.Position = UDim2.new(0, 10, 0.05, 0)
infoLabel.BackgroundColor3 = Color3.fromRGB(40, 40, 40)
infoLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
infoLabel.TextSize = 11
infoLabel.TextWrapped = true
infoLabel.Parent = mainContent
task.spawn(function()
while infoLabel.Parent do
infoLabel.Text = string.format("⚙️ Phone Settings\n\nOS: RoOS v3.0\nStorage: 128GB\nBattery Health: %d%%", math.floor(battery))
task.wait(0.5)
end
end)
local custBtn = Instance.new("TextButton")
custBtn.Size = UDim2.new(0.8, 0, 0, 35)
custBtn.Position = UDim2.new(0.1, 0, 0.55, 0)
custBtn.Text = "🎨 Customize Phone Look"
custBtn.TextSize = 11
custBtn.BackgroundColor3 = Color3.fromRGB(60, 120, 200)
custBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
custBtn.Parent = mainContent
custBtn.MouseButton1Click:Connect(function()
clearContent()
if backBtn then backBtn.Visible = true end
local custTitle = Instance.new("TextLabel")
custTitle.Size = UDim2.new(1, 0, 0, 25)
custTitle.Position = UDim2.new(0, 0, 0.05, 0)
custTitle.Text = "Choose Frame Color"
custTitle.TextColor3 = Color3.fromRGB(255, 255, 255)
custTitle.BackgroundTransparency = 1
custTitle.TextSize = 12
custTitle.Parent = mainContent
local colors = {
{Name = "Dark", Color = Color3.fromRGB(20, 20, 20)},
{Name = "Silver", Color = Color3.fromRGB(180, 180, 180)},
{Name = "Gold", Color = Color3.fromRGB(210, 170, 50)},
{Name = "Crimson", Color = Color3.fromRGB(150, 30, 30)},
{Name = "Midnight", Color = Color3.fromRGB(30, 40, 90)}
}
for i, cData in ipairs(colors) do
local cBtn = Instance.new("TextButton")
cBtn.Size = UDim2.new(0.8, 0, 0, 25)
cBtn.Position = UDim2.new(0.1, 0, 0.15 + (i * 0.12), 0)
cBtn.Text = cData.Name
cBtn.BackgroundColor3 = cData.Color
cBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
cBtn.TextSize = 11
cBtn.Parent = mainContent
cBtn.MouseButton1Click:Connect(function()
phoneThemeColor = cData.Color
if phoneFrame then
phoneFrame.BackgroundColor3 = phoneThemeColor
end
end)
end
end)
end}
}
--------------------------------------------------
-- APP STORE & HOME SCREEN
--------------------------------------------------
openHomeScreen = function()
clearContent()
if backBtn then backBtn.Visible = false end
local header = Instance.new("TextLabel")
header.Size = UDim2.new(1, 0, 0, 20)
header.Text = "📱 IRoblux"
header.TextColor3 = Color3.fromRGB(200, 200, 200)
header.TextSize = 12
header.BackgroundTransparency = 1
header.Parent = mainContent
local scroll = Instance.new("ScrollingFrame")
scroll.Size = UDim2.new(1, 0, 1, -22)
scroll.Position = UDim2.new(0, 0, 0, 22)
scroll.BackgroundTransparency = 1
scroll.AutomaticCanvasSize = Enum.AutomaticSize.Y
scroll.ScrollBarThickness = 4
scroll.Parent = mainContent
local grid = Instance.new("UIGridLayout")
grid.CellSize = UDim2.new(0, 52, 0, 52)
grid.CellPadding = UDim2.new(0, 7, 0, 7)
grid.Parent = scroll
local padding = Instance.new("UIPadding")
padding.PaddingLeft = UDim.new(0, 6)
padding.PaddingTop = UDim.new(0, 6)
padding.Parent = scroll
for _, app in ipairs(allApps) do
local btn = Instance.new("TextButton")
btn.BackgroundColor3 = app.Color
btn.Text = app.Name
btn.TextSize = 9
btn.TextColor3 = Color3.fromRGB(255, 255, 255)
btn.TextWrapped = true
btn.Parent = scroll
btn.MouseButton1Click:Connect(app.Action)
end
end
--------------------------------------------------
-- PHONE GUI CREATION
--------------------------------------------------
local function buildPhoneUI()
screenGui = Instance.new("ScreenGui")
screenGui.Name = "PhoneGearGui"
screenGui.Parent = player:WaitForChild("PlayerGui")
phoneFrame = Instance.new("Frame")
phoneFrame.Size = UDim2.new(0, 200, 0, 380)
phoneFrame.Position = UDim2.new(1, -220, 0.5, -190)
phoneFrame.BackgroundColor3 = phoneThemeColor
phoneFrame.BorderSizePixel = 2
phoneFrame.Parent = screenGui
local statusBar = Instance.new("Frame")
statusBar.Size = UDim2.new(1, 0, 0, 22)
statusBar.BackgroundColor3 = Color3.fromRGB(10, 10, 10)
statusBar.Parent = phoneFrame
backBtn = Instance.new("TextButton")
backBtn.Size = UDim2.new(0, 22, 1, 0)
backBtn.Position = UDim2.new(0, 0, 0, 0)
backBtn.Text = "«"
backBtn.TextSize = 14
backBtn.BackgroundTransparency = 1
backBtn.TextColor3 = Color3.fromRGB(255, 255, 255)
backBtn.Visible = false
backBtn.Parent = statusBar
backBtn.MouseButton1Click:Connect(openHomeScreen)
local timeLabel = Instance.new("TextLabel")
timeLabel.Size = UDim2.new(0.4, 0, 1, 0)
timeLabel.Position = UDim2.new(0.25, 0, 0, 0)
timeLabel.TextXAlignment = Enum.TextXAlignment.Left
timeLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
timeLabel.TextSize = 11
timeLabel.BackgroundTransparency = 1
timeLabel.Parent = statusBar
local chargeLabel = Instance.new("TextLabel")
chargeLabel.Size = UDim2.new(0.35, -5, 1, 0)
chargeLabel.Position = UDim2.new(0.65, 0, 0, 0)
chargeLabel.TextXAlignment = Enum.TextXAlignment.Right
chargeLabel.TextColor3 = Color3.fromRGB(255, 255, 255)
chargeLabel.TextSize = 11
chargeLabel.BackgroundTransparency = 1
chargeLabel.Parent = statusBar
mainContent = Instance.new("Frame")
mainContent.Size = UDim2.new(1, -10, 1, -30)
mainContent.Position = UDim2.new(0, 5, 0, 25)
mainContent.BackgroundColor3 = Color3.fromRGB(0, 0, 0)
mainContent.Parent = phoneFrame
deadOverlay = Instance.new("Frame")
deadOverlay.Size = UDim2.new(1, 0, 1, -22)
deadOverlay.Position = UDim2.new(0, 0, 0, 22)
deadOverlay.BackgroundColor3 = Color3.fromRGB(10, 10, 10)
deadOverlay.Visible = false
deadOverlay.ZIndex = 10
deadOverlay.Parent = phoneFrame
deadLabel = Instance.new("TextLabel")
deadLabel.Size = UDim2.new(0.9, 0, 0.8, 0)
deadLabel.Position = UDim2.new(0.05, 0, 0.1, 0)
deadLabel.BackgroundTransparency = 1
deadLabel.TextColor3 = Color3.fromRGB(255, 50, 50)
deadLabel.TextSize = 12
deadLabel.TextWrapped = true
deadLabel.ZIndex = 11
deadLabel.Parent = deadOverlay
RunService.RenderStepped:Connect(function()
timeLabel.Text = os.date("%X")
updateBatteryUI(chargeLabel)
end)
openHomeScreen()
end
--------------------------------------------------
-- TOOL EVENTS
--------------------------------------------------
Tool.Equipped:Connect(function()
setupJumpTracker()
if not screenGui then
buildPhoneUI()
else
screenGui.Enabled = true
end
end)
Tool.Unequipped:Connect(function()
if screenGui then
screenGui.Enabled = false
end
if freeCamActive then
local camera = workspace.CurrentCamera
camera.CameraType = originalCameraType or Enum.CameraType.Custom
freeCamActive = false
end
toggleAvatarFlashlight(false)
end)



fun script.
btw CHECK the backpack its a Tool