How can I shrink it?
you can remove the - static unsigned long lastmillis = 0; - from the patterns()
and use one global unsigned long lastmillis = 0;
That will save you 4 bytes per pattern
you might reuse state as a global var instead of local statics. (might introduce some less defined behavior)
static int count = 0; idem
global vars can be used in all functions but they share state, where a static function has its scope only within the function it is defined in.
int interval = 90; => uint8_t interval = 90; use 8 bit variables where possible saves a byte per place
==> also in for (uint8_t i=0; i< 10; i++){
should get you started.