Ищем сокровища в исходном коде Aladdin

[ Версия для печати ]
Добавить в Telegram Добавить в Twitter Добавить в Вконтакте Добавить в Одноклассники
Страницы: (3) 1 [2] 3   К последнему непрочитанному [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]
moureev
21.10.2017 - 01:10 [ показать ]
-40
denisiuk
21.10.2017 - 01:10
1
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
Может оказаться интересным разобраться глубже, чтобы найти больше сравнений между исходниками в MIDI и данными GEMS, вставленными в розничную версию, но, думаю, мы оставим это на будущее.

3.6. Дизайн-документ

Я был потрясён, обнаружив его внутри zip-файла, погребённого внутри другого zip-файла. Там представлен огромный объём информации и больше планировавшихся функций, чем это можно было ожидать. Дизайн-документ имеет версию 3.3 и датирован 27 апреля 1993 года. В него внесли свой вклад многие люди: сам документ писали Дэвид Бишоп, Сет Мендельсон, Майк Диетц и Марк Ямада, а проверял его Дэвид Перри.

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

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

Это сообщение отредактировал denisiuk - 21.10.2017 - 01:19

Ищем сокровища в исходном коде Aladdin
 
[^]
denisiuk
21.10.2017 - 01:11
0
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
В оригинале дизайна подразумевалось, что игрок будет собирать бананы, вызывающие появление Абу в случайных местах уровня. Эта анимация создана таким образом, чтобы Абу можно было подхватить во время полёта на ковре (на это намекает поза и движение волос), но в других местах никаких следов подхватывания Абу не сохранилось. Также довольно интересно заметить, что эта анимация присутствует в ROM демо-сборки для CES, несмотря на то, что она никогда не использовалась в геймплее!

Что бы мы ни хотели сделать с исходным кодом и данными, этот дизайн-документ представляет собой невероятно ценный источник информации.

Это сообщение отредактировал denisiuk - 21.10.2017 - 01:11
 
[^]
denisiuk
21.10.2017 - 01:12
1
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
Уровни

В диздоке есть разбивка игры на изначальную схему уровней:

Уровень Цель Босс
------------------------------------------------------------
1. Marketplace Спасти Жасмин Разул
2. Desert Найти скарабея 1 Нет
3. Marketplace rooftops Найти скарабея 2 Газим
4. Prison Сбежать из тюрьмы Нет
5. Cave of Wonders (gold) Дойти до комнаты с лампой Обезьяна Шива
6 Cave of Wonders (lamp) Взять лампу Нет
7. Fly out of cave Сбежать из пещеры Нет
8. Inside the lamp Найти Джинна Нет
9. 'Good' Palace Схватить Джафара Яго
10. Marketplace Пробиться ко дворцу Разул 2
11. 'Evil' Palace Уничтожить Джафара Джафар

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

И Газим, и Разул появляются на уровне с крышами, а на уровне 1 нет босса.
Похоже, прохождение Cave of Wonders немного улучшено и переходит в пеший побег, ведущий к побегу на ковре.
Бой на рыночной площади (Marketplace) за путь к дворцу убрали, выполняется переход сразу от Sultan’s Palace к Jafar’s Palace. Также на этом этапе планировалась вторая встреча с Разулом.

Следов удалённого уровня с рыночной площадью не сохранилось, поэтому, вероятно, работу над ним так и не начинали, скорее всего, или из-за временных ограничений, или из-за объёма ROM.

Механики игрока

Между этой версией диздока и готовой игрой было внесено довольно много изменений в механики игрока. Вот некоторые из самых интересных:

Аладдин не должен был уметь атаковать или метать предметы в падении, только в прыжке, вероятно, только на ведущей вверх дуге. В этом случае игра определённо игралась бы совершенно по-другому!
В дизайн-документе особо оговаривается, что удар мечом Аладдина не будет использоваться для блокировки рукопашных ударов и ударов холодным оружием, но поведение в релизе оказалось совершенно противоположным, и часто это очень важно, чтобы избежать урона от атак стражи.
При удерживании разных направлений на крестовине джойстика изначально Аладдин должен был бросать объекты в направлениях «вверх-влево», «вверх» и «вверх-вправо».
Задержка при смещении взгляда вверх/вниз при удерживании крестовины вверх/вниз изначально была равна трём секундам.
Даже в версии не для CD на некоторых уровнях в дополнение к яблокам метательными предметами были дыни и камни. Хотя это не упомянуто в документе, на каком-то этапе в игре присутствовали метательные лимоны. Подозреваю, что камни должны были находиться в таких уровнях, как пустыня, но мысль о побивании камнями людей и животных до смерти, скорее всего, была плохо воспринята в Disney!

Это сообщение отредактировал denisiuk - 21.10.2017 - 01:18

Ищем сокровища в исходном коде Aladdin
 
[^]
denisiuk
21.10.2017 - 01:12
0
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
...

Ищем сокровища в исходном коде Aladdin
 
[^]
denisiuk
21.10.2017 - 01:12
0
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
На некоторые уровни Аладдина должен был приносить Джинн. Похоже, я нашёл пару анимаций, которые как будто предназначены для этого процесса.

Ищем сокровища в исходном коде Aladdin
 
[^]
denisiuk
21.10.2017 - 01:13
0
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
Планировались дополнительные анимации ожидания, даже для версии игры на картридже:

Над Аладдином появляется облачко с мыслями о принцессе (только после того, как он узнаёт, что девушкой на рыночной площади была Жасмин), это подчёркивает, что он хочет увидеть её снова.

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

Ковёр влетает в кадр и жестами приглашает игрока познакомиться с программой (только после уровня в пещере).
Планировалось, что когда здоровье Аладдина становится ниже определённого уровня, на уровнях под открытым небом появляется несколько падальщиков. Они присутствуют на слое параллакса и кружатся в ожидании его смерти.

В целом, похоже, что в готовой игре осталось самое лучшее, хотя направленные броски и дополнительные метательные объекты, а также чисто эстетические добавления были бы оказаться забавными!
 
[^]
denisiuk
21.10.2017 - 01:13
1
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
Враги

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

Во многих случаях в дизайне определяются совершенно другие характеристики и сценарии поведения врагов:

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

Они бегут влево/вправо, преследуемые мышью, и ударяются об Аладдина, если он не уберётся с их пути (не подпрыгнет). Женщин невозможно убить.
Обстоятельства и темп битвы с Разулом изначально были совсем другими:

Разул должен стоять на крыше здания тюрьмы. Ширина здания занимает примерно половину экрана, и Разул виден из-за стены (видима только верняя часть его тела). С обеих сторон крыши стоят пирамиды, сложенные из бочек.

Разул шагает вперёд и назад на верхушке крыши. Поскольку здание будет посередине экрана, Аладдин способен подняться по его бокам с помощью серии платформ по обеим сторонам здания, на краях экрана. Платформы позволят Аладдину подобраться под Разула, и или сбоку от него, или прыгнув с самой верхней платформы, прямо над ним. Аладдин не сможет забраться на крышу.

Когда Разул подбирается к краю крыши, он сталкивает с края бочку. Бочка катится вниз, с платформы на платформу, пока не достигает земли (как в Donkey Kong), после чего падает в центральное отверстие. Разул должен сталкивать бочки раз в секунду или около того. Разул продолжает катить бочки, пока Аладдин не достигнет противоположной части крыши, а потом отбегает к другой стороне крыши и снова начинает толкать бочки.

Разула можно ударить только когда он перебегает с одной стороны на другую. Когда Аладдин находится на самом верхней платформе, Разул бросает в него ножи. Броски ножей выполняются между сталкиванием бочек, чтобы Аладдин не оставался на одном месте слишком долго.

Бочки наносят Аладдину урон, и их нельзя уничтожить, за исключением бочек со особой расцветкой. Их можно уничтожать ударом меча, открывая при этом бонусные предметы (здоровье, жизни и т.д.). Для победы над Разулом Аладдин должен бегать из стороны в сторону и вверх по платформам по обе стороны здания. В середине пола будет отверстие, через которое Аладдин должен перепрыгивать, иначе потеряет жизнь. Над серединой пола будет навес, мешающий Аладдину бросать предметы прямо в Разула.
Планировался вариант зелёной змеи с жёлтыми полосами.
Были запланированы периодические атаки братьев Яго (отличающихся от Яго цветом перьев):

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

Падая на Аладдина, пузырьки наносят ему урон. Аладдин также может попасть в клубы дыма, когда пузырёк падает рядом с ним, при этом он тоже получает урон. Клубы дыма пропадают через 0,5 секунд.
На уровне с пустыней планировались враги-миражи, которые должны были появляться и исчезать, принимая вид существующих врагов. Миражи могут и наносить урон, и быть убитыми Аладдином.
Враг «заключённый», обнаруженный в исходной графике, изначально должен был носить робу с чёрно-белым полосатым тюрбаном. Он должен был быть одного роста с Аладдином, а не очень высоким, долговязым персонажем, которого мы видели, и иметь дополнительную атаку с размахиванием цепью.
Изначально планировалось, что у летучих мышей будет специальная атака пикированием.
Планировалось, что один из братьев Яго должен прилететь и сбросить пузырёк на первого скелета в подземелье султана (Sultan’s Dungeon). Этим объяснялось бы то, что на этом уровне скелеты возвращаются к жизни.
Золотые обезьяны изначально планировались для другого золотого уровня Cave of Wonders, в котором пещера должна быть заполнена золотыми монетами, драгоценными камнями и другими сокровищами. Скорее всего, золотую обезьяну убрали потому, что решили полностью вырезать этот уровень, а её поведение передали статуе Шивы.
На втором уровне Cave of Wonders планировались каменные обезьяны, которые должны были вести себя как золотые обезьяны, но кидаться камнями, а не монетами/золотом/драгоценностями.
Статуя Шивы, появляющаяся в уровне Cave of Wonders с дизайном золотой/каменной обезьяны, изначально должна была появиться во дворце и иметь следующий дизайн:

Действие:

Остаётся неподвижной, как большинство статуй, пока не прилетит Яго и не сбросит на неё пузырёк. Потом она волшебным образом оживает и начинает атаковать Аладдина.

Атака:

Своими многочисленными руками она должна вытаскивать драгоценные камни из своего головного убора и бросать их в Аладдина. Когда драгоценности падают на землю, они волшебным образом превращаются в пламя и горят 2-3 секунды. Каждый раз, когда её ударяет Аладдин, она теряет одну из своих рук.

Внешний вид:

Ростом примерно с Аладдина, но имеет 8 рук. Одета в шаровары и головной убор со множеством драгоценных камней. Должна иметь цвет и текстуру мраморной статуи даже когда оживает.
Фламинго во дворце султана изначально имели немного более агрессивную механику:

Если игрок слишком долго стоит на фламинго, птица поворачивается и клюёт его. Одним из фламинго будет замаскированный Яго и он всегда отходит с пути, когда игрок собирается на него приземлиться.
В битве с боссом Яго изначально делался упор на использование драгоценностей Абу для атаки Яго. Это был единственный способ столкнуть Яго ближе к шестерёнкам.
Джафар в человеческом обличье должен был иногда бросать вниз красные пузырьки, которые создают долго не рассеивающееся облако опасного дыма.

Это сообщение отредактировал denisiuk - 21.10.2017 - 01:18

Ищем сокровища в исходном коде Aladdin
 
[^]
denisiuk
21.10.2017 - 01:15
2
Статус: Online


Очкарик в ухе шарик

Регистрация: 8.11.08
Сообщений: 1979
Джафар в обличье змеи должен был иметь атаку языком, и если атака удавалась, то он должен был улыбаться. У него было довольно много других вариаций атак/поведений.

Это никоим образом ни на что не влияет, и есть ещё много небольших различий между дизайном и реализацией в игре.

Камень, ножницы, бумага

Хотя не сохранилось ни соответствующего кода, ни данных, но присутствует полное описание игры в «камень, ножницы, бумагу». Стоит процитировать его здесь целиком:

Попав на бонусный экран, игрок видит в левой центральной части экрана ковёр, размахивающий своей левой кистью. Аладдин стоит в правой центральной части экрана и размахивает правой рукой. Камню соответствует кнопка A, бумаге — кнопка B, а ножницам — кнопка C. Подсказка показана в нижней центральной части экрана.

Правила аналогичны правилам обычной игры: каждый игрок выбирает камень, бумагу или ножницы. Камень обозначается кулаком, бумага — раскрытой ладонью, а ножницы — вытянутыми в форме буквы V указательным и средним пальцами. Пользователь играет за Аладдина.

Пока ковёр размахивает своей кистью, а Аладдин — рукой (так продолжается, пока игрок не сделает выбор), игрок должен выбрать одну из трёх кнопок: A, B или C. После выбора нужного предмета ковёр и Аладдин ещё два раза взмахивают кистью и рукой, а затем, на третьем взмахе, показывают свой выбор. Победитель празднует победу и он отображается на экране.

Если Аладдин проигрывает, то игра заканчивается и он возвращается на то же место, в котором он покинул уровень. После этого он на несколько секунд становится неуязвимым (этот процесс происходит также после третьей игры, вне зависимости от того, кто выиграл). Если Аладдин выигрывает, на экране графически (так же, как в обычной игре) и/или текстовой форме (в случае дополнительных очков) показывается его приз.

Затем игрока спрашивают, хочет ли он сыграть снова, чтобы иметь возможность выиграть больше, или покинуть игру, сохранив уже полученные предметы. Если игрок играет снова, он может проиграть и потерять все ранее выигранные предметы (например, если в первой игре Аладдин выиграл одну жизнь, во второй — 10 драгоценностей и ещё две жизни, а потом в третьей игре проигрывает, то он проигрывает всё, что выиграл ранее: 10 драгоценностей и две жизни).

За одно посещение бонусной игры можно сыграть не более трёх раз. Аладдин может сыграть во вторую игру, только если выиграл в первой, а в третью — только если выиграл в первой и второй.

В случае ничьей игра повторяется до тех пор, пока кто-нибудь не выиграет.

Правила

Камень побеждает ножницы
Бумага побеждает камень
Ножницы побеждают бумагу

Если у обоих игроков одинаковые предметы. то засчитывается ничья и игра повторяется.

Призы

Первая победа: жизнь
Вторая победа: 10 драгоценностей и две жизни
Третья победа: одна умная бомба Джинна, 15 драгоценностей, три жизни

Примечание: мы можем изменять призы в соответствии с выбранным уровнем сложности игры (выигрыши лучше при низкой сложности). Это будет решено во время настройки игры.

Примечание: призы суммируются, если Аладдин выигрывает все три игры, то получает шесть жизней, 25 драгоценностей и одну умную бомбу Джинна

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

Разбивка ROM

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

2048 КБ — общая доступная память картриджа
Предполагаемое использование памяти
480 КБ — 8 уровней, по 60 КБ на уровень (сюда входит набор тайлов, триггеры, контуры и всё прочее)
132 КБ — три уровня без наборов тайлов, по 44 КБ на уровень
175 КБ — музыка и звуковые эффекты
64 КБ — программа
64 КБ — таблицы спрайтов
64 КБ — контрольные таблицы
120 КБ — начальная заставка/интермедии/конечная заставка/финальный ролик (изображение каждой интерлюдии = 4 КБ)
30 КБ — логотипы Sega, Disney, Aladdin и Virgin
491 КБ — Аладдин и все персонажи, не привязанные к уровням
369 КБ — привязанные к уровням спрайты
241 КБ — боссы
80 КБ — все бонусные игры
___________
Требуется 2274 КБ
2048 КБ -___________
226 КБ лишних. Хм-м-м.
Разбивка 60 КБ по уровням:
11500 байт — данные фоновых персонажей (сжатые)
32768 байт — ссылки и сочетания блоков фона
1200 байт — пол и информация переключения спрайтов (сжатая)
400 байт — информация контуров
10699 байт — данные карт (сжатые)
2171 байт — данные параллакса карт (сжатые)
___________
Приблизительно по 58738 байт на уровень. [Эта оценка уменьшится, если графический стиль будет более простым, или если размеры уровней будут меньше максимально возможного размера]

Такая тщательная координация и планирование на самом деле по многим причинам являются здравой практикой, и это очень далеко от того дисбаланса, который мы часто наблюдаем между графикой, дизайном и программированием в современной разработке игр. Хотел бы я сказать, что ни разу не ругался на художника, засунувшего в игру огромную одноцветную текстуру 4096×4096, или на дизайнеров, которые сначала делают так, что загрузка уровня длится три минуты, а потом надеются, что за них всё починят. Раньше я стыдил сотрудников словами «твоя пустая текстура занимает больше места, чем 20 лет назад занимала целая игра».

3.7. Sega CD

Похоже, что версия игры для Sega CD планировалась с самого начала. К сожалению, несмотря на частое упоминание Sega CD в дизайн-документе, похоже, что исходная графика не дожила до нашего архива с Aladdin. Вот все относящиеся к CD особенности и элементы, которые мне удалось вытащить из диздока:

Планировалось что во многих дополнительных уровнях Sega CD Аладдин появится в обличье принца Али. Диздок упоминает, что принц Али появится только в одном уровне версии на картридже, но он намеренно был вырезан для экономии места в ROM.
Планировалось, что в CD-версии игры у Джафара будет третья форма в виде Джинна. Следов графики для этого этапа в архиве не сохранилось.
На случай, если волшебный мешок Абу доживёт до розничной версии, для CD-версии планировались ещё две дополнительные реакции Абу на количество использованных Аладдином драгоценностей.
В CD-версии планировалось заменить босса рыночной площади Разула на босса «торговец яблоками» (Apple Merchant). Сам Разул должен был стать боссом уровня с тюрьмой.
В CD-версии на уровне с пустыней должен был появиться босс «песчаный скорпион». По этому боссу в дизайне нет никакой дополнительной информации.
На втором уровне с рыночной площадью, ведущей к дворцу Джафара (которая не добралась до релиза), в CD-версии игры вместо второй встречи с Разулом планировался босс «пожиратель огня» (Fire Eater).
Для CD-версии планировался допонительный метательный предмет — снежок.
Специально для CD-версии планировались дополнительные анимации ожидания:

Джинн влетает на экран и говорит одну из фраз (только после уровня с пещерой в CD-версии)
Ковёр влетает на экран, похлопывает Аладдина по плечу и снова улетает (только после уровня с пещерой в CD-версии)
В CD-версии должно было иногда появляться препятствие в виде человека, лежащего на гвоздях, оно позволяло Аладдину отпрыгнуть от него один раз, не получив урона. После первого прыжка человек «в негодовании» поднимался и его больше нельзя было использовать для прыжков.
На уровне с пустыней в CD-версии планировались зыбучие пески:

Когда Аладдин проходит по определённым участкам песка, он начинает тонуть. Прыгая, он может постепенно выбраться из песка и пройти эти участки, не утонув. Если игрок оставляет его слишком надолго, Аладдин утопает в песке и теряет жизнь (или игра заканчивается, если это была последняя жизнь). Зыбучие пески внешне должны немного отличаться от обычных песков, чтобы внимательный игрок мог предусмотреть эту опасность.

Один участок зыбучих песков ведёт в секретную область. Чтобы попасть туда, Аладдин должен преодолеть своё естественное стремление спастись из ловушки, и оставаться на месте. Когда Аладдин проваливается под поверхность этого участка зыбучих песков, то прилетают и улетают скарабеи, сообщая, что он открыл новую область в пустыне, возможно что-то вроде пещеры (если у нас будут эти тайлы), где Аладдин может найти дополнительную жизнь, продолжение игры и разные другие бонусы.

С визуальной и геймплейной механикой возврата Аладдина на поверхность пустыни нужно ещё определиться, но для целостности мы используем ещё один переход кадра со скарабеем.
Для CD-версии также планировалась вероятность использования кактусов:

Они будут различной формы и размера (возможно двух видов). Мы удалим их из игры, если они не будут соответствовать стилю мира Аладдина. Прикосновение к кактусу наносит Аладдину урон (1 очко урона при каждом касании).

Один тип кактуса можно уничтожить броском предмета или ударом меча. Другой, более основательно выглядящий вид кактуса никуда не девается, его можно только избегать.

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

Планы для CD-версии часто переплетаются с элементами/функциями, которые были запланированы (но не дожили до релиза) версии игры на картридже.

3.8. Код

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

; Скольжение
AN_ROLLY_SNAKE:
dc.w SN_SLTHR_FRAME1
mface_man

R_S: dc.w SN_SLTHR_FRAME1
dc.w SN_SLTHR_FRAME1
dc.w SN_SLTHR_FRAME1

mif_within_X 85,AN_ROLLY_SNAKE_BITE

dc.w SN_SLTHR_FRAME2
dc.w SN_SLTHR_FRAME2
dc.w SN_SLTHR_FRAME2

dc.w SN_SLTHR_FRAME3
dc.w SN_SLTHR_FRAME3
dc.w SN_SLTHR_FRAME3

Так генерируются байты/слова для каждой «команды». Каждый кадр анимации задаётся генерированием слова, и это слово является указателем на список указателей кадров примерно в начале ROM. Затем идёт множество макросов для таких вещей, как показанная выше условная логика mif_within_X, которая генерирует соответствующий командный байт. Командные байты удобно расположены за пределами диапазона значений известных значений указателей кадров. В результате этой команды для следующего цикла выполнения указатель данных состояния может иметь какое-то другое значение.

Элементы (объекты/акторы) чаще всего управляются обработкой кода таких данных состояний. Движение также обрабатывается похожим образом. Логика движения определяется генерируемыми байтами, а каждый элемент может передать указатель на свои данные состояния движения. Также очень часто данные состояния анимации заменяют указатель на данные состояния движения, поэтому здесь есть специальный макрос, используемый для генерации соответствующих байтов для этой операции.

Есть довольно большой объём кода, посвящённый выполнению этих небольших блоков состояний и управляющий расчётом таких вещей, как физика/коллизии и даже иерархия основных движений. Разумеется, игрок обрабатывается по-своему. Он, как и стандартные элементы, использует данные состояний, но имеет собственную ассемблерную boilerplate-логику, обрабатывающую большую часть более сложной логики состояний, которая также часто непосредственно задаёт указатели на состояния.

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

Кроме того, существует много boilerplate-кода для обработки таких аспектов системного уровня, как передача данных с прямым доступом к памяти в VRAM. Процедура DMA_IT являлась основой для записи тайлов Chopper бласт-процессингом во VRAM. Chopper предназначен был для довольно эффективного минимизирования затрат. Он избегал затрат на распаковку в ЦП, при этом сводя к минимуму количество уникальных тайлов на кадр анимации. Я не работал над профилированием Aladdin и не изучал, сколько здесь обычно тратится циклов, но судя по конечному результату, система справляется со своей работой достаточно хорошо.

Здесь мы можем глубоко погрузиться в изучение бесчисленного количества систем, но если не слишком вдаваться в подробности, то я перечислил самые примечательные высокоуровневые операции в кодовой базе Aladdin.

Кроме всего сказанного выше, есть и другие интересные фрагменты, которые я заметил при изучении:

Существует переменная времени ассемблирования MAKEDEMO, которую можно использовать для записи демо. При записи игра каждый кадр пишет команды с контроллера во VRAM. Интересно, что при записи демо можно увидеть, как на фоновых тайлах постепенно появляются артефакты. После заполнения выделенного буфера VRAM игра копирует данные из VRAM обратно в основную ОЗУ, потом бесконечно зацикливается на месте (потому что она только уничтожила основную память), поэтому можно подключить отладчик и выгрузить данные демо с известного адреса. Ради забавы я создал таким образом собственное демо.
Другие интересные факты о демо: сами данные демо — это необработанный поток покадрового ввода с контроллера. И запись, и воспроизведение демо используют одинаковое начальное число генератора псевдослучайных чисел «12345678» для обеспечения детерминированных результатов.
Есть также переменная времени ассемблирования MASTER. Похоже, в розничной копии она имеет значение OFF. При значении ON она отключает части дожившего до релиза экрана читов, но когда она включена, код без модификаций не ассемблируется. Можно предположить, что экран читов (по-прежнему содержащий номера телефонов и факсов) на должен был остаться в розничной версии.
Чит-коды вместе с многими другими статичными данными перечислены в файле TABLES.68K. Они считываются по одному байту. Логика чит-кодов увеличивает указатель на соответствующую таблицу чит-кодов, и сбрасывает его при нажатии неверной кнопки. В исходниках не сохранилось дополнительных (кроме известных/задокументированных) скрытых/отключенных в релизе чит-кодов.
Во время записи видео для этой статьи я хотел отключить высокочастотное мерцание, которое происходит, когда Аладдину наносят урон. Это нужно было, чтобы избежать его полного исчезновения на несколько кадров при перекодировании видео на более низкие частоты кадров. Найдя нужный участок кода, я обнаружил вокруг него ассемблерную проверку «IF TO_DEMO=OFF». Очевидно, я был не первым, кто столкнулся с этой проблемой при записи рекламного ролика! Похоже, TO_DEMO убрали из демо-сборки для CES или эту конкретную часть добавили позднее, исходя из того, что в этой сборке мерцание присутствует (когда отключена неуязвимость).

Не знаю, как насчёт вас, но лично меня все эти вещи заставили поностальгировать о золотой эре разработки игр.

4.0. Что дальше?


У каждой игры есть своя история, и иногда двоичный код говорит громче слов. Но исходный код обычно говорит ещё громче! Из-за отменённых прототипов, выброшенных демо и сбоев оборудования мы и так уже потеряли слишком много потрясающих моментов истории видеоигр. Если мы не начнём относиться к сохранению и архивированию в индустрии видеоигр более внимательно, особенно в случае аппаратных технологий DRM, то можем потерять гораздо больше.

Я начал этот проект с целью подготовки архив Aladdin к надлежащему сохранению, сделав первые шаги к стандартизации сохранения и архивации исходного кода на VGHF. Это подразумевало документирование исходного кода с верхнего уровня с целью определения его назначения и всех внешних зависимостей от других инструментов и/или данных, чтобы можно было стандартизированным образом отслеживать и эти зависимости. В процессе работы мне сразу стало очевидно, что Aladdin может рассказать интересную историю. Я надеюсь, что это только первая история из многих других, и мне не терпится выяснить, что же ещё скрывается в игре!

все))

Это сообщение отредактировал denisiuk - 21.10.2017 - 01:19

Ищем сокровища в исходном коде Aladdin
 
[^]
poqx
21.10.2017 - 01:19
-8
Статус: Offline


ви-ip

Регистрация: 21.10.14
Сообщений: 736
читал как то подобный разбор:

Ищем сокровища в исходном коде Aladdin
 
[^]
KotoVasia
21.10.2017 - 01:20
20
Статус: Offline


Хохмач

Регистрация: 27.10.14
Сообщений: 754
!!!

Ищем сокровища в исходном коде Aladdin
 
[^]
za9c
21.10.2017 - 01:22
5
Статус: Offline


Ярила

Регистрация: 15.09.12
Сообщений: 1268
Тук Тук - Нео - иди за белым кроликом!
Вот ТС кого напомнил мне!
 
[^]
setY
21.10.2017 - 01:27
71
Статус: Offline


Ярила

Регистрация: 14.04.13
Сообщений: 1746
2048 КБ и охерительная игра, ночами не спал, родители ремнем отгоняли)), а сейчас скачаешь 30 гигов, а там унылое не играбельное говно
 
[^]
ncdev
21.10.2017 - 01:28
19
Статус: Offline


Ярила

Регистрация: 22.09.13
Сообщений: 2110
Эх, ностальгия... Я в начале 90-х очень любил игру Принц Персии (I). В своё время я ее ковырял Турбо Дебаггером, а потом и написал собственный редактор уровней на Watcom C.

Одно время у меня даже была идея перерисовать спрайты - например, сделать вместо чувака грудастую тёлку. Но поскольку художник из меня никакой, то в результате получился какой-то трансгендер. И от затеи пришлось отказаться lol.gif

Это сообщение отредактировал ncdev - 21.10.2017 - 01:34
 
[^]
ValdemaS
21.10.2017 - 01:36
10
Статус: Offline


Приколист

Регистрация: 28.11.13
Сообщений: 369

Отличная работа. Очень интересный кропотливый труд настоящего профессионала и энтузиаста. Я ни чего подобного не читал.
Игра супер-культовая. Пройдена мною и соратниками не раз.
Спасибо, ТС!

Это сообщение отредактировал ValdemaS - 21.10.2017 - 01:37
 
[^]
TheK
21.10.2017 - 01:44
7
Статус: Offline


Приколист

Регистрация: 1.03.10
Сообщений: 287
ниасилил)
 
[^]
БИОМЕХАНИК
21.10.2017 - 01:51
5
Статус: Online


Грубый Ниоткуда

Регистрация: 24.06.14
Сообщений: 1971
Кропотливая, сложная работа. Я в восхищении.
 
[^]
gelezo131
21.10.2017 - 01:54
4
Статус: Offline


Ярила

Регистрация: 6.02.12
Сообщений: 8802
теперь разбирай супермарио ))
 
[^]
sinquisitor
21.10.2017 - 02:03
1
Статус: Offline


НахПохНех

Регистрация: 13.08.08
Сообщений: 889
Бля, прошел эту игру за часа два, а читать заебался. Но за старания Тсу петрушку ннада.
 
[^]
DTrump
21.10.2017 - 02:16
1
Статус: Offline


Ваш текущий статус

Регистрация: 20.11.16
Сообщений: 439
В далеком-далеком детстве с приятелем чуть не до драк доходило, по сравнению с Денди это был космос!
 
[^]
ForzaLOKO
21.10.2017 - 02:24
4
Статус: Offline


Хохмач

Регистрация: 28.06.15
Сообщений: 755
ТС откуда у тебя столько свободного времени?
 
[^]
ncdev
21.10.2017 - 03:09
1
Статус: Offline


Ярила

Регистрация: 22.09.13
Сообщений: 2110
Цитата (ForzaLOKO @ 21.10.2017 - 01:24)
ТС откуда у тебя столько свободного времени?

дык на копипасту особо много времени не надо ))
 
[^]
jhavdet
21.10.2017 - 03:53
0
Статус: Offline


Ярила

Регистрация: 3.03.16
Сообщений: 1098
Цитата (ncdev @ 21.10.2017 - 03:09)
Цитата (ForzaLOKO @ 21.10.2017 - 01:24)
ТС откуда у тебя столько свободного времени?

дык на копипасту особо много времени не надо ))

не...
твоя сцыла на копипасту копипасты. пруф здесь - http://www.richwhitehouse.com

ЗЫ а вот и аффтар (который вроде мужик на фотке)



Это сообщение отредактировал jhavdet - 21.10.2017 - 03:56

Ищем сокровища в исходном коде Aladdin
 
[^]
3xP
21.10.2017 - 04:46
-1
Статус: Offline


Шутник

Регистрация: 17.12.14
Сообщений: 29
не понимаю для чего здесь нужна эта информация...знающие люди и на хабре почитать могут...здесь ресурс не тот, да и читатели не те....

Это сообщение отредактировал 3xP - 21.10.2017 - 04:47
 
[^]
ValerkaXakas
21.10.2017 - 05:34
2
Статус: Offline


Ярила

Регистрация: 22.07.17
Сообщений: 1187
Спасибо ТС, мне понравилось, люблю эту игру и до сих пор поигрываю!!!
 
[^]
Понравился пост? Еще больше интересного в Телеграм-канале ЯПлакалъ!
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии. Авторизуйтесь, пожалуйста, или зарегистрируйтесь, если не зарегистрированы.
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) Просмотры темы: 28630
0 Пользователей:
Страницы: (3) 1 [2] 3  [ ОТВЕТИТЬ ] [ НОВАЯ ТЕМА ]


 
 



Активные темы






Наверх