Just thought I'd post this here about version 1.7:
Q: What's so special about version 1.7 of NXPatcher?
A: It's focusing a lot on usability and customization for the user. BAT files are completely done away with in favor of using INI files instead.
Q: What's an INI file?
A: An INI file is a textual document that can be edited with Notepad. It contains a list of variables that, once edited, affects how NXPatcher interacts with nearly every aspect of its environment. It also uses
referential variables.
Q: What's a...
A: A referential variable is an easy way to save time and create consistency. Have a look at this example INI file:
Code:
[frank]
pet = chinchilla;
[john]
pet = {frank:pet};
In this example, "{frank:pet}" is a referential variable because it points to whatever Frank's pet happens to be. When John's pet is read, it will return "chinchilla". If Frank's pet changes to "rabbit" and John's pet is then accessed, it will return "rabbit". John will always have the same pet as Frank.
So how is this useful? In NXPatcher, there are functions that are being performed which are extremely similar to each other - such as the "read" and "hijack" command. They both read patch files - one just happens to be inside an exe file. By using referential variables, you can change how the "read" and "hijack" commands work at the same time like in the following:
Code:
[read]
ifdeletefiles = 0;
ifusefastpatch = 0;
outputfolder = Patcher;
[hijack]
ifdeletefiles = {read:ifdeletefiles};
ifusefastpatch = {read:ifusefastpatch};
outputfolder = {read:outputfolder};
Another feature possible due to this is a
dynamic referential variable. This variable is defined while the program is running. One of the easiest to understand is like in the following:
Code:
[read]
backupfolder: v{nxpatcher:version};
Here, {nxpatcher:version} refers to a dynamic variable because the value is not known until the program is run. In this case, NXPatcher determines the current version of Maplestory you are attempting to patch. So if you're patching from version 82 to 83, the name of "backupfolder" would be "v82". If you were patching from version 78 to 82, the name of "backupfolder" would be "v78". This allows for a lot of flexibility.
Q: Any bug fixes or performance enhancements?
A: Yes on both accounts. One of the bug fixes I've mentioned would be fixed in this version is the error in the "version" function because it does not work on Item.wz. This bug is fixed. For performance enhancements, users are now able to choose between the normal method of patching found in version 1.6 or the fast version of patching in 1.7. This is configurable within the INI file with the variable "ifusefastpatch" which affects the "hijack" and "read" commands.
If ifusefastpatch is set to 0, the entire file is read two times from the disk. The first time, the file is read in chunks from the hard drive to determine if the checksum matches the correct checksum found in the patch file. Then the file is again accessed from the disk as the patch file requests while rebuilding the file. So many fetch requests from the hard drive causes a massive slowdown in speed.
If ifusefastpatch is set to 1, the entire file is read into memory before any rebuilding procedure is performed. So in all, the file is only read one time from the hard drive. This also means that the checksum procedure is performed in memory (Very fast - compare 300MB/sec in memory vs. 30 - 50 MB/sec from the hard drive). Also, during the rebuilding procedure, the patch file reassembles the entire file from memory. The result is a lot more speed (it runs nearly 50% faster), but it also consumes a lot more memory. Map.wz is more than 500MB in most versions of Maplestory which is entirely read into memory. I recommend at least 2 GB of memory to turn ifusefastpatch on.
Another performance enhancement, regardless if "ifusefastpatch" is turned on or off, is buffered writing. NXPatcher keeps a 5 MB buffer managed internally. This means fewer hard drive accesses and also increases speed.
Q: But I like how version 1.6 runs! Do I have to change to the new one?
A: Version 1.7 is entirely backward compatible with version 1.6. You can continue to use version 1.7 with batch files just as you used with version 1.6. I do recommend you upgrade to the new version for the above mentioned bug fix.
Q: When is version 1.7 coming out?
A: When it's ready. I will be releasing 1.7 as a beta (1.7b) first, then I will release gold (1.7g) afterwards.
Q: What will be happening to NXPatcher Lite? Will you be upgrading that to 1.7, and any new features with NXPatcher Lite?
A: No. The main purpose of the Lite version is for people to make Nexon pre-patchers, which is a very simple process anyway. The purpose of that version is to be simple, and I believe it has accomplished that goal. In short, there is nothing to upgrade because there's nothing that needs upgrading.