Разработка и ромхакинг > Ромхакинг и программирование
- Перевод Surging Aura -
<< < (2/7) > >>
Плотник:

--- Цитата ---Мне кажется, или это эпик фейл?
--- Конец цитаты ---

Это будет "эпик вин", "я гарантирую это"! :lol:

Добавлено позже:
Еще такой вопрос, почему в некоторых jrpg, таких как: Surging Aura, FF6, Feda и т. д. нет  возможности (в ромах, разумеется) засейвиться честно? На титульном экране просто отсутствует пункт "продолжить игру", хотя в инвентаре героя пунктик есть и даже работает.
Sapphire:
Ааа! До Surging Aura добрались. Помню сколько мучился, искал её на английском. ^_^
Удачи тебе Плотник.

GManiac:
На днях я отделил код своим анализатором, теперь надо сделать правильный дизасм в ИДЕ, т.к. оттуда, я думаю, будет удобней работать.
Раньше я делал асмовый файл из анализированного куска своим дизасмом + препроцессором под gas для Landstalker, и ром компилился верно, но с этими самописными прогами не очень удобно работать. Это просто отдельные консольные программы: анализатор, дизасм, препроцессор, никакого понятия "проекта" и ручных указаний у них нет. Поэтому перейду на ИДУ.
Собственно, нужен скрипт, который импортирует все адреса кода в ИДУ. Скажем, обычный текстовый файл, в каждой строчке - стартовый адрес куска кода.
Если кто напишет такой скрипт, будет хорошо. Или я позже сам посмотрю команды, что там можно сделать.

И такой вопрос: ИДОЙ можно пометить куски данных как incbin, чтобы они не лезли в асмовый файл?
Плотник:

--- Цитата ---Ааа! До Surging Aura добрались. Помню сколько мучился, искал её на английском.
Удачи тебе Плотник.
--- Конец цитаты ---

Благодарю за теплые слова. Будем стараться! 頑張るよ!!


--- Цитата ---И такой вопрос: ИДОЙ можно пометить куски данных как incbin, чтобы они не лезли в асмовый файл?
--- Конец цитаты ---

Я понятия не имею о чем идет РЕЧЬ и во всем полагаюсь на твой опыт.
Вступительный ролик я перевел.


Ti_:

--- Цитата: GManiac от 26 Октябрь 2010, 14:14:34 ---Собственно, нужен скрипт, который импортирует все адреса кода в ИДУ. Скажем, обычный текстовый файл, в каждой строчке - стартовый адрес куска кода.

И такой вопрос: ИДОЙ можно пометить куски данных как incbin, чтобы они не лезли в асмовый файл?

--- Конец цитаты ---
r57shell писал такой скрипт, но он для файлов сгенеренных в его модегенс.

можно хайд поставить на такие куски, в асм-файле так и останутся тока надписи хайд.
r57shell:
Я писал скрипт:
1) по файлу юзать превращение в код (дизасм).
2) по нажатию клавиши - из файла взять адресс куда перейти - и перейти(jump to offset)
3) по нажатию клавиши - поискать в файле строку вида "подстрока=комментарий", потом если есть подстрока в строке дизасма - прокоментировать данную строчку.
всё.
остальному не верить - врут, такое не писал.
GManiac:

--- Цитата: Плотник от 26 Октябрь 2010, 14:50:13 ---Я понятия не имею о чем идет РЕЧЬ и во всем полагаюсь на твой опыт.
--- Конец цитаты ---
Так вопрос не к тебе был.


--- Цитата: Ti_ от 26 Октябрь 2010, 15:05:43 ---можно хайд поставить на такие куски, в асм-файле так и останутся тока надписи хайд.
--- Конец цитаты ---
Как я понял, хайд можно ставить только на код. На данные не ставит. Мне нужно как-то удобно пометить блок данных, желательно как обычно, одной кнопкой или менюшкой, чтобы в итоге получить код в асмовом файле, перемежающийся командами incbin <filename>, а файлы будут содержать куски данных. Видимо, обычными средствами ИДЫ это не получится. Или хотя бы просто сделать некую пометку на это место, чтобы потом сгенерированный асм можно было сконвертить самописной прогой в asm + bin. Есть мысли?

Скрипт я нашёл, спасибо. Жалко, справка ИДЫ без всякой структуры и See also, нашёл только функцию побайтного чтения из файла. Кстати, в скрипте /idc/loaddef.idc есть пример чтения строки #0D#0C из файла.

Добавлено позже:
#0D#0A то есть.

upd: в главном меню Hide всегда есть, хех.
r57shell:
Ах да, я ещё писал "комбайнер" HTML экспорта иды ))) получилось весело ). Прога которая "подсвеченный" дизасм переводит в нужный вид ). Писал на перле, т.к. там регэкспы - мощь.
GManiac:
Написал скрипт, читает адреса блоков кода из файла. Процедуру чтения строки из файла взял из idc, который лежал в папке ИДы.
Вначале он почему-то много кусков кода помечал как .long таблицы, а не как код, оказалось, на эти места ссылается LEA. Поигрался с настройками анализа, отключил опцию Coagulate code segments в Kernel Options 2, теперь не портит блоки кода.
Кто-нить знает, как подсчитать количество строк кода в дизасме ИДЫ? Так, навскидку скрипт вроде бы все мои команды растащил. У меня в дизасме 63 тыщи строк кода. Я сделал асм идой, и в Notepad++ подсчитал количество инструкций так:
всего строк - 2005064
потом вычитаю другие строки поиском:
количество подстрок .byte - 1935571
.long - 971
.word - 18
строк с "-----------------" - 1657
":\t\t" - 1710 штук, такая подстрока идёт в лабелах типа "loc_0012:  ". Перед каждым лабелом стоит пустая строка, поэтому умножаем на 2, т.е. 3420.

Остаётся 63427 строк. Вроде бы всё хорошо, но есть ещё строки c заголовком SUBROUTINE (288 штук) и строки с концом субрутины (296 штук), и там ещё много пустых строк, так что получается меньше 63 тыщ...

Кому интересно, вот архив. Там лежат:
- скрипт
- дизасм от моего анализатора, с поставленными гэпами, 63 тыщи строк
- полученный из дизасма список блоков кода. Я решил оставить полные строки, т.к. скрипт всё равно читает первое число (адрес), а остальную часть строки пропускает.

Как пользоваться. Открываете в ИДЕ ром Surging Aura, можно binary, неважно. В Kernel Options 2 надо отключить галочку "Coagulate code segments". Запускаете скрипт, указываете файл с блоками.

Могу дать дизасм для другой игры.
Марат:

--- Цитата: GManiac от 27 Октябрь 2010, 11:26:17 ---
Кто-нить знает, как подсчитать количество строк кода в дизасме ИДЫ?

--- Конец цитаты ---
gggg
Попробуй чеpез функцию findcode. Там в папке иды есть скрипт opndtest, кажется. Если его немного доработать, то как раз подойдет.
GManiac:
Спасибо. Про FindCode я думал, но отбросил этот вариант как слишком натянутый, думал, есть что попроще и правильней. Пример помог.

Добавлено позже:
62431 строки, что-то он пропустил  :?
Плотник:
GМaniac, как продвигается дело?
Хочется хотя бы маленький кусочек русского текста вставить.
GManiac:
Не так быстро. Даже если бы мы переводили с английского, нужно было бы минимум перерисовать шрифт. А здесь японский, надо перелопатить код, чтобы вставлять не иероглифы, а другой шрифт, т.к. принцип вывода текста в японских играх другой.
Но сначала надо найти шрифт, найти скрипт с указателями, вытащить всё это, придумать способ вставить всё обратно, написать конвертор русского текста в хекс и т.д.
Я не хочу заново получить ту возню, что была с СИТД и ЛС, поэтому сначала я добьюсь автодизасма, чтобы можно было легко пересобирать ром. Тогда примусь за сам проект.
И с СИТД и ЛС надо проделать то же самое.

Добавлено позже:
К тому же я почти весь день занят, домой прихожу уставший  :(

Добавлено позже:
Конкретно по дизасму, вот начальный перечень:
- надо разобраться, почему не все строки дизасмились в ИДЕ
- проствить .org
- проставить .incbin
Плотник:
Как успехи, GМaniac?

Вот, немного перевода для оценки:

世界を滅ぼす、闇の呪法典。
この呪法典をめぐる、光と闇の呪法師どうし戦い・・・

Некогда, существовал Кодекс Тьмы, способный уничтожить мир.
За право обладания им разразилась битва между светлыми и темными магами.
                                   

「アズラーの聖戦」は闇の呪法師ルフィードの敗北によって
決着した。

В этой священной битве Асуров, темный маг Руфид был повержен,


ねらわれた呪法典は、勇者たちの手によりふういんされた・・・

А добытый Кодекс был опечатан (запечатан) храбрыми героями...


パスファルダ王国はきょう、建国(けんこく)20周年(しゅうねん)の式典をむかえ
ようとしていた。
Сегодня королевство Пасфальда отмечает двадцатую годовщину со дня своего основания.


「セイラ」 Сэйра

ムウ、まだねてたの!?
はやくしたくしないと式典がはじまっちゃうねよ。

Му, ты все еще спишь!?
Собирайся скорее, церемония уже начинается!

ほら、この法衣にきがえて。

Вот, переоденься в это платье (церемониальное облачение, праздничную одежду и т.д.).
Nemesis_c:
印象的な  :thumbup:
Плотник:
ありがとうございました.
GManiac:
Пока ничего нового, ИРЛ работы много. Щас будут 4 выходных дня подряд, может, займусь проектом.
Я как-нибудь запощу скрин с перевода той китайской игры, чтобы видно было, как там выглядит текст - в тот раз я взял шрифты из Shining Force 1.
GManiac:
Небольшая новость:
- выставил более-менее оптимальные настройки для ИДЫ
- некоторые куски кода она всё равно не брала, пришлось переделать скрипт не под AnalyzeArea, а под MakeCode, т.е. теперь я задавал каждую строчку кода, а не блок
- ИДА создавала лишний код в том месте, где должны быть данные, из-за того, что на это место ссылалась команда LEA. Убрал галочку "Create function if data xref data -> code32 exists", теперь лишний код не создаётся. И пришлось ещё отключить автоанализ, от него тоже были проблемы
- теперь все строки кода (их адреса) в ИДЕ совпадают со строками кода от моего анализатора, не больше и не меньше

Выгрузил в .asm и в который раз столкнулся с двумя неприятностями:
1. Все известные мне ассемблеры превращают команды типа
ADD #imm, Dn
в
ADDI #imm, Dn
и остальные подобные команды. Из-за этого опкод искажается, а если там на самом деле были данные, то будет ошибка.
Как решить эту неприятность?

2. Проблема только с GNU Assembler. Он оптимизирует запись .l в Dn в MOVEQ, если это возможно, т.е. команду
MOVE.L     #$00000011,D0
он превратит в
MOVEQ     #$11,D0
Вторая команда короче, из-за чего всё сдвигается. А жалко, т.к. GAS имхо самый функциональный ассемблер. Либо надо немного пропатчить оригинальный ром, там таких команд немного.

Собрал под Asm68k, правда, тот не понял размерность команды MOVE USP, но это мелочь. Сравнил полные дизасмы с оригинальным файлом: кроме опкодов xxxI команд, различий больше нет.
Т.е. теперь есть такой проект ИДЫ, который я хотел, с которым можно работать. Осталось разобраться с incbin и можно будет приступать.

Хотел выложить проект ИДЫ, но архив idb большой - больше мегабайта, не хочется каждый раз его выкладывать. А если делать Dump to IDC, возникают косяки с настройками и автоанализом :(
Плотник:
Отлично!
r57shell:
GManiac, раздуй за вот этот ассемблер. Хотя он и громоздкий, но сколько я на нём не компилировал - команды он вроде не изменял.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии