Разработка и ромхакинг > Ромхакинг и программирование
[NES] Учебник по ромхакингу
<< < (6/13) > >>
MetalliC:

--- Цитата: ALXR от 24 Сентябрь 2016, 12:43:16 ---имеет смысл поменьше размусоливать на тему недостатка документации и побольше сидеть и разбираться
--- Конец цитаты ---

--- Цитата: ALXR от 24 Сентябрь 2016, 12:43:16 ---NES - не такая уж сложная до вырвиглазности платформа, чтобы там чего-то не понять. Около полусотни простейших инструкций ассемблера и элементарная архитектура
--- Конец цитаты ---
:thumbup:


--- Цитата: lancuster от 24 Сентябрь 2016, 13:26:20 ---Само его напоминание, что "вы идиоты, а я умный" набило достаточную оскомину.
--- Конец цитаты ---
вообще-то, "напоминания" Санча больше напоминают бородатый анекдот, про то как жена мужу говорит:
- ой, ты такой умный, столько всего знаешь и понимаешь!!!
а он в ответ:
- я не умный, я как все, обычный, просто ты дура...

как тут уже неоднократно отметили - NES/Денди как система в целом, и ее процессор со своей системой команд, одни из самых простых, и доступных для изучения/понимания имхо любым человеком хоть немного разбирающимся в IT/выч.технике. нужно лишь посидеть и поразбираться.

ну а если не выходит, и информация и документация "в одно ухо влетает, а в другое вылетает, в голове ничего не оседает" - это повод задуматься, что может весь этот ромахакинг вообще не твое ? ;)
о чем тебе, lancuster, и говорил Санч и не только.
lancuster:
Дык в том-то и дело, что люди хотят творить, а не только штудировать справочники. Тем более, объяснять, какими инструментами можно и нужно пользоваться, таки нужно, поэтому расписать азы всё же необходимо. Я сомневаюсь, что санч при всей своей умности сам до всего доходил путем проб и ошибок. Поэтому не будем сгущать краски. :)
ALXR:

--- Цитата: lancuster от 24 Сентябрь 2016, 13:59:01 ---Дык в том-то и дело, что люди хотят творить, а не только штудировать справочники.

--- Конец цитаты ---
Только ленивые этого хотят.


--- Цитата: lancuster от 24 Сентябрь 2016, 13:59:01 --- Тем более, объяснять, какими инструментами можно и нужно пользоваться, таки нужно, поэтому расписать азы всё же необходимо.

--- Конец цитаты ---
Нужно только ленивым из первой цитаты. Вот neoborg анонсировал свой справочный материал. Сколько с первых же комментариев критики вылилось?


--- Цитата: lancuster от 24 Сентябрь 2016, 13:59:01 --- Я сомневаюсь, что санч при всей своей умности сам до всего доходил путем проб и ошибок.

--- Конец цитаты ---
Вполне вероятно, что сам.


--- Цитата: lancuster от 24 Сентябрь 2016, 13:59:01 ---Поэтому не будем сгущать краски. :)

--- Конец цитаты ---
Отнюдь.

Вот мне тут недавно довольно интересный код попался в одной игре. На вход подается только Y со значениями от 1 до 4.

--- Код: --- 02:852E:A8        TAY
 02:852F:A9 00     LDA #$00
 02:8531:85 12     STA $0012
 02:8533:A9 00     LDA #$00
 02:8535:06 20     ASL $0020
 02:8537:2A        ROL
 02:8538:06 20     ASL $0020
 02:853A:69 00     ADC #$00
 02:853C:4A        LSR
 02:853D:26 12     ROL $0012
 02:853F:88        DEY
 02:8540:D0 F1     BNE $8533
 02:8542:60        RTS -----------------------------------------

--- Конец кода ---

Никаких поинтеров, банков и прочих заумных штук в ней нет. Очень интересно, сколько из здешних писателей инструкций смогут объяснить, что она делает?

Вот, кстати, если тут правда уйма страждущих поразбираться есть, то мне нужен сишник (точнее C++-ник), который захочет (не без моего участия, конечно) добить редактор (который Pending в моей подписи и который NESPrincEd). А то вам тут пишешь-пишешь, а потом появляются критикующие и заявляют, что им не то и не так (не буду тыкать пальцем). Пусть хоть кто-то еще захочет разделить эту радость. :-)
black jaguar:

--- Цитата: ALXR от 24 Сентябрь 2016, 14:49:59 ---Дык в том-то и дело, что люди хотят творить, а не только штудировать справочники.
Только ленивые этого хотят.
--- Конец цитаты ---
в том то и дело, что интереснее сделать конкретное небольшое дело (бесконечные жизни или патроны). и намного проще, и мотивация есть и изучать не так много
а штудировать 10 томов ромхакинга 5 лет, чтобы потом через 5 лет начать хачить - это никогда не работало
цель первична. а не изучение само по себе
lancuster:
Как и в школе, и в институте. Учишь-учишь предмет - и неизвестно, сколько людей и как усвоили данный предмет. :)
ALXR:

--- Цитата: black jaguar от 24 Сентябрь 2016, 16:01:37 ---в том то и дело, что интереснее сделать конкретное небольшое дело (бесконечные жизни или патроны). и намного проще, и мотивация есть и изучать не так много
а штудировать 10 томов ромхакинга 5 лет, чтобы потом через 5 лет начать хачить - это никогда не работало

--- Конец цитаты ---
Тут не об этом. Штука в том, что "творческие" люди не хотят разбираться, хотят нажать кнопку и чтоб все было.


--- Цитата: black jaguar от 24 Сентябрь 2016, 16:01:37 ---цель первична. а не изучение само по себе

--- Конец цитаты ---
Именно об этом и речь: тут цель комментов настрочить, а не делать что-то или изучать самые азы. :)
CaH4e3:

--- Цитата: ALXR от 24 Сентябрь 2016, 12:43:16 ---Если UNROM еще просто, то для MMC3, к примеру, надо еще попотеть, чтобы разобрать в ИДЕ (для общего случая вообще невозможно).

--- Конец цитаты ---
я давным давно уже выложил все логеры и скрипты для загрузки любого рома с любым маппером в иду и восстановления кода и данных по трейслогу. ммц3 не на много сложнее унрома делается даже в случаях, когда один банк может как в 8000 адрес грузиться, так и в а000 в зависимости от читаемых данных. Как в суперспайхантере например.

Перечитал свой опус про денди изнутри и понял, что он 12 лет назад написан лол и там вам, идиотам, все по полкам с примерами расписано про спрайты и т.п. Вот тот же ланкустер тут ходил клянчил про надписи в карнове, а я про все это еще в 2004 писал лол. Какие доки вам к хренам. Вы же не то что код или данные найти не можете, даже доки с трудом в интернете видите (т.е. совсем не видите). Ну да ланкустеру простительно, он 12 лет назад еще в садик ходил хех
lancuster:

--- Цитата: ALXR от 24 Сентябрь 2016, 16:21:27 ---Тут не об этом. Штука в том, что "творческие" люди не хотят разбираться, хотят нажать кнопку и чтоб все было.
Именно об этом и речь: тут цель комментов настрочить, а не делать что-то или изучать самые азы. :)

--- Конец цитаты ---
А разве не для этого ты пишешь этот самый редактор, а? Чтобы "творческие" люди "нажали кнопку и получили результат? :lol:
И пока что цель "настрочить кучу комментов" я наблюдаю только у тебя, санчОза, Металлика и остальной братии. :)
... И, если ты ещё не заметил, критикуют чью-либо работу стабильно одни и те же люди. Совпадение, однако. :D
DendyJunior3:

--- Цитата: ALXR от 24 Сентябрь 2016, 14:49:59 ---
Вот мне тут недавно довольно интересный код попался в одной игре. На вход подается только Y со значениями от 1 до 4.

--- Код: --- 02:852E:A8        TAY
 02:852F:A9 00     LDA #$00
 02:8531:85 12     STA $0012
 02:8533:A9 00     LDA #$00
 02:8535:06 20     ASL $0020
 02:8537:2A        ROL
 02:8538:06 20     ASL $0020
 02:853A:69 00     ADC #$00
 02:853C:4A        LSR
 02:853D:26 12     ROL $0012
 02:853F:88        DEY
 02:8540:D0 F1     BNE $8533
 02:8542:60        RTS -----------------------------------------

--- Конец кода ---


--- Конец цитаты ---
Ответ будет? Те кто знает тут писать не будут, а саньчизь максимум способен на - лол
lancuster:

--- Цитата: MetalliC от 20 Сентябрь 2016, 21:09:10 ---лучше бы и ты его выучил, вместо того чтоб строчить тыщи бестолковых мессаг, может таки (ром)хакером стал бы, полноценным ))

--- Конец цитаты ---
MetalliC, хочешь честно? Смех смехом, но этот же знакомый спрашивал у меня, как редактировать уровни в играх. Человек, который выучил ассемблер, спрашивает у новичка, как хакать уровни. Можешь себе представить? :)
И вообще, я не задавался целью кому-то что-то доказать своими хаками. Я их в основном делаю для себя. Выкладываю, как и все - чисто ради кого-то, кто заценит. ;)
Я не ставил и не ставлю перед собой цель выучить что-либо, чтобы впечатлить аж двух человек с кудыкиной горы. Хотя бы потому что даже, если и выучил бы ассемблер - нашелся бы очередной повод зачмырить очередной новый хак или тупо сказать: "а я ожидал что-то другое". Вон, Ломакс знает ассемблер. И что? Его кто-то сильно уважает за это?.. Вы сами не знаете, чего хотите от людей.
... Тем не менее, я считаю, что каждому своё. Ломакс, когда хотел сделать Чип и Дейл 4, попросил меня помочь с графикой. И я ему помог, не стал его расспрашивать, почему он сам не может, почему не потренируется рисовать и т.д.. Каждому своё. :) Да, блин! Даже Гайвер и Сприлл в своё время просили помощи. И чё, их кто-то послал?!.
... В этой теме конкретный человек задался конкретной целью. Вместо того, чтобы чем-то помочь, знающие люди устраивают срач. Это странно...

Добавлено позже:

--- Цитата: DendyJunior3 от 24 Сентябрь 2016, 19:14:10 ---Ответ будет? Те кто знает тут писать не будут, а саньчизь максимум способен на - лол

--- Конец цитаты ---
Вот пусть он у знающих людей и спрашивает. Я мешать ему в этом не буду. :)
CaH4e3:

--- Цитата: DendyJunior3 от 24 Сентябрь 2016, 19:14:10 ---Ответ будет? Те кто знает тут писать не будут, а саньчизь максимум способен на - лол


--- Конец цитаты ---
Тебе он зачем лол
black jaguar:

--- Цитата: lancuster от 24 Сентябрь 2016, 19:15:34 --- Ломакс, когда хотел сделать Чип и Дейл 4, попросил меня помочь с графикой. И я ему помог, не стал его расспрашивать, почему он сам не может, почему не потренируется рисовать и т.д.. Каждому своё. :) Да, блин! Даже Гайвер и Сприлл в своё время просили помощи. И чё, их кто-то послал?!.

--- Конец цитаты ---
может и учебники писать не все могут ? например из 10 ромхакеров только один сможет написать?
CaH4e3:
из 10 ромхакеров только один - ромхакер лол
lancuster:
Скорее, наоборот. 10 лолхакеров, из которых только один - ромхакер. Который тоже лол. Это я щас про Санчеза говорю. :D
DendyJunior3:

--- Цитата: CaH4e3 от 24 Сентябрь 2016, 20:00:04 ---лол
--- Конец цитаты ---
тебе лол а мне интересно
lancuster:
Мне не лол, мне тоже интересно. :D
Arbars:

--- Цитата: DendyJunior3 от 24 Сентябрь 2016, 19:14:10 ---Ответ будет? Те кто знает тут писать не будут, а саньчизь максимум способен на - лол


--- Конец цитаты ---
Пальцем в небо (а вообще ХЗ)  - анимация фона, водопад там или что-то подобное...
lancuster:
В Принце Персии? Да ну, разве там есть водопад или анимация фона?
neoborg:

--- Цитата: ALXR от 24 Сентябрь 2016, 14:49:59 ---Вот мне тут недавно довольно интересный код попался в одной игре. Что он делает?

--- Конец цитаты ---
не знаю какого ответа ты ждешь. я предполагаю что это часть кода для вычисления чего-то, вероятно траектории объекта. и чем же этот код интересней остальных которые тебе попадались?)
lancuster:
Продолжаем разговор. ;)
[NES Ромхакинг] Урок № 4. Азы использования Code/Data Logger
В данном уроке мы рассмотрим азы использования такой встроенной во FCEUX утилиты, как Code/Data Logger. Да-да, именно азы, поскольку о возможностях Code/Data Logger можно говорить много, а у меня нет достаточно времени, чтобы расписать принцип нахождения того или иного типа данных с его помощью.
Как вы уже поняли, Code/Data Logger - вещь довольно удобная и хорошая. "Для чего
она нужна?" - спросите вы. Отвечаю: с помощью данной утилиты вы получаете возможность отыскать любой тип данных в роме, используемый в конкретный промежуток времени, без дизассемблирования рома и прибеганию к помощи сторонних программ. Хотя, в Help-е эмулятора сказано, что его можно использовать как со встроенными, так и со сторонними прогами и утилитами (какими - прочтёте позже)... Какие конкретно данные можно отыскать с помощью Code/Data Logger? Код, выполненный во время записи логгером, строение уровней, палитры, музыку, звуковые эффекты, PCM сэмплы, графику, что отображается на текущем экране, кадры анимации, строение блоков уровней и т.д..
    Что ж, раз уж мы выяснили, что эта утилита может делать - перейдём непосредственно к ней. Только для этого вам всё равно придётся открыть игру через FCEUX (если просто открыть FCEUX - эти опции будут неактивны). И, чтобы вас порадовать, возьмём какую-нибудь хорошую игру на NES, в которую играло большинство геймеров 90х - игру Aladdin... Нет, не тот официальный отстойный порт с Nintendo GameBoy! Речь пойдёт о самой известной версии в странах СНГ - SNES-овском порте Aladdin, сделанным китайской конторой Hummer Team. О да, вы в предвкушении великих дел!.. Спешу вас огорчить: на самом деле использование Code/Data Logger хоть и облегчает работу в отыскании нужных данных - сам процесс взлома игры займёт у вас немало времени хотя бы потому, сколько всего вам придётся переделать, чтобы заставить оригинальную игру выглядеть совершенно по-другому, как будто это её сиквел. С другой стороны, данный урок поможет вам понять азы работы с данной утилитой.
Теперь скачиваем и открываем файл Aladdin_(Unl)_[p1][hM04]. Можно другой, не столь важно. Открываем его и нажимаем "start". И, как обычно, мы видим типичный экран, где Ал стоит перед бочкой, за которой чуть дальше находится стражник, желающий его проучить. :) Самое время перейти к Code/Data Logger. Заходим в Debug->Code/Data Logger. Перед вами появляется это окошко:

Это - весь интерфейс данной утилиты. Вверху видно количество данных графики и кода, записанные и не записанные логгером в данный момент времени. Запись пока ещё не велась, так что пока всё по нулям (кроме not logged). Сразу скажу, что вам эти цифры не очень нужны, поэтому можете не обращать на них внимания. Чуть ниже сама утилита подсказывает вам, что же нужно с ней делать. Нажимаете "Start", чтобы записать данные, и "Pause" - чтобы поставить запись данных на паузу. После того, как вы запишите необходимый отрезок уровня/экрана - не забудьте нажать на паузу, иначе данные будут продолжать записываться. Ниже уже установлены флажки для автосохранения *.cdl файлов на компьютере. После записи, данные будут сохранены в файл (хотя, по факту, *.cdl файл создаётся автоматически при открытии логгера). Также вы можете сбросить данные лога после записи, если вы ими уже воспользовались и они вам уже не нужны, сохранить, а также загрузить уже имеющийся файл логгера при следующем запуске FCEUX.
    Итак, вы готовы? Жмём "Start"... и понеслась!

Сворачиваем логгер, чтобы он не мешал, доходим Алом до стражника, мочим его и жмём на паузу, также запаузим логгер. Теперь идём искать в записанных данных экраны уровней. Открываем HEX Editor, выставляем View->ROM File и начинаем поиск блоков, из которых состоят экраны уровней. К счастью, долго нам искать не приходится - данные стартового экрана начинаются по адресу 000b00. Как вы видите, использованные данные выделены синим цветом:

Открываем Help->Help..., в поиске вбиваем "Code/Data Logger" и тут же находим про него краткое описание:

Здесь сказано, вместе с какими программами и утилитами его можно использовать. Также можно прочесть, каким цветом обозначается тот или иной байт. Тёмно-жёлтый - байт-код, синий - данные (чисто данные), сине-зелёный - данные PCM-сэмпла (только в играх, в которых он есть), зелёный - байт является и частью исполняемого кода, и в то же время - данными. Самое интересное, что этот текст из хелпа даёт исчерпывающий ответ на то, что в итоге после записи вы получите и что примерно нужно искать. От себя лишь скажу, что данные уровней, надписей, музыки и звуковых эффектов (кроме PCM) всегда отображаются синим цветом.
Вернёмся к хекс-редактору. Если присмотреться, то можно заметить, что код перед вами повторяет экран, который вы записали. Найдём блоки, из которых состоит бочка перед Алом. Бочка стоит немного выше песка, на котором стоит Аладдин (байт E8). Соответственно, низ бочки - это 4E и 4F. Смотрим, что отвечает за фон и убираем бочку с прохода, затем сбрасываем игру:

Хочу отметить, что ниже бочки значится байт EF. Чтобы Аладдин не втыкался в пустоту и не проваливался с последующим зависанием игры, мы точно так же должны сделать землю, чтобы Ал мог проходить свободно на том месте, где раньше была бочка. Теперь, чтобы срезанное место выглядело как положено - проходите игру дальше двойных бочек и доходите до экрана, где торчит вкопанная в землю палка. Вернитесь немного назад, убейте стражника, включите логгер снова и пройдите до палки опять. Снова запаузите логгер и сверните его. Прокрутите хекс ещё немного, и - опа, вот оно где всё находится. Нужные нам байты для угла здания находятся по адресу 000eba, и это байты 2A 2B 3A 3B 4A 4B (сверху вниз по 2 байта читать). Вписываем их так же, как и на скрине:

Пройдитесь по экрану. Ну как? Не так-то это и было сложно, да? ;) Сохраняем изменения через File->Save ROM (Save ROM As...), затем запускаем на любом другом эмуляторе полученный ром. Классно получилось, не так ли. :D
Однако это ведь только самая верхушка айсберга, учитывая объём данных, которые ещё нужно разобрать (те же байты врагов и их расположение). Научившись распознавать блоки уровней, вы сможете только переставлять эти самые блоки на экранах (хотя, если честно, то далеко не все это умеют). Впрочем, этого вполне будет достаточно, чтобы изучить данные блоков уровней и поупражняться в их распределении.
Благодарю за внимание! ;)
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

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