the cutting room mirror

ru

Mega Man для DOS начинался как увлекательный проект Стивена Рознера в свободное от работы время. В конце концов, она превратилась в официально лицензированную игру Capcom. Она не является портом как одноимённой игры на NES, так и её аналога на Game Boy, потому что во многом отличается от них и идёт своим путём со своими тремя оригинальными робот-мастерами. Игру можно запустить в браузере, используя онлайн-эмулятор на сайте Internet Archive.

Неиспользованная защита от копирования#

В файлах игры есть код и графика, похожие на следы нереализованной системы защиты от копирования. Эта система показывает спрайт одного из 12 врагов и требует ввести его название, которое по идее нужно было бы найти в мануале с изображениями врагов ("FIND THE PICTURE IN THE MANUAL AND TYPE IN THE NAME"). При правильном ответе играет звук energy-collection (sound 5), а при неправильном воспроизводится звук, похожий на шум щита Volt Man'а (sound 12).

Этот скриншот был сделан путем взлома при переходе к 0x154b0 (функция, предшествующая основной функции).

Графика экрана защиты от копирования содержится в файле pass.frm.

Mega_Man_(DOS)-pass.frm-00-prompt.png

Текст сообщения хранится в виде одного спрайта.

Mega_Man_(DOS)-pass.frm-alphabet.png

А символы, которые набираются на клавиатуре, записаны как 28 спрайтов размером 8×8 px.

Изображения врагов немного отличаются от спрайтов, видимых во время игрового процесса: на экране защиты от копирования они имеют непрозрачный фон и обведены чёрной рамкой. Выбор спрайта зависит от текущего времени и определяется 12-секундным циклом. Если время оканчивается на :01, :13, :25, :37 или на :49, то выбирается BATVIRE; если на :02, :14, :26, :38 или на :50, то показывается FROGBOT и т.д.

Правильные ответы находятся в коде игры в виде массива, состоящего из двенадцати 11-байтных строк. Текст записан в кодировке 00=, 01=-, 02=A, 03=B, ..., 1b=Z.

03 02 15 17 0a 13 06 00 00 00 00 = BATVIRE
07 13 10 08 03 10 15 00 00 00 00 = FROGBOT
14 06 18 06 13 00 13 02 15 00 00 = SEWER RAT
11 0a 13 02 0f 09 02 00 00 00 00 = PIRANHA
06 06 0d 01 06 04 15 13 0a 04 00 = EEL-ECTRIC
13 02 11 15 10 13 03 10 15 00 00 = RAPTORBOT
0a 0f 14 06 04 15 10 03 10 15 00 = INSECTOBOT
14 11 1a 05 13 10 03 10 13 08 00 = SPYDROBORG
14 06 0f 15 13 1a 00 03 06 06 00 = SENTRY BEE
05 13 0a 0d 0d 00 11 13 06 14 14 = DRILL PRESS
02 13 0e 1a 00 02 0f 15 00 00 00 = ARMY ANT
02 14 14 06 0e 03 0d 06 13 00 00 = ASSEMBLER

Неиспользованные фоновые тайлы#

В BLK-файлах записаны тайлы фонов для каждого уровня. Игра использует не все из них.

Все тайлы ниже показаны с 1-битовыми масками, определяющими тип отрисовки каждого пикселя (на переднем или на заднем плане). В таблицах также приведены некоторые использованные тайлы, которые внешне схожи с неиспользованными.

SECUR.BLK#

Неисполь-
зованные

Исполь-
зованные

Комментарии

Mega_Man_(DOS)-secur.blk-2f.png Mega_Man_(DOS)-secur.blk-2f-mask.png

Mega_Man_(DOS)-secur.blk-34.png Mega_Man_(DOS)-secur.blk-34-mask.png

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

SONIC.BLK#

Неисполь-
зованные

Исполь-
зованные

Комментарии

Mega_Man_(DOS)-sonic.blk-18.png Mega_Man_(DOS)-sonic.blk-18-mask.png
Mega_Man_(DOS)-sonic.blk-19.png Mega_Man_(DOS)-sonic.blk-19-mask.png

Mega_Man_(DOS)-sonic.blk-17.png Mega_Man_(DOS)-sonic.blk-17-mask.png

Тайлы травы 17, 18 и 19 являются копиями тайлов 08, 09 и 0a из SECUR.BLK, но только первый из них используется в SONIC.BLK.

VOLT.BLK#

VOLT.BLK весит больше, чем любой другой BLK-файл в папке игры, и содержит 216 тайлов. На уровне Volt Man'а используются все из них до единого.

DYNA.BLK#

Неисполь-
зованные

Исполь-
зованные

Комментарии

Mega_Man_(DOS)-dyna.blk-32.png Mega_Man_(DOS)-dyna.blk-32-mask.png
Mega_Man_(DOS)-dyna.blk-33.png Mega_Man_(DOS)-dyna.blk-33-mask.png

Mega_Man_(DOS)-dyna.blk-36.png Mega_Man_(DOS)-dyna.blk-36-mask.png
Mega_Man_(DOS)-dyna.blk-37.png Mega_Man_(DOS)-dyna.blk-37-mask.png

Тайлы лестницы вверх и вниз 32 и 33 не используются. Используются их потолочные аналоги 36 и 37. Лестница выполняет исключительно декоративную функцию, так как плитки не имеют собственных коллизий.

Mega_Man_(DOS)-dyna.blk-55.png Mega_Man_(DOS)-dyna.blk-55-mask.png
Mega_Man_(DOS)-dyna.blk-59.png Mega_Man_(DOS)-dyna.blk-59-mask.png

Неиспользованные тайлы 55 и 59 выглядят так, будто они предназначены для соединения на потолке, образуя своего рода купол:
Mega_Man_(DOS)-dyna.blk-55.pngMega_Man_(DOS)-dyna.blk-59.png.

WILEY.BLK#

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

Неисполь-
зованные

Комментарии

Mega_Man_(DOS)-wiley.blk-1c.png Mega_Man_(DOS)-wiley.blk-1c-mask.png

Тайл 1c идентичен тайлу 59 в SONIC.BLK.

Mega_Man_(DOS)-wiley.blk-20.png Mega_Man_(DOS)-wiley.blk-20-mask.png

Тайл 20 идентичен тайлу 5e в SONIC.BLK и обладает тем же антигравитационным свойством.

Mega_Man_(DOS)-wiley.blk-3c.png Mega_Man_(DOS)-wiley.blk-3c-mask.png

Тайл 3c идентичен тайлу 8a в SONIC.BLK. Графика идентична 14 в WILEY.BLK и 13 в SONIC.BLK, но свойства карты тайлов разные. Это ложная стена, через которую вы можете пройти, она присутствует на уровне Sonic Man, но отсутствует на уровне Вайли.

Mega_Man_(DOS)-wiley.blk-4f.png Mega_Man_(DOS)-wiley.blk-4f-mask.png

Тайл 4f идентичен тайлу 4f в SONIC.BLK.

Mega_Man_(DOS)-wiley.blk-50.png Mega_Man_(DOS)-wiley.blk-50-mask.png

Тайл 50 идентичен тайлу af в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-51.png Mega_Man_(DOS)-wiley.blk-51-mask.png

Тайл 51 идентичен тайлу c2 в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-52.png Mega_Man_(DOS)-wiley.blk-52-mask.png

Тайл 52 идентичен тайлам 5f в WILEY.BLK и 03 в VOLT.BLK (другие тайлы-триггеры с такой же графикой) и графически идентичны нетриггерным тайлам 5a в WILEY.BLK и c3 в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-53.png Mega_Man_(DOS)-wiley.blk-53-mask.png

Тайл 53 идентичен тайлу c7 в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-54.png Mega_Man_(DOS)-wiley.blk-54-mask.png

Тайл 54 идентичен тайлу cb в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-58.png Mega_Man_(DOS)-wiley.blk-58-mask.png

Тайл 58 идентичен тайлу cf в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-59.png Mega_Man_(DOS)-wiley.blk-59-mask.png

Тайл 59 идентичен тайлу 02 в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-5b.png Mega_Man_(DOS)-wiley.blk-5b-mask.png

Тайл 5b идентичен тайлу 04 в VOLT.BLK.

Mega_Man_(DOS)-wiley.blk-64.png Mega_Man_(DOS)-wiley.blk-64-mask.png

Тайл 64 идентичен тайлу 01 в DYNA.BLK. (Вероятно, половина анимации исчезающего блока.)

Mega_Man_(DOS)-wiley.blk-65.png Mega_Man_(DOS)-wiley.blk-65-mask.png

Тайл 65 идентичен тайлу 02 в DYNA.BLK. (Вероятно, половина анимации исчезающего блока.)

Mega_Man_(DOS)-wiley.blk-66.png Mega_Man_(DOS)-wiley.blk-66-mask.png

Тайл 66 идентичен тайлу 07 в DYNA.BLK.

Mega_Man_(DOS)-wiley.blk-69.png Mega_Man_(DOS)-wiley.blk-69-mask.png

Тайл 69 идентичен тайлу 10 в DYNA.BLK.

Mega_Man_(DOS)-wiley.blk-6a.png Mega_Man_(DOS)-wiley.blk-6a-mask.png

Тайл 6a идентичен тайлу 11 в DYNA.BLK.

Mega_Man_(DOS)-wiley.blk-6c.png Mega_Man_(DOS)-wiley.blk-6c-mask.png

Тайл 6c идентичен тайлу 13 в DYNA.BLK.

Mega_Man_(DOS)-wiley.blk-8c.png Mega_Man_(DOS)-wiley.blk-8c-mask.png

Тайл 8c идентичен тайлу 4a в DYNA.BLK.

Mega_Man_(DOS)-wiley.blk-8f.png Mega_Man_(DOS)-wiley.blk-8f-mask.png

Тайл 8f идентичен тайлу 4d в DYNA.BLK.

Mega_Man_(DOS)-wiley.blk-90.png Mega_Man_(DOS)-wiley.blk-90-mask.png

Тайл 90 идентичен тайлу 4e в DYNA.BLK.

Mega_Man_(DOS)-wiley.blk-91.png Mega_Man_(DOS)-wiley.blk-91-mask.png

Тайл 91 идентичен тайлу 4f в DYNA.BLK и обладает тем же антигравитационным свойством.

Mega_Man_(DOS)-wiley.blk-92.png Mega_Man_(DOS)-wiley.blk-92-mask.png

Тайл 92 уникален для WILEY.BLK и не используется. Похоже, он принадлежит циферблатам и барабанам мейнфреймов в конце уровня.

Неиспользуемые свойства тайла карты#

Каждый тайл карты имеет набор связанных свойств, хранящихся в файле .BLK вместе с графикой фрагмента, которые определяют такие вещи, как то, является ли тайл твёрдым и наносит ли урон при касании. Некоторые значения свойств определяют поведение, которое не используется ни на одной из карт игры.

Трение на земле#

Одно из свойств тайла — это величина трения, которая должна применяться, когда Мегамен находится на земле и меняет направление или катится к остановке. Существует 8 возможных тегов трения, от 0 до 7, представляющих значения трения от 1/16 до 16, но используется только тег 7, максимальное трение.

Значения трения, по-видимому, ограничены в другом месте кода, из-за чего тег 7 (16 единиц) на практике ведет себя так же, как тег 6 (8 единиц). В игре не используются субпиксели. Значение трения 1/n реализовано путем применения 1 единицы трения каждые n кадров. Дробные значения трения действительно очень скользкие.

На следующем изображении показано, как выглядит ходьба по каждому из этих маркеров. В каждом ряду используется один и тот же ввод: удерживать кнопку вправо в течение 12 кадров, затем кнопку влево в течение 16 кадров, а затем ничего не нажимать, пока Мегамен не остановится. Значения трения, сверху вниз, следующие:

0

1/16 единицы

неиспользовано

1

1/8 единицы

неиспользовано

2

1/4 единицы

неиспользовано

3

1 единица

неиспользовано

4

2 единицы

неиспользовано

5

4 единицы

неиспользовано

6

8 единиц

неиспользовано

7

16 единиц

использовано

Скорость конвейера#

Наземный тайл может иметь либо собственное трение, либо представлять собой конвейер, подобный тем, что встречаются на уровне Dyna Man. Конвейер может иметь одну из 8 скоростей: −8, −6, −4, −2, +2, +4, +6, +8; но в игре используется только ±4. Скорость ±8 равна скорости ходьбы Мегамена: движение против такого конвейера заставляет Мегамена ходить на месте.

На изображении Мегамен стоит на каждой из 8 скоростей конвейера.

Гравитация#

Каждый тайл может иметь одно из 16 значений гравитации (вертикального ускорения). Наиболее распространенное значение - a, что соответствует нормальной гравитации в 3 пикселя/кадр/кадр. 10 из 16 возможных значений не используются, включая режим невесомости, в котором Мегамен просто парит, но вы можете ускорять и замедлять его с помощью клавиш "Вверх" и "Вниз".

На этом изображении показан Мегамен при каждом из условий гравитации. При отрицательной гравитации (левая половина изображения) никаких воздействий не поступает, и Мегамен парит в воздухе. При положительной гравитации (правая половина изображения) Мегамен совершает прыжок на полную высоту.

В условиях отрицательной гравитации можно влиять на вертикальное ускорение Мегамена с помощью кнопки "Вверх" и "Вниз", как в игре Lunar Lander. При двух самых слабых значениях антигравитации, 7 и 6, нажатие кнопки "Вниз" заставит Мегамена опуститься. При более сильной антигравитации можно замедлить подъем Мегамена, но помешать ему улететь нельзя.

Я не уверен на 100% в значениях ускорения. -Ed.

value

accel

0

−7 единиц

неиспользовано

1

−6 единиц

неиспользовано

2

−5 единиц

неиспользовано

3

−4 единицы

Вертикальный вал вентилятора на уровне Sonic Man.

4

−3 единицы

неиспользовано

5

−2 единицы

неиспользовано

6

−1 единица

неиспользовано

7

0 единиц

Нулевая гравитация используется лишь в небольшом количестве мест, скорее всего, по ошибке: там, где вертикальная труба на фоне касается потолка (тайл 5e) на уровне Sonic Man'а; некоторые недоступные фоновые тайлы (4f), раздатчик мусора (3d, 3e, 3f, 40) и апертуры сборочного цеха (5a) на уровне Dyna Man'а; настенные светильники (b3) на уровне Вайли. Большинство тайлов либо твёрдые, либо расположены слишком близко к потолку, чтобы хитбокс Мегамена попал внутрь. Но настенные светильники Вайли и апертуры сборочного цеха Dyna Man'а расположены достаточно низко, чтобы вы парили в воздухе, если прыгнете перед ними. (Для доступа к сборочным узлам требуется чит-код неуязвимости, потому что в противном случае сборочные автоматы наносят вам урон.)

8

+1 единица

Глубокая вода и водная поверхность на уровне Sonic Man'а.

9

+2 единицы

Мелководье и комната босса на уровне Sonic Man'а. Комната Sonic Man'а на уровне Вайли.

a

+3 единицы

Нормальная гравитация используется практически повсюду.

b

+4 единицы

неиспользовано

c

+5 единиц

Турбины и водопады на уровне Volt Man'а.

d

+6 единиц

неиспользовано

e

+7 единиц

неиспользовано

f

+8 единиц

неиспользовано

Чит-код на неуязвимость#

В самом первом меню (где настраивается графика, звук и т.д.) введите nd перед началом игры. Да, именно так - просто нажмите и отпустите n, сделайте то же самое с d, выберите "Start Game" и нажмите Enter. Визуального подтверждения активации кода не будет, и поэтому его работоспособность получится проверить только во время прохождения вступительного уровня.

После введения кода Мегамен не будет получать урон от врагов, пуль и тайлов, наносящих повреждения. Он станет неуязвимым даже для шипов и других мгновенно убивающих тайлов, что, впрочем, может выйти боком и привести к застреванию в ямах, из которых не получится выпрыгнуть (при честном прохождении игрок не застрянет, потому что без чита эти ямы сразу отнимают жизнь). Если вы случайно упадёте в одну из таких ям, игру не придётся начинать с начала — можно будет просто перезапустить уровень, нажав Esc для перехода в меню, F10 для обнуления шкалы энергии и P для возвращения из меню.

Скрытые упоминания разработчиков#

На уровне Dyna Man'а фоновые тайлы с текстурой дерева 17, 15 и 16 ненавязчиво содержат имена "STEVE", "JOEL" и "RON". Они появляются на уровне в общей сложности 10 раз ("STEVE"×3, "JOEL"×4, "RON"×3). Эти имена, несомненно, относятся к Стивену Рознеру, Джоэлу Памбиду и Рону Сантильяно, которые указаны в титрах финального экрана игры:

Три тайла видно в самом начале уровня Dyna Man'а. Названия отображаются только на 16-цветных тайлах в режимах EGA и VGA, а не на упрощенных 4-цветных тайлах в режимах CGA и Tandy.

Mega_Man_(DOS)-dyna-steve-joel-ron-vga.png Mega_Man_(DOS)-dyna-steve-joel-ron-cga.png

Графические ошибки#

Каждая карта тайлов имеет связанную маску переднего/заднего плана, которая определяет, какие пиксели должны отображаться перед Мегаменом и другими спрайтами, а какие — за ними. На начальном этапе тайл 18, часть крыши сторожевого поста, имеет один пиксель, привязанный к переднему плану. Когда Мегамен прыгает перед ним, пиксель крыши просвечивает сквозь его шлем.

Карта тайлов

Маска

Снимок экрана в игре

Аналогично, на экране неиспользуемой защиты от копирования портрет врага ASSEMBLER имеет два прозрачных пикселя (возможно, потому что у реального спрайта врага, используемого на уровне Dyna Man'а, эти пиксели окрашены в пурпурный цвет). Все остальные портреты полностью непрозрачны.

Цвета

Прозрачность

Скриншот в игре,
с просвечивающимся
синим фоном.

Спрайт врага, используемый
на уровне Dyna Man, с
пикселями пурпурного цвета.

Неиспользуемый 16-цветный режим Tandy#

Несмотря на наличие меню настроек с четырьмя опциями (CGA, EGA, VGA, TANDY), игра имеет только два видеорежима: 4-цветный CGA (режим 04h) и 16-цветный EGA (режим 0Dh). Режим VGA имеет ту же графику, что и EGA, в то время как режим Tandy перенаправляет на CGA.

Существует код для третьего видеодрайвера, использующего 16-цветную графику Tandy (режим 09h), но он, по-видимому, не завершен и намеренно отключен в конце меню настроек:

cs:5107 xor al, C0h ; clears bit 7 (EGA/VGA)
cs:5109 xor al, 40h ; clears bit 6 (16-color Tandy)

Эта избыточная инструкция xor сбрасывает бит, который бы выбрал незавершенный режим. Ее можно повторно включить, заменив 40h в байте 4978h в файле MM.EXE на 0. После этого графика будет очень похожа на режим EGA, но с некоторыми серьезными ошибками рендеринга:

Глаза Мегамена покрыты
чёрным прямоугольником.

Некоторые спрайты отображаются внутри
непрозрачных черных прямоугольников.

В некоторых местах спрайты
частично исчезают.

Продолжение, Mega Man 3, тоже имеет неиспользованный код для видеорежима Tandy, но в менее функциональном состоянии.