Объявления

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

Моды

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

Re: Моды

Сообщение DeathLust » 08 ноя 2014, 13:56

Хорошее предложение. Предлагаю магов пока не трогать всё же. Записать в конец таблицы только, чтоб проще всего было убирать, если будет такое решение.
Чтобы было совсем универсально, таблицу нужно делать для всех юнитов: вдруг кто-то захочет играться с флагами. Или можно словить крэш, если сделать нестреляющий изначально юнит стрелком, из-за отсутствия анимации? Тогда таблица на 17 стрелков, да.

Жаль, что монстров 66, а не 64, можно было бы красиво битовыми флагами обойтись. Хотя и сейчас можно. 9 байт вместо 8.
Вернуться к началу

onlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5539
Зарегистрирован: 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, 16:07

1. Идём по адресу 1DBFD и "зануляем", т.е. заполняем командами nop (90h), фрагмент старого кода [1DBFD; 1DC20]. Только что мы освободили 36 байт для нашего кода.

2. Компилируем следующий фрагмент кода в FASM'е:

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

mov     edx, dword [ecx+76h]    ; edx <- ID монстра
xor     eax, eax
xor     ecx, ecx

@Loop:
movzx   eax, byte [ecx+468DEEh] ; Для удобства таблицу монстров без штрафа в рукопашной
                                ; разместим сразу после таблицы со стоимостью монстров в ресурсах
                                ; eax <- ID монстра из таблицы с индексом ecx
cmp     edx, eax                ; Сравниваем ID монстров
jz      @NoPenalty              ; Если ID совпадают, штрафа нет
jl      @Penalty                ; Если ID монстра меньше, смотреть таблицу дальше не имеет смысла,
                                ; т.к. она упорядочена по возрастанию ID
inc     ecx                     ; Иначе увеличиваем счётчик
jmp     @Loop                   ; и переходим к следующей итерации

@Penalty:
fld     dword [ebp-14h]         ; Оставляем оригинальный код деления на 2,
fdiv    dword [4EA4E4h]         ; чтобы избежать возможных погрешностей при вычислении урона
fstp    dword [ebp-14h]

@NoPenalty:

Получилось 35 байтов. Вставляем полученный бинарный код с заменой по адресу 1DBFD.

3. Идём по адресу 68DEE и прописываем таблицу монстров без штрафа в рукопашной, завершая её байтом FF. Монстры в таблице должны быть расположены строго по возрастанию ID. По умолчанию пропишем там тех монстров, что не имеют штрафа в рукопашной в оригинальной игре: 2B 2C 2E FF.

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

Вы можете сразу вставить бинарный код ShootPatch_1DBFD.bin по адресу 1DBFD, но не забудьте также прописать таблицу монстров без штрафа в рукопашной по адресу 68DEE. ID монстров в таблице должны следовать строго в возрастающем порядке, заканчиваться таблица должна специальным байтом, который заведомо больше любого ID (например, FF).
Вложения
ShootPatch_1DBFD.zip
(176 байт) Скачиваний: 273
Вернуться к началу

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

Re: Моды

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

Получилось! Протестировал, теперь друиды в 2 раза больший урон наносят, чем раньше, при рукопашной.
Надо будет им немного альфу поднять.
Вернуться к началу

onlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5539
Зарегистрирован: 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, 23:06

Давайте перечислим, из чего складывается ежедневный доход игрока.

1. Шахты (максимальное количество на карте - 144):
+1000 за каждую Золотую шахту;
+1000 за каждую Заброшенную шахту.

2. Города и замки (максимальное количество на карте - 72):
+250 за каждый Город;
+1000 за каждый Замок;
+250 за каждую Статую;
+500 за каждое Подземелье.

3. Артефакты (максимальное количество - 112):
+1000 за каждый Бездонный мешок;
+750 за каждую Бездонную суму;
+500 за каждый Бездонный кошель;
+10000 за каждого Золотого гуся;
-250 за каждую Подать.

4. Герои (максимальное количество - 8):
+100 за каждого Казначея 1-й ступени;
+250 за каждого Казначея 2-й ступени;
+500 за каждого Казначея 3-й ступени.

5. Доход компьютерных игроков модифицируется в зависимости от сложности игры:
Income = [0.75 * Income] на Легкой сложности;
Income = [1.00 * Income] на Обычной сложности;
Income = [1.29 * Income] на Тяжелой сложности;
Income = [1.45 * Income] на сложности Эксперт;
Income = [1.60 * Income] на Невозможной сложности.

6. В сетевой игре доход модифицируется выбранной форой:
Income = [0.85 * Income], если была выбрана фора "Связанные руки";
Income = [0.70 * Income], если была выбрана фора "Скованные руки".
Вернуться к началу

onlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5539
Зарегистрирован: 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 » 09 ноя 2014, 01:22

1. Переходим по адресу 57202, компилируем следующий фрагмент кода и вставляем получившийся на выходе бинарный код с заменой:

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

lea     edx, [edx+ecx+0B6Bh]            ; edx <- адрес двойного слова с битовыми флагами возведённых зданий
xor     eax, eax
xor     ecx, ecx

@Loop:
cmp     ecx, 5
jge     @L1
cmp     byte [edx+ecx-10h], 0           ; В слоте гарнизона с индексом ecx Крестьянин?
jnz     @NotAPeasant
add     ax, word [edx+ecx*2-0Bh]        ; Если да, увеличиваем аккумулятор на количество Крестьян в слоте,

@NotAPeasant:
inc     ecx                             ; иначе переходим к следующему слоту
jmp     @Loop

@L1:
lea     eax, [eax+1000]                 ; eax <- Количество Крестьян в гарнизоне + 1000
add     [ebp-0Ch], eax

test    dword [edx], 20h                ; Замок?
jz      @NotATown
sub     dword [ebp-0Ch], 750            ; Если нет, отбираем 750 золотых, добавленные авансом выше

@NotATown:
test    dword [edx], 80h                ; Статуя возведена?
jz      @NotAStatue
add     dword [ebp-0Ch], 250            ; Добавляем бонус Статуи

@NotAStatue:

"Обнулять" ничего не надо, т.к. размер кода (70 байт) совпадает с размером старого кода.

* * *
В следующем патче мы учтём также Крестьян у героев.
Вложения
PeasantPatch_57202.zip
(210 байт) Скачиваний: 273
Вернуться к началу

onlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5539
Зарегистрирован: 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 » 09 ноя 2014, 01:55

2DeathLust:
Размер патча ShooterPatch_1DBFD.bin равен 35 байт, освобождённое место - 36 байт. Убедитесь в том, что по адресу 1DC20 находится команда nop (90h). Патч, не требующий обнуления диапазона адресов, прикрепляю к посту, т.е. в нём уже присутствует команда nop.

* * *
Также, на всякий случай, приведу размеры всех патчей:
ResPatch_68D4B.bin - 199 байт;
ShootPatch_1DBFD.bin - 36 байт, таблица стрелков находится по адресу 68DEE;
PeasantPatch_57202.bin - 70 байт.
Вложения
ShootPatch_1DBFD.zip
(179 байт) Скачиваний: 257
Вернуться к началу

offlineАватара пользователя
Orzie  
Ветеран
Ветеран
 
Сообщения: 698
Зарегистрирован: 12 сен 2013, 15:17
Откуда: Томск
Пол: Не указан
Награды: 3
Высшая медаль (1) 3 место 1 этапа по HMM1 (1) Бонусный шлем (1)
Поблагодарили: 457 раз.

Re: Моды

Сообщение Orzie » 09 ноя 2014, 04:34

Мне вот интересно, можно ли такими методами новый город впендюрить? А то у меня графика залеживается ;)

В проджект айронфист не всё устраивает, хотелось бы максимально придвинуть к классике.
Правда, еще такой момент, что хотел сделать героев новой фракции нанимаемыми только в городе их же фракции, и чтобы в других городах их нельзя было нанять. Но это второстепенно... Как и переименование Кастора в Сеймура, а Максимуса в Лорда Хаарта.

Ну и до кампаний дело дойти может.
Вернуться к началу

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

Re: Моды

Сообщение DeathLust » 09 ноя 2014, 10:25

AlexSpl писал(а):

1. Переходим по адресу 57202, компилируем следующий фрагмент кода и вставляем получившийся на выходе бинарный код с заменой:

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

lea     edx, [edx+ecx+0B6Bh]            ; edx <- адрес двойного слова с битовыми флагами возведённых зданий
xor     eax, eax
xor     ecx, ecx

@Loop:
cmp     ecx, 5
jge     @L1
cmp     byte [edx+ecx-10h], 0           ; В слоте гарнизона с индексом ecx Крестьянин?
jnz     @NotAPeasant
add     ax, word [edx+ecx*2-0Bh]        ; Если да, увеличиваем аккумулятор на количество Крестьян в слоте,

@NotAPeasant:
inc     ecx                             ; иначе переходим к следующему слоту
jmp     @Loop

@L1:
lea     eax, [eax+1000]                 ; eax <- Количество Крестьян в гарнизоне + 1000
add     [ebp-0Ch], eax

test    dword [edx], 20h                ; Замок?
jz      @NotATown
sub     dword [ebp-0Ch], 750            ; Если нет, отбираем 750 золотых, добавленные авансом выше

@NotATown:
test    dword [edx], 80h                ; Статуя возведена?
jz      @NotAStatue
add     dword [ebp-0Ch], 250            ; Добавляем бонус Статуи

@NotAStatue:

"Обнулять" ничего не надо, т.к. размер кода (70 байт) совпадает с размером старого кода.

Не забыли здесь про бонус Подземелья?

AlexSpl писал(а):

В следующем патче мы учтём также Крестьян у героев.

А давайте, так оставим. Крестьянин, которого взяли в поход, оторван от земли и не может приносить доход своему господину.

AlexSpl писал(а):

Убедитесь в том, что по адресу 1DC20 находится команда nop (90h).

Обнулять не забывал.

AlexSpl писал(а):

Также, на всякий случай, приведу размеры всех патчей:
ResPatch_68D4B.bin - 199 байт;
ShootPatch_1DBFD.bin - 36 байт, таблица стрелков находится по адресу 68DEE;
PeasantPatch_57202.bin - 70 байт.

Нужно ли их архивировать, ведь после этого размер возрастает. Или политика безопасности запрещает прикреплять к посту .bin?
Вернуться к началу

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

Re: Моды

Сообщение DeathLust » 09 ноя 2014, 10:34

Orzie писал(а):

Ну и до кампаний дело дойти может.

Всё лелею идею переконвертировать (и адаптировать по необходимости) кампанию первых Героев (изначально расы на выбор, концовка за Айронфиста, раз так канонично).

Orzie писал(а):

Правда, еще такой момент, что хотел сделать героев новой фракции нанимаемыми только в городе их же фракции, и чтобы в других городах их нельзя было нанять.

Хотелось бы чисто кампанейских героев на нейтралах: не знаю пока, как назвать, (дипломатия+казначейство с бандитами) и путешественник (логистика+поиск пути с номадами). Чтоб в общем пуле могли появиться, только если вручную были выставлены (либо на карте, либо в тюрьме).
Вернуться к началу

offlineАватара пользователя
Orzie  
Ветеран
Ветеран
 
Сообщения: 698
Зарегистрирован: 12 сен 2013, 15:17
Откуда: Томск
Пол: Не указан
Награды: 3
Высшая медаль (1) 3 место 1 этапа по HMM1 (1) Бонусный шлем (1)
Поблагодарили: 457 раз.

Re: Моды

Сообщение Orzie » 09 ноя 2014, 10:56

Мы сконвертировали их в троечный формат для h3sw) но вам, конечно, вряд ли поможет.
Вернуться к началу

Пред.След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron