Magic Team

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Magic Team » О ромхакинге » Помогите с Contra Force


Помогите с Contra Force

Сообщений 1 страница 14 из 14

1

Перевожу Contra Force, но не могу найти поинтеры. Вот мои шаги по их поиску:
1. Начальный адрес $14D90 (По этому адресу строка «HI. IT'S ME, FOX.»);
2. Отнимаю 10h: 14D90=14D80;
3. Убираю все цифры до тысячных: 14D80 - 4D80;
4. Делю это число на две пары: 4D80h - 4D  80;
5. Меняю эти пары местами: 4D  80   - 80  4D; 
6. И соединяю пары обратно: 80  4D - 804D;
7. Получаю пойнтер: 804D;
Затем открываю Hexpose и Hex search-ем ищу 804D. Он ничего не находит. Я предполагаю, что тут используется система с Х000 смещением, т.е. вместо 14D80 - 1ХD80. Значение этого Х я не знаю, поэтому поступаю так:
1. Вместо 4D80 представляю XD80;
2. Делю это число на две пары: XD80h - XD  80;
3. Меняю эти пары местами: XD  80   - 80  XD; 
4. Cоединяю пары обратно: 80  XD - 80XD;
5. Получаю пойнтер: 80XD;
Так как значение Х я не знаю я в Hex search ищу 80, но найдя его смотрю на байт справа. Вторая цифра этого байта должна быть обязательно D. Hex search нашел только два значения
805D и  806D (т.е. в первом случае Х000=1000, а во втором Х000=2000). Но эти байты тоже не являются поинтерами и дальше я не знаю как поступить. Поэтому у меня несколько просьб:
1. Укажите (если есть ) ошибки допущенные при вычислении поинтеров;
2. Ваша команда перевела этот ром и если можно, то укажите поинтер для этой строки и его адрес (если можно адрес именно в Hexpose т.к. в Translhextion эта строка имеет адрес $14D98 и я не знаю почему);
3. Если можно подскажите хороший способ вычисления Х000.
Спасибо.

Отредактировано Antony (2007-02-24 05:30:42)

0

2

Используй относительный поиск.

0

3

Так относительный поиск (Relative Search) вроде для поиска текста нужен. А я его нашел.
Уточни что ты имел ввиду.

0

4

В первую очередь http://magicteam.ucoz.ru/contraforce.htm
во-вторых: на самом деле начало фразы 0х14D9A, а в хепспоуз надо смотреть в окошко с надписью 'ofs'.
Да, в общем-то и во всех других редакторах нужно смотреть на что-то вроде слова 'offset'.
А $14D90 - это для того чтобы ориентироваться в РОМе. Все данные РОМа представлены в виде
строк по $10 байт в каждой. А данные, которые интересуют тебя начинаются в середине такой
строки. Если возьмёшь правильный адрес, то убедишься, что здесь система X000 c X=4;
А вообще, все эти системы настолько эмпиричны, что разговор о каких-то там X похож на шаманство.
"Если можно подскажите хороший способ вычисления Х000."
Лучший способ? Только подбор =) Лучше может быть только нахождение указателей отладкой
кода, как завещал нам CaH4e3. По моему мнению, это намного более наглядно, быстро и правильно.

Отредактировано Griever (2007-02-24 19:05:21)

0

5

Antony написал(а):

Уточни что ты имел ввиду.

Для поинтеров тоже можно использовать относительный поиск. Берёшь разницу между началом нескольких диалогов, забиваешь в поиск с * между буквами. Принцип понятен?

0

6

Объясни, если не трудно, более подробно

0

7

Блин, чё ж вы все такие непонятливые...
Берёшь начало первого диалога за A, двигаешься дальше, считая байты: A, B, C, D, ... G - дошёл до начала следующего диалога. Запоминаешь, идёшь дальше. Так берёшь несколько диалогов, в результате получается что-то вроде AGMUck(в Translhexion'е в релативном поиске маленькие буквы идут сразу за большими). Забиваешь между ними *: A*G*M*U*c*k, т.к. поинтеры двух байтные, а * означает любой байт. Ищешь. Вот и усе.
Принцип ясен?

0

8

Спасибо Griever и HoRRoR я нашел поинтеры.
Почему в скачанном у вас Hexpose 1.666 ничего нельзя поменять, т.е он все прекрасно открывает, находит текст но никакие значения нельзя поменять? Приходится старый через DosBox использовать.

0

9

Скачай Translhexion.

0

10

Вопрос Grieverу (по Contra Force).
С помощью эмулятора Nesticle для фразы PLAYER SELECT я нашел «карту тайлов».
Верхняя часть слова PLAYER имеет следующую последовательность байтов: 83 84 85 86 87 83, нижняя – 89 8A 8B 8C 8A 8D. Слово SELECT: верхняя часть слова 88 87 84 87 В8 В9, нижняя – 8Е 03 8А 82 ВВ ВС.
В Tile Layer Pro я перерисовал английские буквы на русские.
Загрузил Translhextion нашел последовательность 83 84 85 86 87 83 (находится по адресу
$15317) и стал менять ее. В игре стали появляться русские буквы. Все шло нормально пока я не добрался до нижней части слова SELECT (находится по адресу $15339). Я не могу понять откуда взялись второй (03) и четвертый (82) байты. Если я их изменяю, то в игре начинаются глюки (буквы по всему экрану), короче мозаика получается. Причем 82 – это вообще пробел.
Подскажи как ты изменил это слово, только, если можно, попроще.

0

11

Я пока не смотрел точно, но 99% это RLE. Все тайловые карты пожаты им. А, кстати, http://griever.ucoz.ru/Docs/FCEUd3gvrs.htm там всё подробно описано. Чтобы с этим бороться придётся где-то ужаться и сэкономить байты. В документе приведён пример, где я боролся с именами героев. Я точно не помню как я поступил в том случае, но ты всегда можешь посмотреть в переведённом мной РОМе какие байты я менял.

0

12

Прочитал я доки по данной тобой ссылке и, откровенно говоря, мало что понял поскольку пока не обладаю минимальными знаниями необходимыми для этого. Поэтому накачал с нета  разных доков по ассемблеру и процессору 6502. Буду изучать.
Саму игру вроде перевел, хотя, как ты и писал в Readme к своему патчу, возникли проблемы с  надписями GAME OVER, CONTINUE, END.  Перед этими словами стоит последовательность из трех байтов (например 7FCB21). Если менять второй байт, то строка смещается по горизонтали, если третий – по вертикали (т.е. END  может быть выше GAME OVER), а если сдвинуть эту последовательность, чтобы удлинить одно слово и укоротить другое, то игра ничего не выводит. Видимо, где-то в роме, уже определена длина слова и положение этих байтов. Как это удалось тебе, я так и не разобрался.
Есть несколько вопросов:
1. (По Kruptar) Какими символами нужно обозначать байты окончания строки (в данном роме FE), окончания ввода (FF) и пробел? А-то он не хочет извлекать текст (хотя, вроде, должен извлекать и без них).
2. Как делать патчи к игре? Только если этого я не пойму в силу вышеизложенного, то можешь не тратить время.

0

13

Уфф... Давно это было. Так. Первый байт контрольный $7F=конец фразы.
Второй байт это младший байт адреса PPU, откуда надо начинать выводить фразу. Третий, соответственно, старший байт. Возможно, ты стёр контрольный байт и адреса у других фраз.
1) Поищи на форуме. Вроде "Если код 00 является символом конца текста, то его нужно записывать в таком виде: <символ>00"
2)В сети полно программ на это дело.

0

14

Antony написал(а):

1. (По Kruptar) Какими символами нужно обозначать байты окончания строки (в данном роме FE), окончания ввода (FF) и пробел? А-то он не хочет извлекать текст (хотя, вроде, должен извлекать и без них).

Если Круптар старый, то /FE. А если седьмой то:
ends
FE

0


Вы здесь » Magic Team » О ромхакинге » Помогите с Contra Force