This is an amazing game. I had to edit the starting level after loosing my EEPROM so I look into the code and notice how full is the program space.
Just as an exercise I tried to save some space. Using http://sporkforge.com/text/word_count.php I count all the "pieces" used by all levels:
BLANK BLOCK BLROT BRROT CHIPO CONLE CONRI CPUIN CPUOU HEATB HEATI HEATO HTROT HWALL LEDOF NUBDO NUBUP TLROT TRROT VTROT VWALL
21 so you cannot use 1 byte for 2 of them (ideal condition) but... since there are only 21 then you have 255-21 more replacements you can create. The same website tells me that:
Word sequences occurring in more than one place (disregarding
intermediate punctuation or numbers), and the number of occurrences:
"chipo chipo blank" 98
"chipo vwall" 88
"hwall hwall hwall" 84
"blank blank blank blank blank" 79
"vwall chipo" 75
"chipo chipo chipo chipo" 75
"vwall blank blank" 74
"blank blank vwall" 72
"hwall nubri" 70
"blank blank chipo" 67
"chipo blank blank" 64
"nuble hwall" 62
"blank vwall blank" 59
"hwall hwall hwall hwall" 56
"blank blank blank blank blank blank" 50
So I can take the first of these and in Excel create a replacement:
Then I use regex to replace the coincidences (with an app called PowerGrep):
The main idea is to replace for example A, B, C by a new value ABC, and then in runtime expand ABC to A, B, C. Of course the levels are harder to modify now, but if we really needed this space we could code a little tool to do this work automatically...
This is a really quick and dirty approach to "compressing" the levels, but it helped to reduce 5% the total program space:
Sketch uses 26782 bytes (93%) of program storage space. Maximum is 28672 bytes.
Global variables use 1392 bytes (54%) of dynamic memory, leaving 1168 bytes for local variables. Maximum is 2560 bytes.
Maybe after all this is too much hustle for just saving 5%.
Source code: https://cloudup.com/cov4C7UpBTm
Excel file: https://cloudup.com/i9BnjXFZnbu