Something wrong with array/index

I'm experimenting with an effect pedal project I found on GitHub,
https://github.com/n3ws/fvduino/blob/main/fvduino.ino

Default values are not loaded correctly, a comment in the code says :
// something wrong with algo index, set to zero
// user will have to edit and save,

  // load patch settings from EEPROM
  uint16_t eeAdress = PATCH_EE_ADDR;
  for (uint8_t i = 0; i < NPATCH; ++i) {
    EEPROM.get(eeAdress, patch_data[i]);
    if (patch_data[i].algorithm >= NALGO) {
      patch_data[i].algorithm = 0;   // something wrong with algo index, set to zero
      changed[i] = true;             // user will have to edit and save
    

I think this part is the algo index:

// Sensible default settings for each algorithm
typedef struct {
  uint8_t vol;
  uint8_t mix;
  uint8_t par1;
  uint8_t par2;
  uint8_t par3;
} Default;

// Keep everything together in a single array
typedef struct {
  Description desc;
  Default def;
  uint8_t* const prog_addr;
} AlgoDatum;

const AlgoDatum algodata [] PROGMEM = {

  // Reverbs

  {{"SprgRev+Trem",  "Revrb", "Rate", "Depth"}, {17,  8, 128, 128, 128}, (uint8_t *)spring_verb},
  {{"Tremolo +Rev", "Revrb", "Rate",  "Level"}, {17,  8, 128, 128, 128}, (uint8_t *)GA_DEMO_TREM},
 
  {{"Room",          "Pre",   "Time",  "Damp" }, {17,  8, 128, 128, 128}, (uint8_t *)K3_V1_1_Room},
  {{"Hall",          "Pre",   "Time",  "Damp" }, {17,  8, 128, 128, 128}, (uint8_t *)K3_V1_0_Hall},
  {{"Gated Reverb",  "Pre",   "GateT", "Damp" }, {17,  8, 128, 128, 128}, (uint8_t *)K3_V1_3_GATED},

can anyone see anything wrong with this?

How was that determined?

They should all have the same values as algo 1

You didn't show how NALGO was calculated.
You didn't show the declaration of the patch_data array or how it was initialized.
You didn't show the Description structure.

NALGO

// The space for printing algo number on screen is two characters
// In practice, about 80 algorithms is the max that fits on atmega328 32k memory
const uint8_t NALGO = min(99, sizeof(algodata) / sizeof(AlgoDatum));

this part doesn't work correctly

// Write algorithm default settings
Default tmp_d;
for (uint8_t i = 0; i < NALGO; ++i) {
  memcpy_P(&tmp_d, &(algodata[i].def), sizeof(Default));
  EEPROM.put(ALGO_EE_ADDR + i * sizeof(Default), tmp_d);
  delay(10);

it only loads the first algorithms default settings, the rest are maxed out

const AlgoDatum algodata [] PROGMEM = {

  {{"Hall",           "Pre-Dly", "Time",  "Dampen" },  {15, 10, 128, 128, 128}, (uint8_t *)K3_V1_0_Hall},
  {{"Room",           "Pre-Dly", "Time",  "Damp" },    {15, 10, 128, 128, 128}, (uint8_t *)K3_V1_1_Room},
  {{"Plate Reverb",   "Pre-Dly", "Time",  "Damp" },    {15, 10, 128, 128, 128}, (uint8_t *)K3_V1_2_PLATE},
  {{"Rep Echo/Rev",   "Delay", "Repeats", "Reverb"},   {15, 10, 128, 128, 128}, (uint8_t *)K3_V1_4_ECHO_REV},
  {{"Chorus+Reverb",  "Width", "Sweep", "Reverb"},     {15, 10, 128, 128, 128}, (uint8_t *)K3_V1_6_CHOR_REV},
  {{"Echo/Reverb2",   "Reverb", "Time", "Level"},      {15, 10, 128, 128, 128}, (uint8_t *)GA_DEMO_ECHO},
  {{"Flanger+Rev",    "Reverb", "Rate", "Depth"},      {15, 10, 128, 128, 128}, (uint8_t *)GA_DEMO_FLANGE},
  {{"Phaser+Rev",     "Reverb", "Rate",  "Width"},     {15, 10, 128, 128, 128}, (uint8_t *)GA_DEMO_PHASE},
  {{"VibraVerb",      "Reverb", "Speed", "Depth"},     {15, 10, 128, 128, 128}, (uint8_t *)GA_DEMO_VIBRATO},
  {{"Filter Verb",    "Reverb", "Sens", "Depth"},      {15, 10, 128, 128, 128}, (uint8_t *)GA_DEMO_WAH},
  patch_data[i].algorithm = 0;   // something wrong with algo index, set to zero
  changed[i] = true;             // user will have to edit and save
  if (heldTime > 1000) {

    // Digipot initial settings, saved in its EEPROM.
    // Depends on i2c_init(). Hangs setup if no pot present...
    pot_init();

    // Write algorithm default settings
    Default tmp_d;
    for (uint8_t i = 0; i < NALGO; ++i) {
      memcpy_P(&tmp_d, &(algodata[i].def), sizeof(Default));
      EEPROM.put(ALGO_EE_ADDR + i * sizeof(Default), tmp_d);
      delay(10);
      break;
    }

    // Write empty patches using the first algorithm and default settings
    memcpy_P(&tmp_d, &(algodata[0].def), sizeof(Default));
    Patch tmp_p = {0, tmp_d.vol, tmp_d.mix, tmp_d.par1, tmp_d.par2, tmp_d.par3};

    for (uint8_t i = 0; i < NPATCH; ++i) {
      EEPROM.put(PATCH_EE_ADDR + i * sizeof(Patch), tmp_p);
      delay(10);
    }

    // Set 8 patches as default
    EEPROM.put(P_IN_USE_EE_ADDR, (uint8_t)8);

      rainbow(2);
      pixels.show();

  }

  // load patch settings from EEPROM
  uint16_t eeAdress = PATCH_EE_ADDR;
  for (uint8_t i = 0; i < NPATCH; ++i) {
    EEPROM.get(eeAdress, patch_data[i]);
    if (patch_data[i].algorithm >= NALGO) {
      patch_data[i].algorithm = 0;   // something wrong with algo index, set to zero
      changed[i] = true;             // user will have to edit and save
    }
    if (patch_data[i].vol > 20)
      patch_data[i].vol = 20;
    if (patch_data[i].mix > 100)
      patch_data[i].mix = 100;
    eeAdress += sizeof(Patch);
  }

  current_patch = 0;

  // get patches_in_use from EEPROM
  EEPROM.get(P_IN_USE_EE_ADDR, patches_in_use);
  if (patches_in_use < 2)
    patches_in_use = 2;
  if (patches_in_use >= NPATCH)
    patches_in_use = NPATCH;

  // copy current patch strings for ui
  uint8_t algo = patch_data[current_patch].algorithm;
  memcpy_P(&current_algo_strings, &(algodata[algo].desc), sizeof current_algo_strings);

  // send current patch algorithm to FV-1
  send_algo();
  set_patch();

  // print initial gui
  draw_panel();
  draw_patch();

}