То что можно сделать неподгружаемые.
Комнаты в любом случае удобно описывать как набор октетов -- плашек 8x1 пикселей, это занимает одно слово.
Была идея сделать описание комнат в виде набора паттернов и тайлов. Паттерн -- это когда левые 4 пикселя октета такие же как правые 4 пикселя -- тогда паттерн описывается одним байтом, а вторым байтом можно указать сколько раз его повторить.
Тайлы я предполагал сделать подобным образом -- указываем номер тайла и его высоту, предполагается что тайлы будут хранится отдельно, и тайлы могут перекрываться.
Дальше я подготовил все экраны в виде набора битмапов и написал на C# программу которая раскладывает экраны на тайлы и паттерны и считает сколько все экраны и каждый в отдельности займут в памяти. Получилось в районе 35 КБ и сильно ужать этот объём уже не получалось. Напомню, нежатые комнаты занимают 70400 байт.
Потом я вернулся к анализу оригинальной программы на Atari и увидел что реально фон экрана там это "символы", т.е. тайлы размером 8x8.
Сел за переделку программы подготовки экранов, сделал так что тайлы всегда высотой 8 и начинаются только по смещениям кратным 8 -- это дало некоторое ужатие. Попробовал сделать без паттернов вообще -- ещё ужалось. Пробовал тайлы высотой 4, 12, 16 -- но это уже не дало уменьшения объёма, получается что экраны действительно оптимизированы под тайлы 8x8. После этого я уже занимался экспериментами в сторону объединения наборов тайлов между экранами.
Текущий итог -- все экраны занимают около 15 КБ -- 4400 байт на экраны в виде перечисления номеров тайлов, остальное ушло на тайлы; используется три набора тайлов.