Начнем обзор тайн, загадок и глюков Dizzy 3.
Общие замечания:
* Игра занимает практически всю память под завязку, из-за чего авторам пришлось даже фрагментировать таблицу названий предметов и разносить в разные места памяти.
При этом нерационально используется память для закадрового буфера атрибутов (ее можно сократить), плюс из-за присутствия IM 0 при инициализации игры, не используется область памяти $5B00..$5C25.
* AY-музыка и голосовая фраза размещены в 3-й странице памяти, из-за чего на классических машинах голосовая фраза тормозит (в Диззи-2 было все наоборот, фраза тормозила на +2A/3).
* Движок персонажа Диззи остался почти без изменений.
* Монеты перенесены из категории обьектов в отдельную категорию, что позволило сэкономить 390 байт памяти (одна запись в таблице обьектов занимает 16 байт, а в новой таблице монет 3 байта).
* Экраны наконец-то частично упакованы за счет упаковки повторяющихся атрибутов. Упакованные экраны имеют размер 8371 байт, а неупакованные - 11334 байт. Таким образом, выигрыш почти 3 Кб.
* Из-за появления диалогов в игре значительно больше текстов, чем в предыдущих частях. Также унаследован текстовый процессор, появившийся в Диззи-2. И по славной традиции половина команд процессора не используется, а еще несколько команд используются всего 1-2 раза.
* В игре нашлось название от отсутствующего предмета 'A BOTTLE OF WINE'. Не путать с 'A BOTTLE OF WHISKEY'. То ли сперва авторы хотели назвать виски вином, после чего заменили на виски, а старое название забыли убрать из памяти. То ли должно было присутствовать и вино, и виски. Что менее вероятно.
* AY-музыка в игре слабоватая, использует всего 2 канала. 3-й канал оставлен для спецэффектов.
* Для персонажей семейства Диззи в игре зарезервировано 8 позиций. При этом используется всего 5 персонажей. Или 8 было зарезервировано с запасом, или же персонажей планировалось больше, но потом сюжет сократился.
* Для анимации воды теперь сделана отдельная функция и собственный буфер. Раньше вода размещалась в первых 8 слотах блока обьектов и анимировалась как активный обьект. Также выделена отдельная функция и буфер для анимации пламени.
* На анимированную воду выделено 8 слотов, на огонь - 4 слота. При этом на некоторых экранах больше 4 огней, что вызывает переполнение буфера, но не приводит к краху, т.к. в памяти сразу за буфером огней находится пустующий для данных экранов буфер воды.
Экран:
В отличие от предыдущих двух игр, начиная с Диззи-3 появился закадровый буфер атрибутов. Если раньше твердым считался обьект с пониженной яркостью, а прозрачным - с повышенной яркостью, то теперь эта информация скрыта от игрока, и на экране все рисуется с повышенной яркостью. Плюсы такого решения - возможность прятать скрытые твердые элементы пейзажа и скрытые прозрачные элементы. Минусы - сокращение палитры цветов из-за отсутствия цветов пониженной яркости.
Обьекты:
Обьекты в Диззи-3 устроены значительно сложнее и разнообразнее, чем в предыдущих играх.
Если раньше основная активность обьектов закладывалась достаточно унифицировано в самом их описании, с указанием траектории движения и прочих свойств, то в Диззи-3, помимо того, что значительно увеличилось число типов обьектов, так еще у всех активных предметов появилась ссылка на гибкое описание триггера (прямоугольник и номер экрана, на котором предмет срабатывает), и код, который выполняется именно для этого предмета. Гибкое описание триггера позволило уйти от стандартных для предыдущих игр триггеров размером 8x8, снизив пиксельхантинг применения предметов.
И сразу находим ошибку для 'A BOTTLE OF WHISKEY'. Вместо ссылки на триггер, почему-то в описании находится ссылка на новое название предмета 'AN EMPTY BOTTLE'. При этом, движок воспринимает ссылку на названием, как описание триггера. Первая буква 'A' воспринимается как номер экрана $41. Но этот экран пустой, на нем Диззи не бывает, поэтому краха игры не происходит. Вполне возможно, что в переводах на русский язык на месте первой буквы окажется символ с другим кодом, указывающим на реальный экран. Если на нем применить бутылку виски, вполне возможно, что программа улетит в никуда.
Иными словами, только по случайности данная ошибка не приводит к непредвиденным последствиям.
Особенности прохождения:
Носорог имеет 5 стадий:
1. Если не в стадии 5, то при входе на экран всегда стоит в одном и том же месте. Далее ждет пока Диззи не спустится на его уровень, тогда он встает в рабочую стойку.
2. Пробегает несколько шагов безусловно.
3. Бежит дальше при условии, что на пути есть Диззи или в логове лежит кость.
4. Добегая до логова носорог разворачивается и деактивируется. Если при этом Диззи умер, значит носорог переходит на пункт 1. Иначе забирает кость и переходит на пункт 5.
5. Носорог стоит без действия, но все равно убивает Диззи, если тот до него дотронется.
Иными словами, носорог определяет наличие кости не по самой кости, а по тому, что он (носорог) успешно забежал в логово и при этом не убил Диззи. Если бы Диззи был бессмертным, то носорог бы без всякой кости сказал бы 'какая вкусная кость!'.
Кроме того, если носорог забежал в логово, а Диззи не успел взять камень, то это запорон, и игру дальше пройти нельзя.
Если положить кость на пути носорога, но не в логово, то носорог ее не заметит.
Оба дракона сделаны не только на одном и том же движке, но и находятся в одинаковых координатах на экране. Единственное, чем они отличаются, это тем, что наземный дракон стреляет огнем в случайный момент времени с вероятностью около 2%, а подземный дракон стреляет постоянно, когда его драконье подземное яйцо находится в инвентаре Диззи. С этой точки зрения подземный дракон вообще не особо логичен. Ему все равно, где лежит его яйцо, лишь бы не в инвентаре Диззи. Кроме того, если дракону принести другое яйцо, то он тут же притихает и больше не подает признаков активности, хоть забери все яйца у него. При этом, каждый раз выкладывая перед ним одно и то же яйцо, взятое на облаках, будет повторно показан диалог, что дракон притих.
Еще одно отличие наземного и подземного дракона в том, что пламя у них летит до разных конечных точек. Но это связано с ландшафтом экрана.
Ошибки:
Предмет 'боб' действительно ни на что не действует, и можно просто полить кучку навоза водой, и вырастет стебель. Это не выглядит случайной ошибкой в коде. Проверки на наличие боба нет вообще. Т.е. эта ошибка скорее из разряда, что типа просто забыли что надо связать боб и кучу навоза.
В фирменном режиме cheat-mode после выхода из режима может случиться непредвиденный глюк, т.к. движок Диззи на прерываниях разрешается раньше, чем был напечатан Диззи после восстановления экрана. В результате может возникнуть коллизия с использованием одной и той же функции и из основного кода, и из прерывания.
Вовсе не обязательно давать крысе хлеб. Можно просто положить его на пути крысы, и тут же забрать обратно. Будьте уверенны, что она подойдет к месту, где вы клали хлеб, скушает ничто, и уйдет восвояси.
Кто-то может подумать, а почему все предметы исчезают после применения, а кирка после разбивания камня не исчезает? Наверное в этом есть смысл? Да, есть. Программисты забыли написать кусок кода в обработке разбивания булыжника. Там не только потерялось убирание кирки, но и не инициализируется экран, на который отправляется камень после разбивания. Вообще-то все деактивированные предметы отправляются на экран $FF, которого не существует. Тогда как здесь номер экрана, на который отправляется камень забыли установить, и этот номер берется мусорным. И лишь по случайности его номер ($0B) тоже является неиспользуемым экраном. Иначе бы камень после разбивания появлялся бы на каком-нибудь другом видимом экране.
p.s.: Никаких скрытых тайн и особенностей прохождения не найдено
p.p.s.: Расширенную версию пока делать не собираюсь