Маленькие секреты большой экономии Страница 1 из 3

Почему 16 байт достаточно для сохранения игры, и другие мелочи
Пятьдесят и сто лет спустя у программистов будут всё те же проблемы: им будет очень сильно не хватать объёма доступной памяти для реализации всего, что хочется.

25 лет назад игровые картриджи содержали 64—128 килобайтов памяти, но каким-то образом этого объёма хватало, чтобы уместить игру на десятки часов геймплея. Сегодня 128 килобайт — это размер маленькой JPEG-картинки, а о том, что доступно в современном бытовом компьютере, в эпоху Super Mario Bros. даже не приходилось мечтать.

Там были и музыка, и звуки, и неплохая по тем временам графика. Да, некоторое можно было делать с помощью того, что уже было в игровой приставке или компьютере, но в основном приходилось идти на различные ухищрения, чтобы уместить в эти скромные возможности огромное количество звуков, музыки, анимации, изображений и игровых алгоритмов. Как же это удавалось разработчикам тех лет?

Основной секрет: игры писались на ассемблере, то есть приходилось почти напрямую указывать процессору, какие операции нужно производить. Это и причина, и следствие: было бы трудно работать над крупными проектами, написанными на таком низком уровне.

Другая маленькая деталь: многое программное обеспечение нужно писать так, чтобы его мог править и исправлять другой программист после тебя. Разработчикам игр под Atari 2600, Sega Master System, NES и SNES и даже под более поздние консоли конца 90-х типа PlayStation 1 или Nintendo 64, беспокоиться было не о чем: зачем кому-то за пределами команды знать, как работает продукт? После выпуска ничего уже не исправить, патч на картридж не накатишь. Наоборот, было предпочтительнее избегать всяких хакеров, выпускавших чит-системы, например, Game Genie. Игры имели почти полный контроль над консолью безо всяких операционных систем, поэтому не требовалось многослойной архитектуры, которую запихивают во все современные продукты для улучшения независимости от программных и аппаратных средств.

Основные приёмы включают максимальное повторное использование кода, одна и та же функциональность использовалась снова и снова. То же самое происходило и с данными: ИИ, графикой, музыкой, звуками, их лишь незначительно изменяли для создания иллюзии разнообразия. Игры могли генерировать код и данные, нужные для исполнения, но это усложняло отладку. Избегалось использование бессмысленно больших массивов. Часто писались собственные библиотеки.





Были достоинства и у 8-битного адресуемого пространства. Если нужно записать 3 бита, теряется всего 5, а не 27, как на 32-битном процессоре. (По этой же причине 64-битные программы почти всегда крупнее 32-битных.) Битмап из 16 цветов занимает не так много места, блок из 20×20 пикселей потребует всего ½×20×20 = 200 байтов. За один цикл процессора можно обработать 2 пикселя.

Графика имела низкое разрешение и была двухмерной. Но можно было с успехом обманывать чувства с помощью псевдо-3D или 2.5D. Наиболее известным 2.5D-автосимулятором является Rad Racer 1984 года. Lotus Esprit Challenge (справа) 1992 года выглядит достаточно правдоподобно.





Элементами 2.5D известны шутеры от первого лица Doom и Wolfenstein 3D. Слева представлен фрагмент The Train: Escape to Normandy (1987 год) для Commodore 64.

Музыка генерировалась на лету, её никто не хранил в записанном виде — на это просто не хватило бы места. Иногда бывали исключения, но они лишь иллюстрируют нецелесообразность для той эпохи хранить звуки игры в виде аудиозаписи. Восьмую часть картриджа на 512 килобайт Sonic the Hedgehog, самой первой игры серии про бегающего синего ёжика из 1991 года, занимал вот этот звук длительностью в одну—две секунды. Он был нужен для того, чтобы название фирмы-издателя проигрывалось при запуске.

Примером подобной генерации музыки может быть формат MIDI, хотя игры того времени работали на куда более низком уровне. Вместо нот использовался порядок паттернов, которому нужно значительно меньше памяти. Вот пример того, чего можно добиться с помощью однобитного звука.



The Legend of Zelda, самая первая из легендарной серии про эльфоподобного мальчика в зелёном колпачке, для 1986 года была огромной игрой, которую даже пришлось умещать на дорогой катридж в целых 128 килобайт. Сегодня эта цифра звучит смешно, но игра действительно немаленькая: она состояла из одного большого надмира и двух подземелий, каждое из которых было в два раза больше надмира. Изображения кликабельны.


  • 1796
  • 30/11/2014


Поделись



Подпишись



Смотрите также