Did go with JSON after all, here's the updated code for those wondering. Thanks to jgodfrey for his help! The _savedata is declared in an empty dictionary on load from the global.
func _save_data_update(): ### save global variables to dictionary
_saveData = {
"_savedScene" : get_tree().current_scene.filename,
"_eventLogArray" : _eventLogArray,
"_lightsArray" : _lightsArray,
"_holdArray" : _holdArray,
"_TOP_STAMINA" : _TOP_STAMINA,
"_TOP_WALKSPEED" : _TOP_WALKSPEED,
"_TOP_RUNSPEED" : _TOP_RUNSPEED,
"_PLAYER_LUCK" : _PLAYER_LUCK,
"_ENEMY_LUCK_LIMIT" : _ENEMY_LUCK_LIMIT,
"_staminaJar" : _staminaJar,
"_isExhausted" : _isExhausted,
"_destTarget" : _destTarget,
"_treasurePool" : _treasurePool,
"_playerItems" : _playerItems,
"_storyItems" : _storyItems,
"_keysRemaining" : _keysRemaining
}
return _saveData
func _save_function(): ## json data save function
var _myFile = File.new()
_myFile.open(_GAMESAVE, File.WRITE)
_save_data_update()
_myFile.store_line(to_json(_saveData))
_myFile.close()
func _load_function(): ## json data load function
var _saveFile = File.new()
_saveFile.open(_GAMESAVE,File.READ)
var _text = _saveFile.get_as_text()
_saveData = parse_json(_text)
_savedScene = str(_saveData._savedScene)
_eventLogArray = _saveData._eventLogArray
_lightsArray = _saveData._lightsArray
_holdArray = _saveData._holdArray
_TOP_STAMINA = _saveData._TOP_STAMINA
_TOP_WALKSPEED = _saveData._TOP_WALKSPEED
_TOP_RUNSPEED = _saveData._TOP_RUNSPEED
_PLAYER_LUCK = _saveData._PLAYER_LUCK
_ENEMY_LUCK_LIMIT = _saveData._ENEMY_LUCK_LIMIT
_staminaJar = _saveData._staminaJar
_isExhausted = _saveData._isExhausted
_destTarget = _saveData._destTarget
_treasurePool = _saveData._treasurePool
_playerItems = _saveData._playerItems
_storyItems = _saveData._storyItems
_keysRemaining = _saveData._keysRemaining
var _nowLoaded = get_tree().change_scene(_savedScene) ### load scene