So here's an idea for extreme map compression. The compressed maps'll be stored in a list, and need to be decompressed by a decompression routine. This'll create an array of tiles; either in an array, or on the graph screen.
The storage format is basically a stream of single digits packed into real numbers packed into a list. Each digit encodes a command, or is an argument to a command. The most basic commands would be something like "move to the next location and draw tile 1", or "move to the next location and draw an empty tile". You'll need one of these commands for every kind of tile you have. With these commands, you can already encode an entire map. If the map contains lots of empty space, the "Goto" command is very useful — it moves the current location to some spot on the map. "Skip" would tell the decompresser to take the next digit, and skip that many spots ahead — also useful if there is a lot of empty space. "Repeat" would tell the decompresser to take the next digit, and repeat the digit after that that many times. "Loop" and "End" would allow looping. "ChangeDir" would switch the movement direction between horizontal and vertical; combined with "Goto" and "Repeat", you could make vertical "walls" easily. "Recall" would allow recalling some data stored in the beginning of the map, allowing you to reuse parts of the map, or something.
So once you have the list of digits, you can easily pack these digits into reals. You can store 14 base-10 digits in a real number, and then you can put as many reals as you like in a list. Then you just need to program the decompresser to do what it needs to do, which changes depending on the game.
This method probably pays off most for large maps with several types of tiles — for, say, a 8x16 map with two kinds of tiles, all the extra commands are pretty useless, seeing as you can store the whole thing in 3 list elements anyway. This compression method also doesn't pay off if you're storing the maps in the program itself. It really only helps if you pack many maps into a large custom list; this would also allow you to modify maps or release new map packs without modifying the program.
I'm not working on a project that requires maps, so I haven't tried this out yet. Think it'll work? Like the idea?