I am attempting to migrate a registry of image object data (already held in the state variable) to a new location and format within the state variable. However, when I run the function to copy over all of the data, no matter what I try I can't get the data to stick. Everything works perfectly fine until I restart the sandbox, at which point the value of my new state.VAMPIRE.Assets.AssetLibrary property is reset to an empty object. Here is the function I am using to migrate the data. I originally used a getter to access the state variable, and wasn't (excessively) stringifying all of the data, but this is my latest attempt to get it to work, to no avail: // Values of constants used in the function: // C = { // GAMENAME: "Vampire", // PAGES: { // GAME: "-Lt3Ml6LYAIgYbWB6IVq", // SplashPage: "-Lz0ONP6PmgW9T06kmiy" // } // }; // REGISTRY = { // get IMG() { return state[C.GAMENAME].Media.imgregistry; } // The old image registry I'm migrating from. // }; const migrateRegistryIMG = () => { const errorLines = []; state [ C . GAMENAME ] . Assets = state [ C . GAMENAME ] . Assets || { AssetLibrary : {}}; state [ C . GAMENAME ] . Assets . AssetLibrary = state [ C . GAMENAME ] . Assets . AssetLibrary || {}; // state[C.GAMENAME].Assets = {AssetLibrary: {}}; // (A reset button I can uncomment to ensure I'm starting fresh.) for ( const itemData of Object . values ( REGISTRY . IMG )) { const mediaObj = getObj ( "graphic" , itemData . id ); if ( mediaObj ) { const objID = JSON . stringify ( mediaObj . id ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] = {} state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . name = JSON . stringify ( itemData . name ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . type = JSON . stringify ( "image" ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . page = JSON . stringify ( _ . findKey ( C . PAGES , v => v === itemData . pageID )); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . layer = JSON . stringify ( mediaObj . get ( "layer" )); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . zIndex = JSON . stringify ( itemData . zIndex ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos = {}; state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos . top = JSON . stringify ( itemData . top ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos . left = JSON . stringify ( itemData . left ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos . height = JSON . stringify ( itemData . height ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos . width = JSON . stringify ( itemData . width ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . state = JSON . stringify ( itemData . curSrc ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . isActive = JSON . stringify ( itemData . isActive ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . activeLayer = JSON . stringify ( itemData . activeLayer ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . wasModeUpdated = JSON . stringify ( Boolean ( itemData . wasModeUpdated )); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . modes = JSON . stringify ( itemData . modes ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . srcs = JSON . stringify ( itemData . srcs ); if ( itemData . padID ) { state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . dragPads = { deltas : {}}; state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . dragPads . ids = JSON . stringify ([ itemData . padID , itemData . partnerID ]); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . dragPads . funcName = JSON . stringify ( DragPads . PadsByID [ itemData . padID ] . funcName ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . dragPads . startActive = JSON . stringify ( true ); const pad = getObj ( "graphic" , itemData . padID ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . dragPads . deltas . deltaTop = JSON . stringify ( pad . get ( "top" ) - state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos . top ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . dragPads . deltas . deltaLeft = JSON . stringify ( pad . get ( "left" ) - state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos . left ); state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . dragPads . deltas . deltaHeight = JSON . stringify ( pad . get ( "height" ) - state [ C . GAMENAME ] . Assets . AssetLibrary [ objID ] . pos . height ); } } else { errorLines . push ( `Error finding object with key ${ D . JS ( itemData . name )}` ); } } if ( errorLines . length ) D . Alert ([ "<h4>Image Conversion Errors:</h4>" , errorLines . join ( "<br>" ) ] . join ( "" )); else D . Flag ( "Image Conversion Successful!" ); } (There's also a line to set deltaWidth in dragPads, but every time I try to edit this post to include it, my edits don't stick any more than my state data does :P ) Running the above function returns no errors, and results in the desired new registry object assigned to state.VAMPIRE.Assets.AssetLibrary , with IDs as the keys and each value containing the object data (example below, showing only one entry): state . VAMPIRE . Assets . AssetLibrary = { "-LupWXX6TCU1hrUrkfbN" : { name : "WeatherMain_1" , type : "image" , page : "GAME" , layer : "walls" , zIndex : 124 , pos : { top : 520 , left : 795 , height : 1040 , width : 1590 }, state : "brightheavysnow" , isActive : false , activeLayer : "map" , wasModeUpdated : true , modes : { Active : { isForcedOn : "LAST" , isForcedState : true , lastActive : true , lastState : "brightheavysnow" }, Inactive : { isForcedOn : null , lastState : null }, Daylighter : { isForcedOn : "NEVER" , lastState : null }, Downtime : { isForcedOn : "NEVER" , lastState : null }, Complications : { isForcedOn : null , lastState : null }, Spotlight : { isForcedOn : "NEVER" , lastState : null } }, srcs : { brightlightsnow : " <a href="https://s3.amazonaws.com/files.d20.io/images/98106912/ClHOiRXtnxYmHJxozVT8rg/thumb.png?1575009896" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/98106912/ClHOiRXtnxYmHJxozVT8rg/thumb.png?1575009896</a> " , darkheavysnow : " <a href="https://s3.amazonaws.com/files.d20.io/images/98105311/05YcLo3dxPamoKBBZbhjhw/thumb.png?1575006139" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/98105311/05YcLo3dxPamoKBBZbhjhw/thumb.png?1575006139</a> " , darklightsnow : " <a href="https://s3.amazonaws.com/files.d20.io/images/98105315/jiduBVDEw_Wi7S5EGm3r4w/thumb.png?1575006145" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/98105315/jiduBVDEw_Wi7S5EGm3r4w/thumb.png?1575006145</a> " , brightheavysnow : " <a href="https://s3.amazonaws.com/files.d20.io/images/98105357/jPk43xiLgqfqmDjLvFM37w/thumb.png?1575006278" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/98105357/jPk43xiLgqfqmDjLvFM37w/thumb.png?1575006278</a> " , lightrain : " <a href="https://s3.amazonaws.com/files.d20.io/images/98105503/5Ttj1u5KoyheaxW4EOrsDg/thumb.png?1575006612" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/98105503/5Ttj1u5KoyheaxW4EOrsDg/thumb.png?1575006612</a> " , heavyrain : " <a href="https://s3.amazonaws.com/files.d20.io/images/98105500/yARovGTh6zb94eJZ6F7uNg/thumb.png?1575006606" rel="nofollow">https://s3.amazonaws.com/files.d20.io/images/98105500/yARovGTh6zb94eJZ6F7uNg/thumb.png?1575006606</a> " }, dragPads : { ids : [ "-M6OWvVnJneZe-VcEMXi" , "-M6OWvVo2ATukCAYReLG" ], funcName : "getWeatherReport" , startActive : true , deltas : { deltaTop : 0 , deltaLeft : 0 , deltaHeight : -20 , deltaWidth : -20 } } } } Everything works fine after I run migrateRegistryIMG() --- other scripts are able to access the above data, both to read and to write. However, once I restart the sandbox, all of the data disappears and state.VAMPIRE.Assets.AssetLibrary is reset to an empty object. (Curiously, the "AssetLibrary" key itself persists between sandbox restarts, even though it's created at the same time and within the same function as the rest of the data.) Is there something in my data that is preventing a proper update of the state variable? Is it possible that some issue with namespacing or the like is giving me a "state" reference to something other than the actual state variable? Any help would be very much appreciated! I've got a game coming up soon and I'd really like to solve this before then!