For most scripts I prefer to make them FFC scripts for this reason. That way the code is only running on screens with the blocks where it will be needed, where an FFC with the script is placed down. The more you pile onto the global, the slower it's going to become, so it's better to reserve it for events that are...global.
I disagree wholeheartedly here. You risk far more with general timing bugs than with slowdown issues; plus, wasting ffcs is not very viable if you want ghosted enemies and weapons, or other effects. It's also tedious and easy to miss screens, adding gameplay bugs into quests.
In general, you need only iterate combos per layer once per frame, then do whatever checks you want to do, per combo; rather than adding additional iteration instances, however, additional iterations are more practical in some cases.
In this case, you need only iterate once per screen,
on screen transition, so a global approach risks nothing.
Anyway, this would likely be the most efficient way to do it:
if (changedScreen() )
{
for ( q = 0; q < 176; ++q )
{
if ( Link->Item[I_RED_SWITCHES] )
{
if ( Screen->ComboD[q] == CMB_BLANK_RED_BLOCK ) { Screen->ComboD[q] = CMB_RED_BLOCK; }
}
}
}