Мда...
Я бы сделал проще, вытащил текст, переписал чтение текста и открыто бы хранил в роме, как бэ место позволяет
Sailor Moon Another Story (SNES)
Сообщений 21 страница 40 из 338
Поделиться212011-01-16 23:02:26
Поделиться222011-01-17 22:21:00
В идеале может быть было бы проще, но на практике почему-то так не получается )))
Выдернуть текст не проблема, но как дальше то? В общем, будем искать способы.
Поделиться232011-01-18 00:36:14
Вопрос с переводом диалога "Yes" - "No" снимается. Данный кусок найден.
Поделиться242011-01-18 09:02:23
В идеале может быть было бы проще, но на практике почему-то так не получается )))
Выдернуть текст не проблема, но как дальше то? В общем, будем искать способы.
А дальше смотришь процедуру чтение текста, потом слегка переписываешь код в игре и все.
Поделиться252011-01-18 21:09:48
М-да. Переписать код к игре? Как все на самом деле просто в мире )))
Не знаю даже. Ладно, посмотрим, что можно сделать...
Поделиться262011-01-31 21:14:52
Ну что-же... Время не прошло даром. Убрать процедуру кодировки текста не удалось, но обойти ее оказалось под силу. В общем дело обстоит таким образом. В коде нашел интересное место:
$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 фраз для теста. Если оставлять в раскрытом виде, то нужно весь ром перекодировать.
Но все это не решило главной проблемы с чек-поинтерами.
Поделиться272011-02-05 01:10:47
К вышесказанному могу пока еще прибавить, что по адресу $F7A0 находиться таблица размерности шрифта. К сожалению после коррекции кода появляются неприятные глюки, такие как частичное неотображение фона на некоторых буквах в том или ином месте (не так часто, но неприятно). В первую очередь - это длинные буквы (m, w). Подобное было и в русском роме, без влезания в код на букве "ж". В общем, не ром, а один большой глюк. Снятие кодировки сработало. Буду перекодировать текст в новый ром, а том видно будет. Есть небольшая задумка по поводу глюков. Первый опыт прошел удачно. Надо додумать.
Отредактировано GrekRus (2011-02-05 01:27:21)
Поделиться282011-02-07 23:44:07
ТЫ скажи чего надо, я тебе расхакаю, а то еще возиться долго будешь)
Поделиться292011-02-08 02:02:19
Да в общем-то все написано в постах выше. Пока еще не найден шрифт менюшек и не понятна причина зависания игры при изменении чек-поинтов (0x50A00). Я перекодил весь ром и сделал его без кодировки. Весь текст раскрыт. Как это сделано написано выше. Если сможешь чем-либо помочь с данными проблемами, то тогда вообще все будет замечательно.
Насчет глюков, описаных постов выше, есть варианты использовать два вида пробелов, различных по длинне в 1 пиксель. . Просто если сдвинуть букву на пиксель глюк пропадает. Ну это как вариант. Это теперь возможно, после нахождения таблицы длинн букв. Да еще можно использовать оставшиеся знакоместа для кодировки еще каких-нибудь символов. Например, для экономии места можно ввести символ многоточия. Он используется через раз. И хотя он будет выводиться разом, а не по точкам, но это сэкономит целых два байта. Или, скажем, запитая плюс пробел кодировать одним символом. Так даже незаметно будет. Но это вариант, если ничего не выйдет расхакать.
P.S. Нашел еще слово Misis, которое появляется во время боя, если противники промахиваются. Переведено, как "Мимо". А вообще, фразы менюшек разбросаны по всему рому. Собрать их все будет довольно долго.
Вот ром, который получился без кодировки текста: http://narod.ru/disk/5201609001/SMAS-eng.smc.html
Поделиться302011-02-08 05:36:48
Ты чего с толку сбиваешь?
Я сидел, наверное час дебажил...
Что там с концом может быть...
Сделал текст в новом месте и все нормально было, игра не зависала.
Теперь объясни, что и как у тебя там висло
Поделиться312011-02-08 06:15:42
Нашел шрифт. пожат LZ.
Поделиться322011-02-08 22:54:59
Как-же так. Ты меня поставил в тупик. У меня игра напроч висла. Даже не знаю, с чем это могло быть связано. Может я чего не понимаю? По адресу $50А00 при изменении любого байта приводило к зависанию. Если изменить байты не в начале, а в середине, то зависание происходили в процессе игры позже. Может, если все байты сдвинуть, то игра не виснет? Я даже не знаю, чем это объяснить. Попробую прогой пересчитать все чек-поинты, а не отдельный ручками...
С LZ еще не встречался, но надеюсь, что подобное сжатие - дело поправимое.
Отредактировано GrekRus (2011-02-08 23:06:01)
Поделиться332011-02-09 10:13:58
Я просто сильно не играл, так, начальный текст менял в новое место, и потом спокойно дальше бегал))) надо глубже тогда попробовать)))
Это, ты распаковщик сам сможешь написать? Если дать тебе асм? Или, мне писать?))
Поделиться342011-02-09 16:16:04
$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)
Поделиться352011-02-09 21:08:28
Знаешь, я в асме не очень разбираюсь. Просто руководствуясь логикой и Яндексом понял, как работают некоторые команды, типа LSR - сдвиг вправо, LDA - загрузить в регистр (вероятно аккумулятор). Вот и смог убрать кодировку (и то не полностью, но это уже не так важно). Адрес посмотрю. Может там чего и есть. Если сможешь написать распаковщик к шрифтам, то будет здорово, а то у меня все как-то медленно движется. Думаю, надо расхакать по максимуму, а потом продолжать или даже пересматривать весь перевод заново. А по каким адресам находиться второй шрифт?
Поделиться362011-02-09 22:05:30
А как и какой прогой ты смотришь код. Я с трудом могу понять, что мне Дизассемблер Snes9x выдает. Там какие-то другие команды.
P.S. Если там какой-то ключ, то можно попробовать его тоже обойти, например оператором безусловного перехода при сравнении. Но я еще не разобрался.
P.P.S. Попробовал поизменять байты по данному адресу. Так-же виснет игра. Это уже становиться интересным.
Отредактировано GrekRus (2011-02-09 22:33:29)
Поделиться372011-02-09 23:12:07
вот именно этой прогой и пользуюсь))
Короче, выкладый все что тебе не понятно, команды, код)))
Я для тебя буду разбирать, показывать, что да как, чтобы сам уже понимал))) пойдет такое сотрудничество?)) просто я могу и сам все сломать, да как-то я малям игру не долюбливаю))) а так помогу со всем)) с лз помогу, как написать на делфи и все такое)))
Поделиться382011-02-10 01:02:08
Ааа...., кажись, у меня получилось. 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)
Поделиться392011-02-10 13:24:29
83a86 - запакованный шрифт)
ставь брякпоинт на $C83a86 и галочку на read
Отредактировано gegmopo3 (2011-02-10 21:41:39)
Поделиться402011-02-10 23:22:40
Все, без знаний LZ здесь не обойтись. Пока мне такое не сломать. Там кода куча мала, а что искать я даже не знаю. И вообще, что там должно находиться? Какая-нибудь таблица сжатия, пожатая графика или алгоритм распаковки? Методом обнуления байтов по этому и последующих адресах ничего добиться не удалось. Где-нибудь подробно освящен данный метод или он меняется от места к месту?
Отредактировано GrekRus (2011-02-10 23:38:50)