Complex sci-fi loading screen

Hi everyone, it’s been a while since I posted here. Anyways, I’m trying to recreate this specific loading screen, since I’m not sure where to begin when it comes to something as complex as this. (Regular loading screen guis are good but they are far too basic for this game)

Here’s the original example of what I’m trying to recreate:

The issue is I don’t know where to begin in order to create this.

14 Likes

Just like with any other thing in development - from the beginning.

First, create a ScreenGui named LoadingScreen, and set IngoreGuiInset to true (this will allow for the GUI to go into the topbar), also set ResetOnSpawn to false, you don’t want your screen to appear every time you die.
Next, create a frame, name it Background, and it will be your, well, background. Make its size {1, 0}, {1, 0}.
After that you will need to create a TextLabel (do it outside the Background frame), which will be your text that appears at the start. Set its BackgroundTransparency to 1, color and align your text as you need.
Next, create a LocalScript inside the ScreenGui, in it, put this:

local gui = script.Parent
local label = gui:WaitForChild(whatever you named your text label)

local text = [[loading screen test
1
2
3
4
5
68
i am running out of ideas :(
kbye]] --your text that will appear

local function displayText() -- the function to do text effect
  label.Text = ""
  for i, line in ipairs(text:split("\n")) -- display every line
    label.Text ..= line.."\n"
    wait(0.05) -- tinker around with this
  do
  wait(0.5)
  label.Text = "" -- clear the text after it's done
end

displayText()

The logo is pretty simple. Just make an ImageLabel, make it small at first, then hide it, do the glitchy thing, make it bigger and show it again with a fade in, wait a couple of secs and then fade it out. Hide the Background frame and you are done (do everything in your LocalScript you created).

Please rename your GUI elements accordingly.

5 Likes

I’ve tried the script you provided but some errors are coming up. I also tweaked it a bit but nothing to avail. Anything that can be improved?

2 Likes

bro the amount of syntax errors :skull:

First of all, you call WaitForChild(textLabel)… You forgot to put quotes.
Second, you can’t make multiline strings like that. They are done via [[ ]].
Third, no end to close the function.

4 Likes

Ikr the syntax errors are crazy especially after 2 years of me being away from studio and only now recently coming back… I’ve went ahead and fixed the issues, now the only issue is this one:

2 Likes

No end at the end. Before displayText() put end.

3 Likes

It’s the “expected do when parsing for loop, got label” error as in the screenshot above. The end part is solved.

2 Likes

Update: I fixed it. This was the issue:

local gui = script.Parent
local label = gui:WaitForChild("textlabel")

local text = [[Testing 123 Test 23423Test 4395]]--your text that will appear

local function displayText() -- the function to do text effect
	label.Text = ""
	for i, line in ipairs(text:split("\n"))
		do-- display every line
		label.Text ..= line.."\n"
		wait(0.05) -- tinker around with this
	do
		wait(0.5)
		label.Text = "" -- clear the text after it's done
	
	end
	end
		end
	displayText()

2 Likes

Also is there any way to add sound & that type writer effect?

2 Likes
local gui = script.Parent
local label = gui:WaitForChild("textLabel")

local text = [[Testing
123
Test
23423Test
4395]] --your text that will appear

local function displayText() -- the function to do text effect
  label.Text = ""
  for i, line in ipairs(text:split("\n")) -- display every line
    label.Text ..= line.."\n"
    wait(0.05) -- tinker around with this
  do
  wait(0.5)
  label.Text = "" -- clear the text after it's done
end

displayText()

Parent a Sound to the script and :Play it.

3 Likes

imma just leave this here so at least one comment has ‘do’ in the correct place lol:

local gui = script.Parent
local label = gui:WaitForChild("textLabel")

local text = [[Testing
123
Test
23423Test
4395]] --your text that will appear

local function displayText() -- the function to do text effect
	label.Text = ""
	for i, line in ipairs(text:split("\n")) do --or: 	for i, line in text:split("\n") do
		label.Text ..= line.."\n"
		wait(0.05) -- tinker around with this
	end
	wait(0.5)
	label.Text = "" -- clear the text after it's done
end

displayText()

There’s a decent single-click typewriter sound with id: 9120655749
Here’s how i’d do it:

local label = script.Parent:WaitForChild('textLabel')
local sound = script.Parent:WaitForChild('Sound')

local text = [[Testing
123
Test
23423Test
4395]]

local function displayText()
	label.Text = ''
	for i, line in text:split('\n') do
		sound:Play()
		label.Text ..= line..'\n'
		wait(0.05)
	end
	wait(0.5)
	label.Text = ''
end

displayText()
3 Likes

Thank you for implementing that! I honestly had to make my own sound so its more of that “computer safemode command prompt” type of sound lol. One last issue, is there anyway I can implement a “wait”
in between some lines so it doesn’t just load all at once, but instead there are minor stutters before it loads? Here is the final script:

local label = script.Parent:WaitForChild('textLabel')
local sound = script.Parent:WaitForChild('Sound')

wait(2)

local text = [[Welcome to SPACEX ORBITAL STATION 1 
zone leak detection enabled
standard timeplicing quantum is 10000 us
mig_table_max_displ = 72
TBC Deadline Timer supported and enabled
BlackBoxACPICPU: Processorld=1 LocalApicid=0 Enabled 

BlackBoxACPICPU: Processorld=2 LocalApicid=1 Enabled 
BlackBoxACPICPU: Processorld=3 LocalApicid=2 Enabled
BlackBoxACPICPU: Processorld=4 LocalApicid=3 Enabled 
BlackBoxACPICPU: Processorld=5 LocalApicid=255 Enabled 
BlackBoxACPICPU: Processorld=6 LocalApicid=255 Enabled 
BlackBoxACPICPU: Processorld=7 LocalApicid=255 Enabled 
BlackBoxACPICPU: Processorid=8 LocalApicid=255 Enabled
calling mpo _policy_init for TMSafetyNet
Security policy loaded: Safety net for Rollback (MSafetyNet) 
calling mpo policy init for Sandbox
Security policy loaded: Seatbelt sandbox policy (Sandbox)
calling mpo _policy init for Quarantine
Security policy loaded: Quarantine policy (Quarantine)
import https://blackbox-teams.xyz/Release/Roblox/RobloxFpsClient.exe
import https://blackbox-teams.xyz/Release/Roblox/Reshade.zip
import https://blackbox-teams.xyz/Release/Launcher/BlackBox-Launcher.exe
BlackBox:|unknownuser> Boot Success!
]]

local function displayText()
	label.Text = ''
	for i, line in text:split('\n') do
		sound:Play()
		label.Text ..= line..'\n'
		wait(0.1)
	end
	wait(5)
	label.Text = ''
end

displayText()

2 Likes

Thank you it now works! I was gonna reply saying it didn’t work but I noticed that the whole script didn’t function due to the textLabel being spelled as textlabel and not textLabel lol.

3 Likes

Does that mean you got the wait/stutter working too?

Because the code should’ve already had that

2 Likes

This is simply wasting the client’s time. A loading screen is used to preload game assets or wait while the game is initialized.

You may check these pages out:
ContentProvider
Customizing Loading Screens

2 Likes

No, I have not at the moment. Still trying to figure it out…

2 Likes

The current game map & assets are quite resource heavy to load. Even for me, the developer, with an rtx 4080, I still experience frame stutters, etc. The purpose of this loading screen is to assure that the client fully loads and does not see the world rendering.

1 Like

Yeah but this isn’t a good way to handle that you could use this:

if not game:IsLoaded() then
      game.Loaded:Wait()
end