1 Отредактировано garnizon (13-12-2018 00:31)

Тема: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Это самый настоящий квест для Apple ][. Увидев его, я полюбил квесты на долгие годы. С появлением у меня IBM PC, продолжил играть именно в подобные программы (сами знаете сколько под DOS было замечательных игр этого жанра).
Но Алиса у меня была первой (в смысле первый квест в который я сыграл). А все первое, как известно, не забывается.

Но все по порядку. Первый раз я играл в оригинальную Алису на настоящем Apple][, у родителей на работе, но счастье продлилось не долго. Можно сказать что я только начал играть, так как игра была необычайно большой для 8бит машины. Реально 2 в 1: "Алиса в стране чудес" и "Алиса в зазеркалье" совмещенные в единой по сюжетной линии игре.
Оценить размеры можно по описанию  тут: https://lparchive.org/Alice-in-Wonderland/Update%201/
Правда там версия для Commodore64, но они идентичны.

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

Купил, пришел домой и запустил, епть.... а она русифицированная! И знаете, тексты были переведены мастерски, причины этого выяснились уже позже, когда появился agatcomp.ru : автор занимался переводом различной литературы вообще, и хорошо знаком с творчеством Льюиса Кэрролла в частности.

Моей радости не было предела, сколько же интересных часов я провел за игрой. В результате достиг того места, где осуществляется переход из "страны чудес" в "зазеркалье", т.е. прошел половину игры. И тут меня ждал сюрприз (см. скриншот):

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=465&download=1

Тем временем, сама игра нормально переходила в зазеркалье,  можно было походить по экранам игрового пространства,
но любой текст, в нижней части экрана, превращался в мусорный набор букв. Показалось что это уловка авторов перевода, ну что бы приехали и купили полную версию (предположим более дорогую). USN известный Агатовский клуб, похоже это они поставляли диски в нашу звукозапись, ну что же - надо звонить им. В телефонном разговоре выясняется, что вторая половина игры то ли не готова, то ли еще что, и звоните позже.  Я звонил еще несколько раз, в течении полугода примерно, но с таким же результатом.

Агатовские времена потихоньку закончились, и вместе с ними надежда на полную версию Алисы.
386, Pentium, Pentium ///, интернет, эмуляторы всего что только можно.... стоп, а как обстоят дела с Агатовским эмулятором? Оказывается был и такой.

Вот так уютно выглядел тогда нынешний agatcomp:
http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=466&download=1

Я написал автору сайта, и рассказал что у меня куча дисков отсутствующих в его коллекции. Своими силами сдампил часть дисков (и Алису конечно) и отправил ему. К сожалению, про Алису он слыхом не слыхивал. Мы как-то сразу стали душевно общаться, нашлись общие интересы кроме Агата. Это был никто иной как Voldemar0. Так я стал соавтором сайта и очень дорожу этим знакомством.

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

Шло время, и мне передали огромный архив дисков той самой USN (представляете как я потирал руки?). Но облом, никакой Алисы там не было.

Шло время, я пачками дампил диски, но Алиса не встречалась. И вдруг как-то вижу на конверте диска надпись "Алиса ver 2.0", вот это удача! Сдампил, не замечая подергивающийся глаз и общее психозное состояние, запускаю в эмуляторе... Епть, точно, другая версия, и заставка даже повествует об этом (см. скриншот). ФуууууууХ, выдохнул.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=467&download=1

Ладно Алиса, полежи пока "на полочке", до новогодних праздников, я тебя пройду, а пока мне дисков много дампить.
И вот оно 1 января! Жена в небольшом шоке - почему это я даже к шампанскому вчера не притронулся :) А я то знаю, чего у меня лежит "на полочке", поэтому и проснулся так рано. Разложил тетрадочку с пометками как проходить "страну чудес", запущен эмулятор с игрой, периодически отвлекаюсь на салатики и бутики, прохожу Алису - сказка. В душе двойной праздник. Как же замечательно начался этот потрясающий 2010 год. Эх, а может и вправду люди говорят - как год начался так весь и пройдет? Но пока прошел только один день, а я прошел к вечеру до того заветного места где осуществляется переход из "страны чудес" в "зазеркалье".

С замиранием сердца: игра перешла в зазеркалье без всяких предложений позвонить в USN - уже хорошо. Пробую общаться с героями - вроде разговариваю и отвечают на вопросы, неужели мои страдания закончены? Но происходит что-то странное, герои на вопрос "где я?" отвечают что в стране чудес, шалтай-болтай считает себя мышкой и т.д.  Быстро понимаю, что уже знакомые диалоги из страны чудес, присвоены совершено другим героям в зазеркалье. Такое впечатление что текстовый блок не был заменен на зазеркальный. Почему так - не знаю.

Ох, грехи мои тяжкие.....опять облом. Надеюсь,  врут люди когда говорят что весь год пройдет как 1 января :)

Шло время (я не часто эту фразу использую?), мне удалось разыскать одного из авторов перевода. Он ответил что весь его архив сгорел. Значит  мимо.

Шло время, я нашел еще одного из авторов перевода, как раз того, кто тексты переводил. Он сказал, что давным-давно отдал все свои диски вместе с агатом - соседу по даче, и что может попробовать на время взять их, О! К сожалению, за 7 лет (я иногда напоминал) он так и не нашел время это сделать. Значит опять мимо. Но самое главное, что никто из них не мог мне толком ответить - была ли переведена игра до конца?

Шло время, я нашел третьего из авторов перевода, и вот он немного прояснил мне ситуацию, цитирую:

"Всё, что могли в Алисе перевести, перевели. Но исходный диск был с не читаемым куском, который не позволял правильно декодировать англ. текст. Мы надеялись получить правильный диск но обломались."

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

В Apple - версии игра занимает два диска (140Кб), и третий используется для отгрузки состояния. В русифицированной версии, все эти диски объединены на одном, формата "Агат" (840Кб). Переписан драйвер памяти для использования всего объема ОЗУ АГАТ-9. За один раз загружается 10-32 игровых экрана (в оригинале каждый экран требовал обращения к диску). Изменения связанные с русификацией меню и еще куча всего.

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

И вот буквально недавно, AlexBel спрашивал у меня относительно Алисы, ну и сговорились что я выложу все что уже нарыто. Вот тут страничка с тем, что известно на данный момент:
http://agatcomp.ru/Gamez/Alice_Q.shtml
Если у вас будут какие-то мысли или сможете помочь - будем очень рады.

Post's attachments

Attachment icon AF01.PNG 60.36 kb, 645 downloads since 2018-12-08 

Attachment icon AF02.PNG 119.43 kb, 650 downloads since 2018-12-08 

Attachment icon AF03.PNG 168.09 kb, 665 downloads since 2018-12-08 

2

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Немножко небо прояснилось: https://zx-pk.ru/threads/29851-zapakova … apple.html

3 Отредактировано Dohtur Frag (17-09-2019 17:54)

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Как запакован текст в "Алисе"?
****************
Рассмотрим на примере.
Выписываем всё буквы и знаки, которые могут встретиться в тексте и получаем примерно вот такое:
" ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"-?!:;*'0123456789(),".
Видно, что букв 26+1 пробел и 20 знаков.
27 букв можно запихнуть в 5 бит - 5 бит это 32 знака.
А куда девать ещё 20 знаков?
Был выбран знак (точнее код $1b) который в тексте не используется, но лежит в диапазоне от 0 до $1f. И он становиться маркером, что следующий символ после него это другой знак(не буква).
Для того чтобы максимально эффективно паковать, нужно чтоб этот маркер встречался как можно реже. По этому желательно в таблицу знаков вынести редко встречающиеся символы, а в таблицу букв наоборот - часто используемые.
Теперь возьмём фразу: "Hello World!".
Разложим на байты в соответствии с таблицами(см. выше).
Получается: $08 $05 $0c $0c $0f $00 $16 $0f $12 $0c $04 $1b $02.
Предпоследний код $1b это маркер, по этому $02 это не "B", а "!".
Теперь, полученные байты нужно упростить.
Для этого мы представим их в 5 битном формате, 3 старших бита у них нули, по этому мы их отбрасываем.
Получается так:
01000, 00101, 01100, 01100, 01111, 00000, 10110, 01111, 10010, 01100, 00100, 11011, 00010.
Осталось это запихнуть в байты.
Сначала выпишим все биты вподряд, потом расставим запятые:
01000001,01011000,11000111,10000010,11001111,10010011,00001001,10110001,0.
Последний ноль образует полный байт, т.е $00.
Перепишем в hex:  $41 $58 $c7 $82 $cf $93 $09 $b1 $00 $ff
В конце, полученного кода, ставится $ff, это ещё один спец.символ, означает конец фразы.
Из начальных 13 байт получилось 9+1($ff).
На больших текстах выгода может быть гораздо больше.
Обратите внимание, что если мы изменим фразу на "Hello World!A" - то размер упакованого куска не изменится, т.к. в последнем байте ($00) осталось 7 свободных бит - этого достаточно на упаковку ещё одной буквы. Но если фразу изменить на "Hello World!?" - то упакованный кусок увеличится на 1 байт, т.к. на каждый знак(которой не буква) нужно 10 бит, а у нас осталось только 7.
====
Если где напутал в битах, сильно не пинайте.
====
При данном способе упаковке нельзя использовать коды $0f и $1f. Иначе могут возникать случаи образование байта $ff. Это не допустимо, т.к. $ff означает конец упаковки. Именно по этому в знакогене "Алисы" есть дырки.

**********************
По просьбе читателей, продолжаем рассказ.
**********************
Упакованные фразы скомпонованы в блоки.
Всего может быть 20 блоков. При этом нулевого блока нет. Выходит 19.
Сделано это (предположение) для более быстрого поиска. Искать в небольшом блоке быстрее, чем в одном сплошном массиве. Или это было связано с особенностью того как набивался текст или ....
Я склоняюсь к скорости.
Каждый блок заканчивается на $ff. Т.е. если фраза заканчивается на $ff, а следом идёт ещё один $ff - значит это конец блока. Если встречается такая комбинация $ff $ff $?? $ff - значит дальше ничего нет, т.е. всё блоки кончились.
Весь текст разбит на 2 куска.
Эти куски в памяти расположены так.
1-й кусок (т25/8 - 29/9):
- с $9100 до $b5ff
- с $e300 до $ffff
2-ой кусок (т25/0 - 25/7):
- с $d000 до $d7ff
При этом, первый кусок содержит ВСЕ блоки, а второй кусок только блок номер 11.
ВСЕ - значит все. Просто блок 11, в этом куске, пустой(содержит одну фразу из нескольких пробелов).

4 Отредактировано Dohtur Frag (Сегодня 10:59)

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Архивы с распакованым текстом.
Текст распакован с учётом последних данных о структуре текста.
Текст отформатирован для удобства перевода(надеюсь).

Post's attachments

Attachment icon ml.zip 45.45 kb, file has never been downloaded. 

Attachment icon wl.zip 41.75 kb, file has never been downloaded. 

Attachment icon wl_ru.zip 42.68 kb, file has never been downloaded. 

5 Отредактировано SnakE (11-09-2019 19:40)

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Комната запакована RLE. Например, вот верхняя часть комнаты, в которой стоит королева:

https://dl.dropboxusercontent.com/s/ajs2qlc7y4ky9qw/room-three.png

А вот начало сектора комнаты: 84 4F 8B 27 FD 27 F7 27 FD 27 8B 27 80 02 51 80 26 53 80 26 17 80 24 BF 04

Первым идет номер спрайта. Если в номере спрайта установлен старший бит, значит за ним будет кол-во повторов минус 1.

Расшифровка:
84 4F: 80 спрайтов №4 (две строки)
8B 27: 40 спрайтов №0B
FD 27: 40 спрайтов №7D
F7 27: 40 спрайтов №77
FD 27: 40 спрайтов №7D
8B 27: 40 спрайтов №0B
80 02: 3 спрайта №00 (пробел)
51: один спрайт №51 (люстра)
80 26: 39 спрайтов №00 (пробел)
и т.д.

В этом RLE-блоке нет ни королевы, ни названия комнаты, ни часов над дверью. Только статический задник. Напрашивается вывод, что часы — тоже "персонаж."

Я написал скриптик, который распаковывает комнату в виде кодов спрайтов. Комната "Three", сектор 17/5 (смещение в образе 17500):

04040404040404040404040404040404040404040404040404040404040404040404040404040404
04040404040404040404040404040404040404040404040404040404040404040404040404040404
0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
77777777777777777777777777777777777777777777777777777777777777777777777777777777
7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
00000051000000000000000000000000000000000000000000000000000000000000000000000000
00000053000000000000000000000000000000000000000000000000000000000000000000000000
00000017000000000000000000000000000000000000000000000000000000000000000000000000
003F3F3F3F3F00000000000000000000000000000000000000000000000000000000000000000000
000D0D0D0D0C00000000000000000000696A6B6C6900003F003A3030303B003F0000575959595B00
000D0D0D0D0C002020202020202020006868686868000014003C3C3C3C3E00140000565656565C00
000D0D0D0D0C003737000000000037006868686868000000003C3C3C3C3E00000000565656565C00
000D0D0D0D0C00373700002C2D0037006868686868000000003C3C3C3C3E00000000565656565C00
26246060602427373700002A2B0037006868686868000607003C3C3C3C3E00060700565656565C00
28002E002F0029373700002E2F0037006868686868006464003C3C3C3C3E00646400565656565C00
40404040404040404040404040404040404040404040404040404040404040404040404040404040
40404040404040404040404040404040404040404040404040404040404040404040404040404040
40404040404040404040404040404040404040404040404040404040404040404040404040404040

Комната "Looking Glass House", сектор 17/3 (смещение в образе 17300):

63636363636363636363636363636363636363636363636363636363636363636363636363636363
0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
7D7D7D7D7D7D7D7D7D7D777777777777777777777777777F7F777777777777777777777777777777
7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D
0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B
1C1C1C1C1C1C1C1C1C1C3E0000000000585959595A00000000003C1C1C1C1C1C1C1C1C1C1C1C1C1C
1C1C1C1C1C1C1C1C1C1C3E0000000000565656565C00000000003C1C1C1C1C1C1C1C1C1C1C1C1C1C
1C1C1C1C1C1C1C1C1C1C3E0000000000565656565C00000000003C1C1C1C1C1C1C1C1C1C1C1C1C1C
1C16161616161C1C1C1C3E0000000000565656565C00000000003C1C1C1C1C1C1C1C10111111121C
1C16161616161C1C1C1C3E0000000000565656565C00000000003C1C1C1C1C1C1C1C0F0F0F0F0E1C
1C16161616161C1C1C1C3E000000004C565656565C4C000000003C1C1C1C1C1C1C1C0F0F0F0F0E1C
1C16161616161C2C2D1C3E0000000055606060606055000000003C1C1C1C1C1C1C1C0F0F0F0F0E1C
1C16161616161C2A2B1C08070000005568000000685500000008091C1C1C1C1C1C1C0F0F0F0F0E1C
1C16161616161C2E2F1C30300000005568661F66685500000030301C1C1C1C1C1C1C0F0F0F0F0E1C
61616161616161616161616161616161614141416161616161616161616161616161616161616161
61616161616161616161616161616161616161616161616161616161616161616161616161616161
61616161616161616161616161616161616161616161616161616161616161616161616161616161

Спрайтов 128 штук, 8 байт каждый. Т.е. где-то должно быть 4 сектора фоновых спрайтов. Возможно, даже несколько наборов -- не уверен, что всю Алису можно впихнуть в 128 картинок.

Упакованный фон обычно занимает около 200 байт. Дальше идут другие данные -- возможно, название комнаты, координаты выходов, координаты и ссылки на персонажей, сходу не понял. Мой скрипт распечатывает смещение, по которому в секторе заканчивается фон и начинаются остальные данные.

Скриптик во вложении.

Post's attachments

Attachment icon bg.py 2.11 kb, 2 downloads since 2019-09-11 

6 Отредактировано Voldemar0 (12-09-2019 17:25)

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Я когда-то ковырял порядок чтения данных (после загрузки B-файла игры),
может пригодится.

Сама процедура чтения рессурсов (до начала игры) находится по адресу $400b.
После её выполнения рисуется заставка, начало игры и т.д.
Затем при переходах между уровнями происходит дочитывание фрагментов.

main() игры состоит всего из трёх вызовов:

4000 -   20 0B 40   "..`"   JSR   GetAllResou     # Похоже на считывание всех рессурсов для запуска
4003 -   20 F7 40   ".В`"   JSR   StartGame       # Сюда переходит после считывания всех рессурсов
4006 -   20 B4 55   ".4u"   JSR   ZeroChange      # Обменивает нулевую страницу и страницу 0b00 (кроме 00..0F)
4009 -   60 .. ..   "ю"     RTS   

[ Заметка по просьбе Игоря: как пересчитывается адрес сектора (t/s) в смещение внутри образа (offset):
offset = (t*16+s)*256  ]


Процедура чтения рессурсов вызывает довольно много других процедур, поэтому я условно разделил
её работу на фазы:

(с первого диска сперва читается текстовый блок, затем выводится фраза о втором диске)

(дальше всё чтение идёт со второго диска)

------- Фаза 1 -------
Что-то копируется 0200 -> 0c00, 1 блок
Вероятно, что-то прочитанное ещё с первого диска

читаются как есть:
3/9 - 0800

И теперь обратно: 0c00 -> 0200

------ Фаза 2 -------

Читает от 3/$d группами по три сектора с каждого трека.
3/$d 3/$e 3/$f 4/$d 4/$e .................... 11/$f
Заполняет регион $0D00 .. $1Bxx, при этом выполняя какое-то преобразование, вроде бы два байта в один.
Преобразование выполняется на каждый второй прочитанный сектор
(т.е. два сектора читаются, затем преобразуются в один блок, затем ещё 2...).
После чтения и преобразования копирует 5 блоков с $0d00 на $1b00.

------ Фаза 3 -------

Читает 19/0..19/A -> D000

Здесь декодирование делается перестановкой бит в байтах в обратном порядке.
Затем на него накладывается ещё какой-то дикий алгоритм, который тасует какие-то биты в соседних байтах,
причем он берет данные из D000..D800, микширует с DA80 и там сохраняет результат.

------ Фаза 4 -------

Читает от 33/8 .. один сектор ?
После чтения сразу появляется заставка

------ Фаза 5 -------

Читает ещё раз 3/9 (повторяется вызов фазы 0)

======================================
Здесь появляется заставка
======================================
Выбираем "начать игру":
3/9
2/3

появились на лужайке, идём влево:

2/2

появились у дома, идём вправо:

2/3

снова на лужайке, идёв вправо:

2/4
4/b
4/c

попали к кролику.

==================

Переход в "Зазеркалье":

disk2:

disk1: тексты
$1e/0 ...

disk2:
$17/3

вход в дверь справа:
$17/4

дверь в центре -> к королеве:
$17/5
$17/d
$17/e

зеркало слева от королевы:
$17/6

обратный переход:
disk1:
$19/0

disk2 (hex):
9/3

=========

Игра использует стандартный драйвер дисковода, наиболее чётко его можно
отследить по выполнению команды на адресе $BD00.
При этом в A/X будет ссылка на адрес таблицы задания ($4b8b),
в ней по смещению 4 .. 5 будет адрес t/s, а в 8 .. 9 - указатель на адрес буфера.
Но нужно учитывать, что, по какой-то причине, часто адрес буфера не является
конечной точкой, и сразу после чтения данные оттуда переносятся куда нибудь
ещё. Возможно, это связано с тем, что в некоторых случаях при копировании
происходит распаковка, но не всегда - в этом случае она заменяется простым
копированием.

7

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

В секторах */d-f лежат спрайты 8х8. Например, в 3/d какая-то таблица, 3/e-f спрайты для часов. 4/d-e -- продолжение часов, 4/f буквы для названий комнат. 5/d -- продолжение букв, 5/e-f -- какие-то элементы наборной графики. Подозреваю, что это и есть спрайты для набора фонов. Также подозреваю, что битовые преобразования превращают черно-белые спрайты 8х8 в цветные блоки 14х8 или что-то в этом духе.

8

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Немножко поиграл с декодированием. :)

Действительно спрайты лежат наборами. В аттаче комнаты 3/0, 3/1 и 17/0 используют спрайты из 6/D, 6/E, 6/F и 7/D, комнаты 17/3 и 17/5 используют 8/F, 9/D, 9/E и 9/F.

Наблюдение 1: в комнатах 17/3 и 17/5 верхняя часть выглядит неправильно. Зато она выглядит как надо в наборе из 3/E, 3/F, 4/D, 4/E, см. room17-3-alt.png.

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

Post's attachments

room17-0.png, 1.22 kb, 320 x 160
room17-0.png 1.22 kb, 1 downloads since 2019-09-13 

room17-3-alt.png, 778 b, 320 x 160
room17-3-alt.png 778 b, file has never been downloaded. 

room17-3.png, 931 b, 320 x 160
room17-3.png 931 b, 1 downloads since 2019-09-13 

room17-5.png, 660 b, 320 x 160
room17-5.png 660 b, file has never been downloaded. 

room3-0.png, 1.13 kb, 320 x 160
room3-0.png 1.13 kb, 1 downloads since 2019-09-13 

room3-1.png, 1.33 kb, 320 x 160
room3-1.png 1.33 kb, 1 downloads since 2019-09-13 

9

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

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

0x00-0x09: целиком мажента
0x0A-0x0F: четные строки оранжевые, нечетные мажента
0x10-0x1A: четные оранжевые, нечетные голубые
0x1B-0x1F: хитрая раскраска для висящей в воздухе пыли? строки 0 и 6 белые, остальные мажента
0x20-0x3F: целиком зелёные
0x40-0x4F: четные белые, нечетные мажента
0x50-0x7F: целиком оранжевые

Post's attachments

test.png, 1.76 kb, 280 x 160
test.png 1.76 kb, 3 downloads since 2019-09-13 

10 Отредактировано garnizon (14-09-2019 09:32)

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

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

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

И вопрос, а если спрайты 8х8 и их 40 в строке то это 320 получается. Я так понял что один столбец у каждого спрайта отрезается - получается наши 280. Выходит это вот так сильно унифицировано с версией для Commodore64? Там как раз 320 по горизонтали, и скорее всего один столбец просто не отрезается... Ведь тайлы спрайтов у комодоровской версии (если смотреть матрскопом) - 1в 1 к эпловской.

11

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

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

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

Кстати, я нашел что-то похожее на палитры, которыми раскрашиваются черно-белые спрайты -- на первом диске в секторе 8/3. Но они тоже упакованы, т.е. это не блоки 8х8, а кусочки по 2-4-8 строк.

12

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

Ни сколько не удивлюсь если графика потянута с C64 без изменений. В игре есть куски которые, по своим действиям, похожи на декодеры графики(в контексте той графики).
Например есть блок, который делает реверс байтов 0-7 в 7-0, меняет местами порядок байт и т.п.

13

Re: Как поиск квеста "Алиса в стране чудес" сам превратился в квест

SnakE пишет:

Как вы видите, исходно спрайты чёрно-белые

Это устройство видеорежима Commodore: там один бит на пиксель (в режиме 320x200), но для каждого блока 8x8 пикселей можно задать два цвета. А поскольку палитры Commodore и Apple здорово отличаются, то на Apple делаются эти фокусы с разными цветами в каждой строке.

Dohtur Frag пишет:

Ни сколько не удивлюсь если графика потянута с C64 без изменений

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