Repository navigation
Releases: DimonByte/LunarROMCorruptor
Release list
v2.0.0
LunarROMCorruptor v2.0 Release Notes
Note
Major Architectural Change: This update removes the previous 2GB file size limitation. To support much larger files, the program now utilizes a paged file buffering system. Users with limited RAM should be aware that while large files are supported, the program now utilizes an LRU cache to manage memory efficiency.
Note
Asynchronous Processing: Corruption tasks and Stash operations now run on background worker threads. This prevents UI freezing during heavy operations and allows for real-time progress tracking via the new progress bar integration.
Version 2.0 is a massive architectural overhaul designed to transform the program from a semi-advanced corruptor into a high-performance, scalable corruption suite. This release introduces a new memory-efficient file-handling engine, and expands the library of corruption engines.
Core Engine & Architecture Overhaul
- Unlimited File Size Support: Eliminated the 2GB limit by replacing
File.ReadAllByteswith a custom pagedFileBuffer. Small files are fully cached for speed, while larger files utilize an LRU (Least Recently Used) cache to maintain a low memory footprint. - Advanced File Persistence:
- Non-Destructive Workflow: Every corruption now starts from the original source. "Save-as" operations no longer overwrite the original.
- Journaled Restores: When saving over an original file, the program now journals original pages to
%TEMP%, allowing for a seamless "Restore" functionality even while the program is running.
- Background Execution: Implemented a multi-threaded architecture. Corruption processes now run on worker threads with integrated progress bars, ensuring the UI remains responsive during long-running tasks.
- High-Capacity Stashing: Replaced the string-based stash system with
StashLog, a streamlined, disk-streamed system capable of handling up to 10 million entries without performance degradation.
New Corruption Engines & Modes
- Source Code Engine: My favourite one in my opinion: A specialized engine for code-based files. It can target booleans, integers, floats, and strings while intelligently skipping comments and JSON keys to maintain file syntax. Supports replayable stashes via
VARLINEsyntax effectively.
- Vector2 Engine: A new mathematical engine that identifies 32-bit float pairs (X/Y) and applies transformations such as negation, randomization, or swapping.
- Blocks Engine: Sorts, reverses, shuffles, rotates, smears or echoes whole blocks of data (pixel sorting / data moshing). Element size keeps RGB pixels or audio samples intact.
- AVI Datamosh Engine: Introduced a dedicated engine for video corruption, removes keyframes (melt) or repeats motion frames (bloom).
- Exclusion Engine: Existed in beta, improved with the latest release, with errors fixed and new exclusions added. Explained below.
Advanced Analysis & Exclusion System
- Massive Exclusion Expansion: The Exclusion Engine now features comprehensive header and range parsing for a vast array of platforms, including NES, SNES, N64, GameCube, Wii, PS1, PS2, Genesis, Saturn, Dreamcast, and more. The engine intelligently avoids protected vectors and critical addresses.
Enhanced ByteView:
- Advanced Rendering: Added support for Difference (diff) and Entropy rendering.
- Visual Targeting: Users can now perform byte-range targeting using image-based overlays. Just drag your mouse and select the bytes that you want to target.
- Performance Optimization: Replaced
SetPixelwithLockBitsfor significantly faster rendering of large files.
System & Utility Improvements
- Automated Permission Management: Improved the "Take File Ownership" utility. The system now uses robust
&&command chaining and precise SID targeting to clear read-only attributes and fix access denials automatically. - Improved Path Handling: Standardized path construction using
Path.Combineand implemented safer, quoted path handling for Windows Explorer compatibility. - Enhanced Automation: Refined the automation engine to prevent overlapping dialogs, handle mismatched trackbar values, and prevent crashes on very small files.
Bug Fixes & Stability
- Logic & Math Fixes: Resolved several critical bugs in the
Merge,Manual, andIntensitymodes, including operator precedence errors, out-of-range crashes, and incorrect bit-shifting offsets. - Stash Editor Refinement: Fixed issues regarding item deletion, window memory leaks, and improper folder initialization.
- UI & UX Polish:
- Fixed the "Corruption Queue" where certain files were being skipped.
- Resolved a bug where "Save-as" operations would occasionally result in empty files.
- Fixed UI flickering and scaling issues in the Stash List.
- Crash Prevention: Implemented widespread null-reference checks (ROM cloning, selection, and ByteView) and improved error handling during the first-run configuration.
Full documentation and updated usage instructions can be found in the updated README.md.
What's Changed
- [ImgBot] Optimize images by @imgbot[bot] in #43
- Upgrade dotnet 10 by @DimonByte in #44
- [ImgBot] Optimize images by @imgbot[bot] in #45
- V2! - Major improvements by @DimonByte in #46
Full Changelog: v1.0.4...v2.0.0
v2.0.0 beta
Although this is a beta release, I want to release this to allow people to see the improvements as early as possible.
What's Changed
-Attempted to add protected file override
-Major code refactoring behind the scenes
-StashList now runs asynchronously to improve performance
-Upgraded project to dotnet 10.
-ROM checks for null references to prevent crashes.
-Main form now checks for data present when user drags file into form to prevent errors
-Enum checks to CorruptionCore to ensure enum parse actually is valid.
-Several runtime robustness fixes: null checks for ROM cloning and list/selection, safer stash parsing, ByteView null checks
-CorruptionCore now loads the ROM inside itself for centralised loading and validation.
-Fixed Automation random-engine null handling
-TraceLogger is implemented; this is from my previous projects and allows debugging and to see where the program is currently at. It also now handles errors.
-CommandRunner is implemented; this makes it easier to run commands with elevation.
-Fixed StashList issue where the code was completely missing and wasn't adding stash items after corruption.
-Added new buttons to the end of opened file and save as file so users can open the folder location of the original and corrupted file.
-Fixed a bug where the manual engine was referencing the nightmare engine increment value instead of the manual engine increment value.
-Added a new exclusion engine which attempts to avoid critical addresses of common file format types and corrupts the rest, e.g. N64 critical file addresses are ignored but the rest are fair game.
-UI: Changed icons for more modern look, stash list buttons are now resized proportionally with the main form for a more organised look.
Full Changelog: v1.0.4...v2.0.0beta
v1.0.4
Added ByteView: a visual way of seeing every byte in a file that is loaded in the corruptor.
Improved corruption performance in CorruptionCore by moving the TryParse out of the loop.
Fixed Issue #42
Added Multiselect to the corruption queue open file dialog.
Full Changelog: v1.0.3...v1.0.4
v1.0.3
Intensity Checkbox wasn't working, added the void association back to the checkbox.
Certain code has been refactored.
Comments have been added to improve readability.
Changed icons.
Removed unnecessary using statements.
Added Loading image when loading a file.
Added byte value parse check on the stash corruption function.
Replaced Edit Queue button and combined it with the Open File button.
v1.0.2
Added drag and drop support for multiple files
Added automation support
Added byte location check to the Corrupt using stash function
Added more comments to explain how the corruption core works
Changed the default switch error so that it gives more information on what went wrong to the user.
v1.0.1
v1.0
v1.0 has now been released.
This has a lot of new features, bug fixes, and quality of life improvements that make the corruption process much less confusing.
Full Changelog:
- Moved running emulation code from the corruption queue loop to outside that loop.
- Removed Sleep from emulator code.
- Load File now sets the start byte value to 0.
- Moved check variable code outside of the loop in the Corruption Queue corruption code.
- Fixed unhandled exception in Stash code.
- Added the ability to run an emulator after corrupting the corruption queue.
- Added the corruption queue (as noted in #34). This allows multiple files to be corrupted. However, there are some disadvantages:
-
- Restore, Stash, File Saves (for now), and Change Save As functions don't work when corruption queue is enabled. Once it's corrupted, it is corrupted forever. So please back up your files before corruption.
-
- User is unable to set a custom start and end byte.
- Added KB to the corruption button.
- Added a file size number to the Corrupt File button, so the user can see how big the uncorrupted file is.
- Changed how the stash corruption functions work. In doing so, I fixed a bug where the Stash corruption was using the ROM byte variable instead of using a temporary variable that had the same information as the ROM byte. This meant that every stash corruption wasn't restoring the file back before corrupting again—resulting in corrupted bytes staying even when the stash file didn't have the byte on its list any more.
- Added "Open Folder Location" button to the File Saves tab
- Enabled the Restore button on the Stash Editor Form
- Added new button called "Save Stash and Corrupt" on the Stash Editor Form, this allows the user to save the newly edited stash file to an already existing one instead of creating brand-new stash files every time.
- Renamed some variables, so they're easier to read and follow
- Added more comments
- Added Trackbar to Lerp engine
- Drag Drop Subroutine now uses LoadFile function.
- Removed Hell Engine
- Moved corruption code to a separate class, making the form code less messy.
- Corrupt using stash now doesn't load the file every time it wants to corrupt. It uses ROM that's in memory instead.
- Changed error messages in corrupt using stash to be more helpful for debugging.
- Fixed Nightmare Engine and Manual Engine invalid code where incrementing/decrementing the byte to the max would result in a value other than 255 or 0.
- Reworked LoadFile function
- Removed emulator.ini in favour of saving settings in Properties.Settings. Addresses issues: #30 and #25
- Able to mute corruption success sound.
- All settings are saved when changed.
- Implemented Logic Engine.
- Removed backupROM variable #33
- Fixed Severe invalid code where FinROM and ROM were linked together, preventing user requested restores and auto restores before corruption.
- Changed success sound.
- Fixed exception in SaveCorruptedFile function and FileSaveCopy button.
- Fixed severe issue #32
- Changed colour scheme a bit.
- Changed UI layout, UI is now a bit smaller.
- Removed unnecessary restore before corruption.
- Attempt to free up memory.
- Added check to see if the merge file location exists, if not it throws an error.
- Changed some error messages, so they're easier to read.
- Trying to now follow good version number practices.
v0.4
-
Fixed invalid spacing around the semicolon.
-
Upgraded to .NET 4.7.2:
.NET Framework upgraded #26
Variables and Controls changed to make them easier to read #24 -
Unstable Branch Update
Fixed issue #23
Fixed issue #28
Fixed issue #21 -
v0.4 update
Changed the layout and colour scheme of the UI.
Added icons to certain buttons.
Previous commits fix a couple of issues/errors. -
v0.4 quick update
Updated preview image.
Fixed Codefactor.io issues.
v0.3
v0.2
Fixed typos
Fixed issue where "close if running and re-open" option for the emulation option doesn't kill the program properly.
Fixed issue where selecting multiple items from the Stash List & File Save List and clicking delete only deletes one item(file).
Fixed issue on Stash Editor where the default stash name after adding a new file to stash was incorrect.