|  | // bumps save versions
migrations = [
  // 0 -> 1
  
  // does nothing
  save => {
  },
  // 1 -> 2
  // automatic digestion is now a subcategory, so anyone with
  // a digest time of 0 should have that unset
  save => {
    if (save.oralDigestTime == 0)
      save.oralDigestAuto = false;
    if (save.analDigestTime == 0)
      save.analDigestAuto = false;
    if (save.tailDigestTime == 0)
      save.tailDigestAuto = false;
    if (save.cockDigestTime == 0)
      save.cockDigestAuto = false;
    if (save.unbirthDigestTime == 0)
      save.unbirthDigestAuto = false;
    if (save.breastDigestTime == 0)
      save.breastDigestAuto = false;
    if (save.soulDigestTime == 0)
      save.soulDigestAuto = false;
    if (save.bladderDigestTime == 0)
      save.bladderDigestAuto = false;
    if (save.gooDigestTime == 0)
      save.gooDigestAuto = false;
    if (save.pawDigestTime == 0)
      save.pawDigestAuto = false;
    if (save.cropTransferTime == 0)
      save.cropTransferAuto = false;
    if (save.wingDigestTime == 0)
      save.wingDigestAuto = false;
  },
  // 2 -> 3
  // passive production is now written as percentage points;
  // old values won't make sense anymore, so we'll just
  // erase them
  save => {
    if (save.baseCumProduction)
      delete save.baseCumProduction;
    if (save.baseFemcumProduction)
      delete save.baseFemcumProduction;
    if (save.baseLactationProduction)
      delete save.baseLactationProduction;
    if (save.baseGasProduction)
      delete save.baseGasProduction;
    if (save.basePissProduction)
      delete save.basePissProduction;
    if (save.baseScatProduction)
      delete save.baseScatProduction;
  }
];
function migrate(save, target=null) {
  if (target == null) {
    target = migrations.length;
  }
  let version = save.version;
  if (version == undefined) {
    alert("This save is from before versioning was added. It can't be automatically updated, and it might lose some settings. Double check that everything's there! Any subsequent saves will work correctly.");
    save["version"] = migrations.length;
    return false;
  }
  if (version == 0 ) {
    alert("This save is from before v1.0. It can't be automatically migrated, so it may lose some settings. Double check the resulting character. Subsequent saves will function correctly.");
    save["version"] = migrations.length;
    return false;
  }
  if (version < target) {
    for (let x = version; x < target; x++) {
      migrations[x](save);
    }
    save.version = target;
  } else {
    return false;
  }
  return true;
}
 |