- Rename "All" to "Select All"
- Relocated settings button to top right corner
- Better center the Select All button with the settings button
- Remove the Uninstall All button > fuck it, you can already do this by selecting all and uninstalling selected.
- Fixes bug where game list was not updates after saving settings when changing the sort setting
- Add tooltips to the settings menu to describe what each setting does
- Add tooltips to the buttons in the mainform
- MainForm is the primary application window that displays the list of installed games and DLC unlockers, and is where DLC unlockers are configured and installed.
- ScanDialog performs a library scan and allows the user to select which games to begin configuring DLC unlockers for.
- Remove the MainForm cancel button > it doesn't really serve a purpose and it breaks the UI cause I suck.
- Add the start to a settings dialog, relocated several settings from the top bar into the new setttings dialog
- Add a custom Toggle Switch, change the CheckBox for SmokeAPI/CreamAPI to a Toggle Switch
- Relocate Uninstall All button to main form (Currently disabled)
- Better handling for the enabled/disabled state of a games DLC if an existing SmokeAPI/CreamAPI configuration is detected.
- Some additional checks to avoid duplicate DLC entries in the visual tree
- Add additional clarity to SmokeAPI logs for reading DLC unlocked/original state.
- Count how many DLCs SmokeAPI attempts to auto unlock, include this in the logging
- Save DLC enabled state to installed.json during install
- Restore DLC enabled state from installed.json when loading saved installed games on launch
- Added SmokeAPI.ReadConfigDlcIds() to read SmokeAPI.config.json and extract enabled/disabled DLC IDs from override_dlc_status and extra_dlcs
- Added CreamAPI.ReadConfigDlcIds() to read cream_api.ini and extract DLC IDs from [dlc] section
- On scan, when a SmokeAPI or CreamAPI unlocker is detected, read its config and adjust DLC enabled state accordingly
- Removed legacy dlc.json entirely (DlcChoicesPath, ReadDlcChoices, WriteDlcChoices, and all references) since installed.json now fully manages DLC state
- Refactored logging methods ProgramData.Log/LogWarning/LogError with a better structured Log.Info/Warn/Error and LogDestination enum for routing logs to the correct file (Scan, Steam, Unlocker, App)
- Relocated the cooldown folder from C:\ProgramData\CreamInstaller\cooldown to C:\ProgramData\CreamInstaller\Cache\cooldown (Does not cleanup the old location currently)
- Removes the old Save/Load buttons on the main window as they don't provide a real purpose with the new changes of loading installed DLC Unlockers
- Removes the Reset button as it clears the loaded settings which really serves no effective purpose with the new changes
- Moves the Uninstall All button to the Main Window since it doesn't really make sense for it to live on the Rescan window
- Add prompt on Uninstall All to confirm you actually WANT to remove EVERYTHING
- Chaged several classes within ThemeManager to sealed since they're not inherrited from in other areas of the code.
- Added Nullable section and defined some variables as nullable.
- Fix for SteamCMD Migration: Creates SteamCMD directory before trying to start the download (Woops, kinda need to do that.)
- Ensures the application migrates SteamCMD files fom the legacy location C:\ProgramData\Creamlnstaller\ to C:\ProgramData\Creamlnstaller\SteamCMD\
- Add information about proxying DLLs and finding the correct proxy DLL for a game.
- Adjust the FAQ section into an expand/collapse section. (Surely you'll read it if you have to expand it right?!)
- Add additional flags to the false positive section
- Cleanup some of the AI shit. (Yes, I ran the readme through AI, it made the formatting better for sure. ¯\_(ツ)_/¯)
- SteamCMD: Changed output reading from one character at a time to buffered reads, fixing a stderr deadlock issue and making the process much faster and more responsive to cancellation.
- DLC detection: Eliminated a busy-wait loop that was polling every 200ms on a background thread while waiting for game data to arrive. Now uses proper async signaling so the thread is freed up entirely.
- HTTP retries: Previously every Steam API error was retried up to 10 times with delays, even for "403 Forbidden" errors that will never succeed. The scanner now gives up immediately on permanent errors, preventing up to 90 seconds of wasted retries per failed app, and avoids triggering rate limits by hammering the API on doomed requests
- Replaced fixed 1-second waits with smarter retry timing that waits longer after each failed attempt and adds a small random delay to reduce API requests. Also reduced the maximum number of retry attempts from 10 to 3 for temporary network errors.
- Adds the ability to Test Ubisoft Games > Has a search function with a "public" API.
- Remove the DLC section from Steam Game Test Window, never really going to use this as originally the idea with test games was primarily to test DLC resolution.
- Ensure the game name is cleared whens witching between test platforms
- Proper cleanup of test data if the Clear All Tests button is clicked, ensures test games get cleared from the selection list as well.
- Adds a badge/color for ScreamAPI (Epic Games)
- Adds a badge/color for UPlay Unlocker (Ubisoft Games)
- Adds a badge/color for Koaloader (MISC Injection Methods)
- Rename JSON Proxy field to "Proxy DLL Name" and always store the resolved
name instead of null for default convention
- Add DetectInstalledProxy() to find proxy dlls winmm/winhttp/version.dll
- Fixes to ensure all detected unlockers are persisted in installed.json on scan so pre-existing unlockers are tracked even if not installed via CreamInstaller
- Restore proxy and extra protection state from saved records for both
scanned and previously scanned games on reload
- Detect proxy DLLs from disk for previously scanned game reconstruction
- Checks if CreamAPI/SmokeAPI/ScreamAPI are present in a game directory. If so, ensures it's stored in installed.json so we recall all games with DLC unlockers that have been detected, even if those DLC unlockers were not installed VIA CreamInstaller.
- Updates further logging lines that were using UTC to instead use current system time.
- Added log lines to include total time for detecting games and DLC during library scan
- Added log lines for why a game may not be processed.
- Added log lines to indicate how many game were detected across all libraries.
- Corrects log line where the game-scan.log was incorrectly reporting double the amount of selected games
- Slight adjustments to where SteamAPI calls go in logs
- Renamed cream-steamcmd log to just cream-steam.log
- Added prefixes for SteamCMD / SteamAPI commands to logs