OK, I’m revisiting this because although a couple of solutions have been found, it has been pointed out that they are a bit clunky in how they work.
So let me first recap the story so far. NoSloppy, Olivier, apologies if I get some of this wrong, or grasp a few sticks by the wrong end, but this is my understanding of where we’re at…
We started with this at the top of the prop outside the prop class which neatly toggled between two blade arrays:
#ifdef SABERSENSE_ARRAY_SELECTOR
// Toggle switch between blade arrays manually.
// This goes in the prop file, but not in the prop class.
struct SabersenseArraySelect {
static int return_value;
float id() { return return_value; }
static void toggle() {
return_value = NO_BLADE - return_value;
}
};
int SabersenseArraySelect::return_value = 0;
#undef BLADE_ID_CLASS_INTERNAL
#define BLADE_ID_CLASS_INTERNAL SabersenseArraySelect
#undef BLADE_ID_CLASS
#define BLADE_ID_CLASS SabersenseArraySelect
#endif
With this as the event handler:
// Manual Array Selector.
// Cycles through blade arrays regardless of BladeID status.
#ifdef SABERSENSE_ARRAY_SELECTOR
case EVENTID(BUTTON_POWER, EVENT_THIRD_SAVED_CLICK_SHORT, MODE_OFF):
SabersenseArraySelector::toggle();
FindBladeAgain();
return true;
#endif
But we wanted to be able to cycle between multiple arrays. In trying to do this, it was thought that the code below (along with changing toggle to cycle in the event handler) would cycle to the next array in the list But unfortunately, although it compiles, it doesn’t actually work - pressing the button does nothing.
#ifdef SABERSENSE_ARRAY_SELECTOR
struct SabersenseArraySelector {
static int return_value; // Tracks the current array index.
float id() {
return return_value;
} // Return the current array index.
static void cycle() {
return_value = (return_value + 1) % NUM_BLADES;
}
};
int SabersenseArraySelector::return_value = 0; // Start with the first array (index 0).
#undef BLADE_ID_CLASS_INTERNAL
#define BLADE_ID_CLASS_INTERNAL SabersenseArraySelector
#undef BLADE_ID_CLASS
#define BLADE_ID_CLASS SabersenseArraySelector
#endif
I managed to build on the above to make it work, but in order to do so, I had to add a separate define in the config to tell the system how many arrays there were. This too was a bit clunky.
Then NoSloppy found a way to make it work by adding some code inside the class, but to do that, quite a big chunk of code had to be replicated from prop_base, which is also slightly clunky.
I should also add that a lot of water was muddied when I wanted to make the system play confirmation arrayx.wav files, but we (well, NoSloppy and the prof really) managed to finally solve that one separately.
Which leads us back to searching for an elegant solution to performing the actual array switch. It seems to me the key is somewhere around the
return_value = (return_value + 1) % NUM_BLADES;
line, in so far as we need to figure out how the system can keep track of which array it’s on and where it’s going (and ideally save it so it survives reboots), but I’ve spent the afternoon experiementing without much success.
So if anyone who can still see the wood for the trees in all this (I’m kinda too close to it to see anything clearly any more! LOL! I’ll revisit it after a good night’s sleep) and something leaps out as clearly wrong, feel free to share your thoughts. 
Thanks in advance as always.