Binary Compressed Save System, Save Entire Dynamically Generated Worlds! ♥ Rama

bcadd71f1835467f658b357a71eabb2bea7abcdd.jpeg

Dear Community,

My binary compressed save system has been released!

Use Cases For This Plugin

  • Saving all the data and actors for a strategy or action game, so the entire world state can be instantly reloaded from a tiny file on your hard disk.

  • Saving all the data for a player’s personal profile, recording their progress through a game.

  • Saving an entire world full of actors quickly and easily, being able to specify exactly which actor variables get saved.

  • Saving data that is customized per instance of a character or creature in the world, such as health, current armor value, ammo count, etc.

  • Saving data that is global to the entire game, as well as the entire state of the game world that all players share.

  • Saving the entire state of a game world on a server, to be reloaded in case of unexpected server shutdown or server maintainence event.

Marketplace Link

**
Video**

**Intro And Multiplayer Game Save/Load**

https://www.youtube.com/watch?v=XzJI9mw1sVM


**AI Save and Load**

https://www.youtube.com/watch?v=jk4H_4wEl10


**Dynamically Generated Physics Simulating Objects Save and Load**

https://www.youtube.com/watch?v=zSfUYpJqbvs


**Many More videos**
http://ue4code.com/save-system-plugin-world-serialization-dynamic-level-building-save-to-disk-ue4-unreal-engine-4-save-system

FAQ

1. Multiplayer? Really?!

Yes!

2. Any data I want?

Yes!

3. AI?

Woohoo!

4. How?

Videos! ~ http://ue4code.com/save-system-plugin-world-serialization-dynamic-level-building-save-to-disk-ue4-unreal-engine-4-save-system

(who wants to read these days anyway when you can watch a video?!)

Enjooooy!

:heart:

Rama

Hello everyone,

I made a quick video in my project showing the integration of the Rama Save Plugin, check it out:

Thanks!

Huge Update ~ UE4 Level Streaming Now Supported

Dear Community,

My binary serialization save system with ZLIB compression now also natively supports the UE4 Level Streaming system using C++!

Rama,
did you test the plugin on mobile platforms ?
or anybody ?

i tried it using 4.12.5 for android. but the system does not do anything at all.
it compiles ok. no warning , no error and no crash.

the only clue i have found are these warning from log :

i am having feeling that the core of the system are not getting loaded. thats why it is not doing anything.
any thought ?

Hi there!

Mobile is not listed as a supported platform, in my description I indicated that it should be easy enough to get working as long as the UFS (Unreal File System) handles the platform you are compiling for.

I have not had time to do mobile testing as I am working primarily on a PC game.

I dont anticipate getting to Android in the near future given my current work schedule, so please request a refund due to misunderstanding of the supported platforms, if your needs are urgent.

I have an android device and can work on the matter at my nearest convenience but please dont wait on me as I have a lot to manage right now.

It could be that the platform is not supported by the UFS itself, Unreal File System, and it simply wont work without Epic making changes.

Given the compartmentalized nature of Android platform that is quite possible.

Please note this should not be an issue for console platforms (PS4, Xbox One), as UFS is supported on those platforms.

:heart:

Rama

Level Streaming Update is Live on the Marketplace!

Dear Community,

My Level Streaming massive update is now live on the UE4 marketplace!

Please make sure to download latest version!

I’ve added backwards compatibility as well!

Rama

@Rama
I think you can override the PostEditImport method of your component and do something like MyGUID = FGuid::NewGuid().
This should generate a new guid even with actor duplication

Seems like a really sweet plugin which is now on my to-buy list! :slight_smile:

Is it possible for you to support Android and XBox One, not just Windows ?

XBox One support should go well, but I dont have a device to test with :slight_smile: If you encounter any issues and have C++ compiling ability than I can help debug any matters that arise :slight_smile:

I am not convinced android support will be easy if the UFS is not already working for android as user reported above.

So basically I can help someone who can compile for Xbox or PS4 with any issues, should be easy to resolve as UFS is much stronger on those platforms. Mobile requires special cases because of compartmentalized nature of the platform, and is probably a more complex matter :slight_smile:

Rama

Wooohoo!

Thanks for that @MatzeOGH! That worked!


Mini Wiki

Goal: Perform an action when an actor is duplicated using ALT+Drag on the editor widget (BP constructor script wont run, it only runs for new actors added to level).

Context: any UObject.

For anyone who wants to know (mini C++ Wiki for you), here is the code:



```


//! Auto-create new FGuid on Alt + Drag
**#if WITH_EDITOR**
virtual void PostEditImport() override
{
	**Super::PostEditImport();**

	if(RamaSave_PersistentActorUniqueID != FGuid())
	{
		RamaSave_PersistentActorUniqueID = FGuid::NewGuid();
	}
}
**#endif**


```



In my case I only change FGUID if it had a valid one as not having an FGUID is a legitimate case as well.

For everyone:

Don't forget WITH_EDITOR or else you will get packaged game compiling errors, and dont forget to call super!

♥

Rama

Glad it worked.

Btw, afaik you can check what platforms to support and Epic would build it for you. This way Android users can get pre-built plugin for Android :wink:

Also wanted to ask if your save system saves on a separate thread to prevent hitching when saving. For example, in Doom 3 BFG when you hit checkpoint and saving happens, the game literally freezes or hitches badly. On the contrary, in Darksiders you only know that you hit checkpoint is when you see saving icon appearing in the HUD - no hitching or freezing when saving.

Rama Save System With Asynchronous Saving

Dear Community,

My Save System now features a multi-threaded save process in C++ that allows you to put up a progress bar and avoid hitches for very large save files!

This allows saving of the game without brief stalls / hitches!

Wow the timing of your question motorstep!

I didnt see your comment but I have just added this feature to my plugin!

Just wondering if there is any progress with pre-built Android binaries.

Looks nice, But i have a question! :slight_smile:

For exmaple i have a service figuring out who to attack currently and its storedin a billboard, and the AI is following that target always.
Does it save the behavior tree states too?

Hi Rama, how flexible is this if i used it with say dedicated servers ? how would i save the data to a host, similar to what Ark does? thanks

how would i go about saving player inventory such as jcinventory for example… and player stats? im stuck trying to figure it out

Hey Rama,

thanks for the plugin, really great work.
With the newest version for UE4.14 however we encounter an issue. It seems you are spawning an actor for saving. I gues this was not in the previous version? We were saving on event EndPlay (dispatcher). This is now broken, cause the actor spawn is ignored when the world does crumble to pieces.

cheers

Not yet, I need to get a dev device to work with and I just haven’t done it yet, I am hardcore PC dev and have not ventured into mobile much yet, but it is on my to do list :slight_smile:



[QUOTE=Azarus;661712]
Looks nice, But i have a question! :)

For exmaple i have a service figuring out who to attack currently and its storedin a billboard, and the AI is following that target always.
Does it save the behavior tree states too?
[/QUOTE]


I will pm you so I can help you with your setup :)

My system does not need or expect anything that would be different between a dedicated server vs a listen server, you can test with listen server and then put on dedicated server without issue, or test dedicated direct, you just call a few static BP library nodes from anywhere in the game to save/load :slight_smile:

Only the Server can load save files since actor creation belongs to the Server :slight_smile:



[QUOTE=Rumbleball;666877]
Hey Rama,

thanks for the plugin, really great work.
With the newest version for UE4.14 however we encounter an issue. It seems you are spawning an actor for saving. I gues this was not in the previous version? We were saving on event EndPlay (dispatcher). This is now broken, cause the actor spawn is ignored when the world does crumble to pieces.

cheers
[/QUOTE]


Hi I will pm you so we can get a dialogue going, solutions will of course become public in my plugin as soon as I develop them.

My first thought was to see if you could save before calling Super::EndPlay, but you may have to consider saving periodically, the purpose of the actor I am now spawning is to enable Async saving to occur, which you can enable in Settings. The other reason for the actor is to enable the async Level Streaming process to occur.

If no other solution is viable, I can add an option for reverting, but frankly, you are better off doing periodic async save (Which won't drag on the performance of the server because I am fully multi-threading the save process now), this is more stable than relying on EndPlay.

And if it a save cause every player leaves, well then you don't have to end play till you are ready.

But the advantage of the actor is now you can save in the background on periodic interval without affecting gameplay. Endplay wouldn't give the async process time to occur anyway as I launch another thread. :)

♥

Rama

My system is object-oriented, so your stats and inventory would want to have an outer Actor container, which has the Rama Save Component, which is the Object storing the data.

So your outer container could be the player unit, a Global Save Actor, or any particular actor that the values all pertain to.

If you have a bunch of abstract data I recommend Global Save Actor:

Oh, ok. Hopefully soon? :o