Перевод Spyro 3: Взлом и программы
|
|
aleksusklim | Сообщение # 1 Воскресенье, 26.06.2011, 14:19 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Работа с текстовой частью перевода введётся на code.google.com/p/spyro3-rus, обсуждение перевода (а не взлома) В темеПеревод Spyro 3: Текст В этой теме происходит обсуждение перевода, а также создание софта для потрошения игры. Важные сообщения: Структура WAD-файлов Спец. символы и File Paint 1 | Извлечение и добавление текста | О звуке | В продолжение о звуке | Вариант перевода Buzz's Dungeon и Midday Gardens
Сообщение отредактировал aleksusklim - Среда, 29.04.2015, 19:51 |
|
| |
aleksusklim | Сообщение # 121 Четверг, 08.03.2012, 07:35 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Что осталось переводить? Хм… первый мир вроде бы частично переведён. Со второго мира переводы наверно есть на нашем Google Code. Следовало бы кому-нибудь выложить сюда более-менее готовые варианты переведённых уровней. По-моему, проще сказать, что ещё точно не переводились уровни третьего мира. Технология перевода уже описана в этой теме.
По поводу Wad Manager. Я придумал, как можно сделать ещё одно значительное улучшение. Модуль Concatenator может работать в потоковом режиме доступа. При этом все файловые операции копирования будут происходить практически мгновенно. И я хочу переписать Delphi с такой функцией. А параллельно переименовать программу (в «AllWadMngr – AWM») и исправить в ней все ошибки, которые кто-то должен был найти… Поэтому я до сих пор надеюсь, что хоть кто-нибудь опробует её на деле. Очень удобно для вытаскивания подуровней, чтобы извлекать антологию русских шрифтов. Путь любой, у кого есть хоть одна любая русская версия Spyro3, предоставит нам шрифт из неё. Обрабатывать файл по-прежнему через паскаль.
Перепись Pascal на C# поставила меня перед неприятным фактом. Оказывается, ни одна готовая исполняемая программа на нём (семейство Microsoft Visual Studio) не будет работать на операционной системе без .NET Framework v2.0. А это сильно ограничит их использование… Плюс к этому, модуль замораживания потоков тоже использует C# и выдаёт ошибку при запуске (но продолжает работу после нажатия ОК). Значит мне следует либо забить на это и продолжить писать на C#, либо полностью от него отказаться.
Добавлено (08.03.2012, 07:35) --------------------------------------------- Вот он я нашёл множество ошибок во всех моих программах, создал их новые версии, перепроверил всё, экспериментировал с текстом – и долбился странных, но интересных результатов.
Поздравляю всех женщин с их днём! И вопрос: сколько процентов покажет соотношение пользователей этого сайта по формуле { (кол-во. Драконессы) / (кол-во. Драконы) * 100% } ?
А я сейчас залью все новые версии программ, включая великолепный Текст-О-Вытаскиватель v 2.1 (скриншот), и подробно опишу проведённые опыты.
Мы продвинемся немного вперёд! Ждите…
Добавлено (11.03.2012) ---------------------------------------------
Serlutin, спасибо.
____________________
Ну что, друзья! Вот я и совершил множество великих деяний в пользу нашего перевода игры. Может они и не выведут проект на новый уровень, но толчок к развитию дадут однозначно.
Мой коммент будет длинный… но чрезвычайно полезный. Начну с модулей и программ, а закончу глюками и шрифтом. Поехали…
Мои модули – пакеты расширения.
Вот готов Concatenator v1.2. В нём произошли следующие изменения: «Теперь конкатенация файлов с защищённых носителей и файлов только для чтения проходит всегда успешно. В обычных функциях использован новый потоковый сверхбыстрый метод доступа. Отныне первичное извлечение в пустой файл корректно вызывает функцию ядра, вместо стандартной file_copy. Исправлены ошибки возвращаемого значения. Изменено поведение некоторых функций. Уменьшены зависимости модуля и упрощён gml-код. Удалена скрытая функция проверки вызовов. DLL откомпилирован с дополнительными директивами и обрезан после построения. Осуществляется проверка на ошибочное чтение и запись в один и тот же файл как на уровне GML, так и внутри DLL.» – из моей справки к модулю. Вообще, я просто запарился справки писать! Хоть бы кто прочитал…
Sound Thread v1.2 также значительно похорошел: «Главная модернизация – полностью удалено ядро C# и все связанные с ним программы. Теперь не требуется .NET Framework! В связи с этим ещё более ускорена загрузка приложения, а также отныне модуль нормально работает и в отладочном режиме! Добавлены функции проверки состояния и работоспособности модуля. DLL откомпилирован с директивами и урезан. Значительно уменьшены зависимости, и полностью удалено обращение к реестру. Также убрана GML инициализация.» – вот такую версию модуля я буду внедрять во все свои будущие программы (которые не используют звуки), потому что ошибок с ним я ещё не замечал. Надеюсь, всё будет работать, плюс меня радует размер – 12 Кб! (в сравнении, Конкатенатор весит 52 Кб).
Ещё я создал один полезный модуль Dialog Async v1.0, который содержит EXE написанный на AutoIt (знакомы?) и отображает различные диалоги, сообщения и окошки. Но основная суть в том, что во время показа диалога главная программа на Game Maker остаётся рабочей – не ожидает ответа пользователя, а продолжает выполняться. Это особенно выгодно для сетевых игр/программ: если они постоянно пингуют друг друга – то никак нельзя зависать на диалогах. При ответе пользователя, AutoIt передаёт результат через реестр для Game Maker, а тот уже обрабатывает его и генерирует нужное событие. Плюс ко всему, AutoIt может присваивать таймаут для окошек сообщений (походу, MessageBoxA из user32.dll), по истечении которого окошко самозакрывается (смотрите как удобно: например, копируем что-нибудь. Потом минут через пять выскакивает вопрос о замене существующего файла. Так ведь копировать ещё полчаса осталось! Поэтому окошко через некоторое время, например минуту, само отвечает «Да» и продолжает копирование – было бы очень полезно, разве нет?). То есть, кроме асинхронных диалогов можно задавать ещё и синхронные. Только всё равно удобнее, чем встроенными средствами от Game Maker – например, в окошко выбора каталогов можно задать папку, выбранную по умолчанию (что отсутствует во всех моих предыдущих программах – приходилось каждый раз идти от корня дерева). Но, в итоге, необходимость применения этого модуля для НАС под большим вопросом, ведь мои программы призваны ковырять ресурсы, а не выдавать красивые диалоги. Ну и что? Модуль экспериментальный, и я считаю, что могу его применить к своим программам для перевода игры, чтобы, так сказать, испытать его в полевых условиях. Одна беда – размер на 220 Кб, хотя я и урезал, и через UPX сжимал…
Кто-то наверно задастся вопросом, зачем, дескать, я публикую сюда информацию о модулях, если они сами по себе не имеют никакого отношения к проекту перевода. Ведь нам нужны только EXE, а уж из чего они состоят – не важно. Как бы ни так! Важно!! И я в любом случае описал бы работу каждого модуля (кстати, у них у всех есть подробные справки). Где угодно. Могу на своём сайте, могу зарегаться на форуме по Game Maker, могу завести блог на Твиттере и писать туда… Но что толку? Сюда, на этот форум, я в любом случае поставлю ссылку на то место, где описал работу модулей. Так может и не париться? Не заморачиваться со ссылками, а писать всё здесь? А если захочу показать их кому-то ещё, то просто сошлюсь сюда, на форум. Так разве это плохо?
Все мои модули структурированы так: в папке лежит RTF справка, GED исходник пакета расширения, GEX сам готовый скомпилированный пакет, TXT поля модуля, GML код функций на Game Maker, DPR делфи код, AU3 скрипт Autoit, EXE от AutoIt, DLL от Delphi и TXT каждая gml функция отдельно + списки функций для импорта в Extension Maker. Но, разумеется, три разных пакета расширения имеют разные наборы файлов отсюда.
Я это всё говорю на тот случай, если кому-нибудь нужно будет модифицировать GMK моих программ. Для этого сначала необходимо проинсталлировать пакеты расширения в сам Game Maker (файлы GEX). Но для обычного запуска любой моей программы никакие пакеты расширения не требуются, только самодостаточный (stand-alone, говоря по-русски) EXE-файл.
Вот Extension Maker, через который я компилировал модули (оригинальный, неизменённый): http://klimaleksus.narod2.ru/Files/extmaker.zip (817 Кб)
Теперь перехожу к самим программам.
All Wad Manager v2.2! «Изменения третьего издания:
– Использование новой версии Конкатенатора позволило производить все операции с файлами за очень короткие промежутки времени – то, что раньше происходило за час, теперь пройдёт за минуту! – Из-за ошибок в Конкатенаторе в предыдущей версии было невозможно работать с WAD, находящимся на защищённом от записи носителе (извлечённые файлы были пусты). Теперь это возможно. – Новый модуль Sound Thread V1.2 значительно уменьшил потребление ресурсов. – Добавлена кнопка получения адресов субфайла относительно WAD. – Исправлена серьёзная ошибка, возникающая при задании абсолютного виртуального адреса доступа, из-за которой не закрывался рабочий файл, что в конечном итоге приводило к парализации всех функций. – В этом же установлении виртуального адреса доступа «От … до …» исправлена оплошность ошибочного определения адресов по нажатию кнопки «Войти» вложенной структуры WAD – как для консольного режима, так и для графического. – Ошибка перехода внутрь вложенного WAD после явной установки адреса… Вообще-то, такое даже и не планировалось (и никак в консольном), но оказалось реализуемым. Глюк появлялся при возврате, когда обрезалось «WAD:\?». Теперь используется «WAD:\?\», но технология всё равно стрёмная. – Доработан консольный режим для использования в пакетных файлах. Никаких ошибок больше не возникает. – Добавлен новый ключ командной строки /F, удаляющий пустые файлы.»
В общем, версия улучшенная, советую использовать только её. Плюс уже описанная добавленная кнопка получения адресов субфайла относительно WAD поможет скопировать местонахождение субфайла для нового Текст-О-Вытаскивателя. Я проверял режим командной строки для AWM – работает чётко. Справка по ключам не изменялась, команды те же. И я провёл абсолютную сборку с нуля нашего (моего) WAD3.WAD. Сначала распаковал по файлам. Потом создал новый WAD (не оригинальный, а холостой!) на 256 субфайлов (2048 байт заголовок) и добавил в него все распакованные оригинальные субфайлы через промежуток – ноль, кратный на – ноль. Всё дело заняло для All Wad Manager v2.2 не более пары минут (притом как Wad Manager v2.1 делал это за полчаса, а Wad-Xtractor v1.2 – вообще часа за три) и MD5-хеш полностью совпал! Я могу с уверенностью сказать, что нормальный софт для распаковки и внедрения текстов у нас теперь есть: http://klimaleksus.narod2.ru/Files/AWM_2V2.rar (1,78 Мб)
Symbols Changer v1.3 – улучшенный Перетасовщик Символов. MrModez, думаю, прога совершенна. Лучше неё уже просто не пригодится! Вот изменения новой версии:
« – Создан режим командной строки. – Применена новая более совершенная версия экспериментального модуля. – Также использована новая версия Конкатенатора, что не влияет на результат. – Исправлена серьёзная ошибка при загрузке сохранённой таблицы: файл больше не самоуничтожается! – При обработке папок программа теперь нормально закрывает используемые дескрипторы поиска и всегда отпускает директорию. – При сохранении таблицы автоматически дописывается расширение .ini ».
Ссылка: http://klimaleksus.narod2.ru/Files/SYM_1V3.rar (1,83 Мб)
Да, улучшения незначительны. Но главная цель релиза v1.3 – избавление от старой версии Sound Thread v1.1, которая требовала .NET Framework. Больше таких амбиций нет. А чтобы не выпускать её «просто так», а создал режим командной строки. Парсер (а именно так я предлагаю «переводить» слово «Parse», обозначающее что-то вроде «обработка аргументов и ключей командной строки» или «подбор имён файлов по маске», ибо в русском языке такого слова просто нет, и оно переводится косвенно, типа «делать грамматический разбор». Ну вы поняли, парсер!) очень лёгок в использовании: SYM.exe "Table" "Source" "Desten" , где Table – ini-файл таблицы соответствия, Source – исходный файл, Desten – файл для сохранения результата. Они также могут быть каталогами, в этом случае обработке подвергнуться все файлы из папки Source\* . Проверено – работает. Только загрузка программы от Game Maker зачастую отбирает больше времени, чем сама обработка и выполнение, но это уже не ко мне, а создателям GML. Кстати, они как-то обещали в начале 2011-го, что скоро выйдет Game Maker 9, написанный на C# (надеюсь, что хоть он во framework не упрётся!). Я тут поискал… Обнаружил только комментарии, датированные началом 2011-го, в которых говорится, что скоро выйдет GM9… Но пока что текущая версия – 8.1. Не думаю, что стану её скачивать, потому что кряк, скорее всего, появится только к началу 2013-го…
Самое важное! Textus-Reader Текст-О-Вытаскиватель V 2.1! Это просто супер! Скачивать всем без исключения, если хотите переводить тексты игры: http://klimaleksus.narod2.ru/Files/TXTRDR_2V1.rar (2,06 Мб) (Во всех трёх архивах программ содержание такое: EXE – исполняемый файл, для работы нужен только он. Остальное – GMK и папки с исходниками используемых модулей – только для поддержания статуса open source, да для всех, кому интересно.)
И справку прочитайте. Но она длинновата получилась… Чем дублироваться и пояснять принцип работы, выложу сюда саму суть из неё:
« Единственная цель программы – вытаскивание текста из сложных структурированных файлов. Важную роль играет последовательность алгоритма поиска, который основывается на пяти массивах символов. Это даже не символы, а их коды от «0» до «255». Вам нужно сначала определить эти пять массивов, а затем анализировать интересующий файл. Вот как происходит поиск строк. Вообще-то, это могут быть не обязательно текстовые строки, а любые двоичные последовательности: РАН – [ НАЧ – СЕР – КОН ] – ВЫХ Таким образом, из файла выделяется последовательность байт, в которой первый символ содержится в массиве НАЧ, последний – в массиве КОН, всё между ними существует в массиве СЕР, а предшествует последовательности символ, имеющийся в РАН, притом, что следующий за последовательностью символ есть в массиве ВЫХ. Но только в том случае, если длина полученной последовательности не меньше минимального, но и не больше максимального значения. Для большей ясности вот внутренний механизм поиска. Он работает в двух режимах: ожидание начала и ожидание конца. Каждый следующий символ читается и обрабатывается, основываясь на предыдущем символе. Сперва читается всё подряд, до тех пор, пока не встретится символ из массива НАЧ. Тогда предыдущий символ обязан быть в массиве РАН (либо не существовать, когда это самый первый обрабатываемый байт). Если это так, то происходит переход в режим ожидания конца, а иначе – читается следующий символ и снова сравнивается. Режим ожидания конца сложнее, здесь происходят такие вычисления: – Если взятый очередной символ принадлежит массиву ВЫХ притом, что предыдущий был из КОН (либо из НАЧ, если текущая длина равна единице), то это место определяется как разрыв, и программа переходит обратно в режим ожидания начала. – Если взятый символ принадлежит СЕР или КОН, то продолжает ожидание конца, считывая следующий символ. – Иначе, при несоблюдении ни одного из условий, программа выбрасывается в режим ожидания начала без определения области, потому что получен невостребованный символ, который не может находится в строке. Также валидация предыдущего символа на наличие в КОН проходит при достижении конца файла. Если при определении области её размеры не укладываются в рамки, то программа переходит в режим ожидания начала и считывает следующий байт, без запоминания неверной строки. Таким образом, основную роль переключателей играют массивы НАЧ и ВЫХ. Промежуточная текущая таблица сохраняется в реестре. Вначале работы определите файл, с которым будете производить действия. Искать, извлекать и внедрять. Потом (если таблица уже создана или загружена), проверьте адрес доступа и пределы длины строк. Теперь нужно начинать поиск. Индексация файла хранится в памяти. Индекс сохраняется и загружается в текстовые файлы «.TextusReaderIndex», а таблица с массивами – в двоичные файлы «.TextusReaderTable». Дальше перед вами встаёт выбор, в какой форме получить результаты поиска. Вы можете разбить рабочий файл так, чтобы он весь был разделён на две группы последовательных файлов – со строками и с промежутками между ними. Тогда для сборки обратно уже не понадобится ни оригинальный файл, ни индексация (именно так работала старая версия программы). Ещё вы можете нарезать все найденные части по разным файлам. Но тогда для склейки будет нужен как рабочий файл, так и индексация. Аналогично, можно слепить всё найденное подряд в единый файл, либо разместить это построчно в текстовый документ. Причём для корректной работы построчного метода, все найденные части должны состоять только их текстовых печатных символов. Восстановление из строк и разлепление из одного файла, разумеется, тоже требуют оригинальный файл и индексацию, по которой он был расфасован. ».
Итог такой: в отличие от предыдущей версии, которая сразу кромцала файл, эта версия сначала анализирует его, а потом применяет или сохраняет части. И кстати, Файлострочник нам теперь определённо не нужен… нисколечко… (даже обидно, чувствую себя как создатель пейджера, глядящий на сотовый телефон… хотя со мной такое всё чаще происходит… ведь В-Ад-Перемещатель теперь тоже излишен…). Не нужен, потому что новый Текст-О-Вытаскиватель сам следит (благодаря прокрустиану Конкатенатора) за длиной строки. Нам больше не страшны пробелы на концах строчек или лишние буквы – они будут обрезаны. Также не страшно отсутствие нескольких символов: внедрено будет просто только то, что есть. Получается, что мы не «заново собираем разбитый файл», а вносим изменения в исходный – и его объём уже никак не измениться (а то раньше – на байт ошибся – коту под хвост 500 файлов…). И алгоритм поиска совершенно другой, который меньше «мусорит». Плюс, я избавился от звёздочек перед английскими фразами, об этом позже.
Всё. Работу над софтом для текстовой части перевода можно считать законченной (…что там остаётся? Графика да звук… расплюнуть!), потому что все действия сводятся к таким шагам: – Через AWM извлечение нужного суб-субфайла уровня (чётные уровни с 98 по 170 и чётные подуровни от 4 до 10). Хотя можно даже не извлекать, а воспользоваться новой кнопочкой получения абсолютного адреса. – Через TXTRDR обработать по нашей-заданной-экспериментальной (ну это пока… да хотя наверное она итак сгодится!) таблице массивов этот подуровень, или весь WAD по извлечённому абсолютному адресу. – Перевести выходной построчный текстовый документ на русский язык. – Обработать его через SYM по таблице соответствия (похоже, пока что от _русских_пиратов_, потому что шрифт у нас ещё не свой). – Залить результат обратно в TXTRDR, а подуровень – в WAD через AWM (либо сразу в ад WAD, если использовался абсолютный адрес без выгрузки).
Рутинная работа может быть выполнена автоматически через интерфейс командной строки и batch файлы сценариев. Ведь TXTRDR также умеет перехватывать параметры! Его парсер совершенно отличается от обработчиков двух других программ как внешне, так и внутренне. Ключи (а их немало – читайте справку) могут следовать в любом порядке и количестве. Можно даже задавать саму таблицу через перечисление байт нужного массива. Абсолютно все функции Текст-О-Вытаскивателя могут быть реализованы автоматически без показа графического окна. Мало того, они ещё и дублированы для консольного режима отдельно (то есть, не как в AWM, где парсер просто вызывает эмуляцию нажатий по кнопкам скрытого окна) – весь результирующий код находится в одном объекте.
Надо только продумать правильные команды BAT файла, чтобы быстро извлекать, конвертировать, внедрять, прожигать и проверять игру!
О поиске пяти символьных массивов.
…
…
*Продолжение в комментарии ниже*
but nobody came
Сообщение отредактировал aleksusklim - Воскресенье, 11.03.2012, 22:43 |
|
| |
Serlutin | Сообщение # 122 Воскресенье, 11.03.2012, 21:52 |
Взрослый Дракон
Летописец
«2337»
Где: Не в городе Драконов
|
↓↓↓
|
|
| |
aleksusklim | Сообщение # 123 Воскресенье, 11.03.2012, 22:52 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
*Начало в комментарии выше*
…
…
О поиске пяти символьных массивов.
Текст-О-Вытаскиватель работает по новому принципу, и теперь возникла необходимость отыскать такие настройки для работы, которые не упустят ни одну строку, но при этом захватят как можно меньше двоичного мусора. Для этого мне нужно точно знать, какие символы присутствуют в строке, каких там никогда нет, какие предвосхищают строку, и на каких она заканчивается (пять массивов). И главное решение пришло мне интуитивно… Game Maker плохо работает с двоичными файлами. Но здорово с текстовыми. Я могу собрать несколько строк в одну, разделяя их CRLF – chr(13)+chr(10), и тогда при единственном вызове функции записи строки в файл, я на самом деле запишу сразу несколько строк. И считываться они будут по очереди. Потому что «строка» в Game Maker – это любая последовательность любых байт любой длинны. Там могут быть и непечатаемые символы от 0 до 30. То есть через строки было бы удобнее читать и писать в двоичные файл, если заранее определить количество «символов», которые я хочу прочесть… Ну я и попытался написать DLL на делфи, который принимал бы строку и писал её в файл. Или читал заданное количество байт в строку и возвращал её в Game Maker. Но появилась проблема… PChar! Строки приходят в DLLтолько как PChar, а это нуль-строка (null-terminated), у которой на конце всегда стоит 0х00 (NUL, нулевой байт). И она обрезается по дороге на месте первого встречного нулевого байта. Передачу строк в других форматах не поддерживает сам Game Maker… Ну я ещё попытался автозаменить все «нули» на какую-нибудь другую случайную последовательность байт, чтобы DLL автозаменил её обратно в «нули», но как выяснилось, функция gml автозамены (string_replace_all) просто гонит на строках с непечатаемыми символами! Подсчёт подстрок канает, вычисление позиции первой катит, а замена – полный крах! Видимо, это ещё одна ошибка Game Maker. Я тогда ещё попытался передавать данные через реестр, но единственный поддерживаемый тип «REG_SZ» тоже null-terminated… …И вы все вопрошаете, зачем же я всё это рассказываю? А моя неудача подсказала мне предположение, что все строки в Spyro3 могут быть тоже null-terminated! Это значительно бы упростило их обнаружение и получение.
Проверил – да!! Но не только 00h, ещё и FFh (255 – строчная русская «я») – то есть, строки кончаются либо на NUL, либо на DWORD «-1» (FFFFFFFF), который часто встречается как разделитель объектов. Итак, массив ВЫХ состоит из 0 и 255. Как найти остальные массивы? Есть отличная функция WinHex > Specialist > Gather Text… , которая извлекает всё, что похоже на строки. О-о-очень сильно мусорит… Но зато 100% вытащит все строчки. Тогда я придумал такую схему: 1) Предположить пять массивов «на глаз» 2) Извлечь ими ВСЕ строки из игры 3) Обработать их Перетасовщиком Символов, чтобы превратить в звёздочки («*» – 42 в десятичной) 4) Загрузить строки обратно в WAD (вернее туда, откуда брал) 5) Gather Text – и посмотреть, какие строки остались. 6) Если что-то осталось незаменённым, то вручную просмотреть его, и перейти к пункту с улучшенной таблицей. 7) Если извлеклось всё, то вручную удалить весь мусор из файла с чистыми строками. 8) Через WinHex утроить содержимое файла (копировать и вставлять всё в конец) 9) Добавить часть файла TextusReaderTable, которая отвечает за массив СЕР (между вторым и третьим блоком 01–00, выступающим в качестве разделителя массивов) 10) «Анализировать» утроенный-модифицированный файл через WinHex (Tools > Analyze File), сохранить отчёт. 11) Посмотреть в этом отчёте все байты, которые повторяются один раз (отсутствуют в извлечённом тексте, но существуют в таблице) 12) Удалить их из массивов и вернуться к пункту 2.
И так до тех пор, пока не останется «идеальная» таблице, извлекающая всё, что нужно, но ни более того. И я это сделал! Однако мой пиратский WAD3.WAD может слегка отличаться от WAD.WAD из Greatest Hits, поэтому её нужно будет слегка обтесать. Вот сведения о массивах: РАН. Чаще всего – 00h. Но бывает и 1, и 2, и 3… Даже 10 (0Ah), 12, 14… и 13, 15, 20… Да мне надоело!! Ставлю сразу всё от 0 до 31 (0x00 0x1F) – все непечатаемые символы. Но это ещё не всё! Иногда встречается «ю» и «я» (FE и FF), также «з» – 231. И почему-то кавычка типа «„» – 132. СЕР. Все допустимые символы для игры: « !&'()+,-.0123456789:<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\^abcdefghijklmnopqrstuvwxyz{}к». Только они встречаются в моих пиратских строках. Вопрос первый: где звёздочка? Она допустима… И если её ставить, то в игре появляется звёздочка. Но по непонятной мне причине, ни в одной фразе, ни в одной строке ни одного уровня, ни атласа и ни менеджера карт памяти, звёздочка не встречалась! Зато постоянно в мусоре… Вот я и принял решение убрать её из таблицы. Вопрос второй: что это за кирильская «к» (234) на конце? А это русские пираты так обозначали твёрдый знак… Но вместо него появлялась «В». Не знаю, как в GH, но в моей версии без «к» никак. (в рифму!) РАН ещё раз. Многие стоки начинались со звёздочки, которая не отображается в игре. Значит это никакая не звёздочка, а двоичный байт, начинающий строку! Тогда добавляем его в РАН. Обнаруживаются строки, начинающиеся с «+*»… Ладно, добавляем туда ещё и плюс. И с «;» тоже… Хорошо, точку с запятой также. НАЧ. Это доработанная версия СЕР, из которой удалены «+» и «;». КОН. Это тот же СЕР, только без «@», потому что собачка + цифра определяют цвет шрифта, и @ никак не может быть последним символом. Может и что-нибудь ещё, надо просто поэкспериментировать.
А сейчас задумайтесь: как я извлёк ВСЕ строки из огроменного WAD? А я хитёр и находчив! Я использовал BAT сценарий, который выполняет такие шаги: 1) Извлекает из WAD субфайлы 2 и 179 (менеджер карт памяти и атлас). 2) Извлекает суб-субфайлы с 4 по 10 из чётных субфайлов от 98 до 170. 3) Забрасывает их по группам в новые WAD, группы строятся так: в первой – четвёртые подуровни (сам мир) уровня 98 (Sunrise Spring Home), 100, 102 и так до 170; во второй – шестые подуровни (первая мини-игра, если она есть) из уровней 98, 100, 102 и так до 170; в третий – восьмые подуровни, и в четвёртый – десятые. 4) Получает текст из файла атласа по адресу от 0 до 5000, заливая его подряд в один файл (вообще-то, весь текст игры находится не только в этом атласе, карте памяти и уровнях, а ещё довольно много где. Следует потом поискать всё тщательнее…) 5) Создаёт ещё один большой WAD, закидывает туда субфайл карт памяти, текст из атласа и четырё сборных WAD с подуровнями всех уровней. 6) Производит поиск текста по таблице и извлекает его (я взял нижний предел длины на 10 символов, что бы получить чистые строки и НИСКОЛЬКО мусора, ведь такое чревато повреждением. Это лишь эксперимент, для нормального перевода потребуется 3 или даже 2 буквы в строке. Но я сразу обезопасил себя десятком!) 7) Обрабатывает текст, превращая все символы в звёздочки (ну кроме 13h и10h, чтобы CRLF переносы строк не нарушить) 8) Восстанавливает эти звёздные строки в наш большой WAD (потому что Gather Text не считает ******* за строки и не отобразит их. А если бы я брал другие символы, то просматривать конечные результаты поиска WinHex было бы сложнее) 9) Извлекает из нашего WAD всё, что в нём было до изменения: менеджер карт памяти, текст из атласа и 4 WAD с уровнями. 10) Восстанавливает строки из изменённого файла строк атласа в оригинальный субфайл атласа. 11) Хитро-хитро перенумеровывая достаёт из четырёх изменённых WAD последовательно все подуровни всех уровней. 12) Внедряет обратно в оригинальный WAD готовенькие субфайлы атласа и меню карт памяти (179 и 2) 13) По одному вставляет все изменённые подуровни всех уровней игры (через двойной цикл FOR с включенной отложенной обработкой переменных и объединением операторов… наверное, это и есть «сердце» всего файла сценария, я горжусь этой строкой: cmd /V:ON /C "for /L %%j IN (4,2,10) DO for /L %%i IN (1,1,37) DO (set /A cnt=2*%%i+96&%awm% %wad% Put %pat%res_%%j_%%i.txt %%j /H /P !cnt!)" весь остальной BAT я выложу ниже ссылкой, потому что в виде текста он тут не будет иметь смысла. Но эту строчку я показал, чтобы всем стало ясно, что писать досовские сценарии даже для моих собственных программ не так-то просто!)
После всего это мы получаем, во-первых, файл с чистыми строками для экспериментов по качеству таблицы, а во-вторых – оригинальный WAD3.WAD, в котором ВСЕ строки заменены на «*»! Не пора ли его опробовать?
Эх, Спайро! Что с тобой случилось?
После прожига образа игры, она… запустилась! И даже нормально отображала буквы. Все строки, которые были длиннее 10-ти символов, состояли полностью из звёздочек! Тогда я запустил новую игру. Всё ОК, Хантер убегает, я подхожу к Sunny Villa, чтобы «поболтать» с Бианкой… И тут игра срывается, переходит к видео #4 «Слабые чувства» («No Hard Feelings»), где Кошельков Толстосум отпускает Шейлу. После этого я оказываюсь перед открытым порталом в Альпы Шейлы, где, почему-то всё ещё стоит наш медведь-мошенник. Но прикол был в другом! Порталы Котика и Роки-Тики были уже открыты. Я заглянул в атлас: http://klimaleksus.narod2.ru/Files/STARS/Stars_1.jpg Да я миллионер!! Пошёл к воздушному шару, где меня встретила назойливая Зоя (хм, «назойливая Зоя» – ей идёт!), предупреждающая о пиратском диске: http://klimaleksus.narod2.ru/Files/STARS/Stars_2.jpg И это притом, что в моей версии она вообще никогда не появлялась! А за ней – ракета вместо шара (но с палками). В меню: http://klimaleksus.narod2.ru/Files/STARS/Stars_3.jpg Лечу к Полуночной Горе. Попадаю к третьему боссу. Замечаю, что вместо прицела стоит огромный нолик: http://klimaleksus.narod2.ru/Files/STARS/Stars_4.jpg Дальше я много носился по мирам, и точной хронологии действий не помню. В атласе деньги перекочёвывали из уровня в уровень при каждом удобном случае: http://klimaleksus.narod2.ru/Files/STARS/Stars_5.jpg http://klimaleksus.narod2.ru/Files/STARS/Stars_6.jpg Почему имена уровней видимы, а миров – нет? Почему я уже могу перелетать автоматом на посещённые уровни, а Спаркс – бить бочки? Самому хотелось бы знать… При разговорах звёздочки заполоняли одну строку в несколько слоёв: http://klimaleksus.narod2.ru/Files/STARS/Stars_7.jpg По углам раскидывались части больших цифр. Ещё такой глюк: если прервать разговор нажатием «Старт» или «Крест», то игра просто зависала – панель разговора не исчезала, управление недоступно. Но если дать собеседнику «выговориться» до конца, то всё отпускало меня без проблем. Пытался перезагрузить игру: http://klimaleksus.narod2.ru/Files/STARS/Stars_8.jpg Много же процентов мне зачислили! Через ArtMoney при новой игре попробовал обойти Бианку, и сразу пролететь к воздушному шару, чтобы посмотреть на него. Всё как при обычной игре, порталы закрыты: http://klimaleksus.narod2.ru/Files/STARS/Stars_9.jpg Но при приближении к уровню Шейлы, игра опять вызывало ролик, а возвращала уже с открытыми порталами. Но причём не всеми, а только двумя, рядом с которыми стояли жители: http://klimaleksus.narod2.ru/Files/STARS/Stars_10.jpg Видно, что уровень спидвея закрыт, а Берег Ракушек – уже открыт, хотя у меня нет яиц вообще! Проверил демку: http://klimaleksus.narod2.ru/Files/STARS/Stars_11.jpg Потом стало интересно, можно ли убить Колдунью. Ворота оказались открыты (хотя многие порталы – нет. Это похоже опять связано с тем, что их открывает Бианка при разговоре, который со звёздочками не может состояться). Но нет, Колдунья всё равно выбрасывает в первый мир, где опять случается глюк с видео и появлением ракеты. Вот я и попробовал сходить к Колдунье несколько раз подряд. Ничего особого не произошло, и Спайро-Буддой я тоже не стал, к сожалению… Прикольнее выглядит портал Супер-Бонуса: http://klimaleksus.narod2.ru/Files/STARS/Stars_12.jpg Не то чтобы закрыт… но и не совсем открыт, однако войти можно. Внутри все двери под замком (что странно, учитывая «открытость» большинства всего). Через ArtMoney прихожу ко второй Колдунье – её побеждаю без проблем. Глюк зелёного Спарска, кстати, появляется сразу при достижении четвёртого мира. Он никак не связан с сохранением игры. Пока я с золотым Спарксом первый раз дрался со Скорчем, Бентли просто морил меня голодом, я то и дело проигрывал! А когда уже переколесил по всем мирам пока у меня все уровни не позакрывались и не попроподали миры – в ещё одной вынужденной битве со Скорчем Бентли решил меня, наверное, закормить до смерти курятиной! (вечнозелёный Спаркс, как вы знаете, предпочитает быть на диете…) Рамки «паузы» также из цифр: http://klimaleksus.narod2.ru/Files/STARS/Stars_13.jpg Бентли уже отпущен (и доступны его мини-игры), но Толстосум чего-то хочет всё равно: http://klimaleksus.narod2.ru/Files/STARS/Stars_14.jpg Пока летал по мирам, видел сломанную ракету: http://klimaleksus.narod2.ru/Files/STARS/Stars_15.jpg И всем знакомый ракетошар: http://klimaleksus.narod2.ru/Files/STARS/Stars_16.jpg Ещё появлялись странные ломаные текстуры на картинках заставки уровней при самом-самом их исчезновении: http://klimaleksus.narod2.ru/Files/STARS/Stars_17.jpg http://klimaleksus.narod2.ru/Files/STARS/Stars_18.jpg Пытался отследить, куда уходят деньги: http://klimaleksus.narod2.ru/Files/STARS/Stars_19.jpg Но в уровне всё нормально, все бриллианты на месте, притом что в атласе: http://klimaleksus.narod2.ru/Files/STARS/Stars_20.jpg А ещё у меня иногда не плюсовалось к моему общему количеству камней то, что я набрал в уровне (когда Спайро летит на локацию, и самоцветы сыпятся сверху вниз). Да что там «не плюсовалось»! Мне иногда ОТНИМАЛИ камни из мешка (написано было, мол, набрано «-100» – и сотню забирали…)
Что ж, глюки я списал на факт наличия «звёздочки» вначале или конце строки, где её не должно быть, потому что это может быть что-то вроде флага указателя игре о достижении каких-то целей. Тогда я перестроил все действия с файлами, уже заменяя все буквы не на звёздочки, а на латинские «A». Потому что это – обычная буква, и ничего не может случиться: http://klimaleksus.narod2.ru/Files/STARS/Stars_21.jpg Стартую новую игру, сразу бегу к Бианке, но поговорить с ней мне опять не дают «Слабые чувства». Вываливаюсь и сразу заглядываю в атлас: http://klimaleksus.narod2.ru/Files/STARS/Stars_22.jpg Да я уже мультимиллиардер! И такое одинаково для всех непосещённых уровней: http://klimaleksus.narod2.ru/Files/STARS/Stars_23.jpg Страница взята в момент перелистывания, иначе не видно всего числа: http://klimaleksus.narod2.ru/Files/STARS/Stars_24.jpg Тогда я делаю два предположения о происхождении глюков: 1) Они вызваны тем, что я задел двоичный мусор, когда заменил все фразы, что привело к повреждению логики игры. 2) Всё только из-за того, что слова не могут быть перенесены на следующую строку по причине отсутствия пробелов между ними, ведь все предложения действительно записаны «в одно слово».
Чтобы убить сразу двух зайцев, я повышаю предел минимальной длинны до 15-ти символов, а замену теперь выполняю целиком на пробелы: http://klimaleksus.narod2.ru/Files/STARS/Stars_25.jpg Глюков нет! Разговоры не зависают, видео не показывается, Бианка злится, переходные картинки не ломаются, ракета не появляется, денег нет… Даже скучно немного… Атлас: http://klimaleksus.narod2.ru/Files/STARS/Stars_26.jpg «Миры Спарска» видимы, потому что не захвачены пределом в 15 символов. Пора проверить, в чём же именно была причина глюков. Перестраиваю файлы, восстанавливая минимум опять на десятку, но оставляя пробелы: http://klimaleksus.narod2.ru/Files/STARS/Stars_27.jpg Глюков нет. Значит, во всем были виноваты именно переносы строк. Следует «разбавлять» буквы пробелами, чтобы игру не швыряло на ровном месте, но это не будет интересно. Атлас чист: http://klimaleksus.narod2.ru/Files/STARS/Stars_28.jpg Порталы закрыты: http://klimaleksus.narod2.ru/Files/STARS/Stars_29.jpg И шар в порядке, и пауза (словно я вообще ничего не заменял): http://klimaleksus.narod2.ru/Files/STARS/Stars_30.jpg На этом глючные опыты были закончены.
Честно говоря, от всех этих глюков я ждал разукрашенную ракету, вихрь перед замком Колдуньи и Спайка на арене Скорча! Со мной такого не случилось, но может повезёт вам? Скачайте мой bat сценарий из этого архива (читайте «Actions.bat» сперва Блокнотом, ведь внутри – инструкция): http://klimaleksus.narod2.ru/Files/MyBatch.zip (7 Кб) А в этом архивчике есть ещё и всё остальное! Наша таблица для извлечения текста, сопоставление символов для русских пиратов, таблица звёздочек и пробелов, да последовательнобайтный файл таблицы ACSII. Плюс – файл «artmoney.amkey», который я, кажется, забыл добавить в архив ArtMoney, что не позволяет запускать программу… Странно, что мне об этом никто не сказал! Вот этот файл, скопируйте в папку ArtMoney и попробуйте: либо заработает, либо он привязан только к моему компу (что вряд ли).
Пора взламывать шрифт!
Чтобы раз и навсегда определить, какой байт отвечает за какой цвет в шрифте, можно сделать так: 1) Замазать все буквы единым цветом в градациях серого, например, RGB(1,1,1) 2) Внедрить, прожечь, запустить. 3) Отскриншотить надпись. 4) Изменить цвет букв на RGB(2,2,2) 5) Перейти к пункту 2. 6) Продолжать увеличивать цвет до белого RGB(255,255,255). 7) Выкачать из всех скриншотов попиксельно 256 вариантов цвета (0 – чёрный прозрачный) в полоску или квадрат для 8-Bit-Master. 8) На его основе собрать, наконец, таблицу цветов.
Работка долгая и утомительная… Нужно придумать, как ускорить процесс. А пока я попытался поработать с таблицей ASCII, чтобы узнать, можно ли променять ещё какие-либо байты, кроме букв английского алфавита и специальных знаков, цифр и всего того, что уже нами исследовано. Как выяснилось, игра «перетерпит» любые вмешательства в строки и «на пофиг» отобразит результат. Конечно, NUL и FF я не применял… Начал со всей таблицы от пробела до строчной «ю». Лучше место для исследований – начальная гневная речь Бианки, так как это самая длинная строка всей игры (ясно из результатов выкачки текста): http://klimaleksus.narod2.ru/Files/STARS/Stars_31.jpg Вы спросите, что это? Я не знаю, но так отобразились последовательные байты. Причём я их сразу разделил пробелами между собой, чтобы не было глюков с переносами (нечто вроде «! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B »…). После нажатия «Крест» стало хуже: http://klimaleksus.narod2.ru/Files/STARS/Stars_32.jpg Следующие нажатия «Крест» или «Старт» вызывали перепечатывание заново букв из предыдущего скриншота, и так до бесконечности. Игра зависла. Тогда я немного видоизменяю строку, удаляя оттуда самые «опасные» байты – 127, <32, «з» и «ю». Несколько экспериментов: http://klimaleksus.narod2.ru/Files/STARS/Stars_33.jpg Начало неплохое, но потом: http://klimaleksus.narod2.ru/Files/STARS/Stars_34.jpg …Странный нимб, вы не находите? Может, это часть её радуги? Но во всех случаях были зависания: http://klimaleksus.narod2.ru/Files/STARS/Stars_35.jpg Тогда я удалил проценты «%», амперсанд «&», собачку «@», решётку «#», нижнее подчёркивание «_», точку с запятой «;» и всю ASCII после 127: http://klimaleksus.narod2.ru/Files/STARS/Stars_36.jpg Теперь всё нормально. Но почему бы не попробовать наоборот – оставить только неизвестные знаки и русский алфавит > 127? А получилось вот это, очень шокирующее: http://klimaleksus.narod2.ru/Files/STARS/Stars_37.jpg http://klimaleksus.narod2.ru/Files/STARS/Stars_38.jpg …А я ведь хотел просто выяснить, какой символ отвечают за чёрточки над европейскими буквами… Да-а, выяснишь тут…
Поэтому просьба ко всем, у кого есть Spyro2 или Spyro3 с неанглийским и нерусским языком! Не знаю, там – французским, итальянским… Или как вообще, в GH язык один? Или Спайро не бывает на других языках? Короче, найдите символ, отвечающий на надбуквенные апострофы! Очень нужен, для «Й» и «Ё»!
Если что-то непонятно – спрашивайте! А то эта тема как-то зависает в безмолвие…
И, надеюсь, хоть теперь-то никто не будет против, если я в скором времени уже наконец выложу свою «Партию»?
P.S. Оказывается, можно набрать в FileZilla команду «MD5 filename», и мой сайт выдаст мне хеш указанного файла! Так ведь я так могу легко проверять, передался ли файл без ошибок. Почему же FileZilla не делает это автоматически?
but nobody came
|
|
| |
DrWho | Сообщение # 124 Суббота, 17.03.2012, 16:03 |
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
|
Нехитрые вопросы, но: 1. Когда примерно будет готов перевод? 2. Какая версия игры будет использоваться для этого?Добавлено (17.03.2012, 16:03) --------------------------------------------- Посмотрел, есть версия GH, которая вышла только на английском. Её собираетесь переводить?
Сообщение отредактировал DrWho - Понедельник, 12.03.2012, 23:20 |
|
| |
Doki-san | Сообщение # 125 Понедельник, 19.03.2012, 22:21 |
Стрекоза
Новопоселенец
«0»
Где: Не в городе Драконов
|
Добрый день! Могу помочь в переводить!!))
Сообщение отредактировал Doki-san - Вторник, 20.03.2012, 15:22 |
|
| |
devdoki | Сообщение # 126 Вторник, 20.03.2012, 15:35 |
Яйцо
Житель Города
«47»
Где: Не в городе Драконов
|
Всем ку. Очень хотелось бы принять участие в озвучивании любимой игры!! ^_^ У меня хороший микрофон, есть опыт в озвучивании. Думаю, мой голос похож на голос Бианки. ____________________________ Скажите пожалуйста, а много голосов на озвучку набралось?
Сообщение отредактировал devdoki - Понедельник, 26.03.2012, 19:26 |
|
| |
Akai | Сообщение # 127 Вторник, 20.03.2012, 17:08 |
|catalyst|
Герой Города
«585»
Где: Не в городе Драконов
|
Могу помочь с переводом тоже, если вы уже определились с какой-либо версией, типа, просто дать мне исходник текста, а перевод уж сами пихайте в игру, я вообще в это не могу, пока мне не разжевать ._.
|
|
| |
Optimus97 | Сообщение # 128 Пятница, 23.03.2012, 15:42 |
Новорожденный Дракон
Житель Города
«108»
Где: Не в городе Драконов
|
Я знаю английский, тоже помог бы с переводом.
|
|
| |
aleksusklim | Сообщение # 129 Суббота, 24.03.2012, 13:56 |
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
|
Так-так… Я вдруг обнаружил ошибку. Помните мой архив: http://klimaleksus.narod2.ru/Files/GML.rar ?
Ха! Откуда же вам помнить… Его никто не скачал!! Ни один…
А если и скачал, то нисколько не работал в нём. Потому что: Программа повреждена! Я случайно нарушил структуру каталогов…
Теперь Game-Maker не инсталлирует ни один пакет расширения. А учитывая то, что архив я залил уже давным-давно…
Я что, зря пишу программы!? Если бы хоть кто-то хотел поработать с ними, он бы сразу спросил: Почему, мол, невозможно скомпилировать мой исходник? А я бы исправил оплошность.
Это вы так поощряете мою работу!? Для кого я тут вообще выкладываюсь… Спасибо конечно. За поддержку, за понимание… За помощь, за небезразличие…
Но ошибку я исправляю: http://klimaleksus.narod2.ru/Files/GML-.rar – Распакуйте в ту же папку, и всё будет ОК.
Только вот кого это волнует!? Короче, можете продолжать ничего не скачивать…
НОРМАЛЬНЫМ: по вопросам отвечу позже.
but nobody came
|
|
| |
CumHeart | Сообщение # 130 Воскресенье, 01.04.2012, 08:18 |
Стрекоза
Житель Города
«43»
Где: Не в городе Драконов
|
Все привет. Сейчас занимаюсь переводом комиксов от Shalone Howard. Разрешения она конечно мне в очередной раз не дала, но я все же их перевожу, мне оч нравится ее комикс про Спайро и их детей. Вижу тут есть только текстовый перевод. Я же занимаюсь переводом страниц и их переоформлением на русский язык. С английским проблем вроде бы нет, но все же приму посильную помощь в переводе некоторых сленговых фраз. Просто не знаю куда выкладывать уже готовые переведенные страницы. В этом помощь мне тоже требуется.
А еще я не могу постить в теме с переводом - а так бы выложил на заценку свои работы.
Сообщение отредактировал CumHeart - Воскресенье, 01.04.2012, 08:41 |
|
| |
DrWho | Сообщение # 131 Воскресенье, 01.04.2012, 10:31 |
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
|
Quote (CumHeart) посильную помощь в переводе некоторых сленговых фраз В этом могу в принципе помочь, хотя через гугл транслейт можно перевести спокойно :) А так, спроси у aleksusklim, он вроде как знает сколько переводить осталось.
Не по теме: Quote (CumHeart) А еще я не могу постить в теме с переводом - а так бы выложил на заценку свои работы. Набери 10 сообщений на форуме и доступ будет открыт.
|
|
| |
CumHeart | Сообщение # 132 Воскресенье, 01.04.2012, 10:33 |
Стрекоза
Житель Города
«43»
Где: Не в городе Драконов
|
Ок. Спасибо. Понял.
|
|
| |
DrWho | Сообщение # 133 Воскресенье, 01.04.2012, 10:35 |
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
|
Quote (CumHeart) В этом помощь мне тоже требуется. Думаю, тоже к aleksusklim обратись, хотя я думаю, что пока можно сюда кинуть.Добавлено (01.04.2012, 10:35) --------------------------------------------- Кстати, если надо, могу сам попробовать поучаствовать в переводе.
|
|
| |
Spyro1998 | Сообщение # 134 Воскресенье, 01.04.2012, 16:10 |
Яйцо
Житель Города
«53»
Где: Не в городе Драконов
|
Всем привет. Очень рад, что теперь появилось общее дело для любителей этой игры. Прочитав все заявки я вроде-бы неувидел ниодного, кто переведёт одну вещь. Вы переводите текст игры, но вы забыли про мультики между боссами или при освобождении героев, может я смогу перевести их, а видео с субтитрами буду кидать сюда. Как идея?
Спайро навсегда
|
|
| |
DrWho | Сообщение # 135 Воскресенье, 01.04.2012, 17:11 |
Мудрый Дракон
Почетный Житель
«1371»
Где: Не в городе Драконов
|
Quote (Spyro1998) Вы переводите текст игры, но вы забыли про мультики между боссами или при освобождении героев, может я смогу перевести их, а видео с субтитрами буду кидать сюда. Как идея? Вполне хорошая идея. Quote (Spyro1998) Прочитав все заявки я вроде-бы неувидел ниодного, кто переведёт одну вещь. Просто: 1. народ не может определиться какую версию игры переводить. 2. народу лень переводить игру.
Сообщение отредактировал DrWho - Воскресенье, 01.04.2012, 17:38 |
|
| |