Underworld Ascendant

Underworld Ascendant

View Stats:
Question_505  [developer] Nov 16, 2018 @ 8:36am
Regarding the Save Game System
We are listening to the feedback you are providing on the current save game system and are looking at ways to improve it. We will have more info for you as quickly as we are able. We are definately paying attention to all of the discussions.

In the meantime, we have seen some confusion regarding the save system and want to make sure we are able to discren between feedback and bug reporting.

Here is how saves are currently designed to work:

You can save the game in Marcaul or in any of the dungeon levels. It saves your current inventory, hot bar and non-quest related things you’ve collected in the level. It does not save your current location, the state or location of enemies, the state of chests that have been looted, changes that you’ve triggered to the level (like raising the water), or any progress on quests. So loading effectively takes you to the start of the level and the beginning of the quest you were on, losing all quest progress.

The Silver Sapling allows you to save at various checkpoints through the game. When you die, you’ll respawn back at the last place you planted the Silver Sapling and all of your quest progress and the state of the level will remain. Be mindful, though, that it does not persist if you exit the play session. If you do that, then you will start at your last save point as outlined above.

If you encounter situations with save games or the Silver Sapling that are not consistent with what we’ve described above, please let us know so we can track the appropriate bugs. Thank you!

< >
Showing 106-120 of 165 comments
Doom Guy 1776 Nov 18, 2018 @ 10:23am 
Originally posted by silvertemplar:
Originally posted by Tamaster:

It's the result of choosing the wrong engine for the job.

The save system cannot save "properly" because Unity, which is a garbage engine full of bugs and issues, cannot handle saving the high amount of physics-based objects this game has in its maps. This is the reason why save system is like this and not like many other games.

Huh? Why is everyone saying this is due to Unity? Pillars of Eternity and Pathfinder:Kingmaker are made with Unity and you can save anywhere, anytime and load to exact same position with your entire group of characters . I don't see why this game can't do it too with unity.

Of course it would be possible to save all game states in Unity but it requires a decent amount of programming or a good plugin (which you can buy in the Unity Asset Store). Has been discussed in length before.
DeLastOne Nov 18, 2018 @ 10:26am 
Originally posted by silvertemplar:
Pillars of Eternity and Pathfinder:Kingmaker are made with Unity and you can save anywhere, anytime and load to exact same position with your entire group of characters . Do you really need that much more data to save your position because it is 3D ?

Yes it is a bit more than just inventory, story point and player group position. UA is way more complicated in a sense all objects needs to be save exactly to what position and state they are when the players leaves or save the game. This is probably the limit they are having. Iread on a different thread that this will then be a massive save files etc...
I do not know. But for sure it is more complicated .- But hey... they had 4 years to figured it out :)
werner Nov 18, 2018 @ 10:43am 
Originally posted by DeLastOne:
Originally posted by silvertemplar:
Pillars of Eternity and Pathfinder:Kingmaker are made with Unity and you can save anywhere, anytime and load to exact same position with your entire group of characters . Do you really need that much more data to save your position because it is 3D ?

Yes it is a bit more than just inventory, story point and player group position. UA is way more complicated in a sense all objects needs to be save exactly to what position and state they are when the players leaves or save the game. This is probably the limit they are having. Iread on a different thread that this will then be a massive save files etc...
I do not know. But for sure it is more complicated .- But hey... they had 4 years to figured it out :)

A state is basically a huge collection of data structures, you basically have to either dump the memory or you have to write some serialisation->deserialisation routine which transformes the entire data into something different (mostly in text form). Doable, but probably a load of work involved in this case.
Leonard J. Crabs Nov 18, 2018 @ 10:46am 
Originally posted by werner:
Originally posted by DeLastOne:

Yes it is a bit more than just inventory, story point and player group position. UA is way more complicated in a sense all objects needs to be save exactly to what position and state they are when the players leaves or save the game. This is probably the limit they are having. Iread on a different thread that this will then be a massive save files etc...
I do not know. But for sure it is more complicated .- But hey... they had 4 years to figured it out :)

A state is basically a huge collection of data structures, you basically have to either dump the memory or you have to write some serialisation->deserialisation routine which transformes the entire data into something different (mostly in text form). Doable, but probably a load of work involved in this case.

I am not a programmer, but for me it seems straight forward. The state of every item is known in the beginning. Every time the player interacts with an object, that needs to be stored. And in a save game file you just save the updates (which were stored in memory or a temp file while playing) and not the 10.000 object states the player never changed.
Jeroen Nov 18, 2018 @ 10:59am 
Originally posted by Leonard J. Crabs:
Originally posted by werner:

A state is basically a huge collection of data structures, you basically have to either dump the memory or you have to write some serialisation->deserialisation routine which transformes the entire data into something different (mostly in text form). Doable, but probably a load of work involved in this case.

I am not a programmer, but for me it seems straight forward. The state of every item is known in the beginning. Every time the player interacts with an object, that needs to be stored. And in a save game file you just save the updates (which were stored in memory or a temp file while playing) and not the 10.000 object states the player never changed.

I am a programmer, and yes, it is that straight forward. Every object has a position, rotation, speed, etc. Serializing them should not be a problem whatsoever, nor should it produce extremely large save files.
It is totally incomprehensible why they haven't been able to do this, apart from total incompetence. That sounds harsh, but like you said, it should be simply straight forward.
Last edited by Jeroen; Nov 18, 2018 @ 12:51pm
Mormacil Nov 18, 2018 @ 11:09am 
Originally posted by silvertemplar:
Originally posted by Tamaster:

It's the result of choosing the wrong engine for the job.

The save system cannot save "properly" because Unity, which is a garbage engine full of bugs and issues, cannot handle saving the high amount of physics-based objects this game has in its maps. This is the reason why save system is like this and not like many other games.

Pillars of Eternity and Pathfinder:Kingmaker are made with Unity and you can save anywhere, anytime and load to exact same position with your entire group of characters . Do you really need that much more data to save your position because it is 3D ?
Read that Tamaster wrote, he mentions physics based objects on which PoE is super light but UA is very heavy.
RasterMaster Nov 18, 2018 @ 11:09am 
Dear Devs,

I think that 2 Save-Options are enough:

  • the game saves at points, where you plant the silver sapling
  • and when you exit the game (Save & Exit)

It would also be satisfying having a quick-save option.

Grtnx
Last edited by RasterMaster; Nov 18, 2018 @ 11:16am
Aries Nov 18, 2018 @ 11:18am 
Originally posted by ulrich-stewering:
Dear Devs,

I think that 2 Save-Options are enough:

  • the game saves at points, where you plant the silver sapling
  • and when you exit the game (Save & Exit)

It would also be satisfying having a quick-save option.

Grtnx

I would be pleased with this kind of system too. Quicksave I don't want, it takes the excitement away 'cos it's too easy to push F5 everytime you think something bad might happen :)
Doom Guy 1776 Nov 18, 2018 @ 11:56am 
You could use xml-serialization for example, which is rather common in Unity (I've published two games myself with the engine).

Or what about good plugins from the Asset store like: https://assetstore.unity.com/packages/tools/input-management/easy-save-the-complete-save-load-asset-768

If you have bought the full license for Unity you can ask the Unity developer team how to solve certain problems like this one.

And what about the Otherside veteran devs themself, I mean if they have developed the engines back than for UU and SS how come they can't write this on their own. They should just say what exactly the problem is.

Ryan Fenton Nov 18, 2018 @ 12:21pm 
Here's what you do - you live with the fact that some aspects of an object will be reset on reloading the game (which should mostly be restored in the first frame of simulation anyway), but you still faithfully restore anything you can.

Here's an example of roughly how I'd do it with C# Unity.

Note, I'm using Profobuf-net data contracts to make it really easy to save objects

using ProtoBuf;
using ProtoBuf.Meta;

[ProtoContract]
public class SavedGameObject
{
[ProtoMember(1, IsRequired = false)]
public vector3 location;
[ProtoMember(2, IsRequired = false)]
public vector3 lookVector; //could also use a matrix or whatever.
[ProtoMember(2, IsRequired = false)]
public vector3 velocity; //Direction+magnitude.
[ProtoMember(3, IsRequired = false)]
public string ObjectTypeName; //Presuming you have a dictionary of named
//objects you can instatntiate
public enum StateEnum //Can be defined elsewhere, no problem.
{
default,
destroyed,
onFire
}
[ProtoMember(4, IsRequired = false)]
public StateEnum ObjectState; //Like burning, destroyed, etc.
[ProtoMember(5, IsRequired = false)]
public int Health;
//Add whatever else you need just like the above.
}

If you find that types like vector3 or Color32 or something else give errors on trying to save/load, then do this:

public static RuntimeTypeModel _model;

void Start()
{
...
if (!RanOnce)
{
_model = TypeModel.Create();
_model.Add(typeof(Vector2), false).Add(1, "x").Add(2, "y");
_model.Add(typeof(Vector3), false).Add(1, "x").Add(2, "y").Add(3, "z");
_model.Add(typeof(Color32), false).Add(1, "a").Add(2, "b").Add(3, "g").Add(4, "r");
RanOnce = true;
}
}

Then later, when saving a game:

using (var file = File.Create(FilePath))
{
_model.Serialize(file, CurrentSavedGame);
}

And loading a game:

using (var file = File.OpenRead(FilePath))
{
CurrentSavedGame = (UP_Scenario)_model.Deserialize(file, null, typeof(SavedGameObject));
}

You're using that _model object that supports all the types you need to save and load the games.

Then you'd need a set of functions to transition between a saved object and a runtime object, and just loop over everything to populate your runtime environment.

You could even use that as part of your method of swapping objects in any out of Unity runtime resident objects if you were implementing larger levels and streaming content.

Last edited by Ryan Fenton; Nov 18, 2018 @ 12:25pm
Ryan Fenton Nov 18, 2018 @ 12:25pm 
Note, that I'm not using XML serialization here, because that's actually a little slow to save/load large amounts of data, and has large file sizes.

Protobuf is very fast/compact, at least relatively speaking - and is MUCH better than Unity default serialization in terms of easily supporting types freely.

At least it makes things really easy for me in my projects, and is applicable outside unity quite nicely.

Doom Guy 1776 Nov 18, 2018 @ 12:35pm 
Originally posted by Ryan Fenton:
Note, that I'm not using XML serialization here, because that's actually a little slow to save/load large amounts of data, and has large file sizes.

Protobuf is very fast/compact, at least relatively speaking - and is MUCH better than Unity default serialization in terms of easily supporting types freely.

At least it makes things really easy for me in my projects, and is applicable outside unity quite nicely.

Sounds good! Have to test it in my new project "Underworld Descendant".
Ryan Fenton Nov 18, 2018 @ 12:47pm 
I always liked the idea of just creatively reversing most of the names from Ultima. It works surprisingly well:

Amitlu is the game.
Shi-ttir B Droll Is the king. (Reverse it, it works horribly)
Airasos is the land.
Selkuch the jester.
NorthCalb the noble betrayer.
...and so on.

It's oddly appropriate in how some of the Ultima names themselves seem like they were reversed.



Last edited by Ryan Fenton; Nov 18, 2018 @ 12:47pm
Doom Guy 1776 Nov 18, 2018 @ 12:52pm 
Originally posted by Ryan Fenton:
I always liked the idea of just creatively reversing most of the names from Ultima. It works surprisingly well:

Amitlu is the game.
Shi-ttir B Droll Is the king. (Reverse it, it works horribly)
Airasos is the land.
Selkuch the jester.
NorthCalb the noble betrayer.
...and so on.

It's oddly appropriate in how some of the Ultima names themselves seem like they were reversed.

Tiorrag Drachir would not be amused :)
Ryan Fenton Nov 18, 2018 @ 12:55pm 
Yeah - well Rats Kret the Txen Noitareneg would like to talk about Amitlu VII in terms of loving mockery then.
Last edited by Ryan Fenton; Nov 18, 2018 @ 12:56pm
< >
Showing 106-120 of 165 comments
Per page: 15 30 50

Date Posted: Nov 16, 2018 @ 8:36am
Posts: 165