FE IRoblux
Key RequiredUniversal

FE IRoblux

Universal ScriptMstyfoMstyfo 1.1K views 2.2K executesUpdated Sep 4, 2026
5.0/ 5(2 votes)
20100% Positive
Lua Script•1158 lines (36503 chars)
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)

Features & Information

Its an Tool And all the apps Works CRE: nevergetmePC

Community Comments (2)

5teve3019D5teve3019DSep 5, 2026

fun script.

MstyfoMstyfoSep 11, 2026

btw CHECK the backpack its a Tool

More Scripts for Universal Scripts