The best version of PatchIt! ever. Technically, it is.
Yup, it is time again! Time for another release of PatchIt! We are on version 1.1.2 Stable this time, releasing roughly 2.5 months after v1.1.1. This release has been codenamed “Smoothing the Rough Edges” because that has been my main focus this time around. v1.1.0 (which, recall, I accurately called a monster) was a major step for PatchIt!, and nearly 5 months later I’m still fixing regressions in it (just goes to show that good code is not written by quickly).
While that is half the story behind this release, the other half is known as optimization. I have carefully gone through all the code, cleaning it up to both PEP 8 and my own standards. Where there was duplicated functions, I moved it to a central location for all to access. If there was something I knew for a fact could be better, I made it better. I also did a large amount of restructuring to the code base.
PatchIt.pyw in v1.1.1 was over 1,000 lines of largely related-but-different-enough code. So I broke it up into smaller scripts in addition to others, thus making better use of modules. I also reduced the number of superfluous logging calls. All this helps PatchIt! run faster and more efficiently, and makes it leaner (but not meaner).
Although the next few changes are mainly on the development side, they produce benefits for the users too. I’ve done my best to improve the workflow for coding, running, freezing, and releasing, which helps anyone who wishes to help develop PatchIt! with me to get started. This in turn helps push releases for you guys.
More over, I wrote up a few utility scripts for freezing, one especially that removes unnecessary files which in turn creates a smaller download. There is plenty more, but you can see from this little bit here a lot of work has been put into giving this release some guts.
Not all the news is from the cleaning crew, though. I have added some new things that will improve the experience.
- Deep integration of RunAsAdmin. While this does not mean too much if you let the installer do its thing, it really shines when you are running PatchIt! from your flash drive or on a friend’s computer which doesn’t have it installed.
- Complete rewrite of the command-line arguments parser using
argparse, making it more stable and flexible. The order in which they go has been updated, but not largely so. Also, while I did not enable this by default, the installer takes advantage of the arguments and allows you to associate
.PiPfiles with PatchIt!, meaning you can click a Patch and it will (almost) automatically be installed! I suggest enabling the feature. I think you will like it. 😉
- Per a long and fruitful discussion with two people about my plan for PatchIt!, I’ve written a basic LEGO® Racers game launcher. By no means is it complete (a GUI will do wonders) and it is no replacement for Will Kirkby’s LR1 Launcher, but it is a step toward my full goal.
- As planned and started all the way back in v1.1.0, I have written a wrapper script for JrMasterModelBuilder’s JAM Extractor for easier compiling/extraction of LEGO.JAM. This also provides a future basis for full support of the 2001 release of LEGO® Racers.
- In order to accommodate these new features, I have designed a new main menu layout. This displays all the options at once and makes it easier to read them all. I’ve also improved what happens when you press an unknown option. I really think you’ll like the the layout.
- A ever so slightly updated PiP File Format. However, this does not affect the installation or creation of any Patches in v1.1.1 or in the future.
Adding to all this, some notable bugs and errors were fixed.
- The illegal character check when typing the Patch Name and Version for Patch Creation was completely rewritten. It now works correctly and the illegal character is displayed in the error message.
- Fixed issue with
Settings\PatchIt.cfgnot always being written
- Fixed Tkinter bug when canceling change to game installation
As usual, you can download the release from GitHub!
Happy modding, everyone! 😀