Games updates and patches

#1
Hi all,
I'd like to ask some help about patching my game.
I've noticed that if I change something in my level (to fix some bugs) the savegame doesn't work anymore and the game crashes when the level is loading.
This problem forces the player to restart the game from the beginning and this is not good.
Is there a way to solve this? I'd like to minimize the impact of updates for the customers.

Thank you

Re: Games updates and patches

#2
Here is my take on this.

To keep things on the low side i would recommend to have anything regarding Menu, UI, HUDs etc.. in one PAK file called Gamename_UI.PAK, so when a change is needed in the menu or UI, then patching shouldn't be a problem in regards to file sizes. All Scaleform related things shouldn't take more than 50 MB's. I always split Scaleform stuff from GameData.PAK in regards to patches (i always use the Textures directory under Libs\UI to store anything related to Menu, UI etc...). Same goes for anything regarding Particles or Textures associated with particles. There is always going to be changes with particles in terms of optimizations. So split the Particles directory out of GameData.PAK too and call it Gamename_Particles.PAK or something.

I always split out Music and Audio too and create a Gamename_Music.PAK and Gamename_Audio.PAK. To keep things simple again with patching, no point in patching both Sounds and Music if only one simple sound file needs changes is there? That only increases patching size.

I use a custom PAK build script using the Resource Compiler batch jobs when dealing with this, so everything is automatic. Nice and tidy.

To solve the crashes ... Do you have checkpoints in your game? What type of changes have you made? You can always use GameTokens to save data or points in gameplay, or use XML. Then restart at checkpoints instead?

Re: Games updates and patches

#3
Hi Laviz, thank you.
I'm getting this error:
err.jpg
err.jpg (24.11 KiB) Viewed 412 times

At the end of the game.log there are this: (there are many of them)
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '338'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '343'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '344'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '345'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '347'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '349'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '11'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '73'
<20:40:36> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '74'
<20:40:36> [Warning] [flow] Flow graph has changed between save-games
<20:40:36> [Warning] !BeginGroup( Local ) not found

To save the game I'm using the save node that is triggered when the player complete an action. Here an example:
flow.jpg
flow.jpg (150.25 KiB) Viewed 412 times


The changes I've made are: some flowgraphs and materials changed.
Can you help me?

Re: Games updates and patches

#4
Yeah probably crashed due to Flowgraph changes where what is stored in the savegames are different from what you are currently using, hence the crash. I would advice users that changes made during early access and development are quite common and that they can't expect saves to be perfect during development. Perhaps saving progress should be implemented at the very end of the dev cycle? Is it crucial to have right now?

Re: Games updates and patches

#5
Yes it is crucial now because my game is finished in all aspects and I'm ready to release it on Steam. It will be released as completed, not early access.
The savegames works well until I change something in the level for an update. I'm working hard but I can't find a solution.

Re: Games updates and patches

#6
After many trying, I found this:
If I load a savegame, the game crashes even If I don't change things in my level.
I've only opened the level in editor,then saved it and exported to the engine. That causes a crash when you load a savegame done previously.
Can anyone help me to understand what causes that?

In game.log there are errors similar to this:
<16:14:19> [Warning] [flow] Flowgraph '' has changed between save-games. Can't resolve node named '3'

And similar to this:
<16:14:19> [Warning] [LoadGame] Missing Entity ID=2625

Is there a way to discover what is the node named "3" and the "entity ID=2625" ?

Re: Games updates and patches

#9
So I think about this problem;
So the savegame feature is obviously saving the states of the flowgraph modules in your level...

Cause;
When you change a flowgraph I'm guessing all the node and state ID's are regenerated. Hence the missing Node ID's.

So along these lines, anything the flowgraph uses in its own states (any objects or entities registered or variables in flowgraph or in the game code that is used by flowgraph) is serialized into the save file.

Ideas;
This means essentially your only options would be;
1. Modify the savegame method to serialize specific objects of your choosing (not part of flowgraph per say), and completely abandon flowgraph states on save and set them up manually on load.
2. Create a savegame "updater" that can read specific saved states and required variables from the save game file on pre-load to convert save games to a new format.

Thoughts;
I feel like there should (or maybe is already) a way to specifically disable serialization of flowgraph modules in savegame files, since you can flowgraph your own save/load mechanism that way.
I'm guessing the current save/load feature is a quick mock up for GameSDK development, as it is an unfinished product, maybe they wanted to wait until they knew exactly what they were going to save etc etc.

Conclusion;
Either way, to disable the in-built flowgraph serialization of each level you will probably end up having to modify the CRYENGINE/GameSDK code as above (If possible ,this is your best option) or;
Implement your own save system and ignore the built-in GameSDK savegame system altogether (possible via flowgraph probably, but may extend project time more dramatically then the first option depending on your savegame complexity).

If I were you, I would implement my own save/load system (in C++ for me :P). You will then choose exactly what gets saved, how you save, when you save, way more control/possibility. But I am sure you could put together something with flowgraph. Just you will have to forgo the the in-built savegame feature.
Beginner Guides | My GitHub | Splash Plugin | CMakeLists Gen | C++ Project Templates

Re: Games updates and patches

#10
uniflare wrote:So I think about this problem;
So the savegame feature is obviously saving the states of the flowgraph modules in your level...

Cause;
When you change a flowgraph I'm guessing all the node and state ID's are regenerated. Hence the missing Node ID's.

So along these lines, anything the flowgraph uses in its own states (any objects or entities registered or variables in flowgraph or in the game code that is used by flowgraph) is serialized into the save file.

Ideas;
This means essentially your only options would be;
1. Modify the savegame method to serialize specific objects of your choosing (not part of flowgraph per say), and completely abandon flowgraph states on save and set them up manually on load.
2. Create a savegame "updater" that can read specific saved states and required variables from the save game file on pre-load to convert save games to a new format.

Thoughts;
I feel like there should (or maybe is already) a way to specifically disable serialization of flowgraph modules in savegame files, since you can flowgraph your own save/load mechanism that way.
I'm guessing the current save/load feature is a quick mock up for GameSDK development, as it is an unfinished product, maybe they wanted to wait until they knew exactly what they were going to save etc etc.

Conclusion;
Either way, to disable the in-built flowgraph serialization of each level you will probably end up having to modify the CRYENGINE/GameSDK code as above (If possible ,this is your best option) or;
Implement your own save system and ignore the built-in GameSDK savegame system altogether (possible via flowgraph probably, but may extend project time more dramatically then the first option depending on your savegame complexity).

If I were you, I would implement my own save/load system (in C++ for me :P). You will then choose exactly what gets saved, how you save, when you save, way more control/possibility. But I am sure you could put together something with flowgraph. Just you will have to forgo the the in-built savegame feature.


Thank you for your kind help.
Do you know why this problem appears only in 1 of my levels? The bigger one that contains a lot of objects/entities.
The other levels doesn't have this problem. I can add, change, delete flowgraphs/entities and the old savegame works always.
I think that there is something in the bigger level that causes the problem.
Your solutions to create a new save system will require too much time to be implemented. My game is all based on the stock save system so implementing a new one would mean the complete rebuild of all actions in the game. This is not actuable.
Do you have any idea why the save system is broken only in 1 level?
I can attach the log and dmp files if it can helps.

Thank you

Who is online

Users browsing this forum: No registered users and 1 guest