Суббота | 23.11.2024 |13:07
Приветствую Вас Гость Мира Спайро | RSS
Модератор форума: nihonjin, aleksusklim, alteya, Томас  
Перевод японской версии Spyro the Dragon
nihonjinСообщение # 1 Воскресенье, 13.05.2012, 01:19
Аватар nihonjin
Дракон Подросток
Редактор
«298»
Где: Не в городе Драконов
В данной теме производится перевод табличек из японской версии Spyro the Dragon.
Тема отделена от общей для удобства.

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


Сообщение отредактировал Томас - Вторник, 28.03.2017, 19:32
 
СапфираСообщение # 46 Понедельник, 30.07.2012, 02:13
Аватар Сапфира
Game Helper\Game Master
Почетный Житель
«2566»
Где: Не в городе Драконов
[offtop]В продолжении темы о баллонистах и юзерах.
Я полностью "За" имена юзеров, вместо имен баллонистов, но выбрать юзеров будет сложно. Если вы будете заменять имена - предлагаю поставить имена людей, которые активно участвовали в переводе или имена АМС.
Хотя - это всем и так понятно...
[/offtop]


подсолнечник соленый попкорн
 
aleksusklimСообщение # 47 Понедельник, 30.07.2012, 02:15
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
↑↑↑↑↑


Теперь нужно скопировать их все в папку Rus, переименовав каждый из Jap_ в Rus_. Для этого либо перетащите обе папки (Rus и Jap), держа мышью именно Jap на скрипт:



И пропечатав необходимые названия (сначала «Jap», а потом «Rus»).
Но проще запустить соседний сценарий, который всё как надо передаст:



Подтвердите, введя игрек «y» (это сделано для того, чтобы случайно не запустить и всё не запороть!)
Теперь файлы Rus_1.txt – Rus_7.txt в папке Rus имеют те же самые необходимые оригинальные данные всех семи табличек.

Настало время записать «перевод» каждой таблички построчно в файл:


На этой основе следует построить патч, перетащив его на сценарий:



(Причём мы до сих пор не учитывали тот факт, что таблички придётся конвертировать из кириллицы в понятный игре формат! Это как раз можно сделать в этом сценарии).
Создаётся два документа: «tables.txt» – это тот же «test.txt», но в нём все строки дополнены пробелами до длины 200; «tables.log» – список патча, настроенный на Rus\Rus_*.txt и определяющий реальные смещения строк.
Причём пропатчивание происходит автоматически, в итоге все таблички в папке Rus уже «переведены»!

Только не думайте, что всё это выполнено через DOS (я не совсем сошёл с ума). Работу делает AutoIt (хотя мог и Delphi, но так проще, хоть и попал на 200 Кб…).
Исходник скрипта (EXE находится в подпапке «game»):


Остаётся внедрить перевод в игру! Перетаскиваем WAD на сценарий патча:



Откройте «wad.txt» и проверьте. Первая строка должна в точности соответствовать третьей.
А теперь восстановим оригинал, перетащив WAD на обратный сценарий:



Откройте. Первая строка снова стала равна второй.
Давайте прожгём образ! Запускаем «cdgenPS2.exe» из папки «game» перетаскиванием на него «spyro.ps2» рядышком. Сформируйте необходимые файлы, занесите туда WAD. (по причинам скорости, наверное можно не использовать STR а прожигать без них). Просто сохраните. (Этот процесс делается только при настоящем прожиге игры, сейчас он бесполезен и можно продолжить с тем пустым «spyro.ps2», который был мною предложен)

Ок, закрываем окно. А теперь самая наикрутейшая мощь! Запустите сценарий:



После чего «cdgenPS2.exe» будет автоматически запущен, потом он сам начнёт сохранять образ (при этом в заголовке будет значиться «AutoBurn»), а по окончанию – закроется! Если произошла ошибка, выйдет сообщение; если успешно – сообщение тоже появится (лишь на 7 секунд), а в это время будет запущен Epsxe с уже загруженным в него свежесмонтированным образом!
Конечно, быстрый запуск Epsxe можно делать и без прожига:



Откуда же взять сам эмулятор? Путь к нему надо прописать сюда:



По умолчанию я предлагаю поместить «epsxe.exe» (со всеми потрохами) в подпапку «epsxe\». А игру монтировать в «game\Spyro.bin».

Как же устроен AutoBurn? Это, наконец, моё первое нормальное применение AutoIt по прямому назначению – макросы автоматизации. Но для этого сперва пришлось взломать сам cdgenPS2, и добавить ему горячую клавишу на «Save Image» в меню (Да! Мой уровень хакерства дорос и до такого! Я догадался в Restorator скопировать особый идентификатор из ресурса меню и вставить его в новую строчку ресурса «Accelerator» – сработало!). Клавиша – F12.
Нормалёк, теперь сам скрипт:



Заточен чисто под ЭТОТ cdgenPS2, больше ни на что не способен. Только автоматизировать прожиг!

А чтобы не терять во время работы бесценные результаты, я написал напоследок архивирующий сценарий:



После запуска сохраняет все нужные документы в подпапку «backup».
Ну, это всё! Ещё раз ссылка:
http://klimaleksus.narod2.ru/Files/STARS/jap.rar

И не пугайтесь такого количества BAT/CMD файлов! Если непонятно, что делает какой-то из них, просто откройте его в Блокноте и прочитайте комментарии-строки «:##».
Некоторые файлы можно переименовать. Если в конце написано «:## (имя свободно)», значит, возможно использовать любое имя; иначе переименовывать нельзя, потому что другие скрипты используют этот (либо там тоже придётся менять, но только если разберётесь в моём коде!)
Ах да, про имена. Я специально некоторые файлы назвал «AAAA.CMD» (в верхнем регистре + .cmd), что указывает на то, что их нужно запускать принудительно, двойным щелчком. То есть, это «программы», выполняющие определённые заранее действия. Перетаскивать на них ничего не требуется (в качестве защиты, каждый имеет строчку «if not _%1_==__ exit», прекращающую работу при перетаскивании чего-либо)
Другие файлы названы по принципу «AAAA.bat» (в верхнем регистре, но + .bat), что обозначает то, что на них обязательно нужно что-нибудь перетащить. При простом запуске они не будут работать.
Прочие файлы названы «aaaa.bat» (в нижнем регистре), это означает, что такой скрипт вообще не нужно запускать, но он используется внутренне, другими скриптами.

Многие сценарии содержат переменные. Но не все можно менять! Блок «пользовательских» переменных я отметил через «:## ==== Параметры: ====» везде, поэтому стоит пооткрывать их и почитать. Такие переменные можно изменять (но некоторые повязаны между скриптами, поэтому их придётся менять везде).

Отдельное значение имеет описательный «all.bat», который нужно подготовить в первую очередь. Всё определяйте в WinHex, заносите offset каждой таблички. Смещения субфайлов можно узнать из заголовка WAD или из отображения в AWM.

К сожалению, весь этот способ распространяется только на те таблички, длину которых мы не превысим. Иначе придётся работать с указателями в WinHex, но адрес конечного размещения можно и сюда прописать.
Некоторые таблички разрешается пропускать, просто не задавайте «Tab_» для них.
И выгружать тоже можно не все сразу (перемонтировать список разрешено в любой момент, потому что данные патча при этом не затрагиваются), так что после выполнения всех процедур, вы можете изменять «all.bat», запускать «RUSSIAN.CMD» и хоть по одной табличке пропатчивать (или по одному миру).

Если что-то непонятно, сразу спрашивайте. Но способ, вроде, рабочий.

Повторю ещё раз, что ни в каких путях или именах НЕЛЬЗЯ использовать пробелы, русские буквы, «экзотические» символы, такие как &, ", !, ^, % и им подобных.
Короче, только латинские буквы, цифры и символ подчёркивания, а также плюс, минус и точку.
Поэтому лучше создайте отдельную рабочую папку как можно ближе к корню диска и распакуйте всё в неё.




Всем спасибо!


but nobody came

Сообщение отредактировал aleksusklim - Понедельник, 30.07.2012, 02:17
 
nihonjinСообщение # 48 Пятница, 03.08.2012, 00:47
Аватар nihonjin
Дракон Подросток
Редактор
«298»
Где: Не в городе Драконов
速い応答! хаяй о:то: = быстрый ответ

Quote (aleksusklim)
Все они тайно молчат, но внимательно наблюдают…

Ещё удивительно то, что сообщения типа тех, что оставила Saphira_The_Dragoness являются оффтопом.

Quote (aleksusklim)
Так мы про какую «Спайропедию» конкретно говорим?

Про http://www.spyropedia.ru/
Вот на что я хотел обратить внимание:
http://i062.radikal.ru/1207/8f/ff6d2526e0ce.png

Quote (aleksusklim)
Так оно у вас вот прям так и отображалось на странице

Да. Я просто хотел показать глюк...

Quote (aleksusklim)
Я уже окончательно запутался в версиях ваших табличек и в поиске их на двух страницах темы, поэтому ещё раз предлагаю вам время от времени заливать все таблички в наше хранилище…

Чтож не понять? До фазы II идёт дословный перевод, а сама фаза II - понятный перевод(оптимизированный, как я называю). Мне нужны оба. И скажите - что они будут делать в архиве?

Quote (aleksusklim)
Что-нить куда-нить когда-нить применим. Не выбрасывать же!

Мне кажется наибольшее, что можно сделать для табличек(и названий), так это разместить их на "Спайропедии" по такому же(или вроде того) принципу как здесь:
http://www.spyropedia.com/wiki/List_of_Dragons_in_Spyro_the_Dragon
Т.е. одна страница-сборник. Но смотрите не сделайте этого кто-нибудь без моего ведома!

Quote (aleksusklim)
гнездовье повторялось много где. Везде исправили?

Везде и давнооооо! Поверьте, исправить одну надпись на другую в табличках одного-единственного уровня гораздо быстрее, чем составлять план SCPS.

Quote (aleksusklim)
«Причин» или «следствий»!?

Да без разницы! Там всё было запутанно, поэтому непонятно...

Quote (aleksusklim)
Но при этом всё «моё» там в оригинале?

Если кратко - да. А так - всё же подписано. В конце "сообщения 4" написано "Дальше пойдут тексты переводимые ранее." Что означает начало перенесённых сообщений. И по надписи:
Quote (aleksusklim)
Салют коллегам по взлому! Но мой комментарий будет состоять из двух частей: рецензирующей и технической.

Можно понять, что это ваше первое сообщение в темах по "Яп. версии игры". Поэтому - всё целостно.

Quote (aleksusklim)
У вас уже готовы окончательные версии переводов!?

Нет, не готовы. Из-за того, что я вспомнил про SCPS и стал заниматься его проработкой. Можно подумать, что вы(или кто?) создавали "Гугл проект" для того, чтобы СРАЗУ поместить туда ВСЕ готовые переводы. Кстати, я недавно смог проверить один текст песни, который я пытался понять на слух в течении ~160 дней. Так вот оказалось, что процент ошибок в *слогах* там АЖ 33%! Это, конечно, не самый лучший критерий, но зато показательный. Могу даже дать фрагмент "проверки":
http://s51.radikal.ru/i133/1207/5a/40d722f930be.png
Верхняя строка - как понял я, нижняя - истина. То, что жирно выделено - ошибка. После \-число ошибок в строке.
Оттого я боюсь, что если не представлю сейчас, то что имею, то полное завершение случится либо через много лет(если стану японистом), либо никогда(если утрачу интерес к японскому) что более вероятно. Ну это если не учитывать помощь из вне(я про других людей).
Ещё одна причина, по которой я хочу поместить "драконов" в архив - чтобы люди могли дописать там Энглиш вариант и тогда не придётся засорять форум и он останется под обсуждения.
Эх, как мне удаётся отвечать на простые вопросы так развёрнуто?

Quote (aleksusklim)
Ого. А скача-ать? А распаковать? А исследовать? Есть шанс?

Шанс есть! Я нашёл Две демки на сайте emuparadise.me
Это Foil Version <U>[SCUS-94439](52мб) и Tabloid Version <U>[SCUS-94290](32мб). Нам нужна вторая. Блин, не могу разместить ссылку на файл, т.к. часть названия тут принимается за тэг. Ладно, тогда так:
www.emuparadise.me/Sony_Playstation_-_Demos_ISOs/Spyro_the_Dragon_Demo_-_Tabloid_Version_<U>_[SCUS-94290]/138911
"<" и ">" заменить на "[" и "]".
Некоторые скрины:
http://s40.radikal.ru/i090/1207/62/d84b6b15c482.jpg
http://s013.radikal.ru/i323/1207/87/43cf99e1b58c.jpg
http://i018.radikal.ru/1207/fb/e6599aa112c9.jpg
http://s019.radikal.ru/i609/1207/e9/13405521cba3.jpg
http://s47.radikal.ru/i118/1207/dd/6c10351ebdad.jpg
http://s001.radikal.ru/i193/1207/0a/547bdaff898d.jpg
Здешние ~"таблички" просто заменена диалогов драконов.
Вот содержимое диска:
http://s001.radikal.ru/i194/1207/06/36f35fee8f93.png
Вам отправить WAD?
Модераторы, вы не считаете, что стоит пополнить базу файлов сайта этими дэмками или хоть одной?
Хех, кстати, пока искал дэмо Spyro1 наткнулся на один сайт, где уровень Wizard Peak перевели как "Пик Визардизма" хех, ну и дела...

Quote (aleksusklim)
Нет. Вы сказали, что будет трудно читать так много текста на табличках. Но ничего сложного на скриншоте я не вижу.

Ладно, я перефразирую - *Я уже где-то делал предположение о том, почему у японцев "не объём". А сейчас я думаю что Наверное, им так удобнее.* Вот что я имел ввиду.

Quote (aleksusklim)
Так почему?

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

Quote (aleksusklim)
А это разве из нескольких склеено? Или как же?

Не уверен, но думаю - чит! Вот чего я достиг:
http://s001.radikal.ru/i195/1207/55/b5d01e43a51e.jpg

Quote (aleksusklim)
А всё ЭТО что тогда!?

О, я ждал повода, чтобы рассказать об "ЭТО". Я называю сие *тройным чудом*.
Чудо первое - японский. Чудо заключалось в том, что я довольно спонтанно(хотя куда там, я планировал узнать этот язык ещё за два года до того дня как начал) им занялся. Причём начал с иероглифов, которые раньше меня ничуть не интересовали. Не чудо ли?
Чудо второе - нэнрё. Начать что-то не так трудно, а вот как удержать интерес? Где-то через 2-3 месяца после открытия для себя японского я понял, что он угасает. Причина была в том, что его негде было применить, вернее нет того, на чём можно тренироваться... И вот в один не прекрасный день(ставший потом прекрасным) я нашёл ту самую лирику, что служит для меня нэнрё. Ну, потом ещё "сценарии"... Лирика - для чтения, сценарии - для письма. Разве не чудо?
Чудо третье - Спайро/aleksusklim. Я уже писал, что вначале хотел опробовать яп. WOW или что-то из серии Might&Magic, но не найдя вспомнил о Спайро(с чего я вдруг взял, что он ВООБЩЕ может быть на японском? чудо!). Зашёл на вики и тут раз - действительно японский есть! И куда я пошёл? Нет, не сюда... сначала, но затем всё же сюда.
Тут нужно сказать, что я знаю о этом сайте. Так вот, я знал о его существовании довольно давно, но очень редко его посещал. Я застал его ещё в то время, когда Insomniac закрывал Спайропедию(чему я тогда расстроился)... Мм... ну так вот, зайдя на спайрорилмс я заметил объявление "о переводе" и прочёл взахлёб страниц 7(поздно было) и на следующий день дочитав до конца и появилось моё первое сообщение. Так, а при чём тут aleksusklim? Ну, таблички бы я наверное так и так перевёл, но если бы ни проект перевода Spyro3, то я бы не стал заниматься переводом Spyro1 здесь. Вообщем, aleksusklim, вы - чудо!Или хотябы часть чуда.

Quote (aleksusklim)
На японских форумах о Спайро. (Хотя единственный японский сайт

Единственное, что нашёл я на данный момент по обсуждениям Спайро, является это(кажется архив):
http://www.2chan.cc/1006421.dat

Quote (aleksusklim)
Если нет возможность играть – можно просто дать mp3 японские озвучки.

Я хотел сказать "кто захочет переписывать со звука левые тексты?".

Quote (aleksusklim)
Сколько там их количество?

Не хочу показаться грубым, но я писал об этом в "плавающем сообщении" в разделе "Что со звуком?". Там написано - "всего 81". Это не считая intro и т.п. Дополнение: даже не 81, а 72.

Quote (aleksusklim)
Если есть способ выдрать разом всю озвучку в mp3 (понадёжнее PSound) – я смогу выложить пиратские озвучивания. Ну или хотя бы переписать их в txt. Нужно?

Ничего выдирать уже не надо! Мне хватает моего архива:
http://s57.radikal.ru/i156/1207/86/a95cf8bbcc84.png
Я же вообще про русскую часть давал намёк. Намёк на то, что хотел бы иметь НОРМАЛЬНЫЙ перевод, а то, что сейчас там есть вместо него, так это для понимания(это всё же лучше англ.) и посмеяться.

Quote (aleksusklim)
Тогда объясните мне назначение слова «together» в тексте

Вы меня спрашиваете? Я наверное уже раз десять писал, что не понимаю англ. Ну да ладно, как мне кажется, здесь хотят подчеркнуть, что нужно исользовать и L1 и R1. Т.е. "используйте эти кнопки не только раздельно, но и комбинированно", другими словами "чутка покрутить влево, немного направо" - надеюсь понятно...

Quote (aleksusklim)
во многих строчках есть тире. Кстати, что оно обозначает?

Ответ на этот вопрос находится в середине сообщения 20. Вы ещё назвали этот раздел "китайская грамота". Неужели моя тема такая запутанная... Ладно, чтоб не морочить вас приведу цитату оттуда:
Quote (nihonjin)
P.S.: Длительность гласных у заимствованных слов вообще просто определяется. Изображается чертой ”ー”. Например ルール”RUuRU” от английского Rule или ещё キー ''Kii'' – Key.


Quote (aleksusklim)
И зачем это они башенку срезали?

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

Quote (aleksusklim)
Ага. По файлику-то кликните

Я понял в чём беда. Всё ещё хуже, чем UNREADABLESECTOR:
http://s001.radikal.ru/i193/1207/c4/a7b1d42e9f60.png
http://s40.radikal.ru/i089/1207/6f/a00949e1a0ab.png
Первое - то, что уменя, второе - в оригинальном диске. Все STR'ы у меня - пусты!

Quote (aleksusklim)
Ещё раз. Вы хотите, чтобы продукт был «переводом ЯПОНСКОЙ игры» или «ПЕРЕВОДОМ японской игры?»

Это наверное самый сложный вопрос перевода... Я не понимаю, что значит «перевод ЯПОНСКОЙ игры». Чтобы передать япнистость, японность, короче... "японский дух" нужно знать Японию лучше, чем я.

Quote (aleksusklim)
Quote (nihonjin)
Перевод до фазы II - кажется неудобным для чтения, после - не очень японским?

Quote (/nihonjin)Да!!

Чтож делать то...

Quote (aleksusklim)
Неужели японская версия будет каждый раз заставлять вас выбирать место?

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

Quote (aleksusklim)
И это точно не один из драконов? (Да ну не похож он на Спайро!!)

В какой то теме этого форума я прочёл что это Papa Spyro...

Quote (aleksusklim)
(Ну будь они другими, ваша аватарка непременно дала бы знать!)
А какими же ещё / где конкретно сказано ?

Хех, аватарку я не сменил потому что вы говорили, что вам "нравится зелёный цвет". К тому же 4сферы не очень смотрятся в квадрате. Потому я добавил орбы в подпись. А вы не заметили... Я ещё хотел добавить подпись:

Но цвета бросаются в глаза, а если без цветов - теряется часть "соли". И что значит "где конкретно сказано"? Вы что и вторую часть не знаете?

==========ШРИФТ==========

Quote (aleksusklim)
Есть мыслишка замонополить для себя ВСЕ символы из алфавита, чтобы чем-то их занять… Картиночки там какие-нибудь. Или стрелочки/кнопочки/иконки. Два регистра…

А вот вы мне скажите... разве можно увеличить число палитр в тайле(чтобы картинки вставить)? И к тому же на буквы накладывается какая-то жёлтая/красная/синяя окраска...
Я же думаю использовать <<незанятые места>> для того, чтобы "впихнуть невпихивоемое". Я про названия уровней и имена драконов. Кстати, вы не смотрели тему по Spyro 2jap, там японцы схитрили с атласом. Вместо того, чтобы писать スピードウェイ(Speedway) они оставили лишь эдакую "S". А надписи порталов полные:
http://s55.radikal.ru/i147/1207/71/6262be9e254b.jpg
Кстати, я недавно прошёл эту часть до эпилога! До которого раньше никогда не доходил:
http://i051.radikal.ru/1207/b3/0db5dcbeb46d.jpg

Quote (aleksusklim)
Ях, ях, ях… А почему только одна полоска? Там ж вроде две было? Или как?

Выдирать больше - небыло нужды. Эх, вы в своей теме говорили кому-то, что мол "невниматильно читают тему". Так и тут - всё уже есть. В сообщении 12. Кстати, я не сильно на вас наезжаю?

Quote (aleksusklim)
И ответьте, почему ваши «Л» и «М» занимают не всю ширину? Почему вы их не растянули?

Потому что я просто делал тестовый шрифт и мне было пофиг на все пропорции, лишь бы прочитать можно было!

Quote (aleksusklim)
Цвет могу любой. Любая буква. Любое растяжение. Любая толщина контура. Любой сдвиг тени. Любой шрифт. Заказывайте!

Заказывайте... Я боюсь, что у нас нет выбора по цвету - нужен близкий к оригинальному, ибо он закрашивается. Пока могу предложить лишь сделать букв пять с написанными выше ограничениями, тенью и контуром с цветами не 0,0,0(т.к. он вроде считается за прозрачный) и толщину сделать такую, чтобы оставалось хотябы по пикселу слева и справа(а то вдруг будет наложение/слияние).

Quote (aleksusklim)
вы так и не выложили таблицу соответствия!

Что вы за человек...(это я в шутку) Всё было в сообщении 26. Вот оттуда:
http://s02.radikal.ru/i175/1205/70/ca230aa7108f.png
Но вы же имеете ввиду текстовую версию, не так ли?

А шрифт? Вы нашли в каком он субфайле? Напомню, что в третьем.
==========ПАТЧ==========

Quote (aleksusklim)
Патч. Он полностью готов!

Quote (aleksusklim)
как же это сложно…


Вообщем сейчас я нимогу ничего делать, пока вы не добавите информации по:
Quote (aleksusklim)
К сожалению, весь этот способ распространяется только на те таблички, длину которых мы не превысим. Иначе придётся работать с указателями в WinHex, но адрес конечного размещения можно и сюда прописать.


Не думал, что к вам это применимо, но вы - поторопились. Мне не хватило лишь немного времени, чтобы предупредить вас и... вот что я не успел представить:

Так-с, вскрылась одна проблема, точнее две. Ну, я знал о них давно, но вот похоже что пришло время их решать.
Проблема первая. Заключается в несоответствии нумерации табличек представленных здесь(в этой теме) и их положением в WAD. Всё это усложнит предстоящую замену текстов.
Проблема вторая. Заключается в несоответствии количества знаков.

Как видно совпадений(длины) нет ВООБЩЕ!

Нн... Заодно напишу свои мысли по розовой зоне. То, что подчёркнуто - будет видно в игре, остальное - просто для ясности(расшифровка).
Сортировка по мирам: グリ=зелёный コン=боевой マジ=магический ビ=прекрасный ドリ=сновидений/мечтаний
Сортировка по комплекции:ノマール=нормальный ヨワーム=слабый マーチョ=крутой ロジーン=толстый フーチョ=пухлый
Этот вопрос всё ещё требует более глубокого изучения. Честно говоря, даже не знаю - может вообще оставить пробелы вместо "чудо характеристик"... А если принять мой вариант, то следует посвятить расшифровке табличку.
Мм... ещё по баллонистам... не тщеславно ли будет переименовать ダバダバ в "нихонжин"?

Добавлено (03.08.2012, 00:47)
---------------------------------------------
Из-за того, что мне нужно как-то поддерживать яп. решил перевести один текст, вернее часть. Отсюда:
http://www23.atwiki.jp/ggmatome/pages/1149.html
Там вобщем-то рецензия на Spyro1( в частности и на японскую версию). А перевёл я ту часть, что называется 難点(нантэн=недостатки).

Как-нибудь думаю по-переводить другие разделы. Вдруг, найду причину явления "плоского шрифта"?

Сейчас - "чёрная зона".

~~~~~Стихи~~~~~
Эх, aleksusklim, спалили вы мой hide, ну да ладно. Сейчас пойдут правки.
Quote (aleksusklim)
Вода была так ядовита,
Что и растения все тут
Необратимо да забыто
Как монстры стали – словно лук.

Первые две строки мне нравятся, но вот остальные... Третья - недопонимаю смысла "да забыто". Наверное, подразумевается "навсегда"? Четвёртая - создаётся впечатление, что растения стали "и не монстрами и не луком". А мне нужно, чтобы были "монстры похожие на лук". Хотя изначально "похоже" относилось к степени превращения, т.е. имеется ввиду "вроде насовсем", а не "вроде монстры". К тому же про "лук" это моя отсебятина, ибо лично мне эти "монстры" всегда напоминали лук. Моя переработанная версия:

(217)Вода настолько ядовита
Что и растения все тут
Переродившись в монстров стали
Весьма похожими на лук.

Quote (aleksusklim)
Росло большое дерево
С поляны возле берега,
Но воды, становясь всё злей,
Оставили лишь пень на ней.

Или чуть получше:
Поляну возле берега,
Украшивало дерево,
Но воды, становясь всё злей,
Лишь пень оставили на ней.

Первые две строки как-то не очень звучат. Переработка:

(219)Велико дерево росло
На побережье дивном.
Но яд от вод сюда придя
Оставил лишь поверхность пня.
(Можно заменить "поверхность" на "частицу" или "обрубок".)

Quote (aleksusklim)
Злодей! Он похищает силу
Земли великой для себя.
И роботу не важно было,
Что губит он свои края.


Скажите, вы специально убрали первую вводную строку? Её всё же придётся оставить, если учитывать положение таблички. Она ведь находится в начале уровня, а босс - в середине. Поэтому может возникнуть замешательство. А так - ваш вариант очень хорош! Только вот "свои края" мне кажется как-то ~странно~ употреблять. Что надумал я:

(246)- Босс "Железная голова" -
Он лишь один, кто власть имеет
В вас окружающих краях.
Черпая мощь земель чудесных
Работать может твердь губя.

Мм, кстати, а претензий по стихам табличек (2), (3) и (270) фазыII нет или вы их за стихи не считаете? Ну, по крайней мере там есть хотя бы их основа...

Эх, меня тут пробило на стихи после вашей критики и я даже составил один интересный список:
http://s019.radikal.ru/i621/1208/01/2d59c5ea6bd5.png
Ух, теперь очень наглядно представлено распределение табличек по мирам. Наверное, стоит дать расшифровку... Этот список показывает ~склонность~ к стихосложению. По идее таблички можно разделить на те, что можно привести к стихотворной форме и те, что можно заменить на стихи. Понимаете? Если нет, то даю подробный декодинг.
Структура - каждый столбец это один мир(думаю, не сложно догадаться в какой последовательности). В столбце с помощью сокращений от названий уровней(например SH=Stone Hill, DP=Dark Passage т.д. и т.п.) производится разделение, собственно по уровням.
Условные знаки(по уровню обработки):+ = стих есть на сайте, # = стих у меня в обработке, * = есть склонность или вполне можно преобразовать, ? = я даже не знаю, - = табличка не поддаётся стихотворенизации(в основном по причине краткости).
Особые знаки: N - "обучалки"(т.е. в большинстве таких табличек встречаются кнопки), T - таблички посвящённые ворам, D - "напоминалки"(это личное, меня как-то задалбливало постоянное ダイヤをあつめて?Я даже хотел себе такую подпись сделать...).

創作が続きます! со:саку га тсудзукимас = творчество продолжается



Так, а когда же вы(aleksusklim) представите своё произведение(которое не поспело к конкурсу)?
Ещё я вспомнил кое-что по шрифту... Нужен шрифт для стартового меню! Я какраз сделал его перевод(обновил "сообщение №40"). Прелесть в том, что там мы не так жёстко ограниченны цветом, как с "табличным" шрифтом. Но всё же нужно смотреть, чтоб текст не улез "за рамки". Поэтому перевод ещё нужно будет дорабатывать.



①Прогресс перевода и взлома японской версии Spyro 1 смотрите в «плавающем сообщении» и его дубле.
②Сводки по Spyro 2! http://nihonjinryuu.narod.ru/Spyro2/gaikatsu.html.
③Кратко о прогрессе перевода и взлома Spyro 3GH в «сообщении №258», а сборки перевода найдёте в «сообщении №512».
④Проект перевода в vk - «spyro3rus».
~Русская wiki по Спайро~.
~Японская история Спайро~.


Сообщение отредактировал nihonjin - Воскресенье, 05.08.2012, 19:51
 
aleksusklimСообщение # 49 Пятница, 03.08.2012, 03:50
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
К nonun: Спасибо!!
К Saphira_The_Dragoness: Спасибо, уже не нужно!





Quote (nihonjin)
速い応答!


…таки воспользовался Гуглём прежде, чем засёк белый перевод…

Quote (nihonjin)
Ещё удивительно то, что сообщения типа тех, что оставила Saphira_The_Dragoness являются оффтопом.


??

Quote (nihonjin)
Про http://www.spyropedia.ru/
Вот на что я хотел обратить внимание:
http://i062.radikal.ru/1207/8f/ff6d2526e0ce.png


Красные! Какие же все ссылки красные!! Никто не смог перетерпеть даже первый мир? Да, вам стоит понасоздавать тем страничек. Так, пару-тройку десятков. Много не надо…

Quote (nihonjin)
Да. Я просто хотел показать глюк...


То есть у вас оно ПРЯМ ТАК отображалось? И до каких пор?

Quote (nihonjin)
Что ж не понять? До фазы II идёт дословный перевод, а сама фаза II - понятный перевод (оптимизированный, как я называю). Мне нужны оба. И скажите - что они будут делать в архиве?


Не в архиве. А в удобном доступе в папке. Один документ – одна табличка.
Или единственный документ с построчным перечислением (что даже лучше, придумайте символ переноса строки, любой). Чтобы я или кто угодно мог сразу скачать ВСЕ таблички, а не лазить по спойлерам двух фаз, собирая их.
Поэтому я и спрашивал, как устроено ваше рабочее пространство, и каким образом его можно выложить в удобный доступ.
Я не предлагаю вам финализировать и выложить окончательный вариант, я хочу, чтобы вы просто обновляли его. Чтобы я тоже мог производить эксперименты над табличками.
А сейчас у меня нет, считай, ни одной!

Quote (nihonjin)
Мне кажется наибольшее, что можно сделать для табличек(и названий), так это разместить их на "Спайропедии" по такому же(или вроде того) принципу как здесь:
http://www.spyropedia.com/wiki/List_of_Dragons_in_Spyro_the_Dragon


Да. И с оригиналом и с переводом и с транскрипцией и с фазой 1 и 2 и 3. Кстати, третьей фазой будет уже окончательный вариант для русской версии.

Quote (nihonjin)
Т.е. одна страница-сборник. Но смотрите не сделайте этого кто-нибудь без моего ведома!


Расслабьтесь, кроме вас тут никто ничего не делает…

Quote (nihonjin)
Везде и давнооооо!


Хорошо, спалили меня.

Quote (nihonjin)
Да без разницы! Там всё было запутанно, поэтому непонятно...


Меньше надо прошлое редактировать…

Quote (nihonjin)
Если кратко - да. А так - всё же подписано. В конце "сообщения 4" написано "Дальше пойдут тексты переводимые ранее." Что означает начало перенесённых сообщений.


Ну ладно, главное больше ничего никуда не двигать.

Quote (nihonjin)
Можно понять, что это ваше первое сообщение в темах по "Яп. версии игры". Поэтому - всё целостно.


Спалили ещё раз.

Quote (nihonjin)
Можно подумать, что вы(или кто?) создавали "Гугл проект" для того, чтобы СРАЗУ поместить туда ВСЕ готовые переводы.


И ещё раз…

Quote (nihonjin)
Верхняя строка - как понял я, нижняя - истина. То, что жирно выделено - ошибка.


МабуситаНакусита. Несложно ошибиться!

Quote (nihonjin)
Ещё одна причина, по которой я хочу поместить "драконов" в архив - чтобы люди могли дописать там Энглиш вариант и тогда не придётся засорять форум и он останется под обсуждения.


Вы про какой форум? Про этот!?
…Обсуждения!? *думает над засорением форума очередным техническим алгоритмом*

Quote (nihonjin)
Эх, как мне удаётся отвечать на простые вопросы так развёрнуто?


Это плохо или хорошо? Я не хочу вас отвлекать от перевода табличек… *Лжец! Ты боишься, что он вот-вот всё закончит и навсегда уйдёт, поэтому и стараешься всеми силами оттянуть завершение задумки!*

Quote (nihonjin)
Блин, не могу разместить ссылку на файл, т.к. часть названия тут принимается за тэг.


Тогда кодируйте либо в картинку, либо в base64! «zeDv8Ojs5fAg4u7yIPLg6iEgxOAsIOHl5yBOb3RlcGFkKysg8vPyIO3lIO7h7uny6PH8hQ==»

Quote (nihonjin)
Вот содержимое диска:


То есть вы его скачали и опробовали?

Quote (nihonjin)
Вам отправить WAD?


Мне отправить всё, включая ссылку на файл, но только в другом формате. Из содержимого диска я вижу, что если вырезать «SPYRO.STR» и «DEMO.STR» (а также «ENDCAP.STR», без которых игра должна запуститься и нормально работать), а также взглянуть на «DUMMY.FIL», убедиться что в нём нет ничего хорошего и тоже вырезать – остаток будет ничтожно мал. Вот и заархивируйте его! А я перепрожгу образ.
Или вы перепрожгите, только по всем правилам, не теряя LBA и последовательность файлов.

Quote (nihonjin)
Хех, кстати, пока искал дэмо Spyro1 наткнулся на один сайт, где уровень Wizard Peak перевели как "Пик Визардизма" хех, ну и дела...


Ваще класс! «Пик Визардизма!» LOL !! Словно про временной период говорится, почти «Эпоха Возрождения»…

Quote (nihonjin)
А сейчас я думаю что Наверное, им так удобнее.* Вот что я имел ввиду.


Ладно. Нам же лучше, потому что 3D шрифт ещё не взломан. Но это нужно обязательно сделать!

Quote (nihonjin)
Не уверен, но думаю - чит!


Или камеру заморозили.

Quote (nihonjin)
Чудо первое - японский.


Нет, я так и не понял, зачем вам сдался этот японский…

Quote (nihonjin)
Чудо второе - нэнрё.


Отечественных книг мало?

Quote (nihonjin)
Я застал его ещё в то время, когда Insomniac закрывал Спайропедию(чему я тогда расстроился)...


Что? Кто кого закрывал?

Quote (nihonjin)
зайдя на спайрорилмс я заметил объявление "о переводе"


Афигеть. Честно, вот это чудо. А то мне всё казалось, что объявление вижу только я…

Quote (nihonjin)
и прочёл взахлёб страниц 7


Нет, то было не чудо. А вот это вот реально чудо.

Quote (nihonjin)
Ну, таблички бы я наверное так и так перевёл, но если бы ни проект перевода Spyro3, то я бы не стал заниматься переводом Spyro1 здесь. Вообщем, aleksusklim, вы - чудо!


Главное мне теперь ничего не запороть, а не то часть чуда станет полной катастрофой.

Quote (nihonjin)
Я хотел сказать "кто захочет переписывать со звука левые тексты?".


Я! Мне больше нечем заняться!

Дайте быстрый метод, которым вы извлекли всё японские треки. Чтобы я так же извлёк свои русские. А что сложного в переписывании? Сколько там чистого времени записи? Час от силы.

Quote (nihonjin)
Не хочу показаться грубым, но я писал об этом в "плавающем сообщении"


Хей! Хватит отсылать в то сообщение!! Я каждый раз его перечитываю и нисколько не нахожу отличий. Разве что звёздочки на пунктах появились.
Так важно компарить разные версии? Может вы будете дублировать мысли да писать сюда для сохранения потока и туда для быстрого информирования?

Quote (nihonjin)
Ничего выдирать уже не надо! Мне хватает моего архива:


Это только вам и не нужно. Вы не даёте никаких своих материалов, предоставляя взамен скриншоты этапов работы. Но на них можно лишь смотреть, а не воспользоваться ими!

Quote (nihonjin)
Я же вообще про русскую часть давал намёк. Намёк на то, что хотел бы иметь НОРМАЛЬНЫЙ перевод, а то, что сейчас там есть вместо него, так это для понимания(это всё же лучше англ.) и посмеяться.


Сравнивать каждую фразу в трёх или пяти версиях. От нас, от японцев, от англичан, от русских пиратов, от других русских пиратов. Только так можно учесть все варианты и вынести верное решение.

Quote (nihonjin)
Вы меня спрашиваете? Я наверное уже раз десять писал, что не понимаю англ.


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

Quote (nihonjin)
Ну да ладно, как мне кажется, здесь хотят подчеркнуть, что нужно использовать и L1 и R1. Т.е. "используйте эти кнопки не только раздельно, но и комбинированно", другими словами "чутка покрутить влево, немного направо" - надеюсь понятно...


То есть, together = в группе? Принимается…

Quote (nihonjin)
Ответ на этот вопрос находится в середине сообщения 20.


Жёстко запалили…

Quote (nihonjin)
Ладно, чтоб не морочить вас


поздно, я уже щёлкнул ссылку

Quote (nihonjin)
Длительность гласных у заимствованных слов вообще просто определяется. Изображается чертой ”ー”.


Да я… просто… не признал ту самую черту в тех словах! Она мне другая показалась… И её там как-то очень много. Всё меню состоит из длительных заимствованных слов?

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


А в Spyro1 разве есть вих… *немедля заткнулся*




*Продолжение ниже*


Сообщение отредактировал aleksusklim - Пятница, 03.08.2012, 04:27
 
nonunСообщение # 50 Пятница, 03.08.2012, 04:13
Аватар nonun
Ночной Страж
Летописец
«1999»
Где: Не в городе Драконов
Продолжайте.

"Твоё право махать кулаками заканчивается там, где начинается нос соседа"
 
aleksusklimСообщение # 51 Пятница, 03.08.2012, 04:23
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Quote (nihonjin)
Я понял в чём беда. Всё ещё хуже, чем UNREADABLESECTOR:


А вот я так и думал. Поэтому и спрашивал, не нулевые ли у вас файлы.

Quote (nihonjin)
Все STR'ы у меня - пусты!


Вот так вам и надо.
Нет.
Короче…
Вы можете их выкопироать с образа? (А вы, похоже, чем-то мощным эмулируете, раз сектора читаемые)
Поместите в одну папку с WAD и грузите в cdgenPS2 оттуда. Перепроверьте содержимое?
Если скопировать не удаётся, дважды щёлкните по ним в самом WinHex и копируйте оттуда.

Quote (nihonjin)
Я не понимаю, что значит «перевод ЯПОНСКОЙ игры».


Это то, что было до второй фазы.

Quote (nihonjin)
… нужно знать Японию лучше, чем я.


Да ладно. Никто не знает Японию лучше чем вы.

Quote (nihonjin)
Что ж делать то...


Стараться! Рамки в помощь. Попробуйте уместить в оригинальное количество символов каждую табличку? Фразы будут так по-дурацки по-японски построены, что сомнения в духе пропадут!

Quote (nihonjin)
На самом деле я зашёл дальше в исследованиях. Начав новую игру выбор мне не предлагали (если не менять слот).


Ничего не понял.

Quote (nihonjin)
В какой то теме этого форума я прочёл что это Papa Spyro...


Папа Спайро!! Вухаха!

…Не, а реально. Он ж вроде, сирота. Его ж воры принесли или как там вообще? *А я в стихе всё переврал! Почище чем в «Иронической легенде»…*

Quote (nihonjin)
Хех, аватарку я не сменил потому что вы говорили, что вам "нравится зелёный цвет".


*Так вот почему он никогда не меняет аватарку! Как я об этом сам не догадался…*

Quote (nihonjin)
К тому же 4сферы не очень смотрятся в квадрате.


Ква.
Дра.
Те.

По углам!

Quote (nihonjin)
Потому я добавил орбы в подпись. А вы не заметили...


Эй! Я заметил!! Просто уже после того, как текст комментария был готов. Поэтому я просто дописал туда, мол «а, нет – всё в подписи видно!». Но похоже, что пока я публиковал три части сообщения (а интернет у меня глючил постоянно, из за чего мне приходилось возвращаться и нажимать «редактировать» снова и снова), конечным остался прежний вариант текста
А ещё я чуть было в двух последних частях дубликат не оставил!

Quote (nihonjin)
Но цвета бросаются в глаза, а если без цветов - теряется часть "соли".


А если так:

«Сферы бывают разные – синие, жёлтые, красные

? Код в base64:


Quote (nihonjin)
И что значит "где конкретно сказано"? Вы что и вторую часть не знаете?


Ай! Вот это уже серьёзно.

…Ну я просто не подумал о тех новых типах шаров, которые применяются в битве с Рипто. А вот ещё кое-что о самой битве, чтобы развеять сомнения:

Зачем собирать первые два шара, если только третий выдаёт требуемую способность? Независимо от цветов первых двух собранных. То есть очередной шар затирает статус предыдущих. Знаете, что надо было сделать? Чтобы шар другого цвета не просто «затирал» предыдущий, но удалял его! Чтобы когда имеешь один красный, надо было собрать ещё два таких же красных. Иначе все сбрасываются, и нужно собирать заново другой цвет.
О, или по-другому! Чтобы шары можно было принудительно активировать, даже когда не собрано три – а лишь два. Что давало бы тот же самый эффект оружия, но на вдвое более короткий промежуток времени. То есть достаточно бы было взять лишь два одинаковых шара для атаки, но её произвести было бы довольно сложно. Поэтому игрок чувствовал бы себя круче, когда полностью набирает все три шара.
Ну или ладно. Оставить всё как есть, но только чтобы цвет шаров не отображался в статусе, когда их собрано меньше трёх. Потому как он всё равно не имеет смысла, ведь третий затирает их независимо от цветов. Когда у меня два шара, абсолютно не играет роли их цвет. Ну или пусть хоть цвет второго шара не изменяет цвет первого. Чтобы они так и рисовались – разными цветами. И третий. А как вариант, добавить время преобразования одного шара в другой: так, если все три шара одинаковые, то оружие готово сиюминутно; если третий шар совпадает лишь с одним по цвету – перед запуском должно пройти некоторое время; ну а если всё три разных цветов (или одинаковые первые два) – то ожидать придётся двойное время (что может быть показано как превращение «неправильных» шаров в цвет последнего)

Quote (nihonjin)
Вы что и вторую часть не знаете?


Похоже, что я не знаю вторую часть?

Quote (nihonjin)
И что значит "где конкретно сказано"?


А к чему тогда ваша фраза «хоть сам правь»?

Quote (nihonjin)
А вот вы мне скажите... разве можно увеличить число палитр в тайле(чтобы картинки вставить)?


Нельзя. Зато можно сделать монохромные картинки. Как дорожные знаки или символы в шрифте «Symbol».

Quote (nihonjin)
И к тому же на буквы накладывается какая-то жёлтая/красная/синяя окраска...


Не какая-то, а какая именно? Это важно. Хотелось бы узнать, каким образом буквы из белых становятся золотыми.

Quote (nihonjin)
Я же думаю использовать <<незанятые места>> для того, чтобы "впихнуть невпихивоемое".


Ну посмотрим.

Quote (nihonjin)
Кстати, вы не смотрели тему по Spyro 2jap(где у меня такое чувство, что меня жОско игнорируют~в 10 сообщении)


Так мы будем вторую игру переводить? Очень надо, а то мы в третьей части имеем ссылки на названия из второй (как и из первой), поэтому нужны нормальные их переводы. А поскольку мы не переводим Spyro2, то названия окажутся довольно абстрактными ввиду наличия многих _неверных_ пиратских переводов. Но если мы потом захотим и вторую игру часть русифицировать, то должны будем взять те названия, которые задали сейчас.
Так может уже не будем париться, а переведём всю трилогию? В год дракона-то. Это реально того стоит! Ведь пока мы взломаем 3D шрифт и звуки + тайлы и файлы, у нас в руках сформируется такой колоссальный опыт и арсенал программ, что Spyro2 займёт не больше месяца. Поддерживаете?

Quote (nihonjin)
Кстати, я недавно прошёл эту часть до эпилога! До которого раньше никогда не доходил:


Чё пишут? Всё то же?

Quote (nihonjin)
Выдирать больше – не было нужды.


Почему? Вот он шрифт:
http://klimaleksus.narod2.ru/Files/STARS/FONT.PNG
Я вижу только три области: цифры, значки и кнопки. А всё остальное? Слева: сверху/снизу. А справа вообще что? Почему вы заменили только нижнюю полоску, а не верхнюю? Что означают все символы, под каким углом повёрнуты и на какие байты завязаны?

Quote (nihonjin)
Эх, вы в своей теме говорили кому-то, что мол "невнимательно читают тему".


Па-алите…

Quote (nihonjin)
Кстати, я не сильно на вас наезжаю?


Н..нэт. Я щас так чут-чут офигываю…

Quote (nihonjin)
Потому что я просто делал тестовый шрифт и мне было пофиг на все пропорции, лишь бы прочитать можно было!


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

Quote (nihonjin)
Заказывайте... Я боюсь, что у нас нет выбора по цвету - нужен близкий к оригинальному, ибо он закрашивается. Пока могу предложить лишь сделать букв пять с написанными выше ограничениями, тенью и контуром с цветами не 0,0,0(т.к. он вроде считается за прозрачный) и толщину сделать такую, чтобы оставалось хотя бы по пикселу слева и справа (а то вдруг будет наложение/слияние).


Посмотрим. Так мне буквы как, все просто на один холст занести, а просчёт палитры вы сами сделаете, или же мне преобразовать в 16 цветов, а вы через PGG их и занесёте в шрифт? Или же мне полностью весь субфайл самому обработать?
Да, и какие именно буквы? АБВГДЕЖ? Или с цифорок начать (их маппить проще, потому что можно в WAD так и писать 123456789).

Quote (nihonjin)
Но вы же имеете ввиду текстовую версию, не так ли?


Не просто текстовую версию. А сопоставление байт на байт. Плюс маппиг на тайлы (что вы по сути и показываете). Я же спрашиваю ТАБЛИЦУ СООТВЕТСТВИЯ, по которой вы накладываете русские буквы на нужные двоичные байты. Или вы прямо кириллицей в WAD и пишите? Неужели все русские буквы в двух регистрах имеют однозначное определение? Уберите докутен или как его там, чтобы иметь однозначное однобайтовое определение символа. И потом – расскажите, что обозначают латинские буквы, потому как в вашей таблице их кажется, вообще нет! Какой символ они дадут? (Кстати, заменять символы в табличках можно на лету в ОЗУ через ArtMoney)
Чем плоха ваша таблица? Да хотя бы тем, что в ней не написано «1=1», «2=2» и так для КАЖДОГО знака.

Quote (nihonjin)
В общем сейчас я не могу ничего делать, пока вы не добавите информации по:


А чего там добавлять…

Quote (nihonjin)
Проблема первая. Заключается в несоответствии нумерации табличек представленных здесь (в этой теме) и их положением в WAD. Всё это усложнит предстоящую замену текстов.


Смените пространство имён. Сейчас у вас номера от «001» через «009», «019», «099», «199», «299», «300» и не более «400». Однозначно сопоставьте их номерам WAD, которые назовите например, «W1», «W2», «W9», «W19», «W99», «W199», «W299», «W300» и до нужного. Причём обязательно без лидирующих нулей (для моего патча).
Можно написать простенький скриптик, который перемешает строки в файле или имена файлов по сопоставлению списка. С вас сопоставление, ибо в WAD кроме «я» на конце я ничего прочесть не могу.

Quote (nihonjin)
Как видно совпадений(длины) нет ВООБЩЕ!


«Совпадений» или «не превышений»? Меньше можно, вот больше нельзя.
Ладно… Попробуйте обработать один уровень через WinHex, чтобы отдать для каждой таблички максимально допустимое количество символов – 200. Найдите пространство в субфайле и перекиньте указатели, вы вроде умеете. Потом усердно трассируйте уровень, потому что игра может неожиданно записать свои данные в ту область, которая ранее казалась пустой.
С другими суб-субфайлами надо поработать – вдруг в них есть свободные места? Но указатель на них перекинуть немного сложнее, чем в пределах одного…

Quote (nihonjin)
Нн... Заодно напишу свои мысли по розовой зоне. То, что подчёркнуто - будет видно в игре, остальное - просто для ясности(расшифровка).


Там ТАК мало места!?

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


Слушайте, в SCPS вроде бы есть немного свободного места… Можно перекинуть на него некоторые особо не вмещающиеся фразы. Определите то, что хотите затолкать вы. А я потом попробую найти место для этого. (Но я боюсь, что на меня обидятся переводчики Spyro3, если я продолжу игнорировать их и заниматься первой частью…)

Quote (nihonjin)
Чудная ситуация с "перенаправлениями из мира 3" я не знал(а может забыл?) о такой особенности игры, пока не стал прорабатывать интерфейс. Особенность в том, что баллонист "помогает" выполнить требования, информируя и отправляя в несвойственные( для перелётов на шаре) локации.


Что-что? Куда отправляет!?

Quote (nihonjin)
Ценные драконьи яйца


Восходящий воздушный поток?

Quote (nihonjin)
по размерности подходит "шаровод"


!!

Quote (nihonjin)
Вылет в направлении(Летим в)


Там надо аккуратней с именительным падежом. (работаем по принципу «Существо %A достигло уровня %B»)

Quote (nihonjin)
Кстати, aleksusklim, а когда вы займётесь своим SCUS'ом?


А что с моим не так? Там вроде одни названия и сценки. Не то что блин у вас…

Quote (nihonjin)
Док. Кул


До третьей фазы?

Quote (nihonjin)
Так и хочется сказать <Небо в алмазах>


Чехов?

Quote (nihonjin)
<Порт Насти>


!!

Quote (nihonjin)
Кстати, я дублирую это в тетради в клетку и там невероятно удобно считать разницу...


О, я тоже для Sunny Villa считал так!

Quote (nihonjin)
Я тут подумал, что можно как-то использовать преимущества "плоского шрифта". Помимо того, что можно будет задействовать некоторые знаки для расширения "разницы", можно ещё например, записать название "Гнасти Гнорк" - другим шрифтом...


Если он останется таковым к финальной фазе.

По мирам: они всегда состоят из двух слов в японском варианте. Верно?

Quote (nihonjin)
Marco - プカプカ - PUKAPUKA


Ага. Ещё чего! «ПукаПука». Боже упаси.

Quote (nihonjin)
Не думаю, что в яп. вариантах имён есть смысл, поэтому можно придумать что-то интересное... Например, написать имена форумчан или т.п.


Серьёзное решение. Надо думать. Тем более что их всего шесть…

Quote (Saphira_The_Dragoness)
В продолжении темы о баллонистах и юзерах.
Я полностью "За" имена юзеров, вместо имен баллонистов, но выбрать юзеров будет сложно. Если вы будете заменять имена - предлагаю поставить имена людей, которые активно участвовали в переводе или имена АМС.
Хотя - это всем и так понятно...


(правда достаточно было и обычной точки!)

Но получается, что я даже в Пуку Пуку не помещаюсь… Место всё равно придётся новое искать и указатели перекидывать.

Quote (nihonjin)
Мм... ещё по баллонистам... не тщеславно ли будет переименовать ダバダバ в "нихонжин"?


Т.е. просто «японец»?




Блин, ну вы дописали конечно…

Quote (nihonjin)
Так, а когда же вы(aleksusklim) представите своё произведение(которое не поспело к конкурсу)?


Уже закончил. Осталось напечатать эти самые 100 строф. Сейчас готово лишь 30…


but nobody came

Сообщение отредактировал aleksusklim - Пятница, 03.08.2012, 04:25
 
nihonjinСообщение # 52 Среда, 08.08.2012, 21:52
Аватар nihonjin
Дракон Подросток
Редактор
«298»
Где: Не в городе Драконов
音速


Quote (aleksusklim)
Красные! Какие же все ссылки красные!! Никто не смог перетерпеть даже первый мир? Да, вам стоит понасоздавать тем страничек. Так, пару-тройку десятков. Много не надо…

Ну так пока там писать особо не чего. А может быть наоборот стоит, как я и предлагал вынести "сводку по драконам" туда. Мм ладно, вернусь к этому вопросу как только доковыряю SCPS.

Quote (aleksusklim)
То есть у вас оно ПРЯМ ТАК отображалось? И до каких пор?

Насколько я помню это случилось толи при редактировании сообщения толи при "взятии предела", но однозначно при исправлении/добавлении информации. И да, всё у меня отображалось как на скрине, поэтому я быстренько запечатлел такое чудо и поспешил вернуться(как при нажатии на [Backspace]) и поправил сообщение. Вообщем, продлилось это, наверное, около 10 минут.

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

~Возможно я где то давал скрин. На данный момент в основном центре моей деятельности 38 папок в которых 1589 файлов и занимает всё это 178мб. Хорошее пространство? Но что касается чисто табличек, то им отведено 30 папок(по числу уровней с табличками) с ~тысячью файлов. Знаете, их будет довольно трудно обработать. На форуме всё удобней, ведь у меня в папко-уровне под каждую табличку отведён файл + один общий на уровень(со старыми версиями) + ещё один общий на уровень(с фазойII). А ведь ещё не лишне сопровождать таблички скринами(и их у меня по два на табличку - с надписью и с окрестностями), дабы предотвратить недопонимание. И что значит:
Quote (aleksusklim)
придумайте символ переноса строки, любой
?

До того, как я выложил свои "не выложенные стихи" и увидел это:
Quote (aleksusklim)
Кстати, третьей фазой будет уже окончательный вариант для русской версии.

я думал, что фазаII - последняя.

Quote (aleksusklim)
То есть вы его скачали и опробовали?

Ну да, я же представил скрины. Т.к. решил, что так быстрее, чем с описанием.

Quote (aleksusklim)
Нет, я так и не понял, зачем вам сдался этот японский…

Он мне нужен для "сценариев"(а вот зачем нужны они?) и может ещё для чего-то в будущем... Хотя писать "сценарии" мне пришло в голову почти через год, после начала изучения.

Quote (aleksusklim)
Отечественных книг мало?

С каких пор отечественные книги пишут на японском? Под "Лирика - для чтения" я имел ввиду "Лирика - для чтения на японском". Как же мне без чтения? Мне итак кажется, что я забываю японский пока работаю над переводом Спайро. А вы в какой раз уже делаете меня иродом каким-то.

Quote (aleksusklim)
А то мне всё казалось, что объявление вижу только я…

Ну не скажите. Ваша тема довольно популярна(если смотреть на число просмотров).

Quote (aleksusklim)
Что? Кто кого закрывал?

Да, да. Пару лет назад было такое... жаль скрин не сделал! Захожу я на "Спайропедию"(если даже не спайропедия, то точно какая-то wiki по Спайро) а там - три(кажется) баннера. Один Insomniaс, а остальные не помню(может издательств "легенды"). И что-то там по английски написано в духе "...всвязи с нарушением авторских прав..."

Quote (aleksusklim)
А что сложного в переписывании? Сколько там чистого времени записи? Час от силы.

Переписывать русскую версию не сложно, а вот японскую и англ. - да, я же не понимаю всех слов! Причём англ. для меня сложнее японской. В последней я хоть могу звуки понять.

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

Может быть.

Quote (aleksusklim)
Всё меню состоит из длительных заимствованных слов?

Ну нет, там просто часто встречаются такие слова как Memory Card, Save, Load, Data и т.п. А так там катакана/хирагана встречаются примерно 50/50.

Quote (aleksusklim)
А в Spyro1 разве есть вих…

Это вы так прикалываетесь, да? Потому что:
Quote (aleksusklim)
«вихрь» vs. «восходящий воздушный поток» = «фигня» vs. «супер японское настроение» !


Quote (aleksusklim)
А если так: «Сферы бывают разные –...

Я уже не знаю. Может вы заметили, что я изменил цвет "обращения к модераторм" с красного на зелёный? Т.к. мне вежливо объяснили, что применение синего и красного цветов позволено лишь АМС. Или в подписи разрешено цветовое разгуляйство?

Quote (aleksusklim)
Похоже, что я не знаю вторую часть?

Quote (aleksusklim)
А к чему тогда ваша фраза «хоть сам правь»?

Я неправильно понял ваше "где конкретно сказано". Счёл за то, что вы спрашиваете "где это есть в игре?". В то время как похоже подразумевается "в каких источниках описывают цветные сферы?". Я искал на русской и английской спайропедиях, а так же в той вики, по которой вы спрашивали "Так «possibly» или достоверно?". Кстати, в последней написано про сферы в Skylanders'ах.
«Хоть сам правь» подразумевает "хоть сам редактируй статью по сферам на спайропедии".

Quote (aleksusklim)
Не какая-то, а какая именно? Это важно. Хотелось бы узнать, каким образом буквы из белых становятся золотыми.

Уу, боюсь это выше моих возможностей.

Quote (aleksusklim)
Так мы будем вторую игру переводить? .... Так может уже не будем париться, а переведём всю трилогию? .... Поддерживаете?

はい! Только есть вопросы. Самый основной - какую версию русифицировать? Что брать за основу(платформу)? Оригинал или яп.? Или даже так - взять платформу японской версии, а переводить оригинальные тексты. В пользу платформы оригинала идёт понятность "того что где лежит", а яп. - таблички(но лишь в домашних мирах) плюс возможность выбора "японской камеры"(сомнительный плюс). Кстати, в Spyro2 по части шрифта используется иной подход, чем в Spyro1. Во второй части текст закодирован в Shift-JIS, а не в непойми что.
Ещё вопрос - если всё же брать за основу оригинал, то зачем нужен я? Только как редактор? Но ведь как показал Гуглокод - прока от меня в таких делах нет. Я может и могу что редактировать, но только какие-нибудь "названия уровней". Или может хотите, чтобы я там занимался сортировкой/извлечением файлов?
Наиболее полезен я бы был при переводе именно яп. Но как это поможет? Мы же не смесь будем готовить? Или...

Quote (aleksusklim)
Чё пишут? Всё то же?

Э, вы не поняли. Я раньше никогда никакую версию не проходил до эпилога. Переводить пока не стал... Если переведу, то даже не знаю где писать(в каком разделе).

Quote (aleksusklim)
Там ТАК мало места!?

Quote (aleksusklim)
Слушайте, в SCPS вроде бы есть немного свободного места…

Я тут посмотрел через Notepad++ и... о Боже! Да там полным-полно места(NUL)! 1925 знаков почти в самом начале и 1033 + 4203 + 1695 в конце. Да там же наверное достаточно места, чтобы переписать всё содержание!

Quote (aleksusklim)
Определите то, что хотите затолкать вы. А я потом попробую найти место для этого.

Про место написано выше, но разве вы можете делать аналог "перемещения указателей" применительно к SCPS? Если да, то попробуйте вместить "сортировку по комплекции" из розовой зоны.

Quote (aleksusklim)
Но получается, что я даже в Пуку Пуку не помещаюсь… Место всё равно придётся новое искать и указатели перекидывать.

Почему "даже в Пуку Пуку", а не даже в Дабадаба? В первом доступно 6 знаков, а втором - 8. Туда может убраться ваше имя или даже фамилия.

Quote (aleksusklim)
Т.е. просто «японец»?

Ну, я вообще-то думал поместить "нихонжин" просто как транслит моего ника. Хотя можно поместить и моё настоящее имя, но как оно будет смотреться в игре? Ещё вариант - "Гермес". Я часто использовал это имя(Hermes) как ник во многих играх, потому оно для меня ценнее, чем "nihonjin" и заодно - короче!

Quote (aleksusklim)
По мирам: они всегда состоят из двух слов в японском варианте. Верно?

Как можно видеть - да.
---Шрифт---

Quote (aleksusklim)
Почему? Вот он шрифт:

Quote (aleksusklim)
Или вы прямо кириллицей в WAD и пишите?

Quote (aleksusklim)
Почему вы заменили только нижнюю полоску, а не верхнюю?

Ёкс! Ответ в сообщении 18(раздел шрифт). Короче, те знаки соответствуют кириллице!

Quote (aleksusklim)
Я вижу только три области: цифры, значки и кнопки. А всё остальное? Слева: сверху/снизу. А справа вообще что?

Поясню скрином(То, что отмечено "?" я непомню где используется.):
http://s017.radikal.ru/i421/1208/82/e81b404e922b.png
Я взял за основу ваш FONT. Надеюсь он не совпадает с тем, на чём вы экспериментируете, потому что там обрезан шрифт. Правда только чуть-чуть: у левого края заметно, что срезана верхушка у значка катаканы "ア".

Quote (aleksusklim)
Что означают все символы, под каким углом повёрнуты и на какие байты завязаны?

Мм, группы символов подписал. Подробнее нужно? "Как повёрнуты" - если развернуть, то что там есть(повёрнутое) на 90° по часовой стрелке, а затем отразить по вертикали, то будет как надо.

Quote (aleksusklim)
Так мне буквы как, все просто на один холст занести, а просчёт палитры вы сами сделаете, или же мне преобразовать в 16 цветов, а вы через PGG их и занесёте в шрифт?

Можете сделать как в прошлый раз с 4bpp? Занести в субфайл я и сам должен суметь.

Quote (aleksusklim)
Да, и какие именно буквы? АБВГДЕЖ? Или с цифорок начать (их маппить проще, потому что можно в WAD так и писать 123456789).

Что значит "маппить"? Пробивать что ли? Лучше всё же "АБВГДЕЖ" по двум причинам: 1- цифры там итак ничего, 2- нужно тестировать именно ширину букв. О сложности вы сказали оттого, что не знаете о том, как расположена кана в шрифте. А расположена она в соответствии с таблицей годзюн(японская азбука). Вы уж поверьте, я её знаю:
вначале идут гласные "А И У Э О", затем от них образуются слоги путём добавления согласных - "К С Т Н Х М Р"(например: ка, ки, ку, кэ, ко и т.д.) ну и ещё есть неполный ряд с "В"(ва и во) и звуки "я ю ё"(которые по идее составные - "йа йу йо").
Короче, у меня "АБВГДЕЖ" будет составляться из тайлов знаков アイウエオカキ, которые будут выглядеть в WAD'е как "АБВГДЕЖ".

Quote (aleksusklim)
(Кстати, заменять символы в табличках можно на лету в ОЗУ через ArtMoney)

Действительно! Взломал табличку№016 и обнаружил то, как получить КРАСНЫЙ шрифт!!! Я раньше думал, что за это отвечает @, но это не совсем так! Этот знак всего лишь ограничитель. Короче, красным текст становится, если заключить его между "D" и "@"!

Таблица соответствия:
Code
あ=Ђ
ぁ=®
い=Ѓ
ぃ=
う=‚
ぅ=
え=ѓ
ぇ=±
お=„
ぉ=І
か=…
き=†
く=‡
け=€
こ=‰
さ=Љ
し=‹
す=Њ
せ=Ќ
そ=Ћ
た=Џ
ち=ђ
つ=‘
っ=¶
て=’
と=“
な=”
に=•
ぬ=–
ね=—
の=1˜2 (знак заключён между 1 и 2)
は=™
ひ=љ
ふ=›
へ=њ
ほ=ќ
ま=ћ
み=џ
む= !пробел!
め=Ў
も=ў
や=Ј
ゃ=і
ゆ=¤
ゅ=ґ
よ=Ґ
ょ=µ
ら=¦
り=§
る=Ё
れ=©
ろ=Є
わ=«
を=¬
ん=­
ア=А
イ=Б
ウ=В
エ=Г
オ=Д
カ=Е
キ=Ж
ク=З
ケ=И
コ=Й
サ=К
シ=Л
ス=М
セ=Н
ソ=О
タ=П
チ=Р
ツ=С
ッ=ц
テ=Т
ト=У
ナ=Ф
ニ=Х
ヌ=Ц
ネ=Ч
ノ=Ш
ハ=Щ
ヒ=Ъ
フ=Ы
ヘ=Ь
ホ=Э
マ=Ю
ミ=Я
ム=а
メ=б
モ=в
ヤ=г
ユ=д
ヨ=е
ラ=ж
リ=з
ル=и
レ=й
ロ=к
ワ=л
ヲ=м
ン=н
ァ=о
ィ=п
ゥ=р
ェ=с
ォ=т
ャ=у
ュ=ф
ョ=х
(O)=ч
(X)=ш
(Δ)=щ
(□)=ъ
L=ы
R=ь
O=&
ー=·
-=#
「=ё
」=№
。=.
、=,
・=ѕ
/=/
%=%
(=(
)=)
===
!=!
?=?
”='
+=+
1=1
2=2
3=3
4=4
5=5
6=6
7=7
8=8
9=9
0=0
знак дакутэна отличающий はиば=Ѕ
знак дакутэна отличающий はиぱ=ј
оператор перехода строки=я
Dкрасный@
Если печатать символы у которых нет тайла, то показывается あ.



Quote (aleksusklim)
Уже закончил. Осталось напечатать

Хорошо, тогда где представите? Или это сюрприз/секрет?

О, чуть не забыл! Дайте ссыль на декодер base64, а то где бы я ни делал дешифровку мне выдают муть.
И ещё я хотел кое-что важное предложить по вашей теме(Spyro3). Я смотрю там люди всё не унимаются с озвучкой... Так может сделать там пробы голосов для создания некого их "банка". Скажем, дать какой-то один "стандартизованный текст" и устроить эдакое "прослушивание". Так можно будет понять индивидуальные особенности голосов(чем богат форум) и начать думать над их распределением или дать советы по тому, в каких направлениях нужно кому-то совершенствоваться для достижения требуемых результатов. Так ведь они проведут время с пользой, а не потратят его на пустые ожидания. Как вам? Или вы боитесь, что к тому времени, когда реализация внедрения звука станет возможной начнётся путаница с распределением ролей и т.п.?

Добавлено (04.08.2012, 20:26)
---------------------------------------------
Так, я закончил с:
Quote (aleksusklim)
Дайте быстрый метод, которым вы извлекли всё японские треки. Чтобы я так же извлёк свои русские.

Мой метод отнюдь не быстрый. Я лишь надеялся сделать такой... но он не работает с разными версиями(испытал на <Rus Vector> и <Eng>). Но можете попробовать.

Метод1. Быстрый.
Если он сработает, то можно сказать - вам повезло! То, что заняло у меня часы, у вас тогда займёт минуты. Вам понадобится PSound и созданный мной плэйлист(4кб):
http://rusfolder.com/31965161
Сначала нужно выполнить "синхронизацию". Она заключается в том, что нужно подогнать директории расположения файлов(из которых будет происходить экстракция) и их названия с теми, что прописаны в плэйлисте. По умолчанию(т.е. у меня) "главный" WAD распакован в папку "D:\SpyroRus1" и названия даны по шаблону "File_ХХХ"(поясняющий скрин). Поэтому, если у вас что-то отличается(что наверняка так), то вам стоит исправить положение. Т.е. либо редактировать плэйлист, либо перераспаковать WAD с нужным шаблоном названий и/или переместить файлы.
После этого настаёт очередь запустить PSound и открыть в нём плэйлист(синхронизированный). Если вы всё сделали правильно и при проверке слышите звуки, то можно начинать экстракцию!
Для этого достаточно нажать Ctrl+A, затем Ctrl+V и выбрать директорию сохранения, чтобы иметь в распоряжении все* реплики.

*Примечания. 05Gаvin у меня в PSound'е не прослушивается. Речь Lateef'а(в Gnorc Cove) вообще не определяется. Intro ускорено, для нормализации ставьте скорость воспроизведения на ~80%.
Если метод не сработал, то придётся потратить ~час(а то и больше) на одну только экстракцию.

Метод2 Долгий.
Если вам не удалось релизовать первый метод, то может как прочтёте второй разхотите заниматся всем этим. Кстати, общая(рус, англ, яп.) длительность речей драконов составляет 34:40 - судя по winamp'у. Ладно, к делу! Алгоритм весьма прост, но долог:

__Вначале нужен PSound которым нужно открывать субфайлы уровней. Начиная с 11, 13, 15 и т.д. до 75 пропуская спидвеи.(Список соответствия "субфайл WAD-уровень" теперь есть в плавающем сообщении -> Сводка по табличкам.) Лучше всего открывать уровни по одному, тогда вам высыпят порядка 80 звуковых файлов. Стоит сразу убирать лишние. Драконы находяться в самом низу списка и расположенны в одинаковом порядке во всех версиях.
__Но! Как же определить где какой дракон? Вот и начинаются трудности. Поэтому я составил свой список:
http://s019.radikal.ru/i643/1208/23/a98feb2cb0bd.png
На котором изображено что во что переименовать. Если вас не пугает такая перспектива, то - в путь!

Добавлено (05.08.2012, 19:16)
---------------------------------------------
Так, я закончил с:

Quote (aleksusklim)
Попробуйте обработать один уровень через WinHex, чтобы отдать для каждой таблички максимально допустимое количество символов – 200.

Не знаю, от незнания или чтобы задержать меня вы предложили менять указатели на каждой табличке и отдавать им именно 200 знаков... Но я поступил проще и хитрее. Взял субфайл уровня Town Square и изменил там лишь 1 табличку(и указатель). Но! Я вместил в неё 2000 знаков. Ибо как мне кажется - в табличку можно впихнуть немерено текста(но только тогда он перестаёт отображаться в игре) и ничего "не сломается".

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

Я прошёл весь уровень в жанре speedrun собрав всё, что можно и ничего плохого не произошло.

Quote (aleksusklim)
С другими суб-субфайлами надо поработать – вдруг в них есть свободные места?

Я кажется ещё не говорил про то, сколько "свободного" места в субфайлах с текстом. Так вот, там его на ~8000 знаков! В то время как если заполнить все таблички самого богатого ими уровня(а это Artisans Home с 18 штуками) по 200 знаков, то не сложно посчитать, что они займут 3600 знаков. Так что, возможно, стоит поберечь силы для чего-нибудь более актуального.
失敗

Эмм... теперь о неприятном... Когда я говорил о "патче" я хотел, чтобы была возможна следующая ситуация: изменение информации сразу в образе диска. Т.е. чтобы не приходилось заново прожигать диск и вносить информацию в WAD. Это связано с:
Quote (aleksusklim)
Вы можете их выкопироать с образа?

Quote (aleksusklim)
Если скопировать не удаётся, дважды щёлкните по ним в самом WinHex и копируйте оттуда.

Копирнул WinHex'ом, но и при запуске с нормальными(полными) STR'ами ситуация не изменилась.
Иными словами - мне пока никак не удаётся решить проблему с пропажей звука. Если этого не исправить, то будет невозможно сделать полноценный образ диска русифицированной японской версии. Поэтому, как на план спасения, я надеялся на "патч" в понимании "модификации оригинала".

~Небольшое отступление.
Ессссссть! Я словил глюк с вашим аватаром:
http://s018.radikal.ru/i527/1208/0e/f5b5365a13bc.png
Я это уже однажды увидел(когда читал сообщение в вашей теме), но подумал, что вы просто сменили аватарку и не стал скринить. Но как я удивился, когда через секунд 10 вернулось прежнее изображение. И пожалел, что не нажал PrintScrin. Но вот - глюк повторился! Скажите - это ваших рук дело или же форум глючит?

Добавлено (08.08.2012, 21:52)
---------------------------------------------
Наконец-то могу написать что-то полезное. Новость касается "сетки ограничений". На самом деле то, о чём я сейчас скажу должно было быть сделано давно. Ещё тогда, когда aleksusklim просил проверить ширину знаков. Ну ладно, представляю скрин:
http://i020.radikal.ru/1208/b7/5d437e39dbda.jpg
Как видно, предел количества букв для отображения на экране - 22, но вот для цифр - даже при 23 остаётся много места. Каков же предел? Ответ:
http://s017.radikal.ru/i420/1208/ac/e4415b3fa6b6.jpg
Предел - целых 28 мест! Что же это значит? Расширение! 252 знака против 198 при абсолюте цифр. Поэтому, если записать некоторые(наиболее часто встречающиеся или действительно узкие) буквы в места цифр, то можно получить дополнительное пространство для текста. Правда при смешении "сжатие" падает:
http://s019.radikal.ru/i641/1208/85/5ac29691618e.jpg
Если брать соотношении широких и узких тайлов как 50/50, то будет доступно 24 места в строке. Но и это ведь неплохо! Однако следствием использования "узких" тайлов станет явление "не соответствия кириллице"(Т.е. текст в WAD будет выглядеть примерно так - "Э20 П10ВЕ1КА Д34HЫ С00БЩЕН4Я"). Кстати, т.к. оригинальный "пробел" довольно широк, то можно его заменить пустым тайлом цифры. О, ещё я проверил на ширину тайлы 「」%・ они оказались "широкими".
Теперь о "сводке драконов"(звук).
Я в очередной раз тщательно проработал (*с занесением в тетрадь) список и теперь информирую. Всего драконов(уникальных) - 74. Всего реплик - 81. Из них "Thank you for releasing me" - 12(Thor, Conan, Andor, Asher, Cosmos(при втором спасении), Eldrid, Hexus, Zeke, Azizi, Obasi, Baruti, Unika). Следовательно уникальных - 69.
У меня нет текста оригинала к 31(Gavin, Gildas, Oswin, Devlin, Nevin, Magnus, Titan, Boris, Enzo, Halvor, Ulric, Todor, Ragnar, Trondo, Zantor, Boldar, Zane, Zander, Kelvin, Cyrus, Jarvis, Cyprin, Rosco, Isaak, Jed, Zikomo, Kasiya, Useni, Kosoko, Copano, Revilo). Поэтому было бы неплохо их получить. Но я не знаю как это организовать!
Кстати, наткнулся на одну вики по Спайро:
http://spyro.wikia.com/wiki/Main_Page
Похоже она является основой для той, что я нашёл ранее(us.337.com/pages/240597/Spyro).



①Прогресс перевода и взлома японской версии Spyro 1 смотрите в «плавающем сообщении» и его дубле.
②Сводки по Spyro 2! http://nihonjinryuu.narod.ru/Spyro2/gaikatsu.html.
③Кратко о прогрессе перевода и взлома Spyro 3GH в «сообщении №258», а сборки перевода найдёте в «сообщении №512».
④Проект перевода в vk - «spyro3rus».
~Русская wiki по Спайро~.
~Японская история Спайро~.


Сообщение отредактировал nihonjin - Суббота, 04.08.2012, 20:27
 
aleksusklimСообщение # 53 Воскресенье, 12.08.2012, 21:31
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Хэй! Я рипнул BIN и почти что хакнул STR! Проблемы пропажи звука больше нет!

Я решил раскурочить сам BIN образ, чтобы посмотреть, как же он устроен. «Relative Records Offset» (особенно если фон потемнее сделать) очень даже помогает разобраться в началах секторов. А какие разрабочики-приколисты молодцы, что в SOURCE.TRD каждый второй блок повтора начинается ровно с нового сектора.
Итак, структура образа BIN такова:

{Заголовок сектора} = 24 байта;
{Данные файла} = 2048 байт;
{Контрольная сумма} = 280 байт;

Таким образом одна «структура» весит 2352 байта. Это так на первый взгляд, потому что у BIN применяются свои заголовки, а subheader сектора следует за ним. Плюс, оказывается, что разные сектора имеют разное строение, но все вписываются в 2352.

Пишу на Delphi программку, которая взяла бы BIN, и рассортировала его содержимое по трём другим файлам – заголовки в одну кучу, данные в другую, концы – в третью. Файл данных я назвал «.RIP»; заголовочный – «.RIP.sectorhead»; остаточный – «.RIP.sectordata». Добавил файлик опций (где можно изменить размеры 24/2048/280) и обратный запаковыватель, которых из трёх файлов собирает один. Если некторые области не нужны (то есть делим на две кучи), то можно использовать «0» (уфф, а чтобы это реализовать, мне пришлось создать новый наследуемый в делфи класс потокового чтения, который бы НЕ обрабатывал файл, если я предлагаю копировать ноль байт… ставить постоянные условия и ветвления совсем не хотелось, вот я уже и докатился до программирования собственных типов классов).

В результате рипанья образа, я получил чистейший RIP-файл, в котором собраны все файлы диска подряд без лишних разделителей. Ну и STR тоже легко выкопировать. И WAD! И вставить обратно! Но только он такой огромный, что надо было срочно придумать хоть какой-нибудь _удобный_ способ выдёргивать оттуда целенькие файлики…
Настала пора эмулировать образ диска на трезвую голову без Алкоголя.

Файл задаётся только LBA первым сектором и размером, а не именем (не, ну разумеется, где-то в 22-ом секторе располагается FAT таблица размещения файлов где и размеры и сектора указаны, но её вообще было исследовать неохота…). Точный размер получаем из Проводника (да, Алкоголь всё-таки понадобился…), а сектора – из диска через WinHex (1-st sector). Теперьча, чтобы не строить текстовые документы характеристик файлов, я решил придумать особую именную маску, и сделать парсер для неё как BAT сценарий командной строки, который бы передавал верные аргументы непосредственно моей программе для извлечения файлов.

Маска такая: «LBA`SIZE`NAME», где
«LBA» – число, первый сектор начала данных;
«SIZE» – размер файла в байтах;
«NAME» – любое имя и расширение если нужно.
Символ «`» –самый главный разделитель («Ё» при английской раскладке)

На обработку передаются только файлы маски «*`*`*». Ну и вот, строим список всего содержимого образа: (и файлы и каталоги)

22`2048`SPYRO
23`68`SYSTEM.CNF
24`458752`SCPS_100.83
500`112793600`WAD.WAD
104000`46874624`MUSIC1.STR
126888`56770560`MUSIC2.STR
154608`59965440`MUSIC3.STR
183888`66289664`MUSIC4.STR
216256`73383936`MUSIC5.STR
252088`85147648`MUSIC6.STR
293664`2048`SOURCE
293665`31457280`SOURCE.TRD

Вот такие пустышки пришлось создать. Потом я немного попарился со сценариями и в конечном итоге получил такие интерфейсы:
«name.bat» – в него надо записать имя RIP файла для работы;
«GetRip.bat» – на него надо перетащить исследуемый BIN образ, чтобы разбить его на три кучи;
«SaveBin.bat» – на него надо перетащить ПУСТОЙ (или ненужный заменяемый) файл (то есть BIN как образ), чтобы собрать образ из трёх кучек (их имя уже определено в «name.bat») и сохранить в тот файл, который был перетащен (не следует перетаскивать оригинальный образ игры, иначе он сотрётся и заменится модификатом; а вот рабочую копию типа «imagen.bin» от CdGenPS2 – будет в самый раз!)
«AllFilesGET.CMD» – Заполняет все файлы (те что *`*`*) актуальными данными, выдранными из готового RIP (обычно на тех же настройках, на которых RIP был получен).
«AllFilesSAVE.CMD» – Внедряет изменённые файлы (*`*`*) обратно в RIP!
А чтобы обрабатывать не все, а по одному, я добавил такие аналоги:
«OneFileGET.bat» – Достаёт один файл из RIP. Для этого его следует перетащить на этот скрипт (на самом деле он производит поиск *`*`* и передаёт только тот, который был перетащен; таким образом если перетащить любой другой файл, то обработки не произойдёт, лишь выйдет «Для продолжения нажмите любую клавишу …»)
«OneFileSAVE.bat» – как и выше, то есть заносит перетащенный файл в RIP. Причём если его размер отличается от «*`среднего`*» числа в его названии, то моя программа сообщит об ошибке и не станет работать (так же и в «AllFilesSAVE.CMD»)

Теперь можно очень легко модифицировать WAD без реального прожига образа. Алгоритм:

1) Распакуйте весь мой архив (все пустышки-файлы там уже созданы)
2) В «RipBin.txt» должно значится 24 на 2048 на 280 (кстати, значения по умолчанию если файла нет)
3) Перетащите оригинальный BIN образ на «GetRip.bat»
4) Появятся три файла «Spyro.rip», «Spyro.rip.sectorhead», «Spyro.rip.sectordata» (константа «Spyro» записана в «name.bat» и её можно сменить), общий размер которых должен быть строго равен размеру исходного BIN
5) Перетащите «500`112793600`WAD.WAD» на «OneFileGET.bat» или просто запустите «AllFilesGET.CMD», если желаете получить сразу все файлы
6) Модифицируйте WAD как пожелаете, либо замените его другим уже собранным файлом того же размера (в этом случае предыдущий пункт можно пропустить)
7) Перетащите его же, «500`112793600`WAD.WAD» на «OneFileSAVE.bat» или запустите «AllFilesSAVE.CMD» (но это займёт больше времени)
8) Создайте пустой файл (я это делаю через «Создать>Текстовый документ», а потом просто меняю расширение), назовите его как «.bin» и перетащите на «SaveBin.bat».
9) Скопируйте «.cue» файл от оригинального образа и поместите рядом с новым (его ещё придётся открыть Блокнотом и поправить ссылку на имя), чтобы виртуальный дисковод не ругался на формат (но Epsxe и без этого пункта будет работать)

Вот и готово! Но на самом деле это ничуть не лучше моего Вихря, который нагло модифицирует данные образа…
Там ведь есть области коррекции ошибок! И следовательно, при изменении ТОЛЬКО файлов они окажутся ложными. После чего образ станет неработоспособным…
Чтобы в этом убедится, я взял и занулил весь «Spyro.rip.sectordata» файл! Он состоял из одних лишь нулей. Скомпоновал образ, вставил в Алкоголь.
А знаете, что было? Проводник всё видел, размеры и названия считывал. Открыть ничего нельзя, скопировать тоже. WinHex показывает НА ВСЕ кластеры «UNREADABLESECTOR» ! Так вот в чём беда, CRC сумма неверная и файл не читается. А что эмулятор?
А Epsxe плевал на контрольную сумму. Он преспокойненько запустил игру и работал как ни в чём не бывало, даже музыка играла нормально (*). Разумеется, я кастовал его на сам образ (а не дисковод через плагин).

Ну ладненько, а как же быть с заголовочными данными? Я обнулил и их тоже. Теперь остались только сами данные файлов. ОК, Алкоголь сэмулировал. Только теперь ни Windows, ни WinHex вообще не могут получить содержимое дисковода, ссылаясь не нераспознанную файловую систему диска. Если убрать CUE, то Alcohol образ не воспринимает, а терминатор-Epsxe – без проблем! Игра снова работала, даже без заголовков сектором и контрольной суммы. НО! Музыки не было, что и следовало ожидать.
Более того, даже сам jPSXdec не смог распознать треки в модифицированном образе. А это означает, что STR что-то хранит в заголовках секторов, и без этого воспроизведение невозможно.

Копаю официальный SDK на предмет наличия в нём:
– Прожигателя образов;
– Документации по форматам;
– Конвертора STR <> XA <> WAV.

Прожигатель нашёл:
http://klimaleksus.narod2.ru/Files/1/cdgen.7z (955 Кб)
(Кстать, у меня не прожигает, пишет какого-то DLL не хватает…)
В нём-то и было неплохое описание двух форматов секторов:
http://klimaleksus.narod2.ru/Files/1/cdgen.gif

Получается, что существует два типа кластеров, стандартный и особый для XA. Структура обычного:

{Заголовок сектора} = 8 байт;
{Данные файла} = 2048 байт;
{Детектор ошибок} = 4 байта;
{Корректор ошибок} = 276 байт;

В чём отличие от моей структуры, описанной в начале? А в том, что заголовок не 24, а только 8. Это значит, что 16 байт отдаются обслуживанию самого BIN (а так и есть, там просто инкремент номера сектора), и только 8 идут в дело и видимы игре.

Структура XA потокового формата:

{Заголовок сектора} = 8 байт;
{Данные файла} = 2324 байт;
{Пустышка} = 4 байта;

Отсюда следует сразу несколько вещей. Во-первых, тут нет данных о коррекции ошибок; во-вторых, размер реального содержимого больше; в-третьих получается, что часть «защищённого субканала» для коррекции ошибок занята реальными данными файла! Вот почему файл не читаем в WinHex, потому что сумма не сходится, потому что это не сумма вовсе, а сам файл. А в-четвёртых, скопировать STR напрямую с диска не удастся в любом случае, а часть данных будет безвозвратно утеряна.

Ещё одно описание форматов есть в другом интересненьком документе, но он то ли коцаный, то ли не хватает чего-то, потому что многие схемы отображаются пустыми.
Документ:
http://klimaleksus.narod2.ru/Files/1/filefrmt.7z (633 Кб)
Скриншот:
http://klimaleksus.narod2.ru/Files/1/filefrmt.gif

Немного подробнее про форматы записи написано в инструкции официального эмулятора (ох, лучше никогда никогда никогда никогда этим эмулятором не пользоваться!)



Однако извлечь весь STR возможность есть. Достаточно лишь правильно разметить первоначальный образ, поставить туда «16/2332/4» – обрезаем 16 байт номеров секторов BIN, собираем и заголовки и содержимое файлов (8+2324=2332), а четыре «неиспользуемых» (ой-ли неиспользуемых…) байта кладём в третью кучу.

Заглядываю в первую – ага, последовательные номера всех секторов. Отлично, теперь извлекаю файлы STR (никаких LBA менять не придётся, потому что номера секторов те же). Только мне пришлось ещё изрядно улучшить мою программу, потому что отныне меня будут интересовать не только средние области данных, но и обе краевые. А это значит, что вместо одного файла извлекать из RIP нужно тоже три. А там ведь маска *`*`*…
Ну я просто поставил опять-таки «.sectorhead» да «.sectordata» на концы, запретив передачу в обработку по таким расширениям (ведь иначе они подошли бы по маске). Отныне извлекаются и загружаются из рипанного образа не только сами файлы, но и соответствующие им части (по тем же секторам) из заголовка и остатка.

Имею STR, STR.sectorhead и STR.sectordata (имя в «name.bat» необходимо сменить, чтобы не перезаписать сам образ). Извлекал, задав 8/2324/0 – то есть в sectorhead расположен самый загадочный восьмибайтовый заголовок, в STR – все данные ЦЕЛИКОМ, а в sectordata – пусто.

(Этот шаг наверно сложно понять… Короче, всё сначала. Я взял BIN и порезал его на три части особым образом, чтобы в первую отсеять ненужные номера секторов, во вторую – всё содержимое секторов, за исключением четырёх байт (идущих в третью часть), которые нам потом всё равно не понадобятся (отношение 16/2332/4). Дальше я вытащил оттуда один STR (весь) таким образом, что получил ещё два файла – номера его секторов и ненужные байты (оба не использовал). Потом обратился к самому STR файлу как к образу диска, то есть сменил новое имя RIP со «Spyro.rip» на «STR.rip» и раскоцал главный STR ещё на три (два) файла в отношении 8/2324/0)

Теперь у меня отдельно лежат все реальные данные STR и отдельно – заголовки XA секторов. Наблюдаю.

Обнаружил, что все данные XA (где бы они не находились) имеют характерный вид в анализе через WinHex. Вот так:
http://klimaleksus.narod2.ru/Files/1/xa.png
То есть, через «Analyze Block» можно легко определить, является ли интересующий блок XA данными.

Определил, чем заняты «холостые» четыре байта в ADPCM секторе. Нет, не нулями! Рандомные биты. Просто двоичный мусор. Полная неразбериха, никакой закономерности. Да, скорее всего они действительно не используются.

На всякий случай определил, чем заняты 280 байт CRC коррекции ошибок на секторах от STR файлов, если их извлекать как WAD, то есть по 2048 результирующих. И действительно, содержание идентично диаграмме XA, в отличие от соответствующего блока при WAD или любом другом файле (*)

Исследовал заголовки XA. Выглядит так:
http://klimaleksus.narod2.ru/Files/1/sectorhead.png
Причём каждый состоит из восьми байт, но в них первая четвёрка ВСЕГДА абсолютно идентична второй четвёрке. То есть либо я чего-то не понимаю, либо реальных байт только 4, а следующие четыре просто их повторяют.
Ладно, 4 – это уже проще. Большие числа (32 бит) резона не имеют, так что смотрю на значения байт в ArtMoney:
http://klimaleksus.narod2.ru/Files/1/artmoney.png
Среди прочих непонятных цифр (1, *, 100, 1) – вместо звёздочки всегда стоит число от 0 до 7. Так и повторяется – 012345670123456701…
И при этом jPSXdec показывает, что в каждом STR по восемь треков, от 0 до 7.
Так может быть сектора просто перемешаны? То есть один трек располагает свои кластеры не подряд, а через семь штук. А для склеивания воедино, мне нужно всего лишь вытащить последовательно сектора с одинаковым номером трека.

Но одними номерами там дела не заканчиваются. У некоторых STR под концом часть номеров пропадала, а окружающие «100» менялись. Может быть это показывает, что музыкальный трек уже закончился. Нет, нужно больше информации про заголовок…

Ладно, я на авось написал другую программу и вытащил все кластеры одного трека. И получил, наконец, единый (как мне кажется) XA файл. Ну и?
Что мне с ним делать? XAPLAY.EXE не читает. jPSXdec тоже (разбивает на сотни секторов длиной в 1 сек и не воспроизводит). GoldWave не ахти как открывает ADPCM, но выдаёт ритмичный (местами напоминающий техно стиль) волновой мусор. WinHex по виду однозначно определяет XA.
А дальше что? Я не могу ни конвертнуть его в читаемый WAV/WMA формат, ни произвести обратное (nihonjin, где тот WMA2XA или WAV2XA, о котором вы говорили? У меня его точно нет!)
Ничего. Я в тупике? Файл готов, всё выглядит должным образом. Но у меня нет ни единого шанса узнать, верно ли я произвёл модификации. Как определить, получилось ли у меня?

↓ ↓ ↓ ↓ ↓


Сообщение отредактировал aleksusklim - Воскресенье, 12.08.2012, 22:20
 
aleksusklimСообщение # 54 Воскресенье, 12.08.2012, 22:06
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
↑ ↑ ↑ ↑ ↑


Этот вопрос в гораздо большей степени необходим при переводе Spyro3, чем этой японской версии. Потому что вы музыку менять не будете, а нам предстоит перезаписать 500 треков…

Короче, нужны:
– Конверторы. Много конверторов! Для сборки STR, для создания XA, для прослушки. А то в SDK всё только для одних Midi (vab/vag)!
– Документации и описания форматов. Чтобы точно знать каким образом XA располагаются внутри STR и что именно записано в заголовках, как стерео трек делится на два канала.
– Эксперименты над STR! Ведь единственное место, где что-то работает – это Epsxe и jPSXdec. То есть можно заменить XA (или модифицировать заголовок), да посмотреть, что изменилось на самом деле.

А сейчас ещё один эксперимент, упущения которого я отметил «(*)» в тексте выше. Как я уже сказал, я попробовал полностью удалить 280 байт коррекции ошибок со всего диска, включая части XA из STR. И заявил, что игра работала, а музыка воспроизводилась.
Но это невозможно! Я ведь обрезал части всех XA, почему же музыка осталась?
А потому что я невнимательно слушал. Я ещё раз повторил эксперимент, но уже прослушивал через jPSXdec, а не эмулятор. Оказалось, что коцаный образ проигрывает музыку с постоянными щелчками и потрескиваниями! Очень частые бесконечные шумы, которые хоть и отчётливо слышны, но не забивают музыку. Перепроверил в Epsxe – там точно так же, звучит с ошибками.
Сохранил в WAV оба трека из jPSXdec. Потом открыл в GoldWave (так они были ещё и стерео!). Сохранил в моно оба, а потом объединил так, что в левый канал попал исходный звук, а в правый – частично обрезанный. Сохранил, можете сами послушать:
http://klimaleksus.narod2.ru/Files/1/gaps.7z (363 Кб, WAV, 6 секунд, стерео)
Но и по виду аудиограммы суть уже ясна:
http://klimaleksus.narod2.ru/Files/1/gaps.png
Сверху – оригинал, внизу – с отсутствующими группами 280 байт. Жёлтым я выделил обрезанные фреймы. Что ж, всё встало на свои места.

И чем же я закончу опыты? Тем, что я смог выдернуть чистый XA и не могу доказать, что это действительно получилось? Нет! Я хочу заменить один трек другим.
Например первый (домашний стартовый мир, очень характерная и плавная) на второй (не знаю из какого уровня, но такая жёсткая рокерская ритмичная)
Изрядно улучшил XA-выдиратель. Две проги – RipBin.exe и HackXa.exe. Техника та же (по выдиранию STR), различия лишь в употреблении HackXa. Опять-таки, пришлось создать BAT интерфейсы:

«XaGET.bat» – извлекает один трек из STR файла.
«XaSAVE.bat» – заносит один трек в STR.
Настроек никаких. Размер сектора – константа «2324» забита в коде программы (исходнички обеих прог я разумеется приложил). Название STR получает из «name.bat» (там ведь всё равно уже не имя BIN, потому что у самого STR вторым подходом извлекаются заголовки номеров треков)
Как выбрать трек? Просто перетащить файл, его имя без расширения и будет работать одновременно как номер трека и как файл для загрузки/сохранения.
Создал восемь пустышек «0.xa», «1.xa» … «7.xa». Их и нужно перетаскивать на «XaGET.bat» и «XaSAVE.bat». Удобно?

Настройки для RipBin я раздельно сохранил в трёх текстовых документах, которыми в нужные моменты придётся заменять «RipBin.txt» (или копировать содержимое, открыв оба в Блокноте) :
«WAD.txt» – стандарт 24/2048/280 – им можно получать только файлы данных, такие как EXE и WAD (ну и cnf/trd тоже). Все STR, которые получены таким образом, не окажутся корректными, и трогать их запрещено (однако распаковка STR и запаковка его обратно без изменений ничего не испортят в финальном образе, так что за них можно не бояться при редактировании только WAD).
«STR.txt» – это уже для извлечения только STR файлов, отношение 16/2332/4. Если направить на другие файлы, вы получите мусор (но опять-таки, двойная распаковка-запаковка мусора не повредит образ, если ничего не менять).
«XA.txt» – делит 8/2324/0, чтобы разбить извлечённый ранее STR на заголовок и содержание, дела вид, что обрабатывается образ. То есть, эти настройки можно применять только на извлёчённый STR (а не образ!), при этом в качестве RIP в «name.txt» следует задать что-то вроде STR.rip, чтобы не перезаписать RIP образа.

Вот полный алгоритм, как заменить один трек на другой (или поменять их местами) :
1) Распакуйте весь мой архив со всеми пустышками в одну папку, и лучше поближе к корню диска, чтобы никаких пробелов и служебных символов в именах или путях;
2) В «RipBin.txt» занесите содержимое «STR.txt»;
3) В «name.bat» должно быть «Spyro.rip» (я там сделал вот как: две строки, первая «set RIP="Spyro.rip"», а вторая – «:# set RIP="STR.rip"»; если строка начинается с «:#», то она игнорируется, поэтому вместо замены всего файла можно просто переносить вторую строку enter’ом после значка «:#», тогда первая не будет иметь силы);
4) Перетащите оригинальный BIN на «GetRip.bat»;
5) Появятся новые «Spyro.rip» (содержимое), «Spyro.rip.sectordata» (холостые 4 байта для STR, но реальные для всего остального) и «Spyro.rip.sectorhead» (номера секторов для BIN, можете открыть в WinHex и полюбоваться);
6) Перетащите интересующий вас *`*`MUSIC*.STR файл на «OneFileGET.bat». Для примера возьмём первый, «104000`46874624`MUSIC1.STR». ВНИМАНИЕ: прервите исполнение команды комбинацией Ctrl+C. Командная строка остановится и предложит завершить исполнение сценария.
7) Заметьте надпись в отчёте выше: «Wrong file size!» (если её нет, то сценарий не следует прерывать и пропустить этот пункт). Это означает, что в результате извлечения обрабатывается не целое количество секторов (последний обрезается указанным в имени файла размером). Для обычной работы это не страшно, а вот для замены XA очень плохо! Потому что последний нецелый сектор будет потерян. Итак, кликните правой кнопкой мыши в консольное окно > Пометить (работает ли это на Windows 7 ? …) Выделите текст предлагаемого размера, то есть в строке «need: 46875532 bytes.» выделите «46875532» и нажмите Enter. Теперь закройте окошко и выделите сам файл «104000`46874624`MUSIC1.STR». Его среднюю составляющую-размер «46874624» переименуйте на «46875532» (вставить). Полное имя должно звучать так: «104000`46875532`MUSIC1.STR». Отлично, перетащите его ещё раз на «OneFileGET.bat». Здесь уже должно значится «Frames OK», можно продолжать.
8) Появятся ещё два файла, «104000`46875532`MUSIC1.STR.sectordata» (это уже реально холостые биты, можете глянуть) и «104000`46875532`MUSIC1.STR.sectorhead» (только номера секторов BIN, которые в образе заняты данными STR), а сам «104000`46875532`MUSIC1.STR» наполнится содержанием, в нём смешаны как заголовки XA, так и сами треки;
9) Измените имя в «name.bat» на «set RIP="STR.rip"», то есть перенесите строку после «:#»;
10) Замените содержимое «RipBin.txt» тем, что написано в «XA.txt»;
11) Перетащите «104000`46875532`MUSIC1.STR» на «GetRip.bat»;
12) Появятся три новых файла: «STR.rip» (в котором чистые XA, перемешанные в порядке STR), «STR.rip.sectordata» (пустой) и «STR.rip.sectorhead» (самый интересный, в котором заголовки всех секторов XA);
13) Перетащите *.xa на «XaGET.bat». Например извлечём второй трек, который имеет номер «1» (нумерация начинается с нуля). Перетаскивайте «1.xa»;
14) Он должен наполниться содержимым! Теперь стоит выбор, что же с ним делать. Чтобы засунуть в другой трек, переименуйте например в «0.xa» (только имеющийся пустой «0.xa» удалите); чтобы заменить два трека между собой, извлеките (в предыдущем пункте) ещё и сам «0.xa», а потом поменяйте номера местами (допустим, «1.xa» в «A.xa», «0.xa» в «1.xa», «A.xa» в «0.xa», но это и так понятно), а в следующем пункте занесите обратно оба;
15) Перетащите подставной «0.xa» (который на самом деле был «1.xa») на «XaSAVE.bat»;
16) «STR.rip» будет обновлён (это можно увидеть, если предварительно скопировать старую версию, а потом сравнивать их в WinHex с «View> Synchronize & Compare», быстро прокручивая содержимое);
17) Перетащите «104000`46875532`MUSIC1.STR» на «SaveBin.bat», после чего обновлён будет уже сам «104000`46875532`MUSIC1.STR»;
18) Восстановите в «RipBin.txt» содержание «STR.txt»;
19) Верните имя «set RIP="Spyro.rip"» в «name.txt», восстановив «:#» у второй строчки;
20) Перетащите «104000`46875532`MUSIC1.STR» теперь на «OneFileSAVE.bat», что обновит «Spyro.rip».
21) Перетащите новый пустой (или черновой испытательный) BIN файл на «SaveBin.bat». Готово!

Новый образ можно загрузить в jPSXdec или в сам Epsxe. В чём ошибка? В том, что заводская длительность музыки не изменилась, поэтому длинный трек, засунутый в короткий окажется обрезанным (хотя все данные копирнулись), а короткий в длинный – будет визжать в конце, потому что длины указываются в «STR.rip.sectorhead», который я не могу изменить, поскольку не знаю смысла байт (только номер трека разгадал).
Но кажется, что длительность звуков, как и текстов/файлов/секторов/тайлов опять останется непокорна. Всё равно, два гига музыки ну никак не влезут на диск. Поэтому можно лишь замещать, но не добавлять треки.
Нам для переозвучки Spyro3 это в самый раз, ведь и текст у нас не намного длиннее оригинала.
А вам для Spyro1 это вообще не нужно.

Что же остаётся для вас? Работать с WAD! Пока что как есть, без заботы о контрольной сумме. Ну а потом?
А потом я предлагаю прожечь финальный WAD через CdGenPS2, чтобы выкопировать оттуда его контрольные суммы, которые мы поместим в мою машину по сборке образов RipBin (думаю, что это содержимое файла «500`112793600`WAD.WAD. sectordata») и скомпонуем абсолютно правильный и рабочий переведённый образ! А потом его уже можно и в ISO конвертнуть (интересно, чем?) или в любой другой формат.

Хотя я вам порекомендую вообще не париться со звуком, потому что так прожиг долгий. Работайте с полностью обрезанным образом (в котором вообще нет ни одного STR), чтобы заменять WAD очень быстро.

Но STR проверьте сейчас! Чтобы убедится, работают ли у вас мои алгоритмы. Плюс, если вы проверите экстракцию треков XA на полную катушку (между разными STR – да что там, между разными играми!), и найдёте способ создания своих XA, то это значительно упростит нам озвучивание Spyro3. Так-а-вы будете участвовать в нём?

Ну и наконец, ссылка на мой долгожданный архив с программами и всем всем всем:
http://klimaleksus.narod2.ru/Files/1/ripbin.rar (83 Кб)

P.S Да, и скажите, что за трек в первом STR под номером 1? Это и не начальная заставка, потому что когда я поменял 0 и 1, она осталась прежней, в то время как музыка первого мира изменилась.
А при тихом запуске оригинального образа через эмулятор и DirectX плагин до появления заставки при загрузке EXE (и надписи Sony Computer…) слышите ли вы ужасное полусекундное шипение?

P.P.S Нашёл интересную страничку:
http://www.eclipsedata.com/insidepages.asp?pageID=134
Вопрос в том, как ЭТО скачать?

Английские обсуждения форматов, кажись, рассказали в чём же секрет заголовка XA:
http://psx-scene.com/forums....e-25730

Всё остальное про XA в интернете (особенно на downloadatoz) – враньё!


but nobody came

Сообщение отредактировал aleksusklim - Воскресенье, 12.08.2012, 22:20
 
nihonjinСообщение # 55 Вторник, 14.08.2012, 20:37
Аватар nihonjin
Дракон Подросток
Редактор
«298»
Где: Не в городе Драконов
Уфф... когда я первый раз прочёл ваше сообщение, то подумал, что не смогу понять что делать. Но всё оказалось довольно просто! Ваш метод "сохранения звука" работает и музыка больше не пропадает! По поводу алгоритма:
Quote (aleksusklim)
4) Появятся три файла «Spyro.rip», «Spyro.rip.sectorhead», «Spyro.rip.sectordata» (константа «Spyro» записана в «name.bat» и её можно сменить), общий размер которых должен быть строго равен размеру исходного BIN

Ээ... не знаю, но эти три файла в сумме у меня получились меньше оригинала - 693 против 710мб. Однако, когда я "сшил" файлы в один образ(восьмым шагом), то размер стал равен оригиналу. Да, 9й шаг я пропустил.

Quote (aleksusklim)
Короче, нужны: – Конверторы. Много конверторов! Для сборки STR, для создания XA, для прослушки. А то в SDK всё только для одних Midi (vab/vag)!

А каким SDK вы пользуетесь? В моём арсенале, кажется, выбор больше. Например есть MC32. Выдержка из мануала:
http://s019.radikal.ru/i615/1208/fb/6bb8ba881227.png
Ещё есть проигрыватель XA(XAPLAY), но он не открывает "очищенный звук". А вот если попробовать конвертировать WAV->XA, то всё нормально работает.

Quote (aleksusklim)
Да, и скажите, что за трек в первом STR под номером 1?

Тут вы мне, наверное, не поверите, но - я плохо знаю музыку в Spyro. Просто зачастую я запускаю его без звука. Такие дела...
Заглянул через jPSXdec треки и осознал, что их там по 8 в пачке(мире?). Но - уровней же всего 6! Для чего лишние?

Quote (aleksusklim)
Так может быть сектора просто перемешаны? То есть один трек располагает свои кластеры не подряд, а через семь штук.

Об этом вроде бы писал ещё SergeiUXPMC - тут.

Так, а я ведь тоже провожу эксперименты над звуками. Хотел опубликовать результаты в последнем посте, но оказалось, что это повторение информации 19го сообщения(части про ADPCM). Просто там слегка неясно написано о итогах. Мне удалось "очистить" звук от "примесей". Иллюстрации:
http://s019.radikal.ru/i624/1208/37/75c39ca0d748.png
http://s017.radikal.ru/i424/1208/fd/658bf5dfec58.png
У вас так же? Я не сразу догадался, что "область 2" не звук.
Ещё я проверял нужны ли первые четыре строки(показываемые через WinHex) и оказалось, что без них звук не находится(PSound'ом). Вообщем, наибольшее, что мне удалось - слить две реплики в одну. Т.е. дракон сначала произносил то, что я "подменил", а затем ту часть его реплики, что осталась. Не было никаких глюков с камерой, что свидетельствовало о том, что я действительно выдернул лишь звук. Но вот понять как он закодирован мне ещё не удалось...



①Прогресс перевода и взлома японской версии Spyro 1 смотрите в «плавающем сообщении» и его дубле.
②Сводки по Spyro 2! http://nihonjinryuu.narod.ru/Spyro2/gaikatsu.html.
③Кратко о прогрессе перевода и взлома Spyro 3GH в «сообщении №258», а сборки перевода найдёте в «сообщении №512».
④Проект перевода в vk - «spyro3rus».
~Русская wiki по Спайро~.
~Японская история Спайро~.
 
aleksusklimСообщение # 56 Суббота, 18.08.2012, 01:12
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
Так-так… Ответов на прошлые посты от меня сегодня не будет…

Quote (nihonjin)
Но всё оказалось довольно просто! Ваш метод "сохранения звука" работает и музыка больше не пропадает!


А теперь я ещё и полностью доломал XA благодаря вам:

Quote (nihonjin)
В моём арсенале, кажется, выбор больше. Например есть MC32.


Афигеть. Он же у меня тоже был! Только я и не подумал, что «видео-конвертер» будет работать на простые WAV!

Quote (nihonjin)
Ещё есть проигрыватель XA(XAPLAY), но он не открывает "очищенный звук". А вот если попробовать конвертировать WAV->XA, то всё нормально работает.


XA XA XA XA XA XA XA XA XA XA XA XA !!!
УУУУууууу Ха Ха Ха Ха Ха!!!

Вау, мне хватило ровно 20 секунд чтобы врубится в настоящий XA формат и понять, в чём была ошибка моего HackHa!

Я конвертнул любой WAV и просто посмотрел…
Оказывается, чистый XA выглядит так:

{заголовок фрейма} – 8 байт, причём первые четыре равны другим четырём во всех случаях, которые я рассматривал;
{звуковые данные} – 2324 байта;
{пустышка ИЛИ сумма} – 4 байта.

Ясно? Эти грёбаные 4 байта рандомных данных, которые я отсеял первым же шагом, оказывается являются неотъемлемой частью формата! И без них XAPLAY.EXE просто путался в секторах. Лечение очень простое – при рипаньи образа (первый раз), задать «16/2336/0» (а не 16/2332/4), то есть оставить четыре байта внутри.
После чего «OneFileGET» на любой STR. И вуаля: кастуем «XAPLAY» прямо на этот STR, и он преспокойненько разбивает его на каналы и чётко читает!

Только теперь-то концепция изменилась, и я создал новую версию XA выдирателя, это уже «XaHack.exe». Предназначен для извлечения и внедрения одного канала XA.
То есть либо из многоканального XA (читай: обычного STR) выгрузить одиночный XA, либо внедрить единственный одноканальный XA по нужному каналу в многоканальный.
Мне пришлось думать, как заменить номер канала, и я решил просто менять его в обоих местах заголовка, то есть во 2-ом и 6-ом байте. При выгрузке – ставлю автоматом ноль, чтобы одноканальный XA не оказался с запредельными номерами (странно… XAPLAY поддерживает только до 32 каналов… а как же 500 речей в Spyro3? Скоро придётся исследовать…)

Интерфейсы поменялись, но работают они на тех же «0.xa», «1.xa» и т.д:
«XaChannelGET.bat» – выгружает один XA из STR. Для этого выделите мышью и интересующий STR, и XA с номерком (например, «104000`46876512`MUSIC1.STR» и «0.xa»); после чего схватите мышью именно за XA, да перетащите на этот скрипт. То есть перетащены будут два файла, но первым обязательно должен быть {номер.xa}
«XaChannelSAVE.bat» – обратно, внедряет один XA в большой STR. Точно так же, перетаскивайте оба файла, первым остаётся XA (за него тяните, а STR должен быть просто выделен рядом). Разумеется, оба файла должны находиться в одной папке, а «name.bat» не используется.

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

Длительность, кажется, можно изменить. Но проблемы при несоответствии будут всё равно. Потому что я пока точно не знаю, КАК помечаются пустые сектора, если трек уже кончился.

Архивчек:
http://klimaleksus.narod2.ru/Files/1/XaHack.rar (356 Кб)
Туда ещё засунут и «XAPLAY.EXE» и даже сам «MC32.EXE» (мощно ужатые через UPX).

Ещё я попробовал самый главный эксперимент по замене звука. Я сохранил WAV через jPSXdec, потом преобразовал его в XA через MC32.EXE, рипнул образ, выдрал STR и извлёк из него тот же самый трек. Сравнил свой-заводской и обратно-конвертированный XA – не совпало – ни по размеру, ни по содержанию (ну не считая явных разделителей, как заголовки или странные 0C / 1C полоски). Однако на слух при воспроизведении через XAPLAY – идентичны. А значит, я могу представить полный алгоритм замены любого звукового трека на свой другой, одинаковой длины:
(только тут я уже не буду всё по шагам описывать, просто укажу сами действия)

1) Открыть образ в jPSXdec и сохранить в WAV нужные треки (чтобы узнать длину);
2) Также сохранить свой звук в формате WAV (над частотой дискретизации – не знаю, но вроде MC32 сам умеет её неплохо менять);
3) Сконвертировать свой WAV в XA через «MC32»;
4) Рипнуть образ правильным раскладом «16/2336/0» через GetRip;
5) Получить оттуда требуемый STR (и не забыть прервать консольное окно, если сектор ругается на размер) через OneFileGET;
6) Засунуть свой XA по выбранному треку через XaChannelSAVE;
7) Прослушать STR через XAPLAY и убедится, что под концом нет глюков;
8) Вернуть STR на место через «OneFileSAVE.bat»;
9) Восстановить образ через SaveBin;
10) Эмулировать в Epsxe или пересканировать в jPSXdec.

Всё! Кажется, так немного проще. Попробуйте его проверить!

Quote (nihonjin)
Тут вы мне, наверное, не поверите, но - я плохо знаю музыку в Spyro. Просто зачастую я запускаю его без звука.


А я свой пиратский Spyro3в1 проходил без музыки во всех трёх играх!

Эй, кстати, в той демке «Tabloid» (только не спрашивайте, где я её взял…), в первом же уровне «Stone Hill» играет та самая музыка, которая используется в титрах всех трёх игр! Только тут полная её версия. Ух-ты, я даже не знал, что такая существует! Костьми лягу, но засуну-таки её вместо титровской во все три версии! И пусть она по размеру больше (аж чуть ли не весь ОЗУ займёт…), но я просто обязан её забрать.
Потому что стандартная титровская классная, но уже (за три игры) очень поднадоела, и я сразу хотел заменить её в нашем переводе Spyro3. Но вот на что? Класснее этой мелодии нет никакой. А теперь есть! Она же, но полная версия. Будет здорово!

Блин, а во второй демке… Где в Town Square первый же дракон говорит на английском!! Помните фразу:
{{{
Welcome to "Town Square", Spyro! Begin exploring by gliding to that area. What the bull. Use the L2 and R2 buttons, together good luck!
}}}
Ну сук.. они ж… Вот долбанутые! Идиоты, они что, на слух так криво написали!? Ух, балбесы…
Не, ну блин. Как можно ТАК не расслышать слова!? Глухие и тупые! Оригинал:
http://klimaleksus.narod2.ru/Files/1/TownSquare.mp3 (100 Кб)
Ну и? Где тут «together»? Более того, где «good luck»!? И какого чёрта там делает «What the bull»?
Это просто финиш.
А вот что на самом деле говорит дракон:
{{{
Welcome to Town Square, Spyro. Begin exploring by gliding to that area with the bulls. Use the L2 and R2 buttons to get a good look.
}}}
Не, ну вы видели, да? Кривоухие… А перевод такой:
{{{
Добро пожаловать на Городскую Площадь, Спайро! Начни изучать её, пролетев вон туда к быкам. А чтобы встать ровнее, пользуйся кнопками L2 и R2.
}}}
Ясно? «by gliding to that area with the bulls» – «планированием к той площадке с быками». Не, ну там и вправду два быка! Плюс, дракон явно лапой указывает именно туда. «to get a good look» – «получить наилучшее обозрение», если дословно. То есть сделать так, чтобы хорошо всё видеть. Вот это есть истинный смысл!
Дракон реально быстро произносит «buttons to get a good look», а «удачи» так уж точно не желают! А слово «with the bulls» он немного искажает, словно «with the bonus» («при помощи бонуса» вместо «с быками»). Теперь ясно откуда пираты взяли «летай при помощи шаров» – они услышали как «with the balloons»!

Quote (nihonjin)
Заглянул через jPSXdec треки и осознал, что их там по 8 в пачке(мире?). Но - уровней же всего 6! Для чего лишние?


Может, дубликаты. Ох, сложно разобраться… Может каждый мир хранит по треку в РАЗНЫХ файлах? Тогда в одном STR окажется по одной музыке со всех миров. Это ведь STR’ов как раз шесть…

Quote (nihonjin)
Об этом вроде бы писал ещё SergeiUXPMC


Знаю! (не, реально, я ещё не последние мозги себе вынес, чтобы совсем забыть о содержании _своей_ темы)
Но там речь была о Spyro3. А я исследовал Spyro1. А раз результаты одинаковые, то структура STR универсальна.

Quote (nihonjin)
Так, а я ведь тоже провожу эксперименты над звуками.


Что и откуда выдираете? Голоса драконов?
Короче, у нас три вида звуков:
– Те, которые лежат во STR (и которые мы только что научились изменять), определяются через jPSXdec;
– Те, которые лежат в WAD открыто как звуки, определяются через PSound (в их же числе музыка в титрах), пока изменять их мы не умеем, хотя почти все свойства (например, графический вид, диаграмма WinHex и.т.д) уже определены;
– Те, которые спрятаны в WAD в потоках cut-сценок и не определяются ни через jPSXdec, ни через PSound (у вас в Spyro1 их, кажется, нет, а звуки сценок подпадают под предыдущий тип), мы их не то что изменить, мы их даже найти и прослушать без эмулятора не можем! Вот это пока архисерьёзная проблема, раз уж наши актёры так горят желанием поскорей озвучить сценки…

Quote (nihonjin)
не знаю, но эти три файла в сумме у меня получились меньше оригинала - 693 против 710мб.


Что!? Вы об этом:
http://klimaleksus.narod2.ru/Files/1/explorer.png
?? Никогда не верьте Проводнику в папках! Если хотите узнать точный размер, открывайте «свойства» и не грешите на мой алгоритм!




А знаете, что я ещё натворил? Я взломал японскую камеру.
Без шуток. Теперь её режим можно менять ЧЕРЕЗ МЕНЮ !
Отвечаю! Я дизассемблировал EXE и сам написал на ассемблере к нему 10 строчек мнемоники.
Это был самый сложный взлом Spyro, гораздо сложнее Вихря и на порядок могущественнее.
Вообще-то я хотел всё сейчас рассказать, но так много придётся писать…
Так что в следующий раз. А пока можете проверить бета-версию:
http://klimaleksus.narod2.ru/Files/1/Japancam_beta.rar
, до того, как я во всеуслышание на весь форум закричу, что я исправил японскую игру.
Давайте, по-тихому испытайте. А расскажу я обо всём после, рано меня хвалить.

Пока же ответьте на три вопроса:
Что это за строка:
http://klimaleksus.narod2.ru/Files/1/strange.png
Та что не числится в вашем переводе меню? Это либо «вибрация вкл/выкл», либо «камера актив/пассив».

Как вы разгадали красный цвет, не заметив при этом остальных? А их не мало:
http://klimaleksus.narod2.ru/Files/1/colors.png
@ABCDEF . Причём собачка не «отменяет окраску», а делает её золотой, обычной.

И зачем нужен «моно» режим звука в опциях игры? Разве плохо всегда иметь стерео? …

P.S. Вы такое видели:
http://klimaleksus.narod2.ru/Files/1/psx_1_13.png
?


but nobody came
 
nihonjinСообщение # 57 Суббота, 25.08.2012, 19:51
Аватар nihonjin
Дракон Подросток
Редактор
«298»
Где: Не в городе Драконов
Доступно только для пользователей
Quote (aleksusklim)
Может каждый мир хранит по треку в РАЗНЫХ файлах? Тогда в одном STR окажется по одной музыке со всех миров. Это ведь STR’ов как раз шесть…

Ну... 6 STR'ов с 8ми треками это= 48 дорожек, а миров 6*6-1=35. Получается 13 'лишних'.

Quote (aleksusklim)
Что и откуда выдираете? Голоса драконов?

Кажется я написал, что 'сливал' реплики.

Quote (aleksusklim)
Те, которые лежат во STR (и которые мы только что научились изменять)

Я правильно понял, что если бы у вас(в теме перевода Spyro3) были бы готовые окончательные тексты разговоров, то вы бы уже могли начать озвучивание???

Quote (aleksusklim)
Что это за строка

Если вы про しんどう, которая у меня не отображается, то это <вибрация>.

Quote (aleksusklim)
Как вы разгадали красный цвет, не заметив при этом остальных?

Действительно странно... Я перепробовал множество знаков, но кажись забыл про латинские заглавные буквы. Повторил ваш опыт:
http://s017.radikal.ru/i419/1208/7e/a21001630627.jpg
Мне кажется, что так наглядней.

Quote (aleksusklim)
И зачем нужен «моно» режим звука в опциях игры?

Вопрос не ко мне...

Quote (aleksusklim)
Вы такое видели?

Да, когда хотел запустить японскую версию через "эмулятор с дебаггером"(про который писал в 18 сообщении- несколько ниже середины). Мне кажется, что в представленном сообщении написано про несоответствие регионов. Но даже когда я ставил не европейский биос ситуация не изменилась.

私の仕事。

По поводу камеры... Ваш фикс работает и стало понятно, почему вы спрашивали про "моно и стерео". Кстати, мне после яп. камеры английская кажется не %английской%, а всё равно какой-то тягучей(наверное из-за пассива).
В SCPS присутствует такая надпись(подчёркнуто красным):
http://s52.radikal.ru/i137/1208/3a/41936652052e.png
Чудно... это рудимент? Как будто собирались реализовать смену режимов мм... однако никаких вариантов для выбора не видно. Однако в оригинале, в меню опций при паузе, можно менять камеру между активной и пассивной. А вот у японской версии "английская камера" находится только в пассиве.
Теперь по подробнее о том, что на скрине. Те надписи, что записаны латиницей, я не встречал в игре.
*Первую(modoru=もどる=вернуться) встречал только в меню и больше нигде. Зачем её дублировали(записано ещё после KAMERA)?
*Следующую надпись((о)BOTANwooshitekudasai=(о)ボタンをおしえてください=пожалуйста нажмите кнопку о) не представляю где можно встретить. Может кто-то видел?
*Далее(SUTA-TOwooshitene=スタートをおしえてね=нажмите СТАРТ) по идее должен быть здесь:
http://s017.radikal.ru/i411/1208/91/87a949cffcca.jpg
У вас не отображается ли?
*Затем то, что между "★"-самое загадочное... там какой-то бред(например: TONBOwoirekaeru=заменить стрекозу). Ещё там упоминается Спаркс и сохранения.
*Всё остальное, кроме самого последнего, связано с форматированием и описанием ошибок сохранений.
*Ну и самое последнее - баллонист спрашивает что-то типа "куда вам надо?". Но именно <mokutekichi ha?=もくてきち は?> в игре я не встретил.

Разбирая спидвей разобрался с тремя упущениями:
http://s49.radikal.ru/i125/1208/ee/6e9860069ea8.jpg
1- надпись タイムアップ(Time Up=Время вышло). Не представляю как эквимитрично её перевести...
2 и 3- значки O и -. Первый показывают если было собрано то, что уже было собрано ранее. А второй, если ничего не собрано. По идее эти значки я отметил "?" в 54 сообщении:
http://s017.radikal.ru/i421/1208/82/e81b404e922b.png

Так, ещё я тут подумал всё же начать сливать таблички(в WAD последовательности) в архив(на Гуглокоде). У меня для этого там есть полномочия? И ещё - там оставлять только перевод? И скольки фаз?

Кстати, я заметил второе скрытое изображение аватарки:
http://s51.radikal.ru/i133/1208/33/0d1062e46f72.png

Добавлено (25.08.2012, 19:51)
---------------------------------------------
Не хотел тут писать о столь малом, но всё же...

①Занялся анализом звука... aleksusklim, конечно, уже описал проблемы, но не проиллюстрировал! Поэтому я сделал такую компиляцию диаграмм(WinHex и PVV):
http://i066.radikal.ru/1208/1a/ec509bf51914.png
http://s43.radikal.ru/i102/1208/d0/b247abce7c45.png
②Осознал, что цифры не поменять на буквы, ибо они используются в тех же спидвеях. И при их замене на буквы, там не будет понятно время прохождения. Надеюсь, понятно о чём я.
③Переправил таблички 192, 195 и 197. Суть ошибки была в том, что я не зал о том, что "третья форма глагола + частица な дают <строгий запрет>".
④Обновил плавающее сообщение. Под этим я подразумеваю добавление раздела "WAD структура".



①Прогресс перевода и взлома японской версии Spyro 1 смотрите в «плавающем сообщении» и его дубле.
②Сводки по Spyro 2! http://nihonjinryuu.narod.ru/Spyro2/gaikatsu.html.
③Кратко о прогрессе перевода и взлома Spyro 3GH в «сообщении №258», а сборки перевода найдёте в «сообщении №512».
④Проект перевода в vk - «spyro3rus».
~Русская wiki по Спайро~.
~Японская история Спайро~.


Сообщение отредактировал nihonjin - Суббота, 25.08.2012, 19:51
 
aleksusklimСообщение # 58 Воскресенье, 26.08.2012, 21:06
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
#170, 26.08.12


А вот как я взломал японскую камеру. Ссылка на патч:
http://klimaleksus.narod2.ru/Files/1/Japancam.rar

Я супер-крутой хакер. Но раньше я действовал по-мелкому, находя адреса памяти и меняя их значения. Или же ковыряя файл через WinHex, изменял указатели, которые представляли собой открытые четырёхбайтовые числа.
Но таким способом невозможно взломать «функцию», то есть мгновенное действие, например поведение игры после нажатия на клавишу. Я могу отловить и изменить только то, что «живёт» хотя бы несколько кадров, например последствия вызова той же функции (если она что-то куда-то сохраняет), но сам факт запуска функции мне неподвластен, то есть я не могу заставить игру перестать её обрабатывать (если там нет готового выхода типа «if x=0 then exit») или вызвать функцию принудительно по своему желанию.

Когда я создавал Вихрь на Полуночной Горе, я просто модифицировал область переменных, заменив номер одного объекта на другой, а также его координаты и прочие переменные. Но вот изменить физическое поведение вихря так не будет возможно.
Потому что весь «код» лежит либо в EXE, либо где-то в WAD как локальный. Хотя скорее всего, в WAD двоичного кода ассемблера вообще нет, зато EXE отвечает абсолютно за всё.

Однако когда я брался за взлом японской камеры, я и не собирался переписывать код, а хотел сделать так, чтобы американская камера всегда была вместо японской, особенно при загрузке сохранёнки, где при нажатии L1+R1 активируется американская камера. А я хотел поменять их между собой, чтобы при L1+R1 наоборот, применялась японская, в то время как американская работала бы при обычном включении.

Взялся за взлом. Через ArtMoney начал проверять, есть ли в памяти где-то ячейка, отвечающая за режим камеры. Оказалось, что есть. Это для эмулятора «9CB4D0», а для игры – «8007F4B0». Если там находится «115» (75h), то камера японская, а если «83» (55h), то американская.
Но это ещё не всё! Меняется странная ячейка «9CB3B0» (для игры – «8007F390»), как видите, расположена она недалеко. В ней записан «0» у японской камеры, и «1» у американской. Но её действие совсем другое…

Эй! Почему никто не сказал и не заметил, что в японском Spyro1 нельзя прыгать на бегу? А я-то ещё думаю, почему управление такое странное… Когда держишь квадрат, то нажатие креста не имеет эффекта. До тех пор, пока не включён РежиссёрскийРежим…
С американской камерой прыгать на бегу получается. Выходит, что виновница плохой игры не сама камера, а отсутствие такого необходимого прыжка на бегу!
Вот флаг наличия прыжка «1» и записывается в эту ячейку.

Результат таков: при обычной игре ячейка «8007F4B0» заполняется числом «115», а «8007F390» – нулём. А с R1+L1 – в «8007F4B0» будет «83», а в «8007F390» – единица!
Проверяю возможность изменения этого на лету в ОЗУ во время игры. Да! Как прыжок можно отключить и включить, так и режим камеры очень легко поддаётся изменению. Плюс, появляются ещё два новых состояния: американская камера без прыжка и японская камера с прыжком.

Теперь давайте определим цель… Раз уж можно включать и отключать прыжок, то имеет ли смысл ремонтирование камеры? Может, реализовать вечный прыжок на бегу, а камера пусть остаётся как L1+R1? Или наоборот, починить камеру, а пусть L1+R1 даёт только наличие прыжка. Но в любом случае мне ещё нужно заставить игру вписывать в эти ячейки те данные, которые захочу я, уже без ArtMoney.
Для этого сначала проделаю изменения в ОЗУ, потому определю, откуда оно было загружено, и через WinHex изменю там. Ведь я так сделал Вихрь…

Но камера вообще отказалась мне подчиняться. Сперва я решил узнать, что будет, если для прыжка записать не «0» и не «1», а для камеры – не «115» и не «85».
С прыжком всё понятно сразу: если он нулевой, то прыжка нет. Иначе он всегда есть, хоть там «1» или «255» или даже «4294967295» (FFFFFFFFh). Камера же гораздо необычнее.
Она работает при любом раскладе, будь там «0» или «255», но становится странная и дёрганая. Например при нуле она резко отлетает вверх, если развернуть Спайро лицом «сюда», а при «255» больше похожа на японскую, но она часто пытается развернуться как «активная», но почему-то застревает на полпути. В принципе, любое число так или иначе влияет на поведение камеры, но отличаются они незначительно. Поскольку я не собираюсь проводить 256 экспериментов, чтобы найти наилучшую камеру (ведь и «0» и «255» имеют ужасные глюки и отвратительные рывки при быстром движении), придётся явно сохранять константы «83» и «115».

Открываю начальный экран загрузки игры с карты памяти, чтобы найти момент, когда числа в ячейках меняются. Нет, ни при удержании L1+R1. А именно после нажатия креста и потухания экрана. Осталось определить субфайл, в котором прописан код загрузчика карты памяти. Это субфайлы с невысокими номерами и небольшими размерами.
Теперь я должен найти «источник» этих чисел «83» и «115», то есть именно то место в памяти (файлах), откуда они копируются в нужную область RAM. Плохо, что числа маленькие… если просто их искать, то я получу тонну совпавших данных… А если же.. о! Числа «155» и «83» на самом деле четырёхбайтовые, то есть если я изначально (а там пока нули) до нажатия креста заполню область рядом с «8007F4B0» (дюжину байт туда-сюда) максимальным значением в «255» (FFh), и нажимаю на крест – ячейка камеры превращается из 255 в 115 (ну или 83, если я удержал R1+L1), а следующие три байта становятся нулевыми! А это означает, что числа хранятся как «73000000h» и «53000000h», ну а их уже очень легко отыскать.

…Легко, но что-то не получается… Вижу кучи других значений, изменяю, запускаю – там снова заводское. Не, ну ладно… Может там какой-то расчёт происходит, ведь не просто так выбраны 83 и 155! Скорее всего биты разворачиваются, и каждый их них за что-то отвечает (например один за высоту, другой за скорость реакции камеры и.т.д). Возможно, разработчики оставили формулы «создания» этих констант вместо того, чтобы явно внести их в файлы.

Но ведь флаг прыжка не должен рассчитываться! Он либо ноль, либо один, причём тоже 32 бита. Нужно искать число «01000000» в памяти.
Ух… Да, их много. План такой – изменяю несколько на что угодно (лучше просто на 2, что терпимо для игры; ведь при 255 Epsxe часто начинает вылетать… к чему бы это?), нажимаю L1+R2+крест и смотрю в ОЗУ – если там остался «1», то я изменил мусор, значит эти значения можно спокойно удалить, а эмулятор через savestate загрузить обратно на момент поиска значений. Если же после одновременного изменения нескольких значений эмулятор завис или вылетел, то его необходимо перезагрузить, чтобы на этот раз поменять меньше ячеек. Ну я например, беру по сотне за раз, и если происходит ошибка (нашла коса на камень…), то разгребаю проблемный участок десятками; если и там ошибка, то уже определяю по одному – а потом снова вперёд сотнями! А ещё иногда в таблице сразу видны значения, которые постоянно меняются – их можно удалить сразу, даже не проверяя.

Я протрассировал так абсолютно все значения четырёхбайтовых единиц. Ничего! Я не смог найти место, откуда игра «достаёт» единицу, чтобы записать её по нужному адресу! О, кстати, а может поискать сам этот адрес? Нет, увы: он тоже не мелькает в дампах памяти, и совершенно неясно, как же игра его узнаёт. Стоп, а может при нажатии креста система подгружает новый субфайл, а механизм расчёта находится в нём? Тогда я переименовал свой savestate в «DEMO_999.99.000» и загрузил его через F3 после «Run BIOS». Это гарантированно предотвратит появление новых субфайлов. Опять неудача – значения и прыжка и камеры стабильно появляются в нужных ячейках…

А где эти самые области дублированы в файлах? Я начинаю шарить по ОЗУ через ArtMoney, пытаясь найти что-то особенное. Но там все так странно – немного ниже надпись «BISCPS-10083SPYRO» (которая есть и в EXE и в субфайлах), а прокрутив повыше обнаруживаю «Library Programs © 1993-1997 Sony Computer Entertainment Inc., All Rights Reserved», что уже явно выдрано из «SCPS_100.83» (тот же EXE) Короче – блок до и блок после есть в разных файлах в разных местах на диске. А вот именно это пространство словно само собой создаётся! Я пытаюсь найти указатель уже не на один адрес, а на диапазон адресов, сначала на небольшие участки, а потом уже от отчаянья до ±1024! И опять ничего…

Уф, что же мне делать? Есть другой вариант – найти участок в игре, где какие-то данные записываются по какому-то адресу. Подменить как адрес так и данные, чтобы в этот момент превращать камеру! Придумал два варианта: либо через меню, либо через L1, R1 в игре (перевороты через бок).
А что перевороты? Они разве нужны для игры? Я, например, по назначению так ни разу ими и не пользовался. Вот я и подумал, что нажатие L1 / R1 заносит в какую-то ячейку информацию о том, что для дракона пора воспроизводить анимацию переката (и совершать все связанные с этим действия) или даже проще – ставил флаг, в процессе ли сейчас кувырок или нет. Однако существует опасность, что ВСЕ кнопки управления могут брать этот адрес из одного и того же места, что не позволит его безболезненно изменить. Э-э, в любом случае, пока не взломаю – не узнаю!

Вот я и приступил к отсеиваниям. Стою > «искать» (кодированное значение). Пробежал, остановился > «не изменилось». Ушёл в другой уровень > «не изменилось». Тут быстро жму R1 и Esc, чтобы остановить эмуляцию > «изменилось». Восстанавливаю Epsxe, чуть жду > «изменилось», а потом сразу же > «не изменилось».
Нашёл несколько значений. Теперь при заморозке я должен впасть в бесконечный кувырок. Нет… Не вышло. Единственная ячейка, которая что-то делает – «9CB240» (для игры – «8007F220»), но это просто угол зрения камеры. Если увеличить, то она как бы приближается, но видно становится меньше. А если уменьшить (например до «-10», то есть «4294967286»), края раздвигаются, а изображение суживается. Становится видимо даже то, что находится почти сзади. И вот оно сохранение быстродействия – прекрасно понятно, что все модели и текстуры (да что уж! Даже полигоны неба) не отрисовываются там, где камера не должна их видеть. Скриншоты:

http://klimaleksus.narod2.ru/Files/1/cam_1.jpg (жаль, что скрин не передаёт динамичности бега…)
http://klimaleksus.narod2.ru/Files/1/cam_2.jpg (хотите знать, что это так ярко светит жёлтым? У Спаркса спросите…)
http://klimaleksus.narod2.ru/Files/1/cam_3.jpg (посмотрите на синий портал вдали)
http://klimaleksus.narod2.ru/Files/1/cam_4.jpg (а как он вам вблизи?)
http://klimaleksus.narod2.ru/Files/1/cam_5.jpg (и так во всей игре)

Ещё один весёлый адрес – «A3C7AA» (в игре – «800F078A»). Его я обнаружил ещё при взламывании экрана загрузки. Он отвечает за визуальную составляющую объекта «Спайро», который сперва прилетает по миру на площадку, а потом стоит на ней. Его можно превратить в одного зелёного монстра (которого он сшибает при приземлении), в другого такого же (который иногда пробегает на переднем плане, причём модель анимируется только если этот самый оригинал пробегает в этот момент), или в табличку «Insomniac Games» (особенно весело при полёте!) Присваивать значение от 1 до 4. Любые другие числа (по крайней мере из тех, что я попробовал) вызывают немедленный сбой и завершение работы эмулятора.

http://klimaleksus.narod2.ru/Files/1/cam_6.jpg (смир-но!)
http://klimaleksus.narod2.ru/Files/1/cam_7.jpg (как видно, центр таблички не совпадает с центром дракона…)
http://klimaleksus.narod2.ru/Files/1/cam_8.jpg (близнецы!)

Вернёмся ко взломам. Итак, идея с перекатами провалилась. Остаётся единственная надежда на меню. Открываю его и хочу понять, за что отвечает та самая строчка. Нахожу тут переводы меню («МТйД»), по таблице соответствия сопоставляю иероглифы (ага, закинул в Word и всё на глаз сравнивал, хотя можно было и в поиск дать…), наконец, определяю что это Стерео/Моно, нахожу его в EXE. Ищу указатель – фиг там! Ни на одну запись в EXE игра не держит указателей! Как такое возможно? Как система находит данные, не зная нужного отсчёта? А раньше ведь у меня получалось…

Ну ладно. Попробую оттолкнуться не от самого слова, а от того действия, которое производит изменение стерео на моно. Ломаю «кодированное значение» и отыскиваю всякие закономерности. Результат – пять адресов. Но скорее только два:
«9CBE10» (в игре «8007FDF0») – принимает «0» для стерео по умолчанию, и заменяется единицей «1» для режима монофонического звука. Причём я над ним немножко поиздевался и попробовал написать туда «2». Тогда он и три следующих байта вдруг стали равны «255» (FFh)! Это число «4294967295» или «-1». При следующем изменении оно превратилось обратно в «2». Выходит, что значение не явно присваивается, а вычитается из единицы. Следовательно, искать его бесполезно.
От «9CD2F0» (в игре «800812D0») до «009CD2F3» («800812D3») – то есть 4 байта. Однако его значения скорее напоминают четыре однобайтовых числа, чем одно четырёхбайтовое. Для стерео четвёрка равна «127=0=127=0» (шестнадцатеричные: «7F=0=7F=0»), а для моно – «63=63=63=63» (hex: «3F=3F=3F=3F»). Странно, не правда ли?

Пусть так. Значит эти числа («8323199» и «1061109567») откуда-то копируются! Надо найти как их, так и место, где записан пункт назначения конечный адрес «2148012755» (800812D3h).
И .. что? Ничего. Опять… Да что Spyro1 возомнил о себе!? Блин, мне бы просто посмотреть, отследить поведение системы в момент переключения настройки… Откуда берутся адреса и значения, да как именно копируются. Эх, я бы в код заглянул…
Ну хоть в какой-нибудь, хоть в ассемблер! Вспоминаю про «эмулятор с отладчиком», но к огромному сожалению он не собирается запускать японский Spyro1 (Хей, почему!? А на самой, реальной приставке Sony PlayStation, этот прожжённый на CD-R образ сможет ли нормально работать?)
Ну а даже б если запустил? Что я в нём могу? Не, вот даже при старте BIOS без диска… это ж ужас. Одно неловкое движение в меню, и вылетает необработанное исключение. А у него, походу, аллергия на эти самые исключения, так что он то и дело падает. Логирование. Не работает!! Вызовы процедур не трассируются, а сектора диска не мониторятся. В самом отладчике – просмотр дорожек диска (с наитупейшей в мире навигацией), который я запросто могу и в WinHex делать, потом граббер GPU, который НЕРЕАЛЬНО виснет… Стек вызовов процедур, который пуст при работе, а увидеть его можно только остановив действо. Просмотр состояний регистров, но на кой он сдался, если читабельного кода нет. Как же нет, есть! Там куча (с такой же идиотской навигацией) мнемонических команд, добрая половина которых нераспознана отладчиком. О, её можно запускать по шагам! А нука-сь… О-хо, эдак я год буду ждать завершения отрисовки одного кадра… Что-что ещё? «Выполнить до курсора»? Ага, осталось «угадать», на какой адрес поставить сам курсор… Последний писк – распечатка дизассемблерического листинга в файл, но всё что я смог оттуда получить – тонну надписей «illegal».

Но вдруг мне вспомнился один такой ps2dis, то есть, дизассемблер PlayStation 2. Я его скачал когда не помню и откуда не знаю. И куда положил тоже пришлось долго определять. На тот момент, я экспериментально кастовал на него различные PS-EXE'шки, но дальше горы мнемонических кодов не продвинулся и забросил это дело до лучшего применения…

…Которое наконец, настало! Вот сама прога:
http://klimaleksus.narod2.ru/Files/1/ps2dis.rar
Штучка отпадная. Очень, очень мощная! Но всё по порядку.
Во-первых, никакой инструкции там и в помине нет, так что мне пришлось как обычно, изучать программу в процессе. Во-вторых, она сразу распаковывает EXE по нужным адресам так, что все данные располагаются словно в эмуляторе – как если бы я дампил память. Кстати, я где-то читал, что дизассемблировать можно и дампы памяти, поэтому был готов если что, выдернуть парочку копий всех адресов с включённым на экране меню, чтобы отыскать в них нужную функцию. Но пока довольствовался EXE.

Что интересно, ps2dis умеет распознавать английский текст «ENTERING GNASTY'S WORLD» (что он там делает!?), но все «японские» кириллические байты распознаёт как реальные инструкции, так что процесс обещает быть долгим.
Не буду много говорить о том, как я изучал ps2dis, но навигация там простая, кнопкой «вправо» можно перейти по ссылке на адрес, кнопкой «пробел» пометить оператор, а «F3» и «Shift+F3» найти все те адреса, операторы которых ссылаются на помеченную строку (типа, навороченный поиск адреса).
Ну вот я и взял адресок «8007F4B0» (камера), перешёл на него клавишей «G», пометил строку и поискал ссылающихся. Вау! Да их же целая толпа! Хотя сам адрес пуст (ps2dis работает в полном пространстве от «00000000» до «FFFFFFFF», хотя ОЗУ располагается по крайней мере выше «80000000»). Поменьше рефереров было у адреса прыжка («8007F390»). Также без ссылок не остался и стерео-переключатель «8007FDF0», ну и его флаги «800812D0 – 800812D3».
Что дальше? Я вижу код, который явно что-то делает, но понятия не имею, как его читать. Я не знаю смысла мнемоники, хотя общая концепция программирования на ассемблере мне известна.

…Это ещё со времён «Sinclair ZX-Spectrum на основе *БЕЙСИК* микрон с микропроцессором Z80» (тот что 1990 года выпуска с 40Кб оперативки, 16Кб ПЗУ и 2Кб видеопамяти экрана 256 на 176 точек… Стоп, минуточку! *заглядывает в инструкцию* Да я его недооценивал! Системные характеристики: http://klimaleksus.narod2.ru/Files/1/cam_10.jpg ). Короче, там программы (в большинстве своём, игровые) делились на две категории – те, что написаны непосредственно на Бейсике, и на «программы в машинных кодах» (которые грузились всё равно-таки через ядро бейсика RANDOMIZE USR xxx), то есть на ассемблере. В инструкции сказано, что они создавались благодаря компиляции с Паскаля или «C» (который в те времена был ещё без плюс-плюс). Ну а я писал только на бейсике, исключительно на бейсике. Поэтому такие понятия как адреса и регистры меня напрямую не касались. Я как-то пытался что-то написать на самом ассемблере, но при любой ошибке этот (с позволения сказать) компьютер просто перезагружался (а вот бейсик был куда гуманнее, тихо выводя сообщения, и перезагружаясь только если свет моргнёт…) Вот я и почитал тогда справочку по устройству машинных кодов, знания которых пригодились мне.. вот лишь сейчас.

↓ ↓ ↓ ↓ ↓


Сообщение отредактировал aleksusklim - Воскресенье, 26.08.2012, 21:41
 
aleksusklimСообщение # 59 Воскресенье, 26.08.2012, 21:30
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
↑ ↑ ↑ ↑ ↑


Итак, ассемблер. Он работает только в заданных адресах. То есть если нелинейный (ветвящийся) код скопировать и вставить в другое место, то ссылки будут показывать на прежнее. Или придётся вручную отыскивать и менять все адреса (может автоматически, если код был получен компиляцией, а не ручным вводом).
Сама программа представляет из себя набор команд. Они исполняются очень быстро подряд. Но команды не масштабируемы, то есть это не как обычный код, мол «X=sqrt(2+2*2+1*3)», а команда=операция, только что-то одно. Результаты промежуточных операций надо где-то хранить, для этого существуют регистры. Это, типа, такие переменные. Они бывают разного размера и типа (ну в Синклере были маленькие восьмибитные (1 байт) регистры, но они соединялись в пары, получая шестнадцатибитные уже по два байта). Поэтому, чтобы что-то сложить, нужно, грубо говоря, сначала занести первое слагаемое в один регистр, потом занести второе слагаемое в другой регистр, а затем приравнять третий регистр сумме первых двух, и скорее всего, поместить результат в какую-то ячейку памяти, адрес которой должен храниться в четвёртом регистре…
Чтобы не растранжирить так сразу все регистры несколькими действиями, был изобретён глобальный стек. Это как банка, в которую можно засовывать значения изменяемых регистров. А извлекаться они будут в обратной последовательности, то есть первый выйдет последним. В стек сперва помещают значения всех тех регистров, которые нужны для текущего действия (в задуманном порядке), потом производят само действие с этими регистрами, а уж затем восстанавливают из стека все былые значения, что могли быть стёрты при выполнении. Даже если одной из промежуточных операций будет вызов функции (переход исполнителя по другому адресу и возврат оттуда), которая захочет использовать те же самые регистры, то она тоже просто временно положит их текущие значения в глобальный стек. Главное тут не забыть вытащить из стека всё, что было в него внесено, ведь иначе рано или поздно произойдёт переполнение (хотя с большей вероятностью система просто накроется, когда в регистр не вернётся нужное значение)
Команды, понятные для человека, записывались мнемоникой, например «NOP» означает «ничего не делать», а «MOV» – занести что-то в регистр. Аргументы и имена регистров пушится через запятую после команды (видимо AutoIt ниже третьей версии выглядел примерно так же).
Стоит ли говорить, что регистр мог хранить ТОЛЬКО числа. А не строки. Строка (скорее всего) задавалась адресом первого символа (в регистре) и нулевым байтом на конце (или длиной, записанной либо в другом регистре, либо в ячейке, адрес которой всё равно лежит в каком-то регистре).
В общем, концепция программирования чудовищно отличается от привычной. Ну совершенно! (Это даже хуже, чем DOS). Где-то не так давно на компе читал CHM-справку какой-то программы или эмулятора чего-либо, и посмотрел, как в нём работают стандартные функции… Ужас! (Хоть бы больше такого нигде не было…) Функции там имеют номер и подномер. Они принимают аргументы и возвращают результаты. Так вот, чтобы вызвать функцию, нужно было занести в один регистр номер нужного раздела функций, в другой регистр – подномер уже самой функции, в ещё кучу других регистров – аргументы. Затем как-то воплотить её исполнение. После чего выкопировать себе результаты из других регистров. Ассемблер-то быстрый, но если его ТАК гонять…

Ну я отвлёкся. Итак, ps2dis. Мне была срочно нужна хоть какая-нибудь справка по командам, чтобы прочитать код Spyro. Забурился в интернет, нашёл страничку:
http://gamehacking.org/faqs/1UpPS2Dis.html (Кстати говоря, там нет ни одной команды для работы со стеком! Неужели PlayStation обходится без него?)
Очень странно, но других нормальных описаний не было. Да и это не ахти как профессионально сделано (да что они там в самом деле? Туториалы, видео-уроки, пошаговые инструкции… идиоты! Дайте справку по всем командам как htmlbook.ru даёт по тегам!!)
Рассказывается не всё, чертовски не всё! Как, например, загрузить данные с диска в ОЗУ? А как заставить GPU использовать выбранный графический ресурс? А как воспроизвести звук или считать нажатия кнопок на джойстике?
Здесь даны чисто математические функции, немного работы с памятью и операторы языка. А вот какое-то действие выполнить с ними я не смогу, до тех пор, пока не узнаю, как «вынуждать» систему действовать (ну, скорее всего, придётся занести в регистр адрес начала данных, в другой регистр номер требуемого действия и написать правильную команду…)
Но мне и математики хватит, по крайней мере я смогу изменить адреса и значения нужных ячеек, а игра сделает остальное.
Попробовал использовать тот набор С++ разработчика для PS, который мелькнул от steeldragon (нь..ет, я не.. игнорирую, я просто… уф, я отвечу там, точно отвечу!) Скомпилировал один демо EXE и дизассемблировал его. Там такая хренотень в кодах, что дольше десяти минут я не продержался… Они ведь тоже какой-то движок использовали, у которого куча функций в арсенале.

Ещё по ps2dis:
Кто-то пишет что-то умное, но словно для кого-то глупого:
http://www.oocities.org/techni_slave/hack.html
Очень хорошее описание всех горячих клавиш:
http://www.oocities.org/siliconvalley/station/8269/ps2dis/

Всё, пора начинать мой взлом! Запускаю ps2dis (шрифт – Courier New 12 смотрится неплохо), открываю в нём EXE и перехожу по адресу «8007FDF0» – это ячейка, отвечающая за моно/стерео настройку в меню. Вижу пустоту, как и ожидалось. Включаю анализатор (помечает все линии, на которые есть ссылки):
http://klimaleksus.narod2.ru/Files/1/dis_1.png
Space+F3 – ищу ссылающихся. Первый:
http://klimaleksus.narod2.ru/Files/1/dis_2.png
Так-с, «LW» что означает «Load Word», то есть, код загружает значение из этой ячейки в регистр V0, а чуть ниже сравнивает его с нулём. Это точно не для меню (там должно быть сохранение) Идём дальше, F3:
http://klimaleksus.narod2.ru/Files/1/dis_3.png
Интересно, да? «LI», которого нет в описании. Смею предположить, что это «Load Integer (или Immediate)», расшифровывающееся как «addiu a0, a0, $fdf0», что видно из строки состояния. Тут меня осенило, почему я не мог найти адреса в ОЗУ. Да потому что адрес разбивается на две части – на верхнюю половину «8007» и нижнюю – «FDF0», и грузятся они в два действия! В предыдущей строке стоит «lui a0, $8008». Зачем он превращается в «8007» я точно не знаю, но так происходит везде. Код загрузки адреса такой:
lui a0, $8008
addiu a0, a0, $fdf0
, что приравнивает регистр «A0» (смаю предположить, что с «А» начинаются специальные регистры, предназначенные именно для хранения адресов памяти, а не просто так) значению «8007FDF0».
Кстати, видите строчку выше «mov a3, zero»? Команда MOV тоже не описана. Потому что это лишь упрощение реальной команды «addu a3, zero, zero», чтобы обнулить регистр. Хм, кажется, строка «lui a0, $0000» приведёт к тому же самому результату! Да в прочем, какая разница, написать «X=0» или «X=X-X» или даже «X=A*0», если результат всё равно нулевой? Остаётся лишь заметить, что слово «zero» означает РЕГИСТР, в котором хранится вечный ноль, а само число «0» записывалось бы «$0000», но далеко не все команды принимают числовые значения, поэтому «zero» используется очень часто.

Ладно, давайте посмотрим, что Спайро делает с этим адресом, который сейчас сохранён в A0. Дальше по коду видны сразу две ссылки (ps2dis подсвечивает A0). На F3 они реагируют точно так же, вот послеследующий:
http://klimaleksus.narod2.ru/Files/1/dis_4.png
Ха, «SW»! Это и есть код изменения пункта меню. Но пока пройдёмся по другим ссылкам:
http://klimaleksus.narod2.ru/Files/1/dis_5.png
Тут (заметьте, очень далеко внизу!) по нашему адресу записывается «zero», то есть ячейка обнуляется. Это уж точно мне не мешает, иду ниже:
http://klimaleksus.narod2.ru/Files/1/dis_6.png
Здесь тоже загружают значение и сравнивают его с нулём. А тут же присутствует «jr ra», то есть возврат из функции. Между какие-то данные что-то считывают и записывают…
http://klimaleksus.narod2.ru/Files/1/dis_7.png
SW, интересный блок. Регистр «AT» подсвечен, и он постоянно приравнивается в «8008», то есть в него грузится верхняя часть того адреса, который используется последующей строкой. Резонный вопрос, зачем повторять одно и то же, если «at» вообще не изменяется на протяжении всего кода? Мне кажется так сделал тот компилятор, на исходнике к которому писали Spyro. Ну ведь не на ассемблере же! Машинный код создан другой программой. А у неё, кажется, любой адрес задаётся двумя строчками ПОДРЯД. Система как бы переопределяет число полностью. Словно не знает, что его верхняя половина одинакова. Грубо говоря, конструкция:
A=8008
X1=A+0001
X2=A+0002
X3=A+0003
Исполнена как:
A=8008
X1=A+0001
A=8008
X2=A+0002
A=8008
X3=A+0003
Расточительно, зато если бы вдруг пришлось кардинально поменять один из адресов, это на остальные это не произвело бы влияния. Их движок как бы подходит к каждому присваиванию заново, даже не глядя на то, что AT уже хранит как раз именно то число, которое ему присваивают ещё раз. Код не оптимизирован. Но мне это без разницы, иду к последнему ссылающемуся:
http://klimaleksus.narod2.ru/Files/1/dis_8.png
А этот код словно обратен предыдущему, теперь значения из той части памяти копируются в эту. (Забегая вперёд скажу, что я на 95% уверен, что это коды сохранения и загрузки игры на карту памяти)

В результате возвращаюсь в область третьего ссылающегося, где лежит основная функция изменения режима стерео в меню:
http://klimaleksus.narod2.ru/Files/1/dis_9.png
Вот я так сидел и смотрел на этот код. Я пытался прочитать его, перепроверял MIPS (мнемонику) и думал над ним. Это первый в моей жизни раз, когда я читал код Ассемблера и понимал, что он означает… О, как я был близок к изменению!
Но я очень боялся притронуться к нему. Как? Разве можно просто так переписывать код без всяких тренировок и инструкций? Лишь очень размыто представляя себе дальнейшую работу? Я на краю утёса… Я вор, который мечтал добраться до самого сложного сейфа в самом охраняемом банке, и который сделал это и стоит перед ним… Я космонавт, годами тренировавшийся к полётам, и вот вставший перед трапом к кабине корабля, готовящегося к старту…

Короче, я минут сорок просто смотрел на код. Уж не знаю, думал ли я над этим кодом, или просто завис в переживаниях, но через какое-то время мне надоело ничего не делать, и я взялся за перепись.
Определил много нового в ассемблере (особенно касательно прыжков), чего раньше не знал. Потом ещё поискал в интернете и убедился, что сделал правильные выводы. Написал свой код. Сохранил (хи, в ps2dis интересная система сохранения области, а я как дурак на глаз в WinHex списывал…). Проверил. Не работает, вернее, не полностью. Изменил код, перепроверил. Уже по-другому, но неправильно. Подумал ещё, изменил и проверил. О, наконец! Жизнеспособная версия. Но глюки при входе в игру с L1+R1 (я не сменил стерео-адрес, но сравнивал адрес прыжка, что приводило к неработоспособности настройки: нужно было дважды щёлкнуть её в меню, чтобы отключить и снова включить). Потом значение неверно сохранялось и загружалось на карту памяти… А как выяснилось, за стерео звучание отвечает именно ноль в «8007FDF0», а не «127=0=127=0» в «800812D0»! Пришлось ещё раз переписать весь код этого блока, и, вроде, всё заработало. Потом я раскрасил надписи и закончил.

Хей, не кажется ли вам, что я замял конец рассказа? Начинал так медленно, а финишировал одним абзацем? Сейчас распишу подробнее… Просто я уже и не вспомню всех промежуточных тестирований нерабочего кода, потому что я их не сохранял, а даже если бы сохранял, то не запомнил бы назначение и ход моих мыслей в тот момент. Так что я просто распишу логику оригинального кода и изменённого кода, но не неудачные попытки его создания. Но поверьте на слово, перепечатывал байты из ps2dis в WinHex я раз восемь. И простите, если вдруг стану немножко повторяться…

Итак, оригинальный блок. Я пронумеровал строчки справа:
http://klimaleksus.narod2.ru/Files/1/dis_10.png
Смотрим-с. Вот сам код:
0 ) 8002d704: jal $80059f90
1 ) 8002d708: addu a3, zero, zero
2 ) 8002d70c: lui a0, $8008
3 ) 8002d710: addiu a0, a0, $fdf0
4 ) 8002d714: lw v1, $0000(a0)
5 ) 8002d718: addiu v0, zero, $0001
6 ) 8002d71c: subu v0, v0, v1
7 ) 8002d720: beq v0, zero, $8002d754
8 ) 8002d724: sw v0, $0000(a0)
9 ) 8002d728: addiu v0, zero, $003f
10) 8002d72c: lui at, $8008
11) 8002d730: sb v0, $12d3(at)
12) 8002d734: lui at, $8008
13) 8002d738: sb v0, $12d2(at)
14) 8002d73c: lui at, $8008
15) 8002d740: sb v0, $12d1(at)
16) 8002d744: lui at, $8008
17) 8002d748: sb v0, $12d0(at)
18) 8002d74c: j $8002d778
19) 8002d750: nop
20) 8002d754: addiu v0, zero, $007f
21) 8002d758: lui at, $8008
22) 8002d75c: sb v0, $12d2(at)
23) 8002d760: lui at, $8008
24) 8002d764: sb v0, $12d0(at)
25) 8002d768: lui at, $8008
26) 8002d76c: sb zero, $12d3(at)
27) 8002d770: lui at, $8008
28) 8002d774: sb zero, $12d1(at)
29) 8002d778: lui a0, $8008
30) 8002d77c: addiu a0, a0, $12d0
31) 8002d780: jal $80068eb0
32) 8002d784: nop

Он сильно отличается от того, что видно на скриншоте, потому что ps2dis сам определяет и показывает вычисленные адреса известных регистров, а в распечатке выдаёт настоящий голый код. Руководствоваться лучше скриншотом, заглядывая в сам код лишь для ясности. Поехали, сперва объясню каждую строчку, а логику поведаю после:
0 ) Вызвать функцию (с возвратом) по адресу «80059F90» (что на 45603 строки впереди) после исполнения следующего оператора.
1 ) Приравнять регистр «a3» нулю.
2 ) Записать в регистр «a0» число «80080000» (здесь и далее всё в шестнадцатеричной)
3 ) Изменить значение регистра «a0» на «8007FDF0».
4 ) Считать 4 байта по адресу «0000+a0» (т.е. «8007FDF0») и сохранить их в «v1».
5 ) Приравнять регистр «v0» числу «0001».
6 ) Вычесть из регистра «v0» (т.е. из единицы) содержимое регистра «v1» и сохранить обратно в регистр «v0».
7 ) Выполнить следующий оператор, затем сравнить содержимое «v0» с нулём; если не равно, то продолжать, а иначе перейти к адресу «8002d754» (что на 13 строк впереди, т.е. к строке № 20)
8 ) Сохранить в 4 байта по адресу «0000+a0» (т.е. «8007FDF0») содержимое регистра «v0».
9 ) Приравнять регистр «v0» числу «003F».
10) Записать в регистр «at» число «80080000».
11) Сохранить 1 байт по адресу «12D3+at» (т.е. «800812D3») из регистра «v0» (т.е. число «3F»)
12) Записать в регистр «at» число «80080000».
13) Сохранить 1 байт по адресу «12D2+at» (т.е. «800812D2») из регистра «v0» (т.е. число «3F»)
14) Записать в регистр «at» число «80080000».
15) Сохранить 1 байт по адресу «12D1+at» (т.е. «800812D1») из регистра «v0» (т.е. число «3F»)
16) Записать в регистр «at» число «80080000».
17) Сохранить 1 байт по адресу «12D0+at» (т.е. «800812D0») из регистра «v0» (т.е. число «3F»)
18) Безвозвратно перейти по адресу «8002D778» (что на 11 строчек впереди, т.е. к строке № 29) после исполнения следующего оператора.
19) Ничего не делать.
20) Приравнять регистр «v0» числу «007F».
21) Записать в регистр «at» число «80080000».
22) Сохранить 1 байт по адресу «12D2+at» (т.е. «800812D2») из регистра «v0» (т.е. число «7F»).
23) Записать в регистр «at» число «80080000».
24) Сохранить 1 байт по адресу «12D0+at» (т.е. «800812D0») из регистра «v0» (т.е. число «7F»).
25) Записать в регистр «at» число «80080000».
26) Сохранить нулевой байт по адресу «12D3+at» (т.е. «800812D3»).
27) Записать в регистр «at» число «80080000».
28) Сохранить нулевой байт по адресу «12D1+at» (т.е. «800812D1»).
29) Записать в регистр «a0» число «80080000».
30) Изменить значение регистра «a0» на «800812D0».
31) Вызвать функцию (с возвратом) по адресу «80068EB0» (что на 60876 строк впереди) после исполнения следующего оператора.
32) Ничего не делать.

↓ ↓ ↓ ↓ ↓


Сообщение отредактировал aleksusklim - Воскресенье, 26.08.2012, 21:42
 
aleksusklimСообщение # 60 Воскресенье, 26.08.2012, 21:40
Аватар aleksusklim
фдулыгылдшь
Редактор
«1066»
Где: Не в городе Драконов
↑ ↑ ↑ ↑ ↑


Довольно интересные можно сделать выводы! Начнём:
0) Поскольку функция вызывается очень издалека, отслеживать её нет необходимости, поэтому не обращаем внимания на эту строку.
1) Обнуление «a3» происходит ДО предыдущего прыжка. А знаете, почему? Почему строка после инструкции перехода выполняется до самого перехода? Потому что ассемблер очень быстрый. Он реактивный, он сверхзвуковой! Процессор несётся по строчкам с небольшим опережением, поэтому, когда он получает очередную строку для обработки, он заранее готовится взять новую следующим шагом. То есть невозможно моментально изменить номер текущей строки. Это происходит с задержкой на полстроки, а именно: система принимает инструкцию прыжка (j*, b*), затем выполняет следующий оператор, и в это же время начинает готовиться брать наконец ту строку, на которую указала инструкция перехода. Короче, два выхода: либо мысленно поменять прыжок со следующей строкой (если там не ещё один прыжок, хотя на практике такого не делают…), либо ставить NOP после каждого прыжка (ведь он всё равно пропускается)
2) Дополнение для следующей строки, чтобы нормально загрузить адрес «8007FDF0». Пока что грузится лишь «80080000» в «a0».
3) Прибавление к «80080000» окончания «FDF0» даёт в сумме адрес «8007FDF0». Странно? Даже очень, если рассмотреть строки 29 и 30, где при той же технике число «10000» не отнимается из результата. Там, оказывается, есть объяснение… Когда прибавляется значение, не превосходящее «7FFF», то оно просто складывается; а если это число больше или равно «8000», то из результата сперва вычитается «10000»! Зачем не знаю, но так везде – если правая часть адреса (или любого регистра) не меньше 8000, то левую надо увеличить на «0001» (00010000) предыдущим шагом.
4) Получение значения настройки Стерео/Моно («8007FDF0») и запись его в «v1». Как мы знаем, настройка обозначает «00000000» для стерео и «00000001» для моно.
5) Записывается в «v0» простая единичка («00000001»). Сейчас узнаем, зачем…
6) Вычитание! Самое оно (про которое я упомянул, когда в ArtMoney внёс в ячейку число «2»)! Из единицы вычитается флаг стерео, который либо 0, либо 1. Таким образом он меняет свое состояние, превращаясь из нуля в единицу и из единицы в ноль. Именно это действие можно назвать самым центром настройки стереозвука в меню. Эта строчка меняет стерео на моно и моно на стерео.
7) Прыжок. Если «v0» (результат вычитания), т.е. новое состояние переключателя, равно нулю (переход с моно на стерео), то прыгнуть к строке № 20, а иначе (переключение со стерео на моно) – продолжить исполнение кода дальше.
8) Действие, обратное строке № 4, которое сохраняет значение регистра «v0» (новое состояние настройки) по тому же самому адресу, по которому оно было взято ранее, а именно «8007FDF0», ведь регистр «a0» с тех пор не изменился. Вспомним, что это действие выполняется ПЕРЕД прыжком, в независимости от того, будет ли он совершён в предыдущей строке.
9) Число «3F» (т.е. «63» в десятичной) заносится в регистр «v0». Это не адрес (как предполагает ps2dis, создавая метку), а то число, которое должно оказаться в каждом из четырёх байт моно-режима. Ведь этот код выполняется для преобразования в моно, так что байты должны задаваться тут.
10) Верхняя часть адреса сохраняется в «at». Поскольку все четыре конечных адреса 12d0, 12d1, 12d2, 12d3 не превосходят 8000, в верхний разряд идёт «8008» как полагается.
11) Байт «3F» (63) сохраняется в «800812D3». Он должен быть записан в три другие ячейки без изменений.
12,13,14,15,16,17) Сохранение, почему-то, происходит в обратном порядке, то есть сначала в 800812D3 (предыдущий шаг), потом в 800812D2, затем в 800812D1 и наконец, в 800812D0. Всё это делается однообразным кодом, в котором «at» постоянно принимает значение «80080000» перед непосредственной записью.
18) Прыжок к строке № 29, ведь иначе ветка для стерео тоже исполнится. Для ветвлений подобного типа всегда требуется два прыжка: один по условию, который отодвинет вперёд одну из веток; а другой прямо перед началом этой отодвинутой ветки, чтобы исполнитель, завершив ближнюю ветку, сразу прыгнул за конец дальней (хм, подобный приём я часто использовал на том самом Бейсике, ведь области ELSE там не было и в помине… Мне приходилось ставить на IF оператор GOTO, направив настолько вперёд, сколько хочу отдать под мнимый ELSE, а перед оператором назначения поставить ещё один GOTO, направленный после конца мнимого THEN… большие трудности произойдут, если я захочу немного дописать в ту или иную ветку… Благо, разрешено по 255 операторов в строке и между соседними строками особая нумерация (10,20,30,40…) позволяла вставить по 9 других… но если уж совсем невмоготу, то выручал GOSUB, направленный куда-нибудь далеко-далеко на 9000, где были поля свободного места, главное не забыть RETURN в конце… А вообще, знаете. Тот Синклер и всё связанное с ним очень поощряло ко всякого рода взломам! Вот что написано в одном абзаце _официальной_ инструкции: http://klimaleksus.narod2.ru/Files/1/cam_9.jpg ! Особенно меня поражает строчка «Например, взломаем загрузчик игры…»)
19) Пустая команда, чтобы предшествующий прыжок прошёл без дополнительных нагрузок.
20) Как строка № 9, здесь «v0» получает число «7F» (т.е. 127 для стерео), который должен быть занесён уже не во все четыре, а только в две ячейки.
21) Опять пишем в «at» верхнюю часть «80080000», чтобы корректно определить адрес назначения.
22) Аналог № 11, но уже число «7F» (127) сохраняется в «800812D2». Да, тут уж совсем не по порядку, смотрите далее.
23) Ещё раз обновляем «at» (совершенно бесполезное действие, но зато даёт потенциальное место для собственных строчек кода!)
24) Пишем «7F» по «800812D0». А вот в остальные два уже нужны нули.
25) Всё тот же «at»…
26) Вот! Глядите, как интересно: ноль не прописывается явно в «v0», как можно было бы ожидать, а вместо «v0» применяется «zero», в котором всегда вечный ноль! Так что адрес «800812D3» с лёгкостью обнуляется.
27) «at»!
28) Повтор операции нулевого регистра, теперь для последнего адреса «800812D1». Это завершающая строка всего ветвления, дальше код исполняется и для моно и для стерео.
29) Регистр «a0» вновь принимает «80080000» для новых манипуляций.
30) Его превращают в «800812D0», я уже не знаю для чего, ведь интересующий меня код закончился.
31) Функция! Не знаю, зачем она нужна, да и знать не хочу.
32) Пустота для упрощения предыдущего вызова.

Ну как вам кодик? (Вообще говоря, он мог быть построен десятком различных способов, например запомнить 63, 127 и 0 в разных регистрах, выбрать один из них по ветке, а код записи сделать единственным, или вообще грузить все 4 байта как одно word, как значение всего регистра через SW)
Вот я стал планировать, какую его часть предстоит менять. Строки 0 и 1 к делу отношения не имеют, так что я их не трону. Строчки от 20 до 32 формируют такой набор байт, который необходим для правильного стерео режима. А поскольку я задумал всегда иметь бесконечное стерео, то этот код, в принципе, можно исполнять постоянно при смене режима камеры, чтобы стерео уж точно никуда не делось. Поэтому с 20 до 32 я тоже не изменю, а ветку направлю так, чтобы код исполнялся подряд, начиная с 20 и дальше, то есть стерео будет переопределяться постоянно.

А как менять? Сначала я просто заменял адреса. Ну и регистры и числа. А потом смекнул, что значение переключателя моно-стерео «8007FDF0» на самом деле и определяет моно да стерео! Никакие 127=0=127=0, ни 63=63=63=63! Это бесполезно, вообще не знаю, для чего они. За стерео отвечает один байт «8007FDF0» – ноль = стерео, а единица (или что угодно) – моно. Если я на основе оригинала построю на нём переключатель камеры, то одновременно и режим звука будет меняться. (Как я это узнал? Вставил в уши наушники, запустил новую игру (прямо по курсу первый замороженный дракон), отвёл Спайро правее и ниже. Теперь кристаллический звук статуи слышен только в левом наушнике, а овцы, враги и девчачьи вздохи Спайро – как в правом, так и в обоих. При изменении в ArtMoney все звуки резко начинали проигрываться в обоих наушниках; обратно – снова раздельно. Кстати, музыку лучше отключить в меню, ибо она всегда играет одинаково, хотя может и нет, просто мало отличается…)

Мне так не катит. Ещё раз, если я сохраню логику оригинальной ветки, проверяя «8007FDF0», и в зависимости от этого выставляя «8007F4B0» и «8007F390» (ну прыжок же тоже менять?), то моно и стерео у меня станут изменяться, как говорится, as well. Поэтому от «8007FDF0» вообще нельзя отталкиваться, его следует хранить нулевым (вечное стерео). Но блин, при этом само меню перестаёт работать, потому что (похоже) механизм отрисовки японского текста сам и проверяет адрес «8007FDF0» ! Чтобы избавится от такого, мне придётся найти и изменить его тоже.
Вторая проблема – сохранение на карту памяти. Как мы знаем, камера НЕ МОЖЕТ быть сохранена на карту ни в каком виде, потому что превращается в японскую (по умолчанию) ПОСЛЕ загрузки игры из сейва. А вот флаг моно-стерео загружается. И сохраняется! Поэтому его следует постоянно приравнивать нулю, как при изменении режима камеры (т.е. даже если вы загрузитесь из моно, то оно станет стерео при первом же пользовании моей опцией), так и при сохранении на карту (даже если не менять камеру, моно станет стерео после следующей загрузки новой сохранёнки), но при самой загрузке трогать что-то большого смысла не имеет, можно даже не тратить время.

Что ж, я меняю код! Жёстко меняю, словно я ас в ассемблере. Скриншот:
http://klimaleksus.narod2.ru/Files/1/dis_11.png
Ну как? Заметна разница? Распечатка:
2) 8002d70c: addu v1, zero, zero
3) 8002d710: lui a0, $8008
4) 8002d714: addiu a0, a0, $f390
5) 8002d718: lw v1, $0000(a0)
6) 8002d71c: beq v1, zero, $8002d734
7) 8002d720: nop
8) 8002d724: addiu v0, zero, $0073
9) 8002d728: addiu v1, zero, $0000
10)8002d72c: j $8002d740
11)8002d730: nop
12)8002d734: addiu v0, zero, $0053
13)8002d738: addiu v1, zero, $0001
14)8002d73c: nop
15)8002d740: sw v1, $0000(a0)
16)8002d744: sw zero, $0a60(a0)
17)8002d748: sw v0, $0120(a0)
18)8002d74c: nop
19)8002d750: nop

А разница очень большая. Сперва расшифровка, затем логика:
2) Приравнять регистр «v1» нулю.
3) Записать в регистр «a0» число «80080000».
4) Изменить значение регистра «a0» на «8007F390».
5) Считать 4 байта по адресу «0000+a0» (т.е. «8007F390») и сохранить их в «v1».
6)Выполнить следующий оператор, затем сравнить содержимое «v1» с нулём; если не равно, то продолжать, а иначе перейти к адресу «8002D734» (что на 6 строк впереди, т.е. к строке № 12)
7) Ничего не делать.
8) Приравнять регистр «v0» числу «0073».
9) Приравнять регистр «v1» числу «0000».
10) Безвозвратно перейти по адресу «8002D740» (что на 5 строчек впереди, т.е. к строке № 15) после исполнения следующего оператора.
11) Ничего не делать.
12) Приравнять регистр «v0» числу «0053».
13) Приравнять регистр «v1» числу «0001».
14) Ничего не делать.
15) Сохранить в 4 байта по адресу «0000+a0» (т.е. «8007F390») содержимое регистра «v1».
16) Сохранить в 4 байта по адресу «0A60+a0» (т.е. «8007FDF0») нулевой регистр.
17) Сохранить в 4 байта по адресу «0120+a0» (т.е. «8007F4B0») содержимое регистра «v0».
18) Ничего не делать.
19) Ничего не делать.

!! Ясно? За переключатель я взял сам флаг прыжка на бегу! Ноль (по умолчанию) – японская камера, прыжка нет, псевдостерео. Один – прыжок есть (по факту изменения ячейки), камера американская, псевдомоно. Логика:
2) Обнуляю «v1» на крайний пожарный, чтоб уж точно загрузилось верное значение. В принципе, этого можно и не делать.
3,4) Копия оригинальных строк 2 и 3, с той лишь разницей, что адрес уже не «8007FDF0» (стереомоно), а «8007F390» – прыжок на бегу.
5) Считываю из «8007F390» в регистр «v1». Его и буду проверять…
6) Ветвление. Не такое большое как в оригинале, мне ведь всего два регистра сменить… Сейчас проверяется не новое значение (не как в оригинале!) а ещё старое. То есть ноль означает переход со стерео на моно, а единица – с моно на стерео. Прыжок на строку 12 происходит при переходе на моно. Продолжение при стерео. ВНИМАНИЕ: на самом деле это уже никакие не «стерео» и не «моно»! Но ведь менюшка-то будет озаглавлена по-старому… Вот я и решил зафиксировать за японским словом «СТЕРЕО» режим японской камеры без прыжка, а под словом «МОНО» – американский с прыжком. И отношение «8007FDF0» с «8007F390» одинаково – стерео = нет прыжка = по умолчанию; моно = прыжок = по требованию.
7) Пустота, я не хочу путаться в операторах.
8) Японская ветка. Заношу в «v0» число «115», свойство японской камеры.
9) А в регистр «v1» – число «0», новое значение прыжка на бегу. (Хей! Вы заметили, что я избавился от вычитания? Не, реально, зачем оно нужно? Я лучше явно выберу значение в самой ветке. Кстати, поэтому я взял «$0000», а не «zero» – у американцев ведь единица будет…)
10) Прыжок на строку 15, чтобы код американской камеры не исполнился сейчас.
11) Пустота, для облегчения этого самого прыжка.
12) Американская ветка. Загружу в «v0» число 83, свойство американской камеры.
13) А в регистр «v1» – единицу, активирующую прыжок на бегу (и одновременно являющуюся флагом самого переключателя псеводостерео/псевдомоно).
14) Пустота. Ничем не оправданная, просто визуально отделяет окончание ветвления. Я ведь не ограничен количеством строк! При всём желании я даже мог бы поставить JAL и свалить хоть сотню строчек куда-нибудь в свободное место, если бы мне не хватило имеющегося здесь пространства.
15) Общая часть. Сохраняю «v1» по тому же самому адресу, по какому взял его (8007F390), но теперь его значение сменилось с 1 на 0 или с 0 на 1. По совместительству, прыжок на бегу.
16) Обнуляю адрес для режима звука, то есть «8007FDF0». А вы заметили, каким образом я это сделал? Я не стал по сто раз грузить «8008» в адресные регистры! Я немного посчитал… Мой адрес прыжка – «8007F390». Это меньше, чем «8007FDF0». И даже меньше «8007F4B0», адреса режима камеры! Выходит, что я могу просто плюсовать небольшие числа (а именно «0», «A60» и «120») при непосредственное записи, не меняя значения самого адресного регистра.
17) Тем же путём сохраняю «v0», свойство камеры, по вычисленному адресу «8007F4B0». Кстати, ps2dis тут сам запутался, и не может показать результирующий адрес, как он делал это в оригинале. Печальная новость: это означает, что не во всех случаях можно легко определить ссылающиеся ячейки… Значит мне с таким удачным взломом просто повезло.
18) Пустота. А действительно, мне больше нечего писать, я закончил!
19) Пустота, бывшая здесь и в оригинале. Знаменует окончание изменений, ведь к последующему коду я не прикасался.

Думаете, взлом закончен? Не-а! Если оставить всё как есть, то меню не сможет переключать настройку, вернее, этого не будет видно. Потому что графическая часть всё ещё проверяет адрес «8007FDF0», значение режима звука. Цель: найти его и изменить на «8007F390»!
А ведь поиск я уже производил – это первоначальная прогулка с F3, видная на ранних скриншотах выше в тексте. Перечислю-ка их ещё раз:
http://klimaleksus.narod2.ru/Files/1/dis_2.png
Вероятно. Ведь он – единственный, а следующим идёт тот блок, который я только что поменял. Оставшиеся:
http://klimaleksus.narod2.ru/Files/1/dis_5.png
Но тут сохраняется ноль. Возможно, это блок при загрузке игры, ведь стартовый экран проходит как стерео.
http://klimaleksus.narod2.ru/Files/1/dis_6.png
Функция, в которой считывается это значение. Возможно, что это нужная область…
http://klimaleksus.narod2.ru/Files/1/dis_7.png
http://klimaleksus.narod2.ru/Files/1/dis_8.png
Сохранение и загрузка. Предполагаю, что на карту памяти… Понять, чему равен «s0» мне так и не удалось!
Остаётся два варианта, либо адрес «80019F34» ( http://klimaleksus.narod2.ru/Files/1/dis_2.png ), либо «8005B31C» ( http://klimaleksus.narod2.ru/Files/1/dis_6.png ). Но следует учесть, что один из них должен использоваться самой игрой для воспроизведения стерео или моно звука. Что ж, раз второй лежит внутри функции, да ещё и очень далеко внизу, а первый почти перед кодом изменения меню, то я предполагаю, что менять следует именно адрес с первого из этих двух скриншотов.

И я не ошибся! Новый код:
http://klimaleksus.narod2.ru/Files/1/dis_12.png
Незатейливое изменение строки 80019F34:
с
lw v0, $fdf0(v0)
на
lw v0, $f390(v0)

Отныне менюшка полностью рабоатает! Остаётся сохранение на карту… По скриншоту http://klimaleksus.narod2.ru/Files/1/dis_7.png :
Меняю регистр «v0» на вечно пустой «zero»:
http://klimaleksus.narod2.ru/Files/1/dis_13.png
То есть код 8005DD38:
с
sw v0, $fdf0(at)
на
sw zero, $fdf0(at)

Готово! Под завершение, последний шртих:
http://klimaleksus.narod2.ru/Files/1/dis_14.png
Как же мне повезло! Длина надписей ровно 4 символа! А это значит, что для сохранения черырёхбайтовой чётности (это связано с тем, что JUMP инструкцией невозможно прыгнуть на строки, не кратные четырём… нужно же было запихать в 32 бита не только сам адрес, но и сигнатуру оператора!) системе пришлось добавить ещё четыре пустых байта. Мне столько даже и не нужно, меняю цвет: стерео – красный (японская камера), а моно – зелёный (американская камера):
http://klimaleksus.narod2.ru/Files/1/dis_15.png
Всё становится понятно с первого взгляда. Если интересно, как ps2dis смотрит на это, то вот:
http://klimaleksus.narod2.ru/Files/1/dis_16.png
Хи, он-то думает, что это какой-то супершифрованный нераспознающийся код!

Таблица для ArtMoney (прилагается к патчу):
http://klimaleksus.narod2.ru/Files/1/dis_17.png
1) «Прыжок 1/0» – если «0», то прыжка нет; иначе есть.
2) «Кам 83/115» – если «115», то камера японская, если «83» – то американская; иначе – гибрид.
3) «заставка 1-4» – управление объектом Спайро на начальном экране. «1» – Спайро, «2» – первый сбитый монстрик, «3» – табличка Бессонных, «4» – пробегающий монстрик; иначе – крах эмулятора. Актуально ТОЛЬКО при начальном меню, в остальной игре не действует.
4) «поле зрения 1» – угол обзора камеры. «1» – стандарт. Увеличение – приближение, сокращение обзора. Уменьшение в отрицательную строну – отдаление, повышение обзора. Сильно отрицательные значения при выравнивании камеры приводят в вылету из эмулятора.
5) «Стерео 0/1» – если «0», то стерео; иначе – моно.
6,7,8,9) «127/63» или «0/63» – байты, принимающие «127» или «0» для стерео, и «63» для моно. Назначение неизвестно.

Мой патч официально закончен (в бета-версии обнаружилась ошибка документа, отменяющего патч для SCPS). Однако, я рассчитывал, что nihonjin подскажет мне правильные японские слова, которые следует поставить вместо «стерео» и «моно» в меню… Хотя, в русской версии будет по-другому, по-нашему. А вот японскую версию с исправленной камерой мне бы хотелось «раскрутить» не слабее Вихря! Дайте правильные слова, а я ещё и доработаю патч так, чтобы он выставлял верные CRC суммы проверки ошибок в BIN, чтобы образ не портился после применения патча, и чтобы его можно было прожечь на реальный диск для самой приставки без опасений (а то мне кажется, что ни фига не будет пахать на соньке, ведь образ выйдет запоротый…)

А ещё, по аналогии с Вихрем, я сделал неплохое многозначительное стихотворение-пародию (угадайте, на что?) по поводу взлома японской камеры:

Камера

Зима недовольства заменится летом,
Когда завладею восточным секретом
И камеру странную восстановлю,
Ей пунктик особый добавлю в меню;
Удобно раскрашу,
Усердно отлажу,
На критику миру отдам!
Чтоб странствия наши
Привычней и краше,
Доступнее сделались вам.
Для этого первым обыденным шагом
Значения в памяти перемешаю,
Проверю, замечу, мозги шевельну,
И даже прыжок при атаке верну!
А в этом поможет мне сяо-Ассемблер:
Исправлю часть кода, да в патч сохраню,
И образ отныне навек изменю –
Пусть будут таблички отыщены всеми,
Пусть тайны игры постигают усердней…
Держите! Всё вам безвозмездно дарю.


(Кстати, к слову: кто отважится назвать единственные восемь книг, которые читали Insomniac Games?)


Копия ссылки на патч:
http://klimaleksus.narod2.ru/Files/1/Japancam.rar




Эх… Три мультипоста, а я снова ничего не ответил по всем предыдущим сообщениям…
Стоило ли мне вообще тратить время на описание этапов взлома? Не лучше ли было вместо этого сделать что-нибудь полезное?
Ну, к примеру, я мог бы ответить во всех необходимых темах, да ещё и закрыть долги по ЛС (сколько ж я их накопил…). Но в темах я и так рано или поздно ответил бы.
Или я мог провести два других игровых взлома, чтобы создать что-то новое.
Либо, например, сделать одно большое исследование звукового формата или объёмных моделей.
Тогда бы я создал что-то ещё.
…И только лишь. Вместо этого я написал свой комментарий, руководствуясь которым, кто-то другой мог бы на миг превратиться в меня и тоже взломать и улучшить что-то, может даже не один раз.
А это бессмертно.
Что перспективнее: десяток взломов, или ещё один живой хакер?
А я делаю хакера. В надежде, что кто-то прочитав пост, сможет сотворить столько же, или даже ещё больше, чем я.
Пустой тратой времени это не назвать.


but nobody came

Сообщение отредактировал aleksusklim - Воскресенье, 26.08.2012, 22:18
 
Поиск:

Кто нас сегодня посетил

Для добавления необходима авторизация