Обратная разработка игры Another World

Вероятно, все, кто застал золотую пору игр под DOS, помнит и Another World. Ну, а ежели кому-то надобно освежить память, так извольте-с. Буквально сегодня в частном блоге программиста Фабиена Сэнгларда была опубликована статья о его копаниях в исходниках игры. Исходниках, которые никогда не публиковались под какой-либо открытой лицензией и которые даже не утекали никуда. Сэнглард просто провёл обратную разработку.

Преинтересное чтение для программистов, да и не только.

Например, выяснилось, что автор игры Эрик Шаи написал очень элегантную, в техническом смысле, систему, в основе которой лежала виртуальная машина, интерпретирующая байт-код в режиме реального времени и генерирующая полноэкранную векторную графику.

Собственно, сам исполняемый файл Another.exe и представлял собой эту виртуальную машину.

«Байт-код выполняет все функции, связанные с игровой логикой с помощью собственных кодов операции, но для более «тяжёлых» операций, таких как рисование, воспроизведение музыки, звука и управления прочими активами, использует системные вызовы», — пишет автор исследования.

Использование методики виртуальной машины значительно облегчила задачу по портированию игры на другие платформы. Собственно говоря, она была изначально разработана на Amiga 500 для нескольких платформ сразу: Amiga, Atari ST, Apple IIGS и DOS, а впоследствии пережила безболезненное портирование на многие другие.

Интересно также, что знаменитые задники «рендерились» — как и вся остальная графика в игре, они были векторными. Например, знаменитый «первый экран» насчитывал целых 981 полигон.

Некоторые хитрые трюки с памятью, предпринятые ради ускорения создания самой игры, позволили впоследствии относительно безболезненно заменить все фоны. Как известно, в 2006 году Шаи перевыпустил свою старую игру с улучшенной графикой. Основное улучшение, впрочем, пришлось на перерисованные (от руки, на сей раз) задники, которые с помощью всё того же «хака», подгружались напрямую с диска в соответствующий буфер (background buffer).

На приведённом выше скриншоте видна разница: на верхней части — оригинал, ниже — улучшенный вариант.

Что будем искать? Например,ChatGPT

Мы в социальных сетях