October 13, 2026

WinterPhoenix

Founder / Lead Developer
Staff member
Founder/Lead Developer
This list contains changes made to Yuki since January 11, 2026.

YukiTheater
  • Extensions (Time): Increase Auto-Restart time from 18 to 24 hours (THE DOUBLE CURTIME IS REAL!!!)
  • Slot Machine: Announce Jackpot wins to Discord Global Chat, same as Lottery wins
  • Slot Machine: Require a valid player to win; the ANY_TWO_ONIGIRI wildcard rows could still match after a mid-spin disconnect, and the resulting NULL entity error left isSpinning stuck (machine unusable until restart)
  • GUI (MOTDWeb): Slowly flash exit button so new players know what to do
  • Slot Machine: Easter egg now works on Free Spin wins too
  • Slot Machine: Play stop3.mp3 on every third reel stop (was losses only), play payout.mp3 when a win triggers Redscreen, and don't double up payout sounds when a Free Spin chain ends
  • Slot Machine: Count Slots_NumJackpots/UpdateStatistics for Jackpots hit on a regular spin too, previously only Free Spin Jackpots were counted
  • Slot Machine: Add Activity HUD Hint for Exiting Slots
  • Easter Egg Hunt: Add inaccessible Arcade / Bowling Alley to the location blacklist (will be removed after Map v3 Beta8)
  • Beachball: Set mass/buoyancy once at spawn instead of every physics tick (+use drop restores mass properly now; hopefully buoyancy too)
  • GUI (HUD): Remove old Wake Up prompt when sleeping
  • Chat (YukiBot): Merge "how customize" and "/skin" responses
  • Chat (YukiBot): Add aliases for "change avatar/character/model" for "how customize"
  • Chat (YukiBot): Add /revive alias for "how respawn"
  • Global: Escape usernames for Discord Global Chat
  • Contests: Validate all reward Item IDs up front before paying anything out
  • Contests: Record the Statistics.Contests entry before paying, so a mid-payout error fails closed instead of double-paying on rerun
  • GUI: Fix the MOTD popping back up on every Lua Refresh
  • Global: surface.DrawPoly -> surface.DrawPolyWithReset
  • Global: draw.DrawText -> draw.SimpleText (except stuff that uses newlines)
  • Global: Old Text Shadow method -> draw.SimpleTextShadowed
  • Global: string.StartWith -> string.StartsWith
  • Slot Machine: Merge StartFreeSpin into StartSpin (passing a previousWinMultiplier means it's a Free Spin), resolving the old DRY TODO
  • Slot Machine: Rename TriggerWinscreen's `time` local to soundDuration so it no longer shadows the time library

SGS Social
  • Media: Add 13 New Services!
    • Miruro: Replaces HiAnime (RIP), and picks Sub or Dub by your Preferred Audio Language
    • Cinecat: Replaces P-Stream (RIP), and links from other movie-web sites work too
    • AnimeAV1: Replaces AnimeFLV (RIP), with Sub (Spanish subtitles) or Dub (Latin American Spanish) picked by your Preferred Audio Language
    • SoundCloud: Plays as real in-game audio, so visualizers and 3D speakers work with it
    • Tubi: Free movies, shows and Live TV
    • Pluto TV: Free Live TV channels, plus movies and shows on demand
    • Niconico: Comments included!
    • Bilibili: bilibili.com (comments included!), bilibili.tv and live rooms
    • AniWorld: German anime, with German Dub, German Sub or English Sub picked by your language settings
    • Voiranime: French anime (VF and VOSTFR are separate episode pages, so request the one you want)
    • Animes Digital: Brazilian Portuguese anime (Dublado and Legendado are separate series, so request the one you want)
    • MegaCartoons: Cartoons!
    • NTV: Live TV channels
  • Media: Add a shared client base for CEF services
    • If a video can't play, you'll know within about 15 seconds, and the screen shows the error and what to try instead of a minute of nothing
    • Sign In and CAPTCHA prompts pause the timeout, so you've got about 3 minutes to log in
    • Your language, subtitle and Internal Video Resolution settings now work on a LOT more services, including sites that hand off to other video hosts
    • Videos stay muted until your volume is applied, so nothing blasts at the site's own volume
  • Media: Fix seeking outside an audio track locking up the game (!!!)
  • Media (TikTok): Fix videos never loading
    • Share links from the TikTok app (vm.tiktok.com and vt.tiktok.com) work too
  • Media (Kick): Fix every video timing out
    • Kick moved their video player on live, VOD and clip pages, so we had to go find it again
  • Media (Twitch): Play channels and VODs in the official embed player
    • Internal Video Resolution and captions finally work on Twitch (captions follow your Media Subtitle Mode)
  • Media: Fullscreen now uses GMod's actual aspect ratio instead of forcing 16:9
  • Media: Media Video Resolution -> Max Media Video Resolution (Use GMod's native resolution in Fullscreen up to a cap; world panels still render with the exact setting)
  • Media: Retire P-Stream and HiAnime since they're dead
  • Media: Retire AnimeFLV since it's dead
  • Media (YouTube): Retry a video that freezes mid-play
  • Media (YouTube): Use regular embed site instead of nocookie since YouTube keeps flagging players as bots
  • Media (YouTube): Update the Referer hack again so at least some embeds work
  • Media (YouTube): Fall back to full-site for ALL errors except HTML5 Unsupported Video (embeds on suicide watch)
  • Media (Crunchyroll): Rewrite for their inline Bitmovin player
  • Media (Kick): Fix VODs not playing
  • Media (Paramount+): Fix long pre-roll ads timing out the media
  • Media (Sub-Services): Fix OK.ru videos stopping after a few seconds
  • Media Screen: Fix audio visualizer bars not drawing
  • Achievements: Fix reconnect loop for partially initialized accounts
  • Media: Fix paused media's audio jumping ahead when it finishes loading
  • Media: Fix repeat ClientMediaInfo reports being thrown away
  • Media: Don't start Live media over when the client reports its Duration
  • Media: Show the chat's "Try this" steps on media screens too
  • Taunts: Allow "walking out" of emotes that don't allow movement
  • Media (Sub-Services): Add Internal Video Resolution support
  • Media (Sub-Services): Switch quality and languages on hls.js hosts
  • Media (Sub-Services): Fix JW Player language and quality switching
  • Media (Sub-Services): Add language switching to Video.js hosts
  • Media (Sub-Services): Add caption switching to Plyr hosts
  • Media (Sub-Services): Mute Plyr hosts until our volume is set
  • Media (Sub-Services): Fix the Dailymotion handler never running
  • Media: Try the plain HTML5 handler on unknown sub-service hosts
  • Media (AnimePahe): Update Reverse URL and valid domain list
  • Media (AnimePahe): Try fallback embeds in Preferred Audio Language order
  • Media (Kick): Fix Internal Video Resolution doing nothing
  • Media (Kick): Fix copied clip links not matching
  • Media (Paramount+): Ask to sign in on their new signed-out pages
  • Media (Paramount+): Fail right away on the ad SDK's error panel
  • Media (Amazon): Match storefront links with no trailing slash
  • Media (YouTube): Fix Volume Normalization not updating on change (or maybe not even applying in some scenarios)
  • Media (YouTube): Fix full-site in-page errors never being visible
  • Media (YouTube): Fallback to filling the screen with the video player if we can't find the player container
  • Media (Solstream): Target -12s from live edge, actually reference the wall clock when possible so everybody syncs to roughly the same position, and re-enable Max Sync Diff around it
  • Media (Solstream): Fix Internal Video Resolution with two 1080p levels
  • Media (Direct Audio): Only seek when out of sync
  • Media (Internet Archive): Fix requeuing from request history
  • Media (Internet Archive): Show an audio-only item's image while it plays
  • Media (Internet Archive): Accept www.archive.org too
  • Media (Internet Archive): Fail a missing item as "Item Not Found"
  • Media: Increase max resolution default to 1440p and make it capped to the ScrH (so if it's below 1440p, it'll use that instead)
  • Media: Give each Media Controller its own FFT tables
  • Media: Fix visualizers placed mid-song not reacting to the audio
  • Media: Fix any media change on the server closing your Sign In prompt
  • Media: Close the Sign In / CAPTCHA prompt with the media that opened it
  • Media: Only ask to sign in once per panel
  • Media: Point Windows players at Linux when DRM video fails
  • Media: Don't play media for people who aren't in the theater
  • Media: Only show the video's own controls for debugging
  • Media: Match URLs case-insensitively
  • Media (Blacklist): Fix blacklisting missing playing and queued media
  • Media: Fix a 57s video being taken for the 60s placeholder
  • Media: Don't send Live media to the audio converter
  • Media: Only warn about Internal Video Resolution if it isn't Auto
  • Media Screen: Fix Karaoke small screen having weird font outline sizes
  • Media Screen: Max font height is 255 in DrawPaused too
  • Seats: Add Activity HUD Hint for Exiting Seats
  • Taunts: Add "Stop Emote" HUD Hint
  • Taunts: Fix "Stop Emote" showing up for everyone when one player starts emoting
  • Taunts: Fix sequence command check for "walk out" exit
  • Media: Fix ClientMediaInfo Titles skipping the hostname rules
  • Global: Escape usernames for Discord Global Chat
  • Media (TikTok): Mostly fix TikTok service
  • Media: Move YouTube and Kick onto the shared client base
  • Media: Move Netflix, Hulu, Amazon and Paramount+ onto the client base
  • Media (AnimePahe): Move onto the shared client base
  • Media (TikTok): Move onto the shared client base
  • Media (Solstream): Move onto the shared client base
  • Media (Internet Archive): Move onto the shared client base
  • Media (Direct Video): Move onto the shared client base
  • Media (Toonami Aftermath): Move onto the shared client base
  • Media (Solstream): Increase live edge from 6 to 10 seconds
  • Media (Solstream): Enforce max latency of 30 seconds
  • Media (Solstream): Increase nudging limit from 3 to 30
  • Media (Solstream): Pin hls.js to 1.7.0
  • Media (Sub-Services): Match hosts case-insensitively
  • Media: Match service hosts by exact domain or a real subdomain
  • Media: Only offer custom-scheme URLs to their own service
  • Media: Only announce "Client Media Info loaded." once
  • Media Screen / Thumb: Fix using the old Media Controller after a reload
  • Media (YouTube): Fix curMedia typo
  • Inventory (Alcohol): Remove the mp_decals clamp (Facepunch blocked it)
  • Light Item: Don't force set r_maxdlights anymore (removed from the engine and never worked anyway - garrysmod-issues#5738)
  • Media: Put all services in the media module (slight performance bump)
  • Media: Read client ConVars through module fields
  • Media: Only set the Video Panel size once
  • Media: Make sv_ files optional
  • Media: MatchHost takes a list of domains now
  • Media: Split sub-service code from cl_panel.lua to cl_subservices.lua
  • Extensions (HTTP): Add http.ParseContentDisposition
  • Global: surface.DrawPoly -> surface.DrawPolyWithReset
  • Global: draw.DrawText -> draw.SimpleText (except stuff that uses newlines)

Yuki Base
  • Inventory: Don't regen spawnicons again if they already have this session (Lua refresh fix on dev)

Yuki Minigolf
  • WIP migration from GMCL to Yuki

SGS Base
  • Extensions (Render): Semi-blind fix for _rt_ResolvedFullFrameDepth crash
  • DHTML: Fix pages hanging on load when they console.log a cyclic object
  • Discord (Global Chat): Send a message when the server starts up and when the server shuts down
  • MySQL: Work around crashing issue with failed DB connections in MySQLOO v9.8.0-Beta3 (https://github.com/FredyH/MySQLOO/issues/148)
  • DHTML: Fix pages breaking when they console.log deeply nested objects
  • Tell players that can't join on New Year's Eve that the Event runs for every US Time Zone
  • GUI: Add "Current Activity" HUD Hint support
  • Scoreboard (Settings): sgs_media_resolution -> sgs_media_resolution_max
  • Extensions (Multicore): Remove mat_forcemanagedtextureintohardware
  • Extensions (surface): Add surface.DrawPoly multicore glitch fix from TTT2
  • Inventory: Actually enforce rank requirement for item settings serverside
  • Admin (Poll): Fix voting on a non-running poll creating an error instead of letting the player know
  • Extensions (DownloadedTex): Fix not escaping quotes in the image URL
  • Global: Escape usernames for Discord Global Chat
  • Extensions (string): Better markdown escaping for headings/bullets/quotes
  • SolAntiCheat: Fix certain rules
  • Inventory: Fix <= 0 AddInventory item count throwing an error instead of reporting an error to the player/admins
  • Locations: Fix same-tick ownership change warning
  • Discord (Gateway): Fix "Unable to find matching SSL root certificate locally" error on Arch Linux (btw)
  • Locations: Fix overlapping reload TRUNCATE callback re-filling the DB table with a stale or empty location set
  • Locations: Fix trying to run OnReloaded on Apartments when APARTMENT.OnReloaded doesn't exist
  • DHTML: Only start checkURLChanged once per document
  • Extensions (ErrorLog): Remove ErrorNoHalt/Error overrides now that OnLuaError catches ErrorNoHalt too (was double-logging every ErrorNoHalt)
  • MySQL: Use unix socket and require SSL
  • Admin: Add Dev Bots for multiplayer-flow testing
  • Achievements / Admin: Retire Olympus migration stuff
  • Discord (Gateway): Add InitialConnect and ShutDown hooks
  • Extensions (Time): Add time.IsNewYear
  • Extensions (string): Add string.EscapeMarkdown
  • Extensions: Add string.HTMLDecode
  • Extensions: Add string.HTMLAttributeSafe
  • Extensions: Add string.URLEncodePath
  • Extensions (draw): Add draw.SimpleTextShadowed
  • Extensions (surface): Add surface.DrawCachedTexture (combination of DrawTo and DrawFrom)
  • Extensions (surface): Deprecate DrawTo/DrawFromCachedTexture
  • Global: surface.DrawPoly -> surface.DrawPolyWithReset
  • Global: draw.DrawText -> draw.SimpleText
  • Extensions (Player): PlayerHullUpdate -> PlayerHullUpdate.Full / PlayerHullUpdate.Delta
  • Locations: locations.Network -> locations.Network.Init / locations.Network.Update
  • EntityNW / Admin: Be more explicit about not using ReadData/WriteUInt for len with ChunkedData
  • EntityNW / Admin: Properly mark len as unused by ChunkedData
  • Global: string.StartWith -> string.StartsWith
  • Global: string.Implode -> table.concat
  • Global: PANEL.SetDisabled -> PANEL.SetEnabled (not completely done)
  • Global: Add a bunch of ---@diagnostic comments and tweak a bunch of code to make gmod-glua-ls happy

Yuki Website
  • Profile: Show "Banned" instead of real rank if the player has an active ban
  • Profile: Link to the Ban Log ID if the player is Banned
  • Profile: Black background for avatars of Banned players
  • Global: Add faux-rank for Banned players
  • Loading / MOTD: Update announcement text
  • Media JS / Media Logs: Update AnimePahe reverse URL
  • Profile: Tweak ban link format
  • Early Hints: Fix error log spam
  • Global: Move all player rank colors to global CSS
  • Update copyright year

SGS Website
  • Fix Media (FAQ): Improve Linux "no main menu" guidance layout and Add Fedora-based distro note
  • Fix Media (FAQ): More clearly separate the 3 primary identified reasons for CEF initialization failure on Linux
  • Fix Media (FAQ): Properly bold sub-sections for Linux no-main-menu and Link to the issue comment with the fix for Fedora
  • Fix Media (FAQ): Replace "ConnectError" with "error sending request"
  • Fix Media (FAQ): Tweak Linux CEF initialize failure section
  • Fix Media (FAQ): Yet more tweaks
  • Donate (Stripe Checkout): Only warn the user when there's no subscription changes to apply rather than emailing us
  • Home / Projects: Update Yuki backgrounds
  • Workers (Webhooks): Fix GitHub commits showing whoever pushed instead of the Author, and Show the Committer too when they're different
  • Workers (Webhooks): Send pushes in batches of 10 commits per message; Discord rejects the whole thing past 10 embeds
  • Workers (Webhooks): Don't re-announce GitHub commits that were already pushed before (non-distinct, ex. merges)
  • Workers (Webhooks): Fix slashed GitHub branch names only showing their last segment (ex. fix/foo showed as foo)
  • Workers (Facepunch): Fix commit checks only comparing against the first repo's newest date (the other two got re-announced)
  • Workers (Facepunch): Announce commits oldest first, and DRY the per-repo check blocks into a loop
  • Home: Adjust small announcement image offsets
  • Donate (Stripe Checkout/Webhook): Clarify which part of the Stripe payment cycle the error email is coming from
  • Workers (Webhooks): Fix Bitbucket's "deleted branch" fallback (new comes as null, not missing), and Reject non-push events
  • Workers (Webhooks): Delivery and error response cleanup
  • Update copyright year

Happy Halloween! Love You All! ❤️
 
Back
Top