[MZ] QuickSaveSlot — One-Key Quick Save/Load Without Opening the Menu
Hey everyone!
I just released QuickSaveSlot, a small quality-of-life plugin for RPG Maker MZ that lets players quick save and quick load with a single keypress, without ever opening the Save/Load menu.
On-screen toast confirmation (optional), fully customizable text, plus the standard save/load sound.
Optional switch gate to lock the feature behind a story flag or settings toggle.
Plugin commands included (Quick Save / Quick Load) for triggering from events.
Why I made it
Constantly opening the save menu just to save at a checkpoint breaks pacing. I wanted something closer to a dedicated quicksave slot bound to a hotkey, kept safe: it won’t fire mid-battle or mid-event, and never touches the player’s actual save files.
Nice one. The promise handling on saveGame is the bit people usually get wrong so it’s good to see the then and the catch already sitting there.
Two small things I noticed while reading it.
The savefileId restore can get stuck if a player mashes the key. executeQuickSave grabs previousSavefileId then sets the slot then saves and only restores inside the then. A second press that lands before the first promise settles reads previousSavefileId as the quick slot itself. So the restore puts it back to the quick slot and leaves it there. An in flight flag clears it.
The other is the version mismatch branch on load. Stock MZ passes five arguments there.
$gamePlayer.reserveTransfer(mapId, x, y, d, 0);
Yours passes three so fadeType arrives undefined and fadeInForTransfer only switches on 0 or 1. The reload itself is fine. It just snaps in with no fade instead of the usual black. Passing 0 as the fifth argument brings it back.
Dropping the fourth argument is harmless by the way. performTransfer hands it straight to setDirection and setDirection guards on the value being truthy.
The saving in-flight guard is definitely the right fix for the quick-save race. Without it, a second press can capture the already-overridden savefileId and restore the wrong slot.
And you’re right about the version mismatch branch too. I was overlooking the fifth reserveTransfer argument. Passing 0 restores the normal fade behavior:
$gamePlayer.reserveTransfer(mapId, x, y, d, 0);
Good point on the fourth argument as well. Since setDirection guards with if (d), undefined is effectively harmless there and the existing direction is preserved.
I’ll make those two changes: the in-flight save guard and the fadeType = 0 on the version mismatch reload.