Skip to content

3. Theme

Change a value, restart nuggs_multicharacter, open the screen: that is the whole loop. Nothing in html/, css/ or js/ is touched. Leave a value out and the shipped default is used, so an empty Config.Theme = {} is the stock look.

displayFont The BIG lettering — crest, page titles, step headings, character names, review numbers. Read in short bursts, so it can be decorative
uiFont Everything else — labels, buttons, values, blurbs, store, arrival cards. Read properly, so pick something clean

Every family below already ships in html/fonts/ as .woff2 and is declared in html/css/fonts.css. Naming one is the whole job — no download, no @font-face, no internet connection needed.

Names are case- and space-sensitive: "Bebas Neue" works, "bebas neue" and "BebasNeue" do not. A typo falls back to the built-in stack and is named in the console at startup.

Group Families
Blackletter / gothic — the shipped look UnifrakturMaguntia (default, ornate) · UnifrakturCook (heavier, tighter) · Pirata One (condensed, legible) · Grenze Gotisch (modern, easier to read) · MedievalSharp (hand-cut) · Metal Mania (spiky metal-band)
Classical / serif Cinzel (roman capitals) · Cinzel Decorative (with flourishes) · Playfair Display (editorial serif) · Cormorant Garamond (light, elegant, small — size it up) · Alfa Slab One (heavy slab)
Condensed / poster Bebas Neue (tall condensed caps) · Anton (heavier, wider) · Oswald (condensed with lowercase) · Teko (squared, technical) · Staatliches (poster caps) · Bungee (urban signage, very heavy)
Themed Orbitron (sci-fi) · Russo One (industrial, motorsport) · Rye (western) · Special Elite (distressed typewriter)
Group Families
Condensed — the shipped look Rajdhani (default, squared, compact) · Barlow Condensed (neutral, great small) · Oswald · Saira Condensed · Fira Sans Condensed (very readable) · Archivo Narrow · Roboto Condensed · Teko (numbers yes, prose no)
Neutral — widest and calmest Inter (built for screens) · Roboto · Open Sans · Noto Sans (widest character coverage — pick this for non-Latin names) · Work Sans · IBM Plex Sans · Titillium Web
Character Montserrat (geometric, wide) · Poppins (round, soft) · Kanit (condensed, angled) · Chakra Petch (angular, cyberpunk) · Exo 2 (rounded techno)

Any family works in either slot; the split is a recommendation.

Size of the whole screen — every measurement is relative, so one number moves the lot. 1.0 is shipped, 1.15 is noticeably bigger, 0.9 fits more on. Clamped to 0.62.0.

What to fall back to while a font loads, or if its file has been deleted out of html/fonts/. Leave these alone unless you have pruned that folder.

  1. Put the file in html/fonts/ — not a subfolder. .woff2 is much the smallest; .woff, .ttf and .otf also work and are already served.
  2. Describe it in Config.Theme.fonts.custom.
  3. Name it in displayFont or uiFont, exactly as you wrote family.
  4. restart nuggs_multicharacter.
custom = {
{ family = "Gotham Nights", file = "gotham-nights.woff2", weight = "100 900" },
{ family = "Server Sans", file = "server-sans-regular.woff2", weight = "400" },
{ family = "Server Sans", file = "server-sans-bold.woff2", weight = "700" },
},

family is a name you choose — it need not match the file name. Keep it to letters, numbers, spaces, dots and dashes.

weight is which CSS weights that file covers. The screen asks for 400, 600 and 700, so one file serving all three should say "100 900". One file per weight means one entry per file.

Check you may ship it. Every bundled font is SIL Open Font License or Apache 2.0. A font you bought usually cannot be redistributed, and html/fonts/ sends a copy to every player who connects.

Six base colours drive the entire screen. Set one hex and the whole family built on it — borders, glows, gradients, and the text printed on top — is recalculated.

Colour What it drives
accent The colour of the screen. Borders, headings, the crest, buttons, the glow on the selected character
premium Membership / VIP
danger Delete and disconnect
background The darkest shade. Panels, sidebar and vignette are this lifted by a set amount, so it decides whether the screen reads warm, cold or coloured black
text The brightest text. Muted and dim are drained versions
success The ONLINE dot on the server status row

preset picks a ready-made set from Config.ThemePresets; anything in colors is laid on top, so preset + one override is normal. Hex only — anything else is ignored and the shipped colour kept.

Sets one derived shade by name and leaves the rest of its family alone. Use it when a generated shade is not quite right.

Family Token names
Accent accentBright accent1 accent2 accent3 accent4 accentDeep accentLine accentLineStrong accentInkaccent3 is the accent hex; accentInk is the dark text printed on an accent-filled button
Premium premium1 premium2 premium3 premium4 premiumInkpremium2 is the premium hex
Danger danger1danger5danger2 is the danger hex; 3–5 are the DELETE gradient, darkest last
Success success
Surfaces bg0bg7bg0 is the background hex and is darkest, bg7 the lightest panel shade
Text text textSoft textFaint muted dimtext is the text hex

Two widths, for when the sidebar or creator panel is cramped by a long server name or a translated locale. Accepts rem, px, vw or vh.

Config.ThemePresets — each entry is a colors table under a name, and may also carry a tokens table. Anything a preset leaves out keeps the shipped colour. Copy one, rename it, and it is yours.

Preset Look
gold The shipped look. Warm black and old gilt
ice Cold steel and ice blue
crimson Blood and ash — gang and MC servers
emerald Money green over near-black
neon Neon violet on cold black — cyberpunk, nightclub
mono Silver on charcoal, no colour at all