Jixryo Loading

A loading screen whose bar follows the real load, stage by stage, with the clock, the server's notes and a clean hand-off into the character scene.

Version 0.2.1 Updated See it on its script page

On this page

Jixryo Loading is the resource jixryo_loadingscreen, version 0.2.1. It replaces amzn_loadscreen. The bar is cut into the six stages of a real load, each slice as wide as that stage usually takes, and inside a stage it only moves on the game's own events. Around the bar: the clock, a welcome by name, who is in the city, the next restart, the server's notes and the music. At the end it hands over to Jixryo Characters, which clears the screen onto the character scene already built behind it. The whole resource is about 5.3 MB (amzn_loadscreen was 90 MB, mostly its video), and every player downloads it before anything else.

What players get

  • The real load. Six stages in order: starting the game, registering streamed files, loading game content, loading map data, joining the city, getting your characters ready. Inside a stage the bar moves only on the game's own events (game systems started of those announced, map data files loaded of the 5,471 announced, with the resource being loaded named). A stage with nothing to count holds still and shows its time. The bar never goes back and never runs ahead of the events.
  • The time left is an estimate from this PC's last loads (the last four are kept in the browser's storage), and it says so. A PC's first load uses a typical load's timings.
  • Then it hands over. At 100% it says "The city is ready" with the load's real time and how it compares with last time. The panels and the music go, then the screen clears to the character scene already built behind it.
  • Around the bar: the clock and date (the player's own, 12 or 24 hour as their Windows is set unless forced), "Welcome back, name" with how many characters are waiting or "Welcome to the city" on a first visit, who is in the city and the next restart, the IMPORTANT notes (the left and right arrows turn them; they turn by themselves every 9 seconds), the music (Space turns it off, and that is remembered on the PC) and the Discord as text.
  • Six stills cross-fade behind it every 8 seconds (or a muted looping video, if you add one).

What staff get

  • Notes. Up to eight notes with a tag (update, notice, event, rule or tip), an optional date, badge and up to five short lines, from config.lua and, if set, a JSON file on the web read every few minutes.
  • Debug. With Config.debug = true, pressing D on the loading screen lists the raw load events, newest first.

Install

  1. Stop amzn_loadscreen. FiveM shows only one loading screen, the last one it finds: remove its ensure line or move the folder out of your resources.

  2. Upload the folder whole. The page is already built in web/build; the stills and music are in web/media.

  3. Order in server.cfg. It depends on oxmysql alone (for the character count) and needs neither ox_lib nor Jixryo Core. The second line hides cfx's spinner in the corner, since the page shows its own progress.

    server.cfg
    ensure oxmysql
    ensure jixryo_loadingscreen
    setr sv_showBusySpinnerOnLoadingScreen false
  4. Items. None.

  5. The database. None of its own. It reads qbx_core's players table once per connecting player to count their characters.

  6. Restart the whole server. A loading screen cannot be restarted live: the next player to connect gets the new one.

Rolling back: stop jixryo_loadingscreen, put amzn_loadscreen's ensure back, and restart. The spinner line can stay or go.

How other scripts' calls behave

The loading screen frame belongs to FiveM: scripts can only send it messages and close it. This resource is the one place that does both, and Jixryo Characters uses all three of its exports: its steps on the bar's last stage, then the hand-off once its scene is built, so the screen clears onto the characters.

  • With amzn_multicharacter still running instead, amzn closes the screen itself when its menu opens, so the loading screen cuts straight to amzn's menu with no outro.
  • Nothing handing off (no character script, or a stuck one): the watchdog closes the screen itself Config.watchdogSeconds after the game joins the session, with a line in F8, so nobody is ever stuck on it.
  • The resource restarted while a player is already in the city: there is no loading screen to talk to, and nothing is sent or shut.

Its own API

Client exports:

ExportWhat it does
Stage(name, done, total, label)A step on the bar's last stage. name is 'scripts' (the character script is running) or 'characters' with done of total and what it is doing (a label of up to 80 characters). Nothing after the hand-off.
Handoff(ms)The scene is ready: GTA's own loading screen and the busy spinner go first, the page plays its outro (ms clamped to 600 to 6,000; Config.outroMs when left out), then the frame shuts. It works once; later calls do nothing.
IsHandedOff()true once it has handed off (or it was never up).
lua
exports.jixryo_loadingscreen:Stage('characters', 2, 5, 'Dressing Marcus Reid')
exports.jixryo_loadingscreen:Handoff(1800)
exports.jixryo_loadingscreen:IsHandedOff()

The server side has no exports, callbacks or events. On playerConnecting it defers for one tick, puts together what the page shows and hands it over through deferrals.handover, then calls deferrals.done() with no reason: it never refuses or holds a connection, and the queue, bans and whitelist stay with their own scripts.

What the handover carries: the server's name and tagline, the player's FiveM name, how many characters their license has (license2 or the older license) and whether it is their first time, the players in the city and sv_maxclients, the next restart in words, the notes, the city's time and weather if Config.city gives them, how many resources are started, the Discord text, the media paths, the clock setting and the debug flag. Only this player's own data goes in: no identifiers, nothing about other players.

Commands and keybinds

KeyWhoWhat
Left and right arrowsEveryone, on the loading screenTurn the notes.
SpaceEveryone, on the loading screenMusic off and on (remembered on the PC).
DEveryone, when Config.debug is onThe raw load events, newest first.

The resource registers no commands and no key mappings.

Configuration

KeyDefaultWhat it does
Config.server'Jixryo'The name top left.
Config.tagline'Roleplay · Remastered'The line under it.
Config.discord'discord.gg/yourserver'Shown bottom left as text (a loading screen cannot open links). nil hides it.
Config.clock24nilnil follows the player's Windows (12 or 24 hour); true or false forces it.
Config.restarts{}The nightly restarts, server time, 'HH:MM' 24 hour. The next one shows top right. {} hides it.
Config.citynilA function returning { time, weather } from your time and weather script, run once per connecting player. nil hides them.
Config.notesthree placeholdersThe IMPORTANT column, newest first: id, tag, title, body, optional date, badge, items. Write your own.
Config.notesUrlnilA JSON file on the web with more notes (an array like Config.notes), shown after them. At most 8 notes in all.
Config.notesRefreshMinutes10How often the web notes are read.
Config.media.videonilA muted looping video in web/media; it wins over the stills. Keep it small.
Config.media.stillssix stillsCross-fade every 8 seconds.
Config.media.music'music.mp3'The music file in web/media.
Config.media.titlenilThe footer's name for the music; nil shows only "Now playing".
Config.media.volume0.250 to 1.
Config.characterCounttrueOne quick database read per connecting player for "Your 3 characters are waiting"; never holds the connection more than 1.5 s.
Config.outroMs1800How long the hand-off takes before the frame shuts.
Config.watchdogSeconds90If nothing hands off, the screen closes itself this long after the game joins the session (15 at least).
Config.debugfalseD on the loading screen lists the raw load events.

Security

  • Only the player's own data goes to the page: their FiveM name and character count, and the server's display values. No license, Discord id or IP ever reaches the handover.
  • Every text is trimmed and cut to a fixed length (the name to 40, a note's title to 80 and body to 400, five lines of 140) and shown as text, never as HTML.
  • The connection is never refused or held. A slow database answers after 1.5 s with the character line left out; a broken handover is printed and the player still connects; the queue, bans and whitelist stay with their own handlers.
  • Web notes are read with a 64 KB cap, cleaned like the config's, eight at most; a bad answer keeps the last good notes.
  • The hand-off is clamped to 0.6 to 6 seconds and works once, and the watchdog guarantees the screen closes.

Tests

The suite runs the server on a stand-in server (a stand-in playerConnecting with deferrals, identifiers, oxmysql's count with a delay, the web) and the client in a stand-in game. Run on 2026-10-31.

SuiteResultWhat it covers
jixryo_loadingscreen.lua19 passed, 0 failedA returning player's handover (name, count, the city, started resources), nothing private in it, a new account, an old row under license, a slow database within 1.5 s, no oxmysql or counting off, a long or odd name cut and kept as text, a broken handover still letting the player in, notes cleaned, web notes after the config's (eight at most, bad answers ignored), media paths and the video winning, the next restart in words, city time and weather with an error ignored, the client's scripts stage on session start, the character script's steps and hand-off with the outro, a second hand-off doing nothing, odd hand-off times clamped, the watchdog, and a restart while playing.
bash
cd dev-tools/luarun && node run.mjs ../../jixryo_scripts/jixryo_loadingscreen tests/jixryo_loadingscreen.lua

Check it in game

  1. One loading screen: amzn's video and logo do not show; this one does from the first frame.
  2. The stages go in order and the bar never jumps back. "Loading map data" counts up to its total and names each resource. "Registering streamed files" shows its seconds, not a count.
  3. Your second load: "About N s left · from your last load", and at the end "Loaded in N s · faster / slower than last time".
  4. The welcome: your FiveM name and your real number of characters (a new license: "Welcome to the city").
  5. In the city and the next restart: the players match the server list; the restart shows once Config.restarts is set.
  6. Keys: Space turns the music off and on (still off next time); the arrows turn the notes.
  7. The spinner: cfx's corner spinner is gone.
  8. The end: with Jixryo Characters, the bar's last stage counts its steps, then the screen clears onto the characters. With amzn_multicharacter, the screen closes when amzn's menu opens.
  9. Debug: set Config.debug = true, restart the server, press D while loading. Turn it back off after.
  10. If the music never starts, the footer says "Music" (not "Now playing"), and Space starts it.
Next step

Ready to look around?

Browse the suite, or paste your server.cfg and see what each script does to your server.