X3D Loading Screen
A terminal-style loading screen with an ENTER WORLD button the player presses before spawning. One HTML file, no build step.
Buy / Get freeInstallation
- Remove
esx_loadingscreen(or whatever loading screen you run) fromserver.cfg— both claim the sameloadscreenslot and cannot coexist - Drop the
x3d_loadingscreenfolder intoresources/ - Add it to
server.cfg:
ensure x3d_loadingscreen
That is all. No build step, no SQL.
Changing the server name
Open loadscreen.html and find this block (around line 270):
// ══ CONFIG ═════════════════════════════════════════════════
var BRAND = 'SERVER'; // the big name
var SUBTITLE = '// SERVER BOOT SEQUENCE'; // the line under it
var BUILD = 'v1.0.2'; // top right corner
// ═══════════════════════════════════════════════════════════
Then restart x3d_loadingscreen. Anyone connecting after that sees it.
Adding backgrounds
Drop the files next to loadscreen.html. No code change.
| File | Result |
|---|---|
bg.png |
one image, shown statically |
bg.png … bg6.png |
a crossfading slideshow every 7 seconds |
.jpg works too |
bg.jpg … bg6.jpg |
The slideshow probes which files actually load and skips the rest — a missing one is not an error.
Size: 1920×1080 is plenty, it is scaled with object-fit: cover. Anything over 2 MB per image just makes players wait longer.
Video instead of images
Drop bg.mp4 and change the <body> tag in loadscreen.html:
<body class="has-vid">
(the default is class="has-img")
Adding music
Drop loop.mp3 next to loadscreen.html. The mute button and volume slider start working on their own, and the level is remembered in the player's localStorage.
audio/loading_music.mp3 also works — the old esx_loadingscreen location.
How ENTER WORLD works
assets reach 100%
↓
wait for the core to report that the player data is ready
↓
ready → the button lights up (click, or press Enter)
↓
fade to black → shut the loading screen down → fire esx:playerReadyToSpawn
The client accepts two signals — esx:playerDataReady (from the es_extended X3D Build) and esx:playerLoaded (stock ESX). Whichever arrives first enables the button.
If a player ends up on a black screen
This happens when the core already put the player in the world without waiting for the button, and the player then presses it: the screen fades out with nothing left to fade it back in.
The es_extended X3D Build sends esx:spawnedWithoutEnterWorld, and the loading screen takes itself down and fades in. Nothing to configure.
On another core, fire that event server-side when you release a player without the handshake:
TriggerClientEvent('esx:spawnedWithoutEnterWorld', playerId)
Previewing in a browser
Open loadscreen.html in an ordinary browser. It drops into a simulation that mounts a sample resource list so you can see the layout. That mode never runs in game.
What is in the folder
x3d_loadingscreen/
├── fxmanifest.lua
├── loadscreen.html ← everything lives here
├── client/client.lua ← the ENTER WORLD handshake
├── cursors/*.png
└── README.md