|
shedevr.org.ru Группа перевода приставочных игр "ШЕДЕВР"
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Gishi
Зарегистрирован: 13.04.2008 Сообщения: 6
|
Добавлено: Пн Апр 14, 2008 2:36 pm Заголовок сообщения: Написание компилятора в байткод. |
|
|
Перед тем, как в меня полетят гнилые помидоры, поясню, что это имеет самое непосредственное отношение к геймхакингу. Ковыряемая мной в данный момент игра состоит из двух, так сказать, блоков - виртуальной машины (движок) и байткода (собственно, сама игра). Байткод представляет собой обширный набор весьма высокоуровневых команд (команды, естественно, имеют переменную длину). Формат байткода более-менее разобран, написать декомпилятор с байткода в язык с кодовым названием Moonspeak , думаю, будет несложно. Проблема в том, что я не знаю, как подступиться к написанию компилятора. Хотелось бы поговорить с людьми, имеющими опыт написания простейших компиляторов или парсеров, если таковые здесь имеются. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Апр 14, 2008 3:26 pm Заголовок сообщения: |
|
|
Создай таблицу мнемоник, количеств параметров и их масок и имён. Вот и всё. Далее уже как сделаешь. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Пн Апр 14, 2008 4:30 pm Заголовок сообщения: |
|
|
Цитата: | Ковыряемая мной в данный момент игра | Если не секрет, что за игра?
Цитата: | Проблема в том, что я не знаю, как подступиться к написанию компилятора. | А в чём, собственно, проблема? Вообще, примерная схема комплятора выглядит следующим образом: лексический анализ -> синтаксический анализ -> семантический анализ-> генератор кода. Соответственно, подступать нужно с самой первой части |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Апр 14, 2008 5:24 pm Заголовок сообщения: Re: Написание компилятора в байткод. |
|
|
Gishi писал(а): | Формат байткода более-менее разобран |
Лучше более, чем менее. Если теоретическая база сама по себе зыбкая, то компилятор заранее обречён на кучу багов в самых неожиданных местах.
Конечно, в некоторых случаях стопроцентная точность не требуется, достаточно чуть модифицировать код методом проб и ошибок... но тогда вообще проще вручную скомпилировать (в Блокноте перевести свой псевдокод в байткод). |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Апр 14, 2008 5:28 pm Заголовок сообщения: |
|
|
При работе с FF7, например, я полностью декомпилировал только нужные мне инструкции, остальные просто пропускал по заранее составленной таблице размеров, определяя только мнемонику без параметров.
А компиляцию не использовал - изменял код редактором прям в потоке данных в режиме реального времени. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
Gishi
Зарегистрирован: 13.04.2008 Сообщения: 6
|
Добавлено: Пн Апр 21, 2008 4:00 pm Заголовок сообщения: |
|
|
Дико извиняюсь перед присутствующими за неоперативность. Провайдер решил на пару дней отлучить меня от интернета, а потом (не понос, так золотуха) у вашего покорного начались жутчайшие запарки с дипломом в его «заборостроительном».
Итак, касательно проекта. Речь идет о игре MOON. (именно так, с точкой в конце) студии Nexton, core team которой впоследствии перейдет в ими же основанную студию Key. Продвинутым анимешникам наверняка знакомы такие сериалы как Kanon, Air и Clannad. Все перечисленные работы представляют собой экранизации визуальных новелл с соответствующими названиями вышеупомянутой студии Key. MOON. - НЕ хентайная игра, если кого-то интересует именно этот аспект. =) Изначально в MOON. присутствовали эросцены, но из более поздних версий игры всю клубничку решили выдрать. Меня, как противника хентая в любой его инкарнации, такое решение радует.
http://en.wikipedia.org/wiki/Moon.
HoRRoR, прошу прощения, но табличные компиляторы это что-то из области первых наскальных рисунков и фигурок из бивней мамонта. =) Движок MOON. это полноценная виртуальная машина с развитой системой команд/функций, некоторые из которых имеют переменное число операндов/параметров (как, например, команда условного перехода). Ты разницу между простым интерпретатором скриптов (пусть и скомпиленных в некую промежуточную, близкую к байткоду форму) и настоящей виртуальной машиной понимаешь?
В моей виртуальной машине, помимо обширного набора реализуемых команд "виртуальному процессору", к примеру, есть область глобальных переменных, локальных переменных и стек. Даже два стека как минимум - стек для логических операций (он используется, к примеру, при вычислении истинности/ложности некоторого выражения, например, в команде условного перехода) и стек вызовов (используемый при «дальных» вызовах других модулей с байткодом).
Что такое лексический и синтаксический анализ я себе представляю. Также представляю себе, что такое генераторы парсеров – Lex/Yacc, Antlr, Visual Parse++ и иже с ними. Сложность на данном этапе представляет понимание способа задания грамматики в форме BNF. А если конкретнее, моск отказывается понимать рекурсивный способ задания оной грамматики. В общем, хотелось бы поговорить с людьми, использовавшими Lex/Yacc в реальной работе. |
|
Вернуться к началу |
|
|
HoRRoR RRC2008
Зарегистрирован: 21.06.2006 Сообщения: 2341 Откуда: Ростов-на-Дону
|
Добавлено: Пн Апр 21, 2008 4:09 pm Заголовок сообщения: |
|
|
Цитата: | HoRRoR, прошу прощения, но табличные компиляторы это что-то из области первых наскальных рисунков и фигурок из бивней мамонта. =) |
Ну если под таблицами ты понимаешь глиняные таблички - то да. Если грамотно всё организовать, то не придётся каждый раз перелопачивать код для добавления поддержки новой инструкции, достаточно будет подправить соответствующий элемент "таблицы". И использовать подобные структуры для динамических инструкций, переменных или т.п. тоже никто не мешает. В общем, я лишь предложил один из способов. _________________ Работаю за деньги
KILL ALL HUMANS!!!!!111 |
|
Вернуться к началу |
|
|
АнС RRC2008
Зарегистрирован: 08.11.2003 Сообщения: 2818
|
Добавлено: Пн Апр 21, 2008 4:55 pm Заголовок сообщения: |
|
|
Gishi писал(а): | В общем, хотелось бы поговорить с людьми, использовавшими Lex/Yacc в реальной работе. |
:shock: Что-то я сомневаюсь, что тут (да и где-либо) бродят толпы такого народа.
Интересно, с какой радости вообще понадобилось организовывать виртуальную машину в простой новелле, вполне способной довольствоваться скриптовым движком? Переменные/условия и так можно было хранить/использовать.
Необходимость сложных арифметических рассчётов с переменными?
Вообще, если требуется только перевод текстовых последовательностей, я бы даже не заморачивался с написанием полноценного компилятора. Ну а если есть желание сделать новую новеллу на основе старого движка, то тут уже посещения нашего форума будет явно не достаточно... |
|
Вернуться к началу |
|
|
Ghost
Зарегистрирован: 24.04.2004 Сообщения: 237
|
Добавлено: Пн Апр 21, 2008 10:04 pm Заголовок сообщения: |
|
|
Ну я работал с Lex и Yacc по роду своей деятельности... писал простой парсер одного SQL-запроса.
Ещё писал программу для выполнения программ в стиле Паскаля, но она понимала только объявление переменных, выражения, оператор присваивания и условие (с else и без), но делал это без Yacc, т.е. грамматические правила проверялись методом спуска в самой программе, и грамматика была LL, а не LALR, как для Yacc (хотя для такого простого языка, который я использовал, эти грамматики не сильно отличаются). Моя программа не только читала, но и выполняла входные файлы.
Ну это так, мелочи, но с Lex и Yacc кое-как знаком.
Касательно игры: по идее байткод виртуальных машин должен представлять относительно низкоуровневые команды, как ассемблер, т.е. все команды упрощённо можно представить в таком виде:
, а не в виде высокоуровневых операторов с вызовами функций и суперпозициями параметров вроде:
Код: | if (func1(++x,func2()==0)>count--) buf[p++]=*p++ |
Для ассемблеров применяются не КС, а более простые регулярные грамматики и подходы к генерации другие.
Так что чтобы мы могли как-то помочь, лучше дать всю известную информацию о этой машине, её байткоде и эквивалентных действиях.
Мне одно непонятно: как ты разобрал этот байткод? Методом проб и ошибок???
А официальную информацию можно где-нибудь найти?
В крайнем случае могу посоветовать книжки по теории языков , но вряд ли ты будешь их читать. _________________ Мысль - это интеллектуальный эксцесс данного индивидуума. |
|
Вернуться к началу |
|
|
wl
Зарегистрирован: 20.12.2005 Сообщения: 76 Откуда: Россия
|
Добавлено: Вс Окт 05, 2008 3:44 pm Заголовок сообщения: |
|
|
есть какие-то успехи? просто я тоже заинтересовался этой темой, применительно к psp, но там всё должно быть похоже |
|
Вернуться к началу |
|
|
Gishi
Зарегистрирован: 13.04.2008 Сообщения: 6
|
Добавлено: Пн Ноя 03, 2008 7:33 pm Заголовок сообщения: |
|
|
wl писал(а): | есть какие-то успехи? просто я тоже заинтересовался этой темой, применительно к psp, но там всё должно быть похоже |
И да и нет. Да, потому что в настоящее время пишу компилятор в байткод, грамматика для языка, с которого он будет компилировать, уже написана (LALR(1), пытаюсь сохранить совместимость как с Yacc, так и с Bison), следовательно с Бэкусом-Науром и рекурсией благополучно разобрался. Нет, потому что компилятор делается для совершенно другой визуальной новеллы, имеющей совершенно отличный от муновского байткод. Проект по переводу MOON. умер. Такое случается. |
|
Вернуться к началу |
|
|
wl
Зарегистрирован: 20.12.2005 Сообщения: 76 Откуда: Россия
|
Добавлено: Чт Ноя 06, 2008 3:35 pm Заголовок сообщения: |
|
|
moon мне не интересен. скорее новеллы от key - Clannad, Kanon, Shinkyouku Soukai Polyphonica, Snow Portable.
все их портировала некая контора Prototype. Форматы файлов отличаются от PC версий (в тех, которые есть, типа Clannad) |
|
Вернуться к началу |
|
|
Гость
|
Добавлено: Вс Ноя 09, 2008 3:50 am Заголовок сообщения: |
|
|
wl писал(а): | moon мне не интересен. скорее новеллы от key - Clannad, Kanon, Shinkyouku Soukai Polyphonica, Snow Portable.
все их портировала некая контора Prototype. Форматы файлов отличаются от PC версий (в тех, которые есть, типа Clannad) |
А мне интересен. Прежде всего тем, что не описывается формулой "crying game", выведенной Key в One, отшлифованной до блеска в Kanon и с тех пор без нещадно эксплуатирующейся самой Key и вагоном и маленькой тележкой других японских студий.
Кроме того, для Kanon и Clannad существует продвинутый инструментарий за авторством Haeleth и перевод этих игр уже идет полным ходом, так что ковырять PS2-версии смысла особого не вижу. Ну разве что из любви к искусству. |
|
Вернуться к началу |
|
|
Gishi
Зарегистрирован: 13.04.2008 Сообщения: 6
|
Добавлено: Ср Апр 08, 2009 12:15 am Заголовок сообщения: |
|
|
Внезапно, бамп. Проект по переводу MOON. возродился:
http://www.tsukuru.info/tlwiki/index.php?title=MOON.
P.S. Загнулся он в свое время по причине того, что прежний переводчик умудрился потерять к нему интерес еще до того, как приступил к работе. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
Powered by phpBB © 2001, 2005 phpBB Group
|