Universal Quicksaver for All

Few years ago, I had several quicksaver scripts available on the Mad Tea Party, and I, in my hubris, said something along the lines of ‘after this housekeeping update, I doubt I need to maintain the script no more’. Oh, how wrong I was. Ladies and gents of gamers club, I proudly present rogue-like which plagues the gamers no more than RPG already has with broken save systems. I thought I had it tough with lost character arc and roleplaying, and here I was yet again with a lost playthrough of its entirety.

In my opinion, rogue-like never plays well without an adequate save system in place. It is an ironic statement to make. But no game is without fault, and multiple saves are usually the only backup systems most games have in place. What astounds me with recent releases of rogue-like games is that these games simply lack a backup system. So here is a simple quicksaver script.

How to Use

Download the file from here. The script is packaged in a zip file. It only contains one python file. Again, this file can be read from any text editor, should you wish to read the codes in it. That way, you can also change the settings to your liking. In total, to actually run the python script you need at least three things:

  1. A directory reserved for save files.
  2. Text editors to view and edit the python script.
  3. Python 3 or up installed on your system.

I also personally recommend making the script executable from a single mouse click, instead of cd into the directory every time. Open a new file on a text editor of your choice and copy the following codes:

Mac/Linux:
 #!/bin/bash
 cd “$(dirname “$0″)”
 python quicksaver.py
Windows:
 python quicksaver.py
 pause

Save the file as following name:

Mac/Linux: 
 start.command
Windows: 
 start.bat

The script itself contains commentaries on what can be changed. But, most importantly, there is one thing you do need to update for yourselves:

  1. SOURCE_LIST with where the save datas are located.

Save files will be copied over into the same folder as where the script is as default. The files will be stored separately in each folder.

FAQs

Why and where would I want this?

It would largely depend on the use cases. Any games that have rogue-like save systems (e.g. one autosave slot without manual save and load) could use it as a backup. Some games are simply shipped with too many save-breaking bugs, but currently most games do not come with save-fixing or correcting features. If it’s broken, most of the time a player needs to abandon that particular playthrough. This Python script could work as a backup.

The other scenario I could think of is for roleplaying. Sometimes you just want to see how far your playthrough would have gone without the untimely demise. This could be that “one more turn” backup. Do be mindful though, a proper in-game save system, if available, will most likely perform better than a simple script.

Can the script damage my saves in anyway?

If you are unsure of what the script might do to the saves or to the systems, the codes can be easily read with any text editors on any platforms. It’s written in Python, specifically for Python 3 and onward. One can examine the codes rather easily.

What the script is essentially doing is copying the already-made save files from the game’s save folders, and copy it back, should the player wants to restore the save file. Obviously this can be done by hand. The purpose of the script is to make it easier.

This script created qsmeta.json file in a save folder. What is this?

The script creates a meta information file to keep track of where each save file/folder is from. A game could potentially keep its save in two or more locations. Most games on Steam uploads its saves, giving it at least two location to look out for. The script saves where the file/folder is from, and where it is quicksaved afterward. The format, in JSON, is this: {“destination location”: “source location”}

How do I choose older ones or auto saves?

The original version of the script did not include a prompt to restore older save files, just the most recent one. A change was made to help navigating save files, instead of searching through three different folders at once. Do be mindful though, the restored save file is not guaranteed to work and will need to be checked in-game.

Restore mode will ask for two things in total: auto/manual and extension number. First prompt is asking if the save file was saved manually or automatically. Second prompt is asking for an extension number at the back of the folder, e.g. 5 at the end of AUTOSAVE_old5. Don’t worry about _old, because the script already knows how it’s been naming older save files.

How do I update the script without losing configurations?

The new script now marks where the config starts and ends. It looks like ### CONFIG STARTS ###, and the config can be carried over. No significant changes have been made from the original 2023-06-17 version. The marks are purely decorative and serves no real purpose outside of helping readability.

That being said, if you are updating from the original version, config section is still all the same. It starts from SOURCE_LIST and ends with LEGACY_AUTOSAVES_COUNT. Simply copy the config section from old python file to the latest.

Updates

Note June 19, 2023: When the script is used on a cloud drive, like Dropbox, it could have problems handling rapid changes in files and folders, thus creating duplicates. I suggest slowing down the autosave interval if that is the problem, or running it locally.

Note June 24, 2023: Another update on using the script on the cloud. Possibly due to synchronization, modification dates for folders and files may not correctly reflect on when it is actually created. While it is possible to modify the script so that the meta file would keep the record, I would suggest running it locally for sanity reasons.

Note July 2, 2023: New version of script is available. The script will now exit out of autosave mode gracefully and can restore any save files. Details and other spiels are in the new post, here.

Note July 3, 2023: Forgot to skip the first autosave upon restoration. Oops! 07-02 version would have made a duplicate save file. Also added an option to interrupt restore mode in mid-way. This is a simple change.

Note July 10, 2023: Fixed the issue where the script raising an error message for extension number whilst saving. The error would not have occurred anything less than 10 total saves, (or 9 legacy saves, which is default value) now it should work just fine with any limits.

Note December 4, 2023: Updated the script to use Python’s pathlib, instead of os.path.

Leave a comment