Объявления | ||
---|---|---|
Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru. Я оторву свою задницу от всех дел и обязательно Вас активирую! Добро пожаловать на геройский форум! |
Re: МодыИнтересней всего, конечно, научиться править что-то по аналогии с конкретными патчами. Т.е. что-то вроде методички: пример с устранением рукопашного штрафа для высших друидов и пояснение, как сделать то же самое для произвольного стрелка (вдруг у кого-то другое видение, в котором это будет полезно). Изучать и отлаживать ассемблер могут не только лишь все, а действовать по аналогии гораздо больше кто.
|
Re: МодыКоличество определённого ресурса, требующегося для найма существа, прописано прямо в машинной команде, т.е. является частью ассемблерной инструкции:
Т.к. Image Base для версии от "Буки" равен 400000, то соответствующие адреса в исполняемом файле на диске: 68D75, 68D81, 68D8D, 68D99, 68DA5, 68DB1, 68DBD. Теперь осталось открыть исполняемый файл в любом шестнадцатеричном редакторе, перейти по одному из этих адресов и заменить часть инструкции, являющуюся непосредственно заданным операндом ("число после запятой"). В нашем случае непосредственный операнд - это двойное слово, которое занимает последние четыре байта машинной команды. Ближе к делу. Например, увеличим количество серы, требуемое для покупки Чёрного Дракона, до 3 ед. Для этого переходим по адресу 68DA5, видим там команду C7 42 0C 02 00 00 00, меняем непосредственный операнд 2 (02 00 00 00) на 3 (03 00 00 00) и сохраняемся. Теперь Чёрные Драконы стоят на 1 ед. серы дороже. Последний раз редактировалось AlexSpl 07 ноя 2014, 12:55, всего редактировалось 1 раз.
|
Re: МодыAlexSpl писал(а):
Я правильно понимаю, что в таком случае для увеличения серы на 1 штуку только для красных придётся повозиться посерьёзней? Хотелось бы равномерной стоимости: 1, 2, 3. PS Наверняка такие простые изменения (правку количества ресурсов для найма существ, которые в оригинале уже требуют ресурсов) можно внести в новую версию UBP. Ассемблерная инструкция заданного вида однозначно генерируется по количеству и типу ресурса. |
Re: МодыСэр Алекс, в теме, начинавшейся с замены аватаров, упоминались хуки. Правильно я понимаю, что в случае нехватки количества инструкций для сложного алгоритма внутри исполняемого файла в его конец добавляется тело дополнительной функции, которая вызывается из нужного места с последующей передачей управления обратно?
|
Re: МодыПрописать стоимость в ресурсах произвольному существу довольно просто. Во-первых, нужно создать таблицу, в которой будет храниться стоимость существ в ресурсах. Она может быть, к примеру, такой:
00 00 00 00 ... 0С 01 0С 02 0С 03 ... Здесь байты идут парами, первый представляет собой тип ресурса (00 - дерево, 04 - ртуть, 08 - руда, 0C - сера, 10 - кристаллы, 14 - самоцветы), второй - количество ресурса. Т.к. нам не нужны большие значения, будет достаточно одного байта. Первая пара (00 00) будет использоваться для хранения типа и количества ресурса, требуемого для найма Крестьянина, вторая (00 00) - для найма Лучника и т.д. Соответственно, 0C 01, 0C 02 и 0C 03 - это значения для Зелёного, Красного и Чёрного Драконов. Размер такой таблицы будет равен 66 * 2 = 132 байта. Во-вторых, при найме существа нужно читать значения из этой таблицы и записывать в специальную структуру менеджера найма (recruitManager), хранящую информацию о стоимости существа. Это можно сделать, например, так:
Такой код займёт 37 байтов. Итого нам потребуется 37 + 132 = 169 байтов на всё. К счастью, у нас есть около 200 Если интересно, как это реализовать на практике, дайте знать Последний раз редактировалось AlexSpl 07 ноя 2014, 14:08, всего редактировалось 3 раз(а).
|
Re: МодыAlexSpl писал(а): Интересно. Но у меня нет широкомасштабных планов по изменению ресурсных требований при найме (т.е. таблица для всех юнитов избыточна). Только драконы и, возможно, на пробу сделать стоимость Крестоносца в 850 золота + 1 руды. |
Re: МодыЦитата: Дополнительный код в этом случае помещается в DLL, которая затем подгружается при запуске приложения (игры). Цитата: Зато вышеприведённый код будет универсален. Если когда-нибудь захочется поэкспериментировать со стоимостью существ в ресурсах, достаточно будет только изменить значения в таблице. |
Re: МодыAlexSpl писал(а):
Эта инструкция побитово обнуляет регистр и делает его "текущим" для следующих операций? AlexSpl писал(а): И где же эти драгоценные 200 последовательных и неиспользуемых байт в файле скрываются? |
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2