1 Отредактировано garnizon (09-07-2024 00:23)

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

Это самый настоящий квест для 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/agat/Software/Game/Alice.shtml
Если у вас будут какие-то мысли или сможете помочь - будем очень рады.

Post's attachments

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

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

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

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

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

А история продолжается! После неудачной попытки подтянуть общественность:
https://zx-pk.ru/threads/29851-zapakova … apple.html
подумалось что всё, тупик. Ан нет.

По счастливой случайности нашелся еще один автор перевода (Dohtur Frag). Именно он  занимался запаковкой/распаковкой:

Дело было в 92г. июнь-август. Я только из армии вернулся. Работы нет, делать нечего. Но новая 9-ка у меня стояла.
 На 100% не уверен, но кажется именно Ника(Никита Николаичев) предложил перевести Алису. Мне не очень хотелось этим заниматься, но из спортивного интереса стал ковырять. Помню, когда пришёл Серёга Малявин, я уже несколько экранов перевёл, но спустя рукава, в основном отлаживал перекодировщик. Ему тоже было нечем заняться(лето на дворе). Он стал спрашивать чего я делаю, то-сё, может для него какая работёнка есть. Слово за слово, я и сбагрил ему Алису. Мне было не интересно, а ему затея понравилась. Так сказать к общему удовольствию.
 Сразу хочу сказать, что Серёга молодец. Я бы на его месте застрелился.
 Дело в том, что я к затее с Алисой был равнодушен, ничего серьезного делать не планировал. Потому загрузил Отладчик(он же ВТК) и начал ковырять Алису. Возможно вы в курсе, что в Отладчике можно писать на ассемблере(по одной команде, но можно). Вот я прям тут и написал перекодировщик. Очень удобно с точки зрения скорости, но если где ошибка... придётся много переписывать.
 Понятное дело перекодировщик получился маленький и простой. Умел делать только две вещи: показывал фразу и рядом позволял ввести новую. Если введённый текст оказывался короче исходной фразы - добивал(по моему пробелами), если оказывался длиннее - то просто обрезал. По этому приходилось высчитывать какова длина исходной фразы и вписываться в это число.
 Перекодировщик выдавал все фразы подряд. Т.е. начинал с первой и вперёд, с песнями. Если нужно было проверить результаты перевода, на предмет опечаток или поправить что-то - то нужно было запускать перекодер. заново и жмакать ввод до нужной фразы.
 Если вы представили себе уровень сервиса перекодера и количество текста в Алисе, плюс правильно перевести и как-то запихнуть переведённое в ограниченную длину текста - то вы согласитесь что небольшой бюст, на родине героя, Серёга заслужил.
 Много позже, когда перевод был закончен, я размышлял на тему, что надо было бы весь текст выдрать целиком, перевести, а потом загнать обратно, пересобрав таблицу ссылок заново. Но за всё это время Серёга ни разу не пожаловался и не о чём подобном не просил. Я уж не знаю как он этот перевод осилил.... Возможно ему сам процесс перевода и борьба с трудностями нравился... Но дело было сделано и переделывать никто не рвался

Ну и дальше по топику как дело пошло:

3 Отредактировано Dohtur Frag (05-10-2019 03:51)

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 (23-09-2019 10:59)

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

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

Post's attachments

Attachment icon ml.zip 45.45 kb, 267 downloads since 2019-09-23 

Attachment icon wl.zip 41.75 kb, 254 downloads since 2019-09-23 

Attachment icon wl_ru.zip 42.68 kb, 277 downloads since 2019-09-23 

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, 289 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, 266 downloads since 2019-09-13 

room17-3-alt.png, 778 b, 320 x 160
room17-3-alt.png 778 b, 262 downloads since 2019-09-13 

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

room17-5.png, 660 b, 320 x 160
room17-5.png 660 b, 274 downloads since 2019-09-13 

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

room3-1.png, 1.33 kb, 320 x 160
room3-1.png 1.33 kb, 258 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, 262 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 без изменений

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

14 Отредактировано garnizon (17-03-2020 19:30)

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

Я покопался и сравнил различные текстовые блоки, вышла вот такая инфа:
Похоже, что изначально для обеих частей игры был единый крупный массив разбитый на 14(?) блоков.
Тут были как общие фразы для обеих частей игры, так и фразы используемые только в какой-то одной части.
Но потом (нехватка ОЗУ?) Его разделили на два куска, загружаемые на одно и тоже место ОЗУ в зависимости от части игры - WL или ML.
Причем разделено так: клонировали массив - получив два крупных одинаковых,
потом в первом вычистили все фразы, которые нужны только в зазеркалье, а в втором вычистили все фразы которые нужны только в стране чудес.
Пустые фразы остались(хотя их можно было вырезать с корнем), чтоб не нарушать нумерации.
При этом общие фразы для страны чудес и зазеркалья получились продублированы в обоих кусках.

Блок 1 (37 фраз)
Текст меню (продолжить, новая игра), работа с диском, реакция на неправильный размер алисы,
попытки взять пустоту и т.д.
Эти блоки у WL и ML почти не различаются. Похоже когда-то они совсем не различались, но потом:
для WL вычистили фразы используемые только в ML (33)
для ML вычистили фразы используемые только в WL (34,36)

Блок 2. (8 фраз)
Тут тексты причин, почему Алиса не смогла зайти в дверь + 1 фраза сообщающая что зверек стырил у Алисы из кармана предмет.
Эти блоки у WL и ML почти не различаются. Похоже когда-то они совсем не различались, но потом:
для ML вычистили фразу используемую только в WL (7)

Блок 3. (25 фраз)
Тут названия предметов которые можно взять с собой - видимо для меню.
Описание этих предметов (в том же порядке) лежат в блок 9.
Эти блоки у WL и ML совсем не различаются.

Блок 4. (10 фраз)
Тексты для демки, поздравления с окончанием игры или с её проигрышем.
Похоже эти блоки у WL и ML когда-то совсем не различались, но потом:
для ML вычистили все фразы кроме одной (5), а по сути другие и не нужны в зазеркалье.

Блок 5. (22 фраз)
Тексты объявлений и описания стационарных предметов.
Похоже эти блоки у WL и ML когда-то совсем не различались, но потом:
для WL вычистили фразы используемые только в ML (13, 14, 15, 17...20)
для ML вычистили фразы используемые только в WL (1...12, 16, 21)

Блок 6. (27 фраз)
Всякие добрые фразы персонажей: советы, когда дают предмет, или учат песенке.
Похоже эти блоки у WL и ML когда-то совсем не различались, но потом:
для WL вычистили фразы используемые только в ML (7, 12, 14, 17, 18, 20-26)
для ML вычистили фразы используемые только в WL (1, 2, 10, 13, 15, 16, 19)
И вот вроде как и в других случаях остальные фразы должны совпадать, но:
Совпадают только 0 (пуст),3,4,5,8,9, а вот 6 и 11 по разному заполнены.
И еще, фразы 3 и 8 совпадают как между частями, так и внутри каждой части (повторы).

Блок 7. (11 фраз)
Названия и тексты пяти песен.
Эти блоки у WL и ML совсем не различаются.

Блок 8. (38 фраз)
Всякие отказы от персонажей и в результате неверных действий.
Похоже эти блоки у WL и ML когда-то совсем не различались, но потом:
для WL вычистили 2 фразы используемые только в ML (30, 37)

Блок 9
тут описание предметов которые можно взять с собой. Их название в Блок3.
Само собой нет описания королевского ключа.
Эти блоки у WL и ML совсем не различаются.

Блок 10 
Большой блок с разными фразами персонажей.
Эти блоки у WL и ML совсем разные, кроме:
совпадает 0 фраза и еше несколько фраз но уже под разными номерами - 36=33, 70=105, 89=130, 111=157.

Блок 11 (40 фраз)
тут фразы героев, когда просто подходишь к ним. Предсказуемо что в зазеркалье они все совсем другие.

Блок 12 (14 фраз)
Подсказки, загадки персонажей, форматирование диска.
Похоже эти блоки у WL и ML когда-то совсем не различались, но потом:
для WL вычистили фразы используемые только в ML (4...9, 12, 13)
для ML вычистили фразы используемые только в WL (0...3, )


Commodore64 vs Apple//

В версии С64 текст хранится на втором диске. У Apple емкость диска меньше, видимо поэтому тексты перенесены на первый диск. В остальном (структура, блоки, фразы) все 1 в 1 кроме мелких правок. 

Страна чудес:

Разницы между блоками 1,2,4,5,6,7,8, 11 - нет

Блок 3  - разница в цвете грибов: WHITE_MUSHROOM или YELLOW_MUSHROOM

Блок 9  - разница в цвете грибов: WHITE_MUSHROOM или YELLOW_MUSHROOM

блок 10 - 1 отличие, в С64 ошибка, вместо слова "THINK" написано "THING" - в эпл исправлено!

блок 12 - 1 отличие, при форматировании у С64 сообщается что надо подождать 2мин, у Эпл - 30 сек.

Зазеркалье:

Разницы между блоками 1,2,4,5,6,7,8,11 - нет

Блок 3  - разница в цвете грибов: WHITE_MUSHROOM или YELLOW_MUSHROOM

Блок 9 - разница в цвете грибов: WHITE_MUSHROOM или YELLOW_MUSHROOM

Блок- 10 - разница в одной фразе, у эпл вырезана третья строка:

LAUGH IF YOU LIKE, BUT QUEENS ONLY
LAUGH AND ANSWER RIDDLES IN FRENCH.
SPRINKLE SALT EVERYWHERE LIKE FRENCH

блок 12 - 1 отличие, при форматировании у С64 сообщается что надо подождать 2мин, у Эпл - 30 сек.


Apple// vs Агат-9

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

Кроме того, в переводе 92 и 93 года есть мелкие отличия.:

Блок 1:
__ИГРА___1__2__3__4__5_

__ИГРА___1__2_____________


У_ТЕБЯ_ЧТО-ТО_С_ГЛАЗАМИ.
ЗДЕСЬ_НЕЧЕГО_СМОТРЕТЬ.____________

ПОРА_ПОСЕТИТЬ_ГЛАЗНОГО_ВРАЧА.
ЗДЕСЬ_НЕЧЕГО_СМОТРЕТЬ.________


ЗДЕСЬ_СОРИТЬ_НЕЛЬЗЯ.____________

ПОПРОБУЙ_СОРИТЬ_В_ДРУГОМ_МЕСТЕ._


ТЫ_ШУТИШЬ?!_ТЫ_ДАЕШЬ_ЭТО_ПУСТОМУ_МЕСТУ.__________

ТЫ,_КОНЕЧНО,_ШУТИШЬ._ТЫ_ДАЕШЬ_ЭТО ПУСТОМУ_МЕСТУ._


Блок 4:

_____(С)_1985_'ВИНДХЭМ_КЛАССИКС'

_________(С)_1992_'МАСТЕР_&'________________


_____(С)_1985_'ВИНДХЭМ_КЛАССИКС'

_________(С)_1993_'МАСТЕР_&'________________


___ОБЩАЙТЕСЬ_С_ЗАБАВНЫМИ_СОЗДАНИЯМИ
_И_ДАЖЕ_СПОРЬТЕ_С_ЧЕРВОВОЙ_КОРОЛЕВОЙ-
___________ЕСЛИ_ОТВАЖИТЕСЬ._____


___ОБЩАЙТЕСЬ_С_ЗАБАВНЫМИ_СОЗДАНИЯМИ
_И_ДАЖЕ_СПОРЬТЕ_С_ЧЕРВОВОЙ_КОРОЛЕВОЙ-
___________ЕСЛИ_ОТВАЖЕТЕСЬ._____


Блок 7:

УРА_КОРОЛЕВЕ_АЛИСЕ!
ОНА_НАКОНЕЦ-ТО_ЗДЕСЬ.
ТЕПЕРЬ_МЫ_МОЖЕМ_СЕСТЬ!____

ИДИ_СЮДА_И_БЕРИ_СТУЛ.
КОРОЛЕВА_АЛИСА_ЗДЕСЬ.
ТЕПЕРЬ_МЫ_МОЖЕМ_СЕСТЬ!____


Блок 8:

ДОРОГАЯ_АЛИСА,_НАЙДИ_БОЛВАНЩИКА.
ДОРОГАЯ_АЛИСА,_ИДИ_ДАЛЬШЕ.
ДОРОГАЯ_АЛИСА,_НАЙДИ_БОЛВАНЩИКА,
ИЛИ_У_ТЕБЯ_БУДЕТ_ДЛИННОЕ_ПУТЕШЕСТВИЕ.______________

ДОРОГАЯ_АЛИСА,_НАЙДИ_БОЛВАНЩИКА.
ДОРОГАЯ_АЛИСА,_ИДИ_ДАЛЬШЕ.
ДОРОГАЯ_АЛИСА,_НАЙДИ_БОЛВАНЩИКА,
ИЛИ_У_ТЕБЯ_БУДЕТ_ДОЛГИЙ_ДЕНЬ.___________________

Блок 10:

Я_НЕ_ХОТВУ_ТЕРЯТЬ_ВРЕЛ_._РЫЖИЙ_КОРОЛЬ_А_Т

Я_НЕ_ХОЧУ_ТЕРЯТЬ_ВРЕМЯ._РЫЖИЙ_КОРОЛЬМОЖЕТ

15 Отредактировано SnakE (07-11-2019 02:04)

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

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

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

Post's attachments

Attachment icon rooms_c64.png 1012.97 kb, 137 downloads since 2019-11-06 

16 Отредактировано SnakE (07-11-2019 13:56)

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

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

Комнаты набираются из квадратных тайлов 8х8. Как уже упоминалось, тайлы хранятся на диске на треках $3-$B в секторах $D-$F. Они сгруппированы в один основной набор и 4 дополнительных.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=667&download=0
Основной набор хранится в 9 секторах на треках $3-$5. Сектор $3/$D содержит палитру из 256 цветов, по одному байту на цвет, хотя используются только младшие 4 бита в каждом байте -- всего 16 цветов, поддерживаемых Комодором. В последующих 8 секторах хранятся 256 чёрно-белых тайлов 8х8, по 8 байт на тайл, старший бит слева. Такой формат рассчитан на базовый текстовый режим Комодора: все нулевые пиксели отображаются глобально заданным фоновым цветом, который в Алисе всегда чёрный, а единичные пиксели -- цветом, заданным для данного знакоместа в цветовой матрице.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=668&download=0 http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=669&download=0 http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=670&download=0 http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=671&download=0
Основной набор никогда не используется для отображения комнат в чистом виде. На него всегда накладывается дополнительный набор, указанный в комнате. Дополнительных наборов четыре, каждый занимает по 4 сектора начиная с $6/$D. В каждом наборе сначала идёт 119 тайлов, которые замещают первые 119 тайлов в основном наборе, а затем палитра из 32 цветов, которая замещает первые 32 цвета основного набора. В палитрах доп. наборов первый цвет всегда $FF -- не знаю почему. На Комодоре он бы отобразился как $F, т.е. светло-серый, но поскольку в нулевом тайле всегда пусто, он всё равно всегда отображается чёрным.

Post's attachments

tileset_0.png, 2.63 kb, 128 x 128
tileset_0.png 2.63 kb, 262 downloads since 2019-11-06 

tileset_1.png, 1.59 kb, 128 x 128
tileset_1.png 1.59 kb, 249 downloads since 2019-11-06 

tileset_2.png, 1.56 kb, 128 x 128
tileset_2.png 1.56 kb, 249 downloads since 2019-11-06 

tileset_3.png, 1.48 kb, 128 x 128
tileset_3.png 1.48 kb, 242 downloads since 2019-11-06 

tileset_4.png, 1.49 kb, 128 x 128
tileset_4.png 1.49 kb, 250 downloads since 2019-11-06 

17 Отредактировано SnakE (07-11-2019 14:15)

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

Комнаты расположены на треках $02-$10 и $15-$22 на секторах 0-8, с некоторыми исключениями, которые видно на карте комнат. Одна комната всегда занимает один сектор.

Описатель комнаты состоит из трёх частей.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=672&download=0
Первой идёт упакованная RLE картинка комнаты. Если у байта сброшен старший бит, то это номер тайла, который повторяется один раз. Если старший бит установлен, то младшие 7 бит -- номер тайла, а следующий байт -- количество повторов минус 1. Т.е. 0 -- один повтор (не используется), 1 -- 2 повтора и т.д. Как видно, фон комнаты может использовать только младшие 128 тайлов набора. RLE часть всегда распаковывается в прямоугольник 40х20, всего 800 тайлов.

http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=673&download=0
Сразу за картинкой идёт список объектов. В этом списке бывает 3 вида записей:

  1. $6N LL HH A1 A2 ... AN
    Старшие 4 бита первого байта равные 6 обозначают текстовый фрагмент. В этом случае младшие 4 бита N задают длину фрагмента. Следующие два байта LL и HH формируют 16-битное число $HHLL = X + Y*40 + $C000 где X и Y -- координаты начала текстового фрагмента на экране. Скорее всего, на Комодоре это буквально адрес видеопамяти, где нужно начать отображение. Далее идут N байт -- номера тайлов в тайловом наборе. На каждый байт выводится два тайла: указанный и соседний, т.к. буквы в Алисе занимают по два тайла в ширину.

  2. $XX LL HH
    Если старшие 4 бита не равны 6, XX задаёт номер интерактивного или анимированного объекта, например двери, зеркала, лестницы, каминных часов и т.д. Следующие два байта описывают координаты объекта так же, как в варианте 1. На моей карте комнат координаты объектов обозначены зелёными кружками.

  3. $E0
    Этот код обозначает конец списка объектов.

Далее идёт блок данных по фиксированным смещениям.

Младшие 4 бита байтов $FB, $FC, $FD и $FE задают подстановку цветов $3, $4, $E и $5 соответственно. Т.е. если согласно палитре основного набора тайл следует отобразить комодоровским цветом $E, вместо него тайл отображается цветом, заданным 4 младшими битами байта $FD описателя комнаты. Так обеспечивается многообразие цветовых гамм комнат при фиксированной основной палитре. Подстановка не действует на первые 32 цвета палитры, задаваемые дополнительным набором тайлов.

Старшие 4 бита байта $FB задают номер дополнительного набора тайлов.

Post's attachments

background.png, 2.06 kb, 320 x 160
background.png 2.06 kb, 241 downloads since 2019-11-06 

objects.png, 885 b, 320 x 160
objects.png 885 b, 254 downloads since 2019-11-06 

18 Отредактировано SnakE (07-11-2019 14:07)

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

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

  • У всех тайлов отрезается левый столбец, чтобы получились тайлы 7х8.

  • Кажому цвету Комодора поставлена в соответствие заливка из цветов, доступных Эплу.
    http://forum.agatcomp.ru//misc.php?action=pun_attachment&item=675&download=0

  • Тайлы в диапазоне $77-$B3 (буквы и рамки) рисуются на белом фоне вместо чёрного, чтобы улучшить чёткость текста. Исключение составляют цвета $8, $A и $F: тайлы в этих цветах всегда рисуются на чёрном фоне, даже если это буквы.

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

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

Post's attachments

palette.png, 340 b, 128 x 16
palette.png 340 b, 247 downloads since 2019-11-06 

Attachment icon rooms_a2.png 1 mb, 131 downloads since 2019-11-06 

19

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

Сергей, нет слов! Класс!

20

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

Снимаю шляпу :)

21

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

Спасибо!

Я немного дополнил текст, чтобы были понятнее детали.

Во многих комнатах после объектов есть ещё какие-то данные. Это может быть мусор, а может быть какая-то часть логики комнаты. Например, непонятно, как игра определяет, какие тайлы проходимые, а какие нет.

22

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

Ещё немного, и данных будет достаточно, чтобы сделать полноценную реплику на современной платформе :)

23 Отредактировано Wierzbowsky (08-11-2019 02:31)

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

Круто! Reverse engineering at its best!

24

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

SnakE пишет:

Следующие два байта LL и HH формируют 16-битное число $HHLL = X + Y*40 + $C000 где X и Y -- координаты начала текстового фрагмента на экране. Скорее всего, на Комодоре это буквально адрес видеопамяти, где нужно начать отображение.

Посмотрел карты памяти С64 - с адреса С000 идут 4 килобайта обычной памяти. Может быть, она используется в качестве промежуточного буфера...

25

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

AlexBel пишет:
SnakE пишет:

Следующие два байта LL и HH формируют 16-битное число $HHLL = X + Y*40 + $C000 где X и Y -- координаты начала текстового фрагмента на экране. Скорее всего, на Комодоре это буквально адрес видеопамяти, где нужно начать отображение.

Посмотрел карты памяти С64 - с адреса С000 идут 4 килобайта обычной памяти. Может быть, она используется в качестве промежуточного буфера...

Угу.