Full notes
Full EndlessShinyBlues update
Read the full published notes in a cleaner layout. The original post stays linked below.
What changed
- Fixes
- Performance
- Gameplay
- Server
- UI and audio
- Events
Hibiscus
2.10.0
Fixed a bug where `RequestCurrentStats` was removed but the corresponding detection code wasn't, causing achievements and stats to never update.
Couldn't unlock a single achievement lol
Actually, in previous versions, the stats function somehow became an empty function lol
Achievements and stats should now unlock normally.
Fixed a memory leak bug after encrypted font embedding failed.
If embedding failed, it would just return—forgot to delete the pointer lol.
Fixed crash when exit due to VEH not removed
dangling
Updated to FFMpeg 8.0.
Should be a bit faster now...
Migrated `LaunchCount` and `SettingsPage` to `_GlobalProgress`
Otherwise, the settings file would be modified every time the program runs
But running it again would treat you as a new user. Oh well, not many people will be affected anyway
FFmpeg now supports full hardware decoding
When playing videos, pixel format conversion for hardware-decoded results can now be done on the GPU, with hardware decoding enabled by default. Enabling this noticeably reduces CPU usage. If running on very old graphics cards, you might also observe increased GPU usage, as modern GPUs can easily handle hardware decoding of dozens of 1080p YUV 422 videos simultaneously.
Create a file named NOHWDECODE in the game's root directory to force software decoding.
Fixed a crash in `EpicOnlineServices` when parsing application command lines containing Chinese characters in paths.
The command line parsing library uses std::codecvt and requires UTF-8 encoded input strings, while GetCommandLineA defaults to returning the application's code page. Previous functionality likely relied on code page modifications elsewhere—essentially operating under a dependency bug.
Game recording (Steam Timeline) support
Features a comprehensive set of functionalities
Audio threads for FFMpeg objects no longer start by default
During resource-intensive operations—such as loading large video files or streaming videos with poor network conditions—unexpected audio may play even after closing the window before screen updates. For instance, on lower-spec machines, opening the video gallery page unlocking all videos for the first time may occasionally trigger audio resembling an explosion.
AVFormatContext and AVCodecContext for frame capture at specified positions are now created only when necessary
Improves video loading speed
Memory leak during FFMpeg audio format conversion
This significant leak previously went undetected likely because videos displayed briefly, causing corresponding memory to be released upon destruct and masked by normal memory usage
Optimized FFMpeg decoding workflow to improve jump and speed playback performance
During precise jumps, speed playback, and audio-video synchronization, intermediate frames sometimes need to be discarded. Previously, every decoded frame underwent conversion; now only references are retained, with conversion applied only to the final frame. Additionally, older versions attempted to fill the queue during playback—an unnecessary practice causing delays in jumps and playback initiation. Now, both audio and video threads populate the queue as needed, rather than waiting for the main thread to fill it. When switching video differentials, the playback jumps to the timestamp of the previous video. Loading a new video also decodes to the first frame before jumping back to the beginning. These optimizations significantly improve performance in this area.
Universal Platform Function Calling Method
Previously hardcoded Steam platform methods have been abstracted.
Allow platform disabling
To properly display the overlay, Steam initialization must occur before D3D. Since this cannot be directly controlled via events, additional work was done to allow its initialization to be disabled.
Skip text range recalculation when unnecessary
This might be slightly faster in specific scenarios, but such scenarios are unlikely to occur in this project.
Added text annotations supporting nesting and icon display
Scriptwriters must manually add annotations via script modifications; absence indicates no annotations
Steam post imageSteam post image
Allows controlling horizontal alignment modes for different lines
Seems largely redundant outside VN mode
Custom tag callbacks within text
Called sequentially after rendering completes, but largely useless given bridging functionality
Supports annotations in text using `[Trigger="Content" ="" Comment,="Comment,"][/Trigger]` format
Requires script modifications by the writer to add; if not added, it won't be there. Boxes also need to be drawn by the artist.Steam post image
Allows setting formats not to be ignored in history text
To enable annotations and comments in history, all formats were previously stripped.
Adjusted encryption key generation logic
If the provided length is insufficient, it will generate a sufficiently long key using the input key instead of defaulting to the base key. Rest assured, your game's encryption key length is more than adequate.
Process handles copied during preloading were not closed
It only launches once during the title screen anyway, and it's quite difficult for handle leaks to become noticeable.
Refactor the Steamworks extension
The base class originally provided only one callback method. Later, multiple callbacks were found in certain areas, so the base class was modified. This change is imperceptible to players.
Added DLC-related functionality.
But it seems a bit rushed.
Fixed an issue where login failed when launching via Epic Launcher due to command-line parsing errors.
The command line is particularly quirky. Previously, due to budget constraints, we couldn't afford tickets for actual testing. Relying solely on documentation proved insufficient.
Source
Changelog.gg summarizes and formats this update. How we read updates.
