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)