
- All games
- Stardew Valley
- Mods
- Visuals and Graphics
- SpriteMaster
SpriteMaster
-
Endorsements
-
Unique DLs--
-
Total DLs--
-
Total views--
-
Version0.15.0-Beta.16
- Download:
- Manual
File information
Last updated
Original upload
Created by
AmeiseUploaded by
mkukliVirus scan
Safe to use
Tags for this mod
- Performance Optimization
- Fair and balanced
- Animation - Modified
- Terrain
- Sky
- Water
- Weather
- Models/Meshes
- Textures
- User Interface
- Foliage (Plants)
- Overhaul
- SMAPI
- Sprites
- Portrait
- ReShade
- Visual Effects/Particles
- Version 1.4 Compatible
- Version 1.5 Compatible
- Broken in Version 1.6
Current section
About this mod
SpriteMaster resamples all of the game's artwork to make it look smoother - a so-called 'HD' effect, and also implements game optimizations and load-time improvements to make the game run faster.
- Requirements
-
Nexus requirements
Mod name Notes SMAPI - Stardew Modding API Required for basic functionality Mods requiring this file
Mod name Notes Beans The Loveable NPC *OPTIONAL* But Might Make Your Game Run Faster - Permissions and credits
-
Credits and distribution permission
- Other user's assets All the assets in this file belong to the author, or are from free-to-use modder's resources
- Upload permission You are not allowed to upload this file to other sites under any circumstances
- Modification permission You must get permission from me before you are allowed to modify my files to improve it
- Conversion permission You can convert this file to work with other games as long as you credit me as the creator of the file
- Asset use permission You must get permission from me before you are allowed to use any of the assets in this file
- Asset use permission in mods/files that are being sold You are not allowed to use assets from this file in any mods/files that are being sold, for money, on Steam Workshop or other platforms
- Asset use permission in mods/files that earn donation points You are not allowed to earn Donation Points for your mods if they use my assets
Author notes
This author has not provided any additional notes regarding file permissions
File credits
Pathoschild
MiYanni
ninthworldDonation Points system
Please log in to find out whether this mod is receiving Donation Points
- Mirrors
-
Name GitHub - Changelogs
-
-
Version 0.15.0-Beta.16
- Improving correctness of Graphics Device initialization shortcut.
- Dramatically improving correctness of OpenGL binding lookups on Linux and MacOS.
- Likely fixing Steam Deck problems (technically a general X11 but largely Wayland issue).
- Adding a few more optimizations to the OpenGL code.
-
Version 0.15.0-Beta.15
- Disabling glCopyTexSubImage2D on intel chips on Windows due to a driver bug.
- Making cross-thread pathing optimizations a configuration option.
- Fixing some correctness issues that popped up when adding the cross-thread pathing optimizations.
- Improving PooledObject interface.
-
Version 0.15.0-Beta.14
- Disabling VBO support.
- Making OpenGL functionality much more stable and validated.
- Fixing binding issue during texturee object creation.
- Fixing mip level issue during texture object creation.
- Fixing error in indexes passed to DrawRangeElements.
- Fixing possible error when the engine uses an index buffer.
- Adding the ability to disable Harmony patches.
- Adding simply TMXParser optimizations.
-
Version 0.15.0-Beta.13
- Fixing minor correctness issue in pathfinder.
- Adding concurrent path optimizations to pathfinder.
- Re-enabling OpenGL draw optimizations.
-
Version 0.15.0-Beta.12
- Adding debug logging for rare Span2D Exception.
- Fixing red highlights with EPX (clamping fixed-point division output).
- Another attempt at fixing concurrency-related exceptions.
-
Version 0.15.0-Beta.11
- Fixing error in config preview offset.
- Fixing patch failure for PatchImageImpl.
- Disabling OpenGL SpriteBatch optimization to try to fix performance regression.
- Fixing cycle error in ConcurrentLinkedListSlim.
- Attempt at fixing crash in DeprecationManager.
-
Version 0.15.0-Beta.10
- Disabling compression on the resident cache.
- Disabling forced disposal of purged mapped sprites to stop animation glitching.
-
Version 0.15.0-Beta.9
- Removing unused code that was introspective into Content Patcher which was putting it into an invalid state and causing asset mismatches.
-
Version 0.15.0-Beta.8
- Fixing race conditions which could cause the wrong textures to load.
- Changing the metadata cache to be per-thread.
- Improving texture handling in Texture2DMeta.
- Improving PyTK mitigations.
- Improving scaling logic.
- Added more scaling options.
- Added portrait-specific scaling options.
- Fixing sporadic issues with other mods due to broken inlining patch.
- Fixing memory leak due to resampling Task being retained which held a reference to Texture2Ds.
- Disabling padding on portraits.
-
Version 0.15.0-Beta.7
- SpriteMap is now fully purged when purgable settings are changed.
- Texture2DMetas will attempt to write themselves into the resident cache before purging.
- Improved the resiliency of most of the transpilers.
- Fixed an issue that was causing incorrect filtering of images due to a missing return false;, and also improved due to a performance optimization causing validation state to be retained in more cases.
- Fixing PlatformNotSupportedException due to the process affinity fix - likely impacted Linux and MacOS.
-
Version 0.15.0-Beta.6
- Fixing some issues and improving SpriteInfo hashing.
- ManagedSpriteInstance will now _always_ hash if there is a previous instance.
- `previousInstance` is only set now if it was loaded.
- Changed ManagedSpriteInstance Dispose/Suspend to be chained operations to prevent sporadic stack overflows.
- Adding mitigation to try to reverse users setting process affinity to a single core.
- Added significantly more error detection.
- Fixing infinite suspend/resurrect loop due to an instance in the SpriteInstanceTable that is the previous sprite instance being discarded.
- Adding texture precache support (disabled by default).
- Improved resilience of FileCache against corruption.
- Added more operations to the Object/MemoryCaches to allow compressed data to be invalidated.
- Improving performance of various texture validators.
- Fixing various issues regarding compressed textures in Texture2DMeta, which were causing large number of errors.
-
Version 0.15.0-Beta.5
- Adding PyTK mitigations to scan for ScaledTexture2D and MappedTexture2D to attempt to fetch the underlying texture for validation (this isn't complete, and I need to change the system to pass around some sort of TextureReference instead to simplify this)
- Fixed the font config options, and renamed them to 'large' and 'small' font enablement.
- Added more error reporting in the SpriteInfo initializer to hopefully get better data on the error people are reporting.
- Adding more mitigation code for the error people are reporting to force the data cache to flush.
- Reworked in-flight task management in the resampler to prevent the wrong sprite from being drawn due to a stalled task.
- Locking ManagedSpriteInstance cleanup methods to prevent corruption of the LastUsed linked list.
- Added FrameTime display (default: disabled)
- Improved the functionality of sm purge
- Adding VBO optimization, and re-enabling IBO optimization now that it's actually faster.
- Added further OpenGL optimizations (worst case 16ms to 12.8ms)
- Added optimizations to SpriteBatcher to reduce its allocations and pre-pin it data.
- Forced the SynchronizedTaskScheduler to always execute its tasks whether SM is enabled or not.
-
Version 0.15.0-Beta.4
- Making sure libzstd is included for Windows, Linux, and MacOS
- Fixing some build issues.
- Patching libzstd's library loader.
- Fixing sprites getting 'stuck' un-resampled.
- General performance optimizations.
- New OpenGL optimizations.
-
Version 0.15.0-Beta.3
- Fixing a minor regression regarding sprites being the wrong size.
- Updating dependencies so as to not conflict with AtraCore.
- Switching to custom MBC build to reduce symbols size.
- Adding AMD overrides for [i]GPUs.
- Added trimming transparent rows/columns to sprites.
- Fixing numerous issues regarding animated sprites.
- Fixing pathfinding issues due to misordered warps.
- Providing custom builds of libzstd for Windows and Linux.
-
Version 0.15.0-Beta.2
- Fixing error where objects would randomly and sporadically draw at the wrong size.
- Fixing index-out-of-range error in the Stable Sorting patch.
- Attempt at fixing out-of-bounds error in GetData patches.
- Fixing issue where junk would print on the left side of the config menu.
- Further attempts at stopping/swallowing errors in CopyTexture patch.
- Adding error swallowing to GetData/SetData/Construct patches.
- Fixed vanilla snow not drawing in the config preview when SM is disabled.
- Making F11 only disable resampling. Ctrl+F11 now disables all of SM.
-
Version 0.15.0-Beta.1
- Adding more configuration options.
- Making Tex[]Storage2D options analytic (to fix M1 crash).
- Adding explicit reverse patch implementations (to work around M1 crash).
- Fixed several configuration file/menu bugs.
-
Version 0.15.0-Alpha.7
- Removing unused config options.
- Fixing issue in texture cache that could cause more corruption.
- Fixing incompatiblity with FerngillDynamicRainAndWind.
- Fixing recursion error in ObjectCache.
-
Version 0.15.0-Alpha.6
- More optimization work
- Correcting HardPurge to purge existing sprites
- Fixing correctness bugs in ConcurrentLinkedListSlim
- Rebasing MemoryCache types to improve their resilience.
- Fixed texture corruption caused by resident cache errors.
-
Version 0.15.0-Alpha.5
- Updated config clear version.
- Removed a lot of unused/redundant code.
- Optimized padding code.
- Changed resampler async delegates to be static rather than instance state-local.
- Removed unsafe PinnedSpan functionality.
-
Version 0.15.0-Alpha.4
- Removing locks from ManagedSpriteInstance to try to stop deadlock.
- Fixed config menu snow propagation.
- Adding code to cleanup unused-DLLs from SM mod directory.
-
Version 0.15.0-Alpha.3
- Re-enabling block compression on MacOS.
- Fixing various alpha/transparency-related issues.
- (Hopefully) fixing some stability issues.
- Removed `TRACE` logging from the shipping build.
- Fixed stroked text outlining.
- Dramatically improved EPX quality.
- Added new 'xBRZ + EPX` resampling mode.
-
Version 0.15.0-Alpha.2
- Added gender-locking support to pathfinder patches.
- General robustness improvements to pathfinder.
- General performance improvements.
-
Version 0.15.0-Alpha.1
- Improved performance further in the resampler.
- Added checks to prevent accessing an empty recent access list - should prevent crashing, but need to figure out why it's happening.
- Added more locks to try to prevent concurrency exceptions during `GameLocation` tile access.
-
Version 0.15.0-Alpha.0
- Direct SMAPI 3.15 support.
- Large amount of performance improvement, cleanup, and library replacements.
-
Version 0.14.0
- GMCM support.
- LZMA compression support removed.
- Config refactoring.
- Code simplifications and refactoring.
- Changed interwarp GC to be concurrent.
- Fixed hashing bug, and restoring SpriteInfo hash caching.
- Added config save/load commands.
- Adding anisotropic filtering support (but _why_?)
- Fixing exception in SetData due to mismatched array sizes.
- Tracking in-flight tasks per texture.
- Re-enabling and fixing MonoBlockDecoder.
- Implemented string resampling.
- Reduced Linq usage.
- Made improvements to SetData/GetData in regards to compressed texture formats.
- Removed some unsupported functionality.
- Fixing bug in version testing causing config files to be erroneously cleared.
- Added a few benchmarks.
- Fixed bug that caused non-resampled snow to only draw a single snowflake per group.
- Hid failed patches when respective mod is not loaded.
- Made licenses more obvious.
- General optimizations.
-
Version 0.13.1
- Improved performance when large numbers of sprites were being drawn.
- Added more configuration options.
- Added a console-dynamic configuration system.
- Improved stability / fixed access violations.
- Fixed slowdown near volcano (regression).
- Fixed offset texture issue with PyTK.
- Fixed issue where sprites were being repeatedly de-premultiplied, making them black.
- Added EPX resampling support.
-
Version 0.13.0-Beta.2
- Normalized all path-strings to use '\' instead of '/'.
- Removed some old, unused config options.
- Made it easier to define the outdated config version.
- Added more sliced texture overrides.
- Added some more explicit gradient textures to the resampling blacklist. Once gradient support is in, these can be removed.
- Made the blacklist support regular expressions (start the expression with '@')
- Added a high-memory texture cache function. Needs more work, mainly that SMAPI needs to be patched so we know what textures are being invalidated so we can flush the instances, otherwise it's slower.
- Renamed 'SafeName' to 'NormalizedName'.
- Made the config file support multiple comments per option.
- Improved the resource/asset debug dumper.
- Added a dependency on Nito.Collections.Deque (used by the warp point calculator for Dijkstra's).
- Added a name to the Cache Trim Thread ("Cache Trim Thread").
- Added a forced garbage collection for generations 0 and 1, every N ticks (TransientGCTickCount, defaults to 150).
- Switched floating-point math to use MathF instead of Math.
- Added more extension methods to Range.
- Added helpers to get GetFieldSetter/Getters for static fields.
- Corrected missing [NotNullWhen]s in string extensions.
- Improved normalized name generation.
- Made it easier to give threads names via ThreadExt.Run.
- Made Harmonize honor 'critical' when an assembly could not be found (discovered in new mod-specific patch).
- Fixed a critical bug in the TextureCache, where the 'stream' argument was being passed as a FileStream instead of a Stream. This caused rather annoying crashes.
- Improved the performance and capabilities of the TextureCache.
- Began marking all Harmonized methods as 'public', as they are indeed root methods.
- Fixed a bug where one or both of the source axes were negative; they were being stretched instead of being offset by the inverse of the value. This resulted in character portraits with the "UIInfoSuite2" during their birthdays being stretched downwards.
- Marked lighting sprites as needing linear wrapping instead of point wrapping. This resolves a vanilla bug which causes weird semi-moiré patterns due to different-sized point-sampled art being overlaid at fractional intervals.
- Added an 'ExtentI' type which represents a value between two points (or a line, or whatever). Added properties to Bounds to get extents for both axes.
- Cleaned up the line smoother code somewhat.
- [EXTRA] Added a FastQuit option (to help get around some weird resource issues in MonoGame).
- [EXTRA] Added code to optimize warp point calculations to improve load times with large numbers of maps.
- [EXTRA] Added code to make warp point calculations use true distance calculations.
- [EXTRA] Added code to allow NPCs onto the farm (and backwoods, tunnel, etc) (disabled by default).
- [EXTRA] Added some code to try to prevent the game from going 'unresponsive' during loads. Doesn't always work yet.
- [EXTRA] Added some code to optimize the game's engine task runner (Microsoft.Xna.Framework.Threading.actions).
- [EXTRA] Added additional options to the snow renderer.
- [EXTRA] Made the snow renderer reference a new reference (my) screen area, so the snow density is uniform.
- [EXTRA] Regenerate the snow buffer when the screen is resized.
- [EXTRA] Added puffersnow (disabled by default).
- [EXTRA] Added a patch to improve load performance with the mod 'CustomNPCFixes'. Disabled by default as it requires a ContentPatcher PR.
-
Version 0.13.0-Beta.1
- Added sliced textures to dramatically improve performance for things such as water and large backgrounds.
- Added Suspended Instance Cache.
- Content Patcher: Animations is now functional.
- Reduced GC thrashing.
- Fixed winding order bug causing spurious draws.
- Added patches to optimize several routines in SDV and SMAPI, taking advantage of SpriteMaster's caches.
- Fixed crash on quit.
- Smoothed lines such as the fishing line.
- Re-implemented stable sort so objects in the same location no longer flicker.
- Implemented a custom snow drawing routine so that snowstorms no longer look repetitive and blinding.
-
Version 0.13.0-Alpha.5
- Improvements to the padding system.
- Some work on deposterization and whitelisting.
- More work on SuperXBR.
- Made the SeasonalPurge toggleable.
- Made the default interactive GC latency mode configurable (defaults to SustainedLowLatency)
- Implemented generic Block Analysis, configurable.
- Enabled forced overrides for Block 2x and Block 4x spritesheets, configurable.
- Fixed annoying and severe deadlock due to GC finalizers trying to enter locks.
- Fixed ballooning memory usage by having Metadata finalizers (after being deferred queued) remove any cached data associated with their texture.
- Fixed bug where errors would stream due to sprite draws that were entirely out of bounds.
- Improved debug printing capabilities.
- Updated Tomlyn.
- Changed the internal SpriteInstance list into a WeakSet to stop worker threads from completely stalling due to ballooning list sizes and linear-time ops.
- Improved the Garbage Collection extensions, and made the GC switch between 'Interactive' and the configured 'Interactive' setting based upon whether the game is loading or is being played.
- Added more GC points, particularly warps, to prevent memory usage from growing until major stalls.
- Added a little bit more system information to the initial dump.
- Fixed priority bug in FileCache.
- Fixed initialization order bug in FileCache.
- Made the compression algorithms only test and report their supported status a single time.
- Added additional integer cast routines to booleans.
- Added a (default-disabled) WatchDog, that is not fully implemented yet, to try to force threads to start working again in case of deadlocks.
- Attempt at implementing out-of-bounds drawing and scaling (in Draw.cs #84). It's difficult to test, so it might not be working.
- Added more code to try to prevent InternalTexture2Ds from inadvertently creating metadata structures.
- Added the ability to query for texture metadata without creating it.
- Significant improvements to Texture2DMeta and SpriteMap.
- Implemented DrawState.ForceSynchronous in Resampler.cs (used for render targets, which aren't currently enabled).
- Forced SpriteInfos to get Disposed. This shouldn't be necessary, but I was seeing strange heap usage.
- Made ExtractSprite work with non-power-of-two block sizes.
- Prevented the WatchDog from triggering an unhandled exception in ThreadedTaskScheduler.
- Improved 'Condition' functionality.
- Cleaned up and improved WeakSet.
- Added ResourceManager and ConcurrentConsumer for deferred resource cleanup from Finalizers.
- Broke apart and cleaned up DrawState.
- Fixed some bugs with DrawState in regards to sampler states being the wrong ones.
- Implemented 'ManualCondition'.
- Removed very-broken WeakCollection.
-
Version 0.13.0-Alpha.4
- Fixed the broken lighting.
- Fixed locking issue in the memory cache.
- Fixed SetData not properly updating the cache, and instead triggering a full flush.
- Very crude, broken, and experimental work on CP:A support.
-
Version 0.13.0-Alpha.3
- Far too many changes to count. Check the github CLs.
- Support for SDV 1.5.5 and 1.5.6.
-
Version 0.13.0
- Added gradient texture detection and mitigation.
- Disabled SM 'mitigations' in PyTK, when present.
- Added 'NoResample' functionality.
- Eliminate some crashes.
- Improved performance of SetData and GetData.
- General game optimizations and load-time optimizations beyond basic functionality.
- General optimizations to the resampler.
- Added low-pass filters to PMA reverse.
- Fixed performance regression near the volcano.
- CP:A compatibility improved.
- Fixed TOML indenting and comment support for the config file.
- Fixed platform incompatibility in game crash mitigation code.
- Fixed PatchImage issue regarding SpaceCore.
- Fixed issue causing UI elements to sometimes glitch.
- Fixed issue causing UI elements to sometimes not render entirely.
- Reduced the default max limits for the suspended sprite cache.
- Fixing issue where 'flipped' sprites would be incorrectly padded.
- 'Fixing' color issue with 'hoeDirt'.
-
Version 0.11.3
- General optimizations.
- Improvements to load throttling.
-
Version 0.11.2
- Fixing SetData issue resulting in skin color problems.
-
Version 0.11.1
- Fixing a crash that happens on Windows on startup for most users.
-
Version 0.11.0
- Added Linux Support
- Added MacOS X Support (without block compression)
- Significant optimizations to the draw state injector
- Significant optimizations to primitive wrappers
- Further trimming and optimizations to NVTT (except on MacOS X)
-
Version 0.10.5
- Bugfix release, significant bugfixes within the File Cache and Memory Cache.
- Performance improvement in delegated draw calls.
-
Version 0.10.4
- Attempt at fixing glitched textures from SetData calls.
-
Version 0.10.3
- Minor release, clears (and allows me to clear) the config file as some bad settings were introduced in earlier versions by default.
-
Version 0.10.2
- Made water properly resample.
- Mitigated a crash in the game code sometimes caused by zooming.
- Fixed UI elements sometimes not being visible.
- Fixed the mod sometimes just not working anymore while running.
- Improved performance.
-
Version 0.10.1
- Attempt at fixing some of the issues brought on by 0.10.0.
-
Version 0.10.0
- Significant changes to implementation in order to reduce memory usage and also improve image quality.
-
Version 0.9.12
- Fixed crash on asset dispose.
- Fixed dynamic textures not updating properly.
-
Version 0.9.11
- Fixed a potential memory leak.
- Improved garbage collection usage.
-
Version 0.9.10
- Minor release fixing rotating sprites and changing ZIP file format to Deflate64.
-
Version 0.9.9
- Added config.toml.
- General bug fixes.
- Improved compatibility with other mods via Harmony re-ordering.
-
Version 0.9.8
- Initial Public Release of SpriteMaster
-
SpriteMaster - Stardew Valley Mod (SMAPI / Harmony)
Stardew Valley mod that resamples all sprites using the xBRZ resizing algorithm.
Compatible with almost any content-modifying mod.
Also smooths lines (such as the fishing line) and reimplements snowstorm drawing so it looks much better as well as improves runtime and load performance.
All options are togglable, including resampling/smoothing.
The mod also incorporates patches for the game, for SMAPI, and for various mods to improve performance and the user's experience:
Compatible with Windows, Linux, and MacOS!
Credit
Source on GitHub
Stardew Valley mod that resamples all sprites using the xBRZ resizing algorithm.
Compatible with almost any content-modifying mod.
Also smooths lines (such as the fishing line) and reimplements snowstorm drawing so it looks much better as well as improves runtime and load performance.
All options are togglable, including resampling/smoothing.
The mod also incorporates patches for the game, for SMAPI, and for various mods to improve performance and the user's experience:
- Various patches to game and SMAPI methods to improve both load-time and runtime performance.
- Reworked snowstorm effect that isn't blinding or repetitive.
- Completely reworked pathfinding to improve load times.
- Supports both xBRZ and EPX resampling algorithms.
Compatible with Windows, Linux, and MacOS!
Credit
- Pathoschild - General help with SMAPI on Discord
- MiYanni - Original xBRZ.NET implementation
- ninthworld - Original HDTexture mod that inspired this and was originally based upon
- Strobe - Original Mac OS X testing
Source on GitHub