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.
Текст сообщения хранится в виде одного спрайта.
А символы, которые набираются на клавиатуре, записаны как 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#
Неисполь- |
Исполь- |
Комментарии |
|---|---|---|
|
|
Неиспользованный тайл 2f напоминает угол небольшого здания, расположенного в конце вступительного уровня. В игре на этом месте отображается тайл 34, отличающийся от 2f наличием горизонтальных полос. |
SONIC.BLK#
Неисполь- |
Исполь- |
Комментарии |
|---|---|---|
|
|
Тайлы травы 17, 18 и 19 являются копиями тайлов 08, 09 и 0a из SECUR.BLK, но только первый из них используется в SONIC.BLK. |
VOLT.BLK#
VOLT.BLK весит больше, чем любой другой BLK-файл в папке игры, и содержит 216 тайлов. На уровне Volt Man'а используются все из них до единого.
DYNA.BLK#
Неисполь- |
Исполь- |
Комментарии |
|---|---|---|
|
|
Тайлы лестницы вверх и вниз 32 и 33 не используются. Используются их потолочные аналоги 36 и 37. Лестница выполняет исключительно декоративную функцию, так как плитки не имеют собственных коллизий. |
|
Неиспользованные тайлы 55 и 59 выглядят так, будто они предназначены для соединения на потолке, образуя своего рода купол: |
WILEY.BLK#
В этом файле повторно используются многие тайлы, изначально созданные для уровней робот-мастеров. Некоторые из скопированных тайлов не встречаются ни в одном месте замка Вайли, несмотря на то, что они использовались на других уровнях. Среди оригинальных тайлов замка тоже есть один неиспользуемый.
Неисполь- |
Комментарии |
|---|---|
|
Тайл 1c идентичен тайлу 59 в SONIC.BLK. |
|
Тайл 20 идентичен тайлу 5e в SONIC.BLK и обладает тем же антигравитационным свойством. |
|
Тайл 3c идентичен тайлу 8a в SONIC.BLK. Графика идентична 14 в WILEY.BLK и 13 в SONIC.BLK, но свойства карты тайлов разные. Это ложная стена, через которую вы можете пройти, она присутствует на уровне Sonic Man, но отсутствует на уровне Вайли. |
|
Тайл 4f идентичен тайлу 4f в SONIC.BLK. |
|
Тайл 50 идентичен тайлу af в VOLT.BLK. |
|
Тайл 51 идентичен тайлу c2 в VOLT.BLK. |
|
Тайл 52 идентичен тайлам 5f в WILEY.BLK и 03 в VOLT.BLK (другие тайлы-триггеры с такой же графикой) и графически идентичны нетриггерным тайлам 5a в WILEY.BLK и c3 в VOLT.BLK. |
|
Тайл 53 идентичен тайлу c7 в VOLT.BLK. |
|
Тайл 54 идентичен тайлу cb в VOLT.BLK. |
|
Тайл 58 идентичен тайлу cf в VOLT.BLK. |
|
Тайл 59 идентичен тайлу 02 в VOLT.BLK. |
|
Тайл 5b идентичен тайлу 04 в VOLT.BLK. |
|
Тайл 64 идентичен тайлу 01 в DYNA.BLK. (Вероятно, половина анимации исчезающего блока.) |
|
Тайл 65 идентичен тайлу 02 в DYNA.BLK. (Вероятно, половина анимации исчезающего блока.) |
|
Тайл 66 идентичен тайлу 07 в DYNA.BLK. |
|
Тайл 69 идентичен тайлу 10 в DYNA.BLK. |
|
Тайл 6a идентичен тайлу 11 в DYNA.BLK. |
|
Тайл 6c идентичен тайлу 13 в DYNA.BLK. |
|
Тайл 8c идентичен тайлу 4a в DYNA.BLK. |
|
Тайл 8f идентичен тайлу 4d в DYNA.BLK. |
|
Тайл 90 идентичен тайлу 4e в DYNA.BLK. |
|
Тайл 91 идентичен тайлу 4f в DYNA.BLK и обладает тем же антигравитационным свойством. |
|
Тайл 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.
Графические ошибки#
Каждая карта тайлов имеет связанную маску переднего/заднего плана, которая определяет, какие пиксели должны отображаться перед Мегаменом и другими спрайтами, а какие — за ними. На начальном этапе тайл 18, часть крыши сторожевого поста, имеет один пиксель, привязанный к переднему плану. Когда Мегамен прыгает перед ним, пиксель крыши просвечивает сквозь его шлем.
Карта тайлов |
Маска |
Снимок экрана в игре |
|---|---|---|
Аналогично, на экране неиспользуемой защиты от копирования портрет врага ASSEMBLER имеет два прозрачных пикселя (возможно, потому что у реального спрайта врага, используемого на уровне 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, но в менее функциональном состоянии.