Ага, вроде того. Полоски только еще останутся, 512 байт каждые 16384 или около того.
Если учесть, что одна полоса в ширину, высотой в 1 пиксель, имеет 512 байт, то убрав по 2 пикселя каждые 32 байта, получим полосу, шириной 480.
Таким образом мы убираем исривление пока только по вертикали. Но есть ещё горизонтальные смещённые линии. Поэтому нужно убирать ещё каждые 32 блока по 2 блока, первый и последний, если учесть, что один блок - теперь уже 480 байт - одна горизонтальная линия. Тогда должно быть всё выровнено. ИМХО.
Сообщение от riku.kh3
Кнопки O/X в игре поменять местами так и неполучилось, кстати. Все '00400000' в эльфе перебрал, а крестик в игре по прежнему работает(
Кстати, не всегда может быть u32(dword) формат 00400000. Вполне возможно, что данные записаны в u16(word), например 0040243C. А если крупные компании, то у них может быть модифицированный SDK, так там могут записать вообще извращённо, либо присвоить этим цифрам свои переменные, например b = 00004000; d = 00002000, таким образом получаем в компилированном коде 0b27100C 0d27100C.
Но я больше склоняюсь, что используется u16, как привёл пример Scorpeg.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
У него в игре вообще какой-то адский изврат используется, я вообще не воткнул, как оно работает. Какие-то множественный шифты с ксорками, и в итоге анализатор этого всего выставляет в нужное место раскодированное значение. Сам скачай с нитроромов например, посмотри, я адрес написал с опросом клавиш. А то я в этих ассемблерах шарю на уровне "могу поменять левое с правым и посмотреть что будет".
Scorpeg, я в ассамблере ноль, для меня все это лес дремучий. Если кто поможет - буду рад, конечно, но в противном случае как есть придется оставить.
Да и не надо знать. Всё логически исчисляется. Если тебе нужно просчитать дизассемблерный код, нужно знать размер заголовка ELF-файла, который записан по спецификации в позиции 0х38, и который ессно отсекается и в коде программы не учитывается. Например, у обычных PRX заголовок ELF имеет размер 0х60, а у Ever17 заголовок имеет размер 0хA0 (160 байт), поэтому нужно учитывать этот размер.
Если имеем такой код
Значит в pos_08872D28 прибавляем отсечённый заголовок 0хA0, получаем позицию 08872DC8.
Идём в файле EBOOT.BIN по этому адресу и меняем там 0020 на 0040.
Аналогично pos_08872D40 + A0 = 08872DE0.
Эмм, EBOOT.BIN начинается с нуля. И размер заголовка ELF у него 0хA0. Я дебажу через PRXTool.
Если ты используешь другой виндовый дизассемблер, например JPSP, тогда у тебя адресация конечно может начинаться с другого места. Прога обычно указывает в начале адресацию первого байта. Щас скачаю, там посмотрим.
ErikPshat, это то понятно, в Ever17 все красиво все работает. Как самому с нуля это провернуть в другой игре для меня лес дремучий. Двухбайтное значение а-ля '0040' тут уже тупым перебором не найдешь
Сообщение от ErikPshat
Нашел ещё русификатор на PC версию
Так да, я его и вставляю.. вставил уже все что было можно, вернее сказать. Отформатировать, переносы слов расставить и недостающие куски доперевести осталось.
Erik, Мды. Ликбез короче. От нуба (меня) для профи (тебя).
ELF это сложная конструкция. Хедер там статический. А то, что ты посчитал хедером - не хедер, а таблица оффсетов программы.
ELF entry point is 0x108
Header size is 0x34
Program header table starts at 0x34
Program header table entry size is 0x20
Number of entries in the program header table: 3
Section header table. starts at 0x19039c
Section header table entry size is 0x28
Section header table names index is 0x25
Number of entries in the section header table: 39
iType: 1 // iOffset: a0 // iVaddr: 0 // iPaddr: ce9f4 // iFilesz: 1279bc // iMemsz: 1279bc // iFlags: 7 // iAlign: 10 //
iType: 1 // iOffset: 127a80 // iVaddr: 127a00 // iPaddr: 0 // iFilesz: 1dbb4 // iMemsz: 14fc14c // iFlags: 6 // iAlign: 80 //
iType: 700000a0 // iOffset: 145640 // iVaddr: 0 // iPaddr: 0 // iFilesz: 4aae0 // iMemsz: 0 // iFlags: 0 // iAlign: 10 //
Программный кусок 1 начинается с оффсета a0. Размер у всего файла EBOOT.BIN 1909B4 байт со всеми-всеми табличками, так что никак не может "получаем позицию 08872DC8", как ты написал, если оно начинается с адреса 0. Вот если программа начинается с адреса 8804000 - тогда да. А если с нуля - тогда 8872D34-8804000+A0=6EDD4 адрес будет. Понятно рассказал или опять китайская грамота?
Scorpeg добавил 04.02.2015 в 03:21
Сообщение от riku.kh3
Так да, я его и вставляю.. вставил уже все что было можно, вернее сказать. Отформатировать, переносы слов расставить и недостающие куски доперевести осталось.
Даешь автопереносы Я в Ever17 встроил (типа похвастался, да, хотя вроде уже и говорил где-то), точнее переписал таблицу оригинальных непереносимых глифов и изменил начало строчки (а то пробелы перли в каждой новой строке).
---------------
Чем покадрово редактировать pmf, чтобы потом аудио не убежало?
Последний раз редактировалось Scorpeg; 04.02.2015 в 03:26.
Причина: добавил, подумав
Даешь автопереносы Я в Ever17 встроил (типа похвастался, да, хотя вроде уже и говорил где-то), точнее переписал таблицу оригинальных непереносимых глифов и изменил начало строчки (а то пробелы перли в каждой новой строке).
Я хз, если честно, как это сделать, буду прогонять скрипты через прогу, которая будет все высчитывать и вставлять опкоды с переходом строки. Места с нестандартным выводом текста тока еще есть - их придется вручную все проверять
Сообщение от Scorpeg
Чем покадрово редактировать pmf, чтобы потом аудио не убежало?
Так не pmf редактируй, а в несжатый перегони и с ним уже работай, я в VirtualDub'е делаю, там свободно с фреймами работать - удалять/вставлять куда захочется можно.
ELF это сложная конструкция. Хедер там статический. А то, что ты посчитал хедером - не хедер, а таблица оффсетов программы.
Ну ты как-то сложно всё воспринимаешь Я же прекрасно знаю формат ELF в PSP. Это не таблица оффсетов, а самый настоящий Хедер, который при исполнении в память отбрасывается и остаётся только программный код, естессна со всеми указателями на смещения. Если интересно, то я тебе скину быстрый набросок структуры ELF в HBK для HexWorkshop: ELF_Header.HBK.zip
Не поленись и посмотри.
Открой декриптованный EBOOT.BIN(BOOT.BIN) в Hex Workshop, открой мой HBK и увидишь все позиции и смещения с описаниями.
Если ты используешь декомпилятор JPCSP, то конечно тебе не нужно прибавлять A0, т.к. он ведёт отсчёт от виндовых смещений. Обычно в Винде идёт адресация памяти в экзешниках от 0х4000, но не факт, тут ещё прибавки памяти самой сторонней программы, через которую открывается другая программа. Собсно декомпилятор сам показывает, откуда идёт отсчёт.
Сообщение от Scorpeg
Чем покадрово редактировать pmf, чтобы потом аудио не убежало?
Потома игра большая и там много в каких местах есть входы и выходы, например в опции настроек, в системных сообщениях и т.п., поэтому не может быть код кнопок только в одном месте.
В Ever17 вообще все красиво в этом плане. Один раз заменил - и во всей игре, менюшках, диалогах сохранений и т.п. они местами меняются.
В Ever17 вообще как по учебнику А у тебя ровно так же - одна процедура на всех, не переживай. Быть бы мне еще поопытней, чтобы код раскурить без хаков - вообще была бы радость. Но ни опыта ни времени нет Поэтому если Erik ничего не придумает - сделаю хак на хаке в какую-нибудь текстовую область eboot и посмотрим, взлетит ли.
Вообще тут Yoti какой-то план тебе в личку хотел предложить. Есть кстати еще более хитрый план - написать обертку, которая будет делать свап кнопок и сделать хук на вызов sceCtrlRead. Только я под PSP никогда ничего не писал, и вот это для меня точно совсем темный лес. Но чисто теоретически это должно работать.
В Ever17 вообще как по учебнику А у тебя ровно так же - одна процедура на всех, не переживай. Быть бы мне еще поопытней, чтобы код раскурить без хаков - вообще была бы радость. Но ни опыта ни времени нет Поэтому если Erik ничего не придумает - сделаю хак на хаке в какую-нибудь текстовую область eboot и посмотрим, взлетит ли.
Вообще тут Yoti какой-то план тебе в личку хотел предложить. Есть кстати еще более хитрый план - написать обертку, которая будет делать свап кнопок и сделать хук на вызов sceCtrlRead. Только я под PSP никогда ничего не писал, и вот это для меня точно совсем темный лес. Но чисто теоретически это должно работать.
Yoti через функцию sceImposeSetLanguageMode предложил попробовать, метод реально универсальный, но не во всех играх работает, тут эта функция не задействована(