[PLUGIN] Savior

Hey Bruno, I was able to get Loading and Saving working from the slot pickers I embedded into my UI, but I’m still unable to successfully load into a game by selecting a “Continue Game” button in my main menu. Essentially, I created a slot that stays in Slot 0 to act as an Auto-Save, and I’m just trying to Load Game World using slot 0. I even set up some print strings on success and failure and those aren’t even firing. Have you seen something like this before? Maybe there’s something incredibly obvious I’m missing.

Try to do this:

I am officially saving and loading now! I’m not sure why, but I think I was just being thick and overthinking it at the same time instead of letting your plugin do the work. My only issue now is that whenever I load into a new level, the loading screen doesn’t appear until after the level has already loaded. So to the player it looks like the game is frozen for a bit.

Also, is there a way to only have the background blur or splash screen whenever the game loads, and not when it saves? I’d rather just have a notification saying the game has saved, but it shows the load screen during saving as well.

I will add this to my ToDo list, I just need to split the options. Right now both loading and saving screen check for the same enumerator value.

That makes sense. Thanks for your help!

I will submit this weeked 2.9.3 for review which includes the requests posted above and two new nodes for UObject pointers:

Heya Bruno! Just purchase the plugin, and I’m loving it so far - Saving my gameinstance is truly a breeze now, once I realized exactly how easy the plugin makes it. And it looks like the plugin has a ton of more advanced features as well, which I’m looking forward to trying out later on.

I’m having a few issues with saving some odd object references though.

Does the plugin support saving TextureRenderTarget2D objects? I read that the plugin doesn’t save structs that contain arrays of references, so I broke those out and just created an array containing them instead. But I’m still struggling to save an array of TextureRenderTarget2Ds that I’ve created in my GameInstance, so I thought I’d ask if they are even supported.

If they are supported, how should I go about saving them?

Texture pixel data is not supported.
Still, objects need a ‘SGUID’ property and object class should added to ‘Instancing Scope’ on Project Settings -> plugin settings panel. If you don’t add your object classes there and the class doesn’t have a Sguid it will be ignored…

Hi -

I’ve run into an issue where actors marked as ‘moveable’ are not being loaded correctly after being saved when running in PIE. Specifically, all the actors of a particular type are being initialized with the same values. This doesn’t happen with actors marked as ‘static’ and only appears to happen after the level has been played once. It is 100% reproducible.

It does not happen in standalone games.

I’ve created a very small project that demonstrates this.

To reproduce:

  1. The project should open to SlotTestLevel
  2. Play the level in PIE (either in Viewport or Separate Window)
  3. **Stop and then Play the level a second time. **
  4. With the level window in focus, press ‘K’ - this will save the level
  5. Press ‘L’ to reload the level - all of the actors marked ‘moveable’ will go to one spot.

SaviorIITest.zip - Google Drive

Your Actors need ‘SGUID’ property:

https://forums.unrealengine.com/unreal-engine/marketplace/1467088-plugin-savior-2?p=1744696#post1744696

Thanks for the quick reply I will give that a go. I had thought SGUID was only necessary for dynamically-spawned actors, is that not the case? - the actors in this example are all saved in the original level.

It’s now the only “data model”, it’s always required.
I explain why on post linked above.
You only see why it’s needed when packaging in shipping mode because changes Epic made to low-level engine.

Sorry - Should have read the post before replying. Makes sense now, thanks.

Hi Bruno,

So I’ve been working with SAVIOR 2 for the past 2 months or so, the problem I’m having is that when I create a new instance of my game (close the client and reopen it), variables save however actors don’t. For example, if I collect a “point” and have it increase the points counter, the points counter saves correctly, but the actor will continue to load even if the “mark destroyed” function is in play. Like I said before, levels save properly, variables, and everything else, except actual actors placed in the level. They continue to respawn on load even if they were collected and destroyed.

I’ve tried using the “On loaded” event (i’ve implemented the interfaces correctly), pulling data from the save slot, and other wierd solutions but nothing seems to work. Again, my question is how do I ensure objects/actors are properly despawned on a new instance of my game when I load?

If you overwrite saved data on slot, you lose information about “Destroyed” property.
If you overwrite the slot data once the actors marked “Destroyed” have been actually destroyed from the Level, you will also lose save data on the “Destroyed” property.

You should either keep one slot per level or create your own list of “SGUID” variables on GameInstance that you can use with “Find Actor with GUID” and destroy them after loading a level.

I have updated, tested, and submitted ALL plugins to Unreal 4.25;
Now we have to give marketplace team some time to review and process updates :slight_smile:

There’s an update I submitted last week and still waiting for approval by Epic.
The latest adds these function nodes to the plugin library:

Latest update above have been processed and published on Marketplace.

I’ve been trying to integrate Savior 2 into my company’s game. We’re using world composition for level streaming. When we try to save the world with Savior 2, we get a crash in one of the Savior 2 worker threads. I tried turning on debug logging but don’t get any information. How can I debug this crash or at least work around it?

I can take a look if you email me crash logs.
Without more info, I can only assume you are trying to call save/load functions while your levels are stream in progress.