How do I make a quick-save system?

You dont have to send your Savegame Object along. Store it somewhere easy to access like GameInstance, GameMode. They can get it themself if they need it.

Also dont force yourself to use a single Gamesave File. Think more about in groups of Datablocks. You could have a SaveGame just for Transforms, One for Character related Data, one for General World State, etc.

The transforms you could easily implement in a baseclass and never ever Care about it anymore (its basicly the same for everyone), than your NPC, Characters, Bosses can overrite that function and do a Parent Call (that takes care of the Transform Saving) and Save to your Enemys Save Game in addition. Your Boss might even want to save to WorldState to.

You basicly avoid having a giant Savegame with enormous sets of Data but at the same time avoid to make a Savegame for each individual Object Type by saving in Clusters or Categorys if you like to imagine it like this. And still keeping it flexible to save to any relavant Savegame Object you want.

Organize your Data how you see fit basicly. But keep it somewhat Clunky. If you see a oportunity to save Data in Bulk in a base Class go for it.

I need a quick-save system similar to the one in Dishonored or the older Splinter Cell games.
It should save and load the complete “as is” - state not just specific parts like the postition or player progress.
How do I achieve this?

This is really everything you need. You can make as much variables as you like to save the exact same state of your game.

I already saw it but it is not what I’m looking for. It won’t just save the state and I will have to manually specify everything in my level which is supposed to be saved by specifying one by one every Class and altering the save/load function for every new Class.

I can’t find another solution other than that. Your definition of “state” is as simple as that, a bunch of different variables. I don’t know which kind of “state” you are talking, but how do you expect Unreal to know of it, other than feeding it manually with variables that are specifically bounded to your game?

I recommend making your own save game class and give it every reference you need, to save everything that defines a “state” of your game. That can be transform, bools for puzzles etc. Just think about everything that defines a state in your game and please report back what you consider a state in your game! <3

with state I mean a complete capture of the complete scene as if you would save the level with all the actors but during the game. It is really the same what dishonored had. At any time you can save or load the game and end up with exact the moment you saved it. This includes ragdoll positioning, current enemy behaviour, physx stuff like force velocity.
But since there is only the way of using the save game class I’ll try to just feed it with every data I can. atm this is just not working for me.

Make a Interface call it SaveableActor. Add a Function called OnSaveRequested and OnLoadRequested add Parameters you may want like SaveSlotName, Version,etc.

Implement those on every Actor you want to Save some state. Than you can Call GetAllActorsOfClass->Foreach->OnSaveRequested. Everyone will execute their Save Method (everyone should know how to save himself, everyone does save different things)

You can also Check first if they Implement that Interface. If they dont than go for a alternative route filtering out other Objects that just need to save their Transform like simple Meshes you placed in your World and you just want to save their transform in case they got moved. Filter via Cast or Tag preferably. You surly dont wont to save Meshes that never ever will move.

Thats a Beginner friendly start for you. System that Games like Dishonered use are usually far more Complex and not something Im up to explain in a AH Post :stuck_out_tongue_winking_eye:

GL Mate

With that definition of “state”, you actually mean “a helluva variables”, or some fewer variables that, at load stage, other systems can query to set up relevant actors when BeginPlay event is raised (i.e. your save system stores scene state to specifiy designed AI pawns to execute specific BTs). A complete snapshot, like those in some emulators sounds more like you’re trying to achieve. I don’t know any other way to get it done besides Ninjin’s answer.

sorry for the late reply. I like the idea you provided and tried to implement this but got stuck because I can’t get every actor to save itself. Could you please tell me how to handle the part inside the interface call?
I’ve tried to pass the save game instance to my actors to avoid creating a new save game for every new instance but then the save game class gets very messy and unusable.

A complete snapshot, like those in some emulators
yes this is what I want. But I realize that ue4 doesn’t support the idea in an easy way so I’ll probably just design my game to use a checkpoint system :smiley: