|  | // 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;
}
 |