|  |  | @@ -2,6 +2,8 @@ | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const belongings = {}; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const stats = {}; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const macroDesc = { | 
		
	
		
			
			|  |  |  | name: "Fen", | 
		
	
		
			
			|  |  |  | species: "crux" | 
		
	
	
		
			
				|  |  | @@ -648,6 +650,10 @@ function initializeData() { | 
		
	
		
			
			|  |  |  | Object.keys(powerups).filter(x => powerups[x].duration !== undefined).forEach(key => activePowerups[key] = { | 
		
	
		
			
			|  |  |  | life: 0 | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | Object.entries(statTypes).forEach(([key, info]) => { | 
		
	
		
			
			|  |  |  | stats[key] = 0; | 
		
	
		
			
			|  |  |  | }); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function registerListeners() { | 
		
	
	
		
			
				|  |  | @@ -1224,44 +1230,78 @@ function save(e) { | 
		
	
		
			
			|  |  |  | function saveGame() { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | let storage = window.localStorage; | 
		
	
		
			
			|  |  |  | const save = {} | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | storage.setItem("save-version", 1); | 
		
	
		
			
			|  |  |  | save.version = migrations.length; | 
		
	
		
			
			|  |  |  | save.ownedUpgrades = ownedUpgrades; | 
		
	
		
			
			|  |  |  | save.resources = resources; | 
		
	
		
			
			|  |  |  | save.belongings = belongings; | 
		
	
		
			
			|  |  |  | save.stats = stats; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | storage.setItem("ownedUpgrades", JSON.stringify(ownedUpgrades)); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | storage.setItem("resources", JSON.stringify(resources)); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | storage.setItem("belongings", JSON.stringify(belongings)); | 
		
	
		
			
			|  |  |  | storage.setItem("save", JSON.stringify(save)); | 
		
	
		
			
			|  |  |  | } catch (e) { | 
		
	
		
			
			|  |  |  | clickPopup("Can't save - no access to local storage.", "info", [window.innerWidth / 2, window.innerHeight / 5]); | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | const migrations = [ | 
		
	
		
			
			|  |  |  | // dummy migration, because there was no version 0 | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | save => { | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | }, | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | // introduce stats | 
		
	
		
			
			|  |  |  | save => { | 
		
	
		
			
			|  |  |  | save.stats = {} | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | ] | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function migrate(save) { | 
		
	
		
			
			|  |  |  | let version = save.version; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | while (version != migrations.length) { | 
		
	
		
			
			|  |  |  | migrations[version](save); | 
		
	
		
			
			|  |  |  | version += 1; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | save.version = version; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | function load() { | 
		
	
		
			
			|  |  |  | try { | 
		
	
		
			
			|  |  |  | let storage = window.localStorage; | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | if (!storage.getItem("save-version")) { | 
		
	
		
			
			|  |  |  | return; | 
		
	
		
			
			|  |  |  | // migrate to everything in one | 
		
	
		
			
			|  |  |  | if (storage.getItem("save-version")) { | 
		
	
		
			
			|  |  |  | const save = {}; | 
		
	
		
			
			|  |  |  | save.ownedUpgrades = JSON.parse(storage.getItem("ownedUpgrades")); | 
		
	
		
			
			|  |  |  | save.resources = JSON.parse(storage.getItem("resources")); | 
		
	
		
			
			|  |  |  | save.belongings = JSON.parse(storage.getItem("belongings")); | 
		
	
		
			
			|  |  |  | save.version = 1; | 
		
	
		
			
			|  |  |  | storage.clear(); | 
		
	
		
			
			|  |  |  | storage.setItem("save", JSON.stringify(save)) | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let newOwnedUpgrades = JSON.parse(storage.getItem("ownedUpgrades")); | 
		
	
		
			
			|  |  |  | const save = JSON.parse(storage.getItem("save")); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (const [key, value] of Object.entries(newOwnedUpgrades)) { | 
		
	
		
			
			|  |  |  | migrate(save); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (const [key, value] of Object.entries(save.ownedUpgrades)) { | 
		
	
		
			
			|  |  |  | ownedUpgrades[key] = value; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let newResources = JSON.parse(storage.getItem("resources")); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (const [key, value] of Object.entries(newResources)) { | 
		
	
		
			
			|  |  |  | for (const [key, value] of Object.entries(save.resources)) { | 
		
	
		
			
			|  |  |  | resources[key] = value; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | let newBelongings = JSON.parse(storage.getItem("belongings")); | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (const [key, value] of Object.entries(newBelongings)) { | 
		
	
		
			
			|  |  |  | for (const [key, value] of Object.entries(save.belongings)) { | 
		
	
		
			
			|  |  |  | belongings[key] = value; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | 
 | 
		
	
		
			
			|  |  |  | for (const [key, value] of Object.entries(save.stats)) { | 
		
	
		
			
			|  |  |  | stats[key] = value; | 
		
	
		
			
			|  |  |  | } | 
		
	
		
			
			|  |  |  | } catch (e) { | 
		
	
		
			
			|  |  |  | clickPopup("Can't load - no access to local storage.", "info", [window.innerWidth / 2, window.innerHeight / 5]); | 
		
	
		
			
			|  |  |  | } | 
		
	
	
		
			
				|  |  | 
 |