Как Фараон жил в 16 мегабайтах памяти
Код, который рисует юнитов и тайлы в стратегиях конца девяностых выполнялся сотни раз за кадр, потому что был достаточно дешевый аппаратный блиттинг, но все еще был недостаточно дешев по памяти и трогал почти каждый пиксель, который игрок видел на экране. Это наверное не так важно если разрешение могло быть 640x480, как минимум на таком мониторе я первые разы играл в Фараона, и для такого кода важнее всего было уже не изящество архитектуры, а размещение данных в памяти, хотя пожалуй кому как не этим первопроходцам рассуждать об красоте архитектуры в отдельно взятых 16 мегабайтах. Игры всегда были прежде всего картинкой, чтобы не утверждали маркетологи, а хорошая картинка в древнеегипетской стратегии означает тысячи спрайтов: дома, жители, анимации по восьми направлениям, храмы, двенадцать армий врагов и монументы. Монументы так и вовсе рисовались отдельным проходом, потому что были большие и не во всякий экран влазили. В Pharaoh на диске лежит около 302 мегабайт одной только графики, а если вы распарсите ini-файл игры, то увидите там параметр RAM , по умолчанию выставленный в 15, столько примерно было на средней машине в то время. А еще был отдельный режим «мало памяти» для машин меньше 16 мегабайт, если у вас стояли скромные 14 мегабайт оперативки (как у меня), где игра принудительно переходила на 640×480 и упрощала цикл симуляции города. Стандартные средства того времени плохо подходили для задачи, когда речь шла о необходимости держать в памяти всё ненужное прямо сейчас, поэтому Impressions еще в Цезаре решили её своим собственным форматом сжатия графики, который проще всего описать как «хаки, трюки и черная магия, которая экономит оперативку». В статье разберу эти хитрости, с цифрами из реальных файлов игры и кодом из Tutankhamun - моей реимплементации Pharaoh на C. Проект был начат года три назад и вот наконец добрался до финала, т.е. понятных исходников, и если вы давно читаете мои статьи, то наверное помните, что первая из них была про реверс движка Цезаря, штош... пора разграбить и гробницы Фараонов. Читать далее
