anchor.diff:  
   	var/needs_update = savefile_needs_update(S)
   	if(needs_update == -2)		//fatal, can't load any data
  +		var/bacpath = "[path].updatebac" //todo: if the savefile version is higher then the server, check the backup, and give the player a prompt to load the backup
  +		if (fexists(bacpath))
  +			fdel(bacpath) //only keep 1 version of backup
  +		fcopy(S, bacpath) //byond helpfully lets you use a savefile for the first arg.
   		return FALSE
   
   	//general preferences
  
positive.code: 			pref_species = new newtype
  
  	scars_index = rand(1,5)
  
  	if(!S["features["mcolor"]"] || S["features["mcolor"]"] == "#000")
  		WRITE_FILE(S["features["mcolor"]"]	, "#FFF")
  
  	if(!S["feature_ethcolor"] || S["feature_ethcolor"] == "#000")
  		WRITE_FILE(S["feature_ethcolor"]	, "9c3030")
  
  	//Character
  	READ_FILE(S["real_name"], real_name)
  
negative.code: 	READ_FILE(S["all_quirks"], all_quirks)
  
  	//try to fix any outdated data if necessary
  	//preference updating will handle saving the updated data for us.
  	if(needs_update >= 0)
  		update_character(needs_update, S)		//needs_update == savefile_version if we need an update (positive integer)
  
  	//Sanitize
  	real_name = reject_bad_name(real_name)
  	gender = sanitize_gender(gender)
  	body_type = sanitize_gender(body_type, FALSE, FALSE, gender)
  