Help saving user-modified terrain

Just going to ask before I hurt my eyes trying to cover every related topic.

I have a chunk of terrain (around 20K cells according to Terrain:CountCells()) that a player can edit and then, ideally, save their work. Does anyone have a recommendation for saving terrain? This post from 2014 sounds about like what I’m after, but links to “Dynamic Place Creation” are broken wherever I’ve found them (that thread and other places). It looks like a SavePlace method was a part of the DataModel, but it’s deprecated. Maybe the Dynamic Place materials all referenced that. Similar functionality appears to be in AssetService now (Create/SavePlaceAsync). The docs for that are very sparse as far as I can tell. Covers basics of what it does, but there are no examples and no discussion about pros/cons/alternatives. More recent posts on the forum seem to favor using DataStore with different save/compression strategies to work with the data limits. Should I try that first?

I suspect that terrain is not a good candidate for saving to DataStore (though I may be wrong). Saving terrain as a model and inserting later would be something I can wrap my head around if that’s an option. Using CreatePlaceAsync would do if it’s meant for that sort of thing and has no deal-breaker limitations. Pretty sure I could implement that approach. It sounds like CreatePlaceAsync makes a complete duplicate of the game file and stores it in my inventory. I assume that means I control access just like the original game, which is fine. I’m a bit concerned about having to update scripts in those created places if there end up being dozens or hundreds to deal with. Maybe there’s a good way to deal with that concern.

Any advice on which path I should start down with this would be much appreciated.

1 Like

Good morning. Working through this with fresh eyes and found another thread that seems helpful.

I think I have a path forward with DataStore. Comments about CreatePlaceAsync still welcome.
Any issues to consider when trying to save ~250K char DS values? Just starting to put together some tests.