Chief-NET

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

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


Вы здесь » Chief-NET » Экстрим хакинг » Sailor Moon Another Story (SNES)


Sailor Moon Another Story (SNES)

Сообщений 21 страница 40 из 338

21

Мда...
Я бы сделал проще, вытащил текст, переписал чтение текста и открыто бы хранил в роме, как бэ место позволяет

22

В идеале может быть было бы проще, но на практике почему-то так не получается )))
Выдернуть текст не проблема, но как дальше то? В общем, будем искать способы.

23

Вопрос с переводом диалога "Yes" - "No" снимается. Данный кусок найден.

24

В идеале может быть было бы проще, но на практике почему-то так не получается )))
Выдернуть текст не проблема, но как дальше то? В общем, будем искать способы.

А дальше смотришь процедуру чтение текста, потом слегка переписываешь код в игре и все.

25

М-да. Переписать код к игре? Как все на самом деле просто в мире )))
Не знаю даже. Ладно, посмотрим, что можно сделать...

26

Ну что-же... Время не прошло даром. Убрать процедуру кодировки текста не удалось, но обойти ее оказалось под силу. В общем дело обстоит таким образом. В коде нашел интересное место:

$00/F343 4A          LSR A                   A:0000 X:0000 Y:0000 P:EnvMXdIzc
$00/F344 4A          LSR A                   A:0000 X:0000 Y:0000 P:EnvMXdIzc
$00/F345 4A          LSR A                   A:0000 X:0000 Y:0000 P:EnvMXdIzc
$00/F346 29 1F       AND #$1F

Очень похоже на

Key:=(Key SHR 3) AND $1F;

Я поменял $1F на $00 и ключ стал постоянно нулиться и как результат перестал действовать. Переписал таблицу кодировки (сделал ее по порядку и скопировал по всей таблице) и поменял еще одно место в коде с $20 на $00.

$00/F361 69 20       ADC #$20

Все встало на свои места. Боюсь сглазить, но пока все фурычит. Текст прекрасно виден даже без таблиц символов. Только раскодированного текста написано 10 фраз для теста. Если оставлять в раскрытом виде, то нужно весь ром перекодировать.
Но все это не решило главной проблемы с чек-поинтерами.

27

К вышесказанному могу пока еще прибавить, что по адресу $F7A0 находиться таблица размерности шрифта. К сожалению после коррекции кода появляются неприятные глюки, такие как частичное неотображение фона на некоторых буквах в том или ином месте (не так часто, но неприятно). В первую очередь - это длинные буквы (m, w). Подобное было и в русском роме, без влезания в код на букве "ж". В общем, не ром, а один большой глюк. Снятие кодировки сработало. Буду перекодировать текст в новый ром, а том видно будет. Есть небольшая задумка по поводу глюков. Первый опыт прошел удачно. Надо додумать.

Отредактировано GrekRus (2011-02-05 01:27:21)

28

ТЫ скажи чего надо, я тебе расхакаю, а то еще возиться долго будешь)

29

Да в общем-то все написано в постах выше. Пока еще не найден шрифт менюшек и не понятна причина зависания игры при изменении чек-поинтов (0x50A00). Я перекодил весь ром и  сделал его без кодировки. Весь текст раскрыт. Как это сделано написано выше. Если сможешь чем-либо помочь с данными проблемами, то тогда вообще все будет замечательно.
Насчет глюков, описаных постов выше, есть варианты использовать два вида пробелов, различных по длинне в 1 пиксель. . Просто если сдвинуть букву на пиксель глюк пропадает. Ну это как вариант. Это теперь возможно, после нахождения таблицы длинн букв. Да еще можно использовать оставшиеся знакоместа для кодировки еще каких-нибудь символов. Например, для экономии места можно ввести символ многоточия. Он используется через раз. И хотя он будет выводиться разом, а не по точкам, но это сэкономит целых два байта. Или, скажем, запитая плюс пробел кодировать одним символом. Так даже незаметно будет. Но это вариант, если ничего не выйдет расхакать.
P.S. Нашел еще слово Misis, которое появляется во время боя, если противники промахиваются. Переведено, как "Мимо". А вообще, фразы менюшек разбросаны по всему рому. Собрать их все будет довольно долго.

Вот ром, который получился без кодировки текста: http://narod.ru/disk/5201609001/SMAS-eng.smc.html

30

Ты чего с толку сбиваешь?
Я сидел, наверное час дебажил...
Что там с концом может быть...
Сделал текст в новом месте и все нормально было, игра не зависала.
Теперь объясни, что и как у тебя там висло

31

Нашел шрифт. пожат LZ.

32

Как-же так. Ты меня поставил в тупик. У меня игра напроч висла. Даже не знаю, с чем это могло быть связано. Может я чего не понимаю? По адресу $50А00 при изменении любого байта приводило к зависанию. Если изменить байты не в начале, а в середине, то зависание происходили в процессе игры позже. Может, если все байты сдвинуть, то игра не виснет? Я даже не знаю, чем это объяснить. Попробую прогой пересчитать все чек-поинты, а не отдельный ручками...
С LZ еще не встречался, но надеюсь, что подобное сжатие - дело поправимое.

Отредактировано GrekRus (2011-02-08 23:06:01)

33

Я просто сильно не играл,  так, начальный текст менял в новое место, и потом спокойно дальше бегал))) надо глубже тогда попробовать)))
Это, ты распаковщик сам сможешь написать? Если дать тебе асм? Или, мне писать?))

34

Код:
$80/F41E = $00f41e
 LDA [$FD],y[$C5:0A00]; 50a00 - первый пойнтер
  CLC  ; сбрасываем    флаг carry             
  ROR A            ; сдвиг в право
  ROR A            
  ROR A        
  PHA                ;отправляем в стек
  LDA $FD   
  CLC                 
  ADC #$2820      ; прибавляем $2820
  STA $FD            ; сохраняем в в $FD
  PLA                  ; возвращаем с стека
  CMP [$FD],y[$C5:3220]  ;проверяем аккумулятор  с значением в $5:3220 (B hex-редакторе)
  BEQ $03    [$F435]  ;если аккумулятор (который вернули со стека = значению по 5:3220, то прыгаем на адрес $F435, а если не равен, то продолжаем)

попробуй глянуть значения в $5:3220

Отредактировано gegmopo3 (2011-02-09 16:16:32)

35

Знаешь, я в асме не очень разбираюсь. Просто руководствуясь логикой и Яндексом понял, как работают некоторые команды, типа LSR - сдвиг вправо, LDA - загрузить в регистр (вероятно аккумулятор). Вот и смог убрать кодировку (и то не полностью, но это уже не так важно). Адрес посмотрю. Может там чего и есть. Если сможешь написать распаковщик к шрифтам, то будет здорово, а то у меня все как-то медленно движется. Думаю, надо расхакать по максимуму, а потом продолжать или даже пересматривать весь перевод заново. А по каким адресам находиться второй шрифт?

36

А как и какой прогой ты смотришь код. Я с трудом могу понять, что мне Дизассемблер Snes9x выдает. Там какие-то другие команды.
P.S. Если там какой-то ключ, то можно попробовать его тоже обойти, например оператором безусловного перехода при сравнении. Но я еще не разобрался.

P.P.S. Попробовал поизменять байты по данному адресу. Так-же виснет игра. Это уже становиться интересным.

Отредактировано GrekRus (2011-02-09 22:33:29)

37

вот именно этой прогой  и пользуюсь))
Короче, выкладый все что тебе не понятно, команды, код)))
Я для тебя буду разбирать, показывать, что да как, чтобы сам уже понимал))) пойдет такое сотрудничество?)) просто я могу и сам все сломать, да как-то я малям игру не долюбливаю))) а так помогу со всем)) с лз помогу, как написать на делфи и все такое)))

38

Ааа...., кажись, у меня получилось. yahoo
Надо еще проверить, но...
Я заменил пару команд в коде

CMP [$FD],y[$C5:3220]  ;проверяем аккумулятор  с значением в $5:3220 (B hex-редакторе)
BEQ $03    [$F435]  ;если аккумулятор (который вернули со стека = значению по 5:3220, то прыгаем на адрес $F435, а если не равен, то продолжаем)

(у меня
$00/F430 F0 03       BEQ $03    [$F435]      A:0000 X:0000 Y:0000 P:EnvMXdIzc
$00/F432 9C 00 42    STZ $4200  [$00:4200]   A:0000 X:0000 Y:0000 P:EnvMXdIzc
)

на невинные команды

CLC  ; сбрасываем    флаг carry

В результате, смог поменять чек-поинт.

Большое спасибо за наводку. Вернемся тогда ко второму вопросу. Где лежит шрифт и как его распаковать. Где искать. И, я правильно понимаю, что возможно его вытащить, перерисовать и вставить обратно?

Отредактировано GrekRus (2011-02-10 01:20:33)

39

83a86 - запакованный шрифт)
ставь брякпоинт на $C83a86 и галочку на read

Отредактировано gegmopo3 (2011-02-10 21:41:39)

40

Все, без знаний LZ здесь не обойтись. Пока мне такое не сломать. Там кода куча мала, а что искать я даже не знаю. И вообще, что там должно находиться? Какая-нибудь таблица сжатия, пожатая графика или алгоритм распаковки? Методом обнуления байтов по этому и последующих адресах ничего добиться не удалось. Где-нибудь подробно освящен данный метод или он меняется от места к месту?

Отредактировано GrekRus (2011-02-10 23:38:50)


Вы здесь » Chief-NET » Экстрим хакинг » Sailor Moon Another Story (SNES)