Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Моды

Обсуждаем, делимся впечатлениями, новой информацией
offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: Моды

Сообщение AlexSpl » 07 ноя 2014, 15:22

Цитата:
Эта инструкция побитово обнуляет регистр и делает его "текущим" для следующих операций?

Да, эта инструкция обнуляет регистр: 0 xor 0 = 0, 1 xor 1 = 0.

Цитата:
И где же эти драгоценные 200 последовательных и неиспользуемых байт в файле скрываются?

Убираем старый неэффективный код и вместо него пишем свой.

Цитата:
mov [ecx + eax * 4], edx

Кстати, если использовать эту команду, номера ресурсов в таблице нужно прописывать по порядку, т.е. 0 - дерево, 1 - ртуть и т.д.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: Моды

Сообщение AlexSpl » 07 ноя 2014, 16:09

Так пишем патч на ресурсы или сразу переходим к штрафу в рукопашной? :)
Вернуться к началу

offlineАватара пользователя
DeathLust  
Подмастерье
Подмастерье
 
Сообщения: 140
Зарегистрирован: 29 ноя 2012, 15:19
Пол: Не указан
Поблагодарили: 62 раз.

Re: Моды

Сообщение DeathLust » 07 ноя 2014, 16:29

AlexSpl писал(а):

Так пишем патч на ресурсы или сразу переходим к штрафу в рукопашной? :)

Пишем. Но, думаю, можно ограничиться либо разделением зелёных и красных драконов и добавлением крестоносцев, либо делать чуть более универсальную табличку, но только для существ 6-го уровня (редкие ресурсы за существ младших уровней - перебор). Хоть тогда сложнее будет логика с вычислением того, где записана нужная информация (не просто сдвиг на 2*id существа от начала таблицы), но места занимать будет меньше (а планов-то ещё громадьё, каждый байт на счету).
Вернуться к началу

offlineАватара пользователя
DeathLust  
Подмастерье
Подмастерье
 
Сообщения: 140
Зарегистрирован: 29 ноя 2012, 15:19
Пол: Не указан
Поблагодарили: 62 раз.

Re: Моды

Сообщение DeathLust » 07 ноя 2014, 16:32

Может быть, в таком случае, действительно, сделать отдельную DLL.. Тогда можно о размере не беспокоиться. Насколько такой вариант более сложен?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: Моды

Сообщение AlexSpl » 07 ноя 2014, 16:33

Лучше всё-таки будет сделать универсальный патч. А с местом проблем не будет. Если оптимизировать весь код Героев 2, то думаю, можно выиграть порядка 500-600 килобайт :)
Вернуться к началу

offlineАватара пользователя
DeathLust  
Подмастерье
Подмастерье
 
Сообщения: 140
Зарегистрирован: 29 ноя 2012, 15:19
Пол: Не указан
Поблагодарили: 62 раз.

Re: Моды

Сообщение DeathLust » 07 ноя 2014, 16:47

AlexSpl писал(а):

Лучше всё-таки будет сделать универсальный патч. А с местом проблем не будет. Если оптимизировать весь код Героев 2, то думаю, можно выиграть порядка 500-600 килобайт :)

Тогда, конечно, универсальный, а не костылеобразный.

Ещё возникла мысль, пусть будет под номером 6:
6. Модифицировать стоунхендж на карте по типу конюшен. Чтоб кроме основного действия мог ещё и друидов апгрейдить (иначе странно получается, когда то же строение на карте, что и в замке, никакого отношения к юниту не имеет). Аналогичные задумки есть и по кладбищу с пирамидой, но не уверен, что можно переделать объект после его очистки из банка в жилище существ (зомби бесплатно, королевские мумии за плату; изначально после разграбления жильцов нет).
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: Моды

Сообщение AlexSpl » 07 ноя 2014, 18:03

1. Заполняем командами nop (90h) диапазон адресов [68D4B; 68DE11]. Для этого выделяем указанный диапазон и выбираем Правка -> Заполнить выделение (в шестнадцатеричном редакторе HxD), шаблон заполнения - Hex-значения: 90. Только что мы освободили 199 байт для нашего кода и таблицы.

2. Открываем FASM и компилируем (Run -> Compile) следующий код:

Код: Выделить всё
use32

mov     ecx, [ebp-8]
xor     eax, eax
mov     al, byte [ecx*2 + 0FEFEFEFEh]
xor     edx, edx
mov     dl, byte [ecx*2 + 0FEFEFEFEh]
mov     ecx, [ebp-0Ch]
mov     [ecx+eax*4], edx

mov     esp, ebp
pop     ebp
retn


На выходе получится бинарный файл размером 31 байт, открываем его в шестнадцатеричном редакторе, копируем и вставляем с заменой по адресу 68D4B. Теперь мы знаем адрес таблицы со стоимостью существ в ресурсах: 68D4B + 1F = 68D6A (длина кода 31 = 1Fh байт).

3. Идём по адресу 68D6A и прописываем нашу 132-байтную таблицу. Таблица будет состоять в основном из нулей, но такова плата за универсальность. Приводить её полностью не буду. Хотите вводите вручную, но можно просто скопировать и вставить с заменой бинарный патч, что находится в конце данного поста.

4. Осталось только прописать реальный адрес таблицы вместо FEFEFEFE, т.е. по адресу 68D53 нужно прописать 6A 8D 46 00, а по адресу 68D5C - 6B 8D 46 00.

5. Сохраняем изменённый исполняемый файл под каким-нибудь именем, и патч готов.

* * *
Если Вы не хотите тратить время на выполнение пунктов 1-5, скопируйте содержимое файла ResPatch.bin и вставьте его с заменой по адресу 68D4B. Сохраните изменённый исполняемый файл под другим именем. Патч готов. Не забудьте сделать бэкап оригинального исполняемого файла.

* * *
Теперь Вы можете изменять стоимость существа в ресурсах, просто изменяя таблицу. Для этого перейдите по адресу 68D6Ah + ID * 2 и пропишите нужные Вам значения. Например, чтобы добавить 1 ед. руды к стоимости Крестоносца, перейдите по адресу 68D6Ah + 0Ah * 2 = 68D7Eh и пропишите там: 02 01 (02 - руда, 01 - 1 единица).
Вложения
ResPatch.zip
(185 байт) Скачиваний: 286
Вернуться к началу

offlineАватара пользователя
DeathLust  
Подмастерье
Подмастерье
 
Сообщения: 140
Зарегистрирован: 29 ноя 2012, 15:19
Пол: Не указан
Поблагодарили: 62 раз.

Re: Моды

Сообщение DeathLust » 07 ноя 2014, 18:39

Получилось! Вручную добавил Крестоносцам 1 руды (ресурс #02). Красота.
Для удобства будущих поколений (вдруг кому-нибудь тоже захочется пропатчить) и чтобы не запоминать (в том числе, при слежке, что изменения не накладываются друг на друга), в названии бинарного патча можно указывать оффсет от начала исполняемого файла ;)
Вернуться к началу

offlineАватара пользователя
DeathLust  
Подмастерье
Подмастерье
 
Сообщения: 140
Зарегистрирован: 29 ноя 2012, 15:19
Пол: Не указан
Поблагодарили: 62 раз.

Re: Моды

Сообщение DeathLust » 08 ноя 2014, 11:52

Проанализировал анимацию атаки. Исходя из неё, нужно убирать штраф в рукопашной у обоих друидов (всегда атакуют магическим сгустком) и, наоборот, добавить штраф магам (механическая атака магическим посохом не так эффективна, как при использовании по прямому назначению). Хотя, конечно, можно посчитать, что основной урон всё равно остаётся магическим, когда посох высвобождает энергию при контакте с кумполом противника (по аналогии с электрическим разрядом от молнии гигантов и титанов). Тогда не добавлять.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5538
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2155 раз.

Re: Моды

Сообщение AlexSpl » 08 ноя 2014, 13:28

Со штрафом в рукопашной предлагаю поступить следующим образом. Сейчас штраф отсутствует только у монстров с ID равным 2Bh, 2Ch и 2Eh, т.е. у Магов, Архимагов и Титанов. Можно сделать специальную таблицу, содержащую ID монстров без штрафа в рукопашной. Таблица будет заканчиваться специальным символом (например, -1 = 0FFh). Тогда стрелок получит штраф в рукопашной, если его ID не было найдено в этой таблице. Таблица для оригинальной версии будет выглядеть так:

2B 2C 2E FF

Если разрешить Друидам и Верховным Друидам бить без штрафа в рукопашной и забрать это свойство у Магов и Архимагов, то таблица станет такой:

19 1A 2E FF

Разумеется, под таблицу нужно отвести достаточно места, чтобы можно было перечислить в ней ID хоть сразу всех стрелков. Тогда получится универсальный патч. Достаточно будет лишь вписать ID стрелков, которым Вы разрешили бить без штрафа, в эту таблицу - и патч готов :)
Вернуться к началу

Пред.След.

Вернуться в Общий раздел

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 4