Объявления
Поздравляем
Roman2211


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

Как создать плагин для HD мода

Герои Меча и Магии III: Возрождение Эрафии, Герои Меча и Магии III Дыхание Смерти, Герои Меча и Магии III Клинок Армагеддона, Герои Меча и Магии III Хроники Героев
offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 23 окт 2021, 20:58

AlexSpl писал(а):

Я же за то, чтобы интересно было. Сейчас вот посмотрели, погоняли с плагином пару минут, и сказали: ну, да, прикольно, но ничего нового, по сути, не добавили. Те же старые заклы, только с другой анимацией.

Ну тут как посмотреть. Как бы мы не сделали критика будет всегда. Любителям ERA/WoG зайдет, там многим вообще плевать на красоту и баланс, только лишь бы что-то новое, а любители HotA будут плюватся. В 4 Героях тоже было немало новых и даже интересных идей, но в итоге они стали худшей частью среди всей серии под руководством NWC.

AlexSpl писал(а):

Для Flash of Fire и Explosion ещё подходящие звуки нужны. Может, поискать среди других игр (например, M&M)?

Согласен, надо бы поискать. Я вот сейчас анимации делаю к Behemoth's Claws и Rejuvenation, так вот к ним тоже надо будет звуки подыскать.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 23 окт 2021, 21:09

Над названием заклинания Rejuvenation нужно подумать. Омолаживаться существам некуда. У них дефолтное здоровье. Нужно что-то вроде Fortify Health (это из TES: Oblivion).

Ещё предлагаю: Flash of Fire -> Incineration, Explosion нормально звучит и так. Behemoth's Claws должно работать только при атаке ближнего боя (melee). Я бы и Death Blow сделал только для ближнего чисто из-за анимации. Всё-таки для стрелков сейчас анимация глупо выглядит. Вот для стрелков подошла бы анимация Мишени из King's Bounty. В HotA, кажется, есть для точного выстрела, но оттуда нельзя брать.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 24 окт 2021, 04:14

Сделал опрятный ini-файл. На примере Poison:

Код: Выделить всё
; Spell #71
[Poison]
<Enabled> = 1
<Type> = -1
<Sound.FileName> = "Poison.wav"
<Animation.ID> = 67
<Attributes> = 266261
<AbbreviatedName> = "Poison"
<Name> = "Poison"
<Level> = 4
<School.Earth> = 1
<School.Water> = 0
<School.Fire> = 0
<School.Air> = 0
<Cost.None> = 20
<Cost.Basic> = 16
<Cost.Advanced> = 16
<Cost.Expert> = 16
<Effect.Power> = 0
<Effect.None> = 5
<Effect.Basic> = 5
<Effect.Advanced> = 4
<Effect.Expert> = 3
<ChanceToGain.Castle> = 0
<ChanceToGain.Rampart> = 5
<ChanceToGain.Tower> = 5
<ChanceToGain.Inferno> = 5
<ChanceToGain.Necropolis> = 10
<ChanceToGain.Dungeon> = 5
<ChanceToGain.Stronghold> = 0
<ChanceToGain.Fortress> = 0
<ChanceToGain.Conflux> = 5
<AIValue.None> = 50
<AIValue.Basic> = 50
<AIValue.Advanced> = 100
<AIValue.Expert> = 150
<RightClickText.Normal> = "{Poison}\n\nPoisons an enemy unit, reducing its health at once and then at the beginning of the next two rounds.\n"
<RightClickText.Basic> = "{Basic Poison}\n\nPoisons an enemy unit, reducing its health at once and then at the beginning of the next two rounds.\n"
<RightClickText.Advanced> = "{Advanced Poison}\n\nPoisons an enemy unit, reducing its health at once and then at the beginning of the next two rounds.\n\nEffect is greater than that of Basic Poison.\n"
<RightClickText.Expert> = "{Expert Poison}\n\nPoisons an enemy unit, reducing its health at once and then at the beginning of the next two rounds.\n\nEffect is greater than that of Advanced Poison.\n"

Теперь нужно провернуть ту же схему, что и с магической гильдией, для RMG (у нас максимум 128 заклинаний, а RMG использует только 96-битовое поле).

* * *
С RMG придётся повозиться :smile5: Как Вам такое?

Изображение

Безопасно можно только до 96 заклинаний, если играть на рандомных картах. Чтобы разогнать до 128, сначала нужно понять, что делает этот код :smile1:

Похоже, код считает контрольную сумму* различных структур. Так, для битового массива запрещённых заклинаний проход идёт по 9 байтам, т.е. 72 битам: 32 + 32 + 8. 9 - минимальное кол-во байт, вмещающих битовый массив запрещённых заклинаний: 64 <= 70 <= 72. В оригинале этот битовый массив RMG заполняет нулями, поэтому для карт RMG не действует глобальный запрет заклинаний. Плагин NewSpells уже поддерживает глобальный запрет, теперь ещё и правильная контрольная сумма будет генерироваться. Мелочь, а приятно :smile1:

* В коде Героев 3 для Dreamcast есть функция adler32(). Возможно, это она.

* * *
К сожалению, малой кровью не отделаться. Чтобы полноценно поддерживать битовый массив запрещённых заклинаний, нужно менять формат карты (или ставить костыль на этапе её загрузки). Например, смотрите следующий код из функции начала новой игры (и таких участков много):

Код: Выделить всё
.text:004C240E                     mov     ecx, [ebp+a2]
.text:004C2411                     lea     eax, [ebp+var_30]               ; Load Effective Address
.text:004C2414                     push    9
.text:004C2416                     push    eax
.text:004C2417                     mov     edx, [ecx]
.text:004C2419                     call    dword ptr [edx+4]               ; Indirect Call Near Procedure
.text:004C241C                     xor     esi, esi                        ; Logical Exclusive OR
.text:004C241E                     lea     edi, [ebp+var_1C]               ; Load Effective Address
.text:004C2421
.text:004C2421 loc_004C2421:                                               ; CODE XREF: NewGame1+33E↓j
.text:004C2421                     mov     ecx, esi
.text:004C2423                     mov     edx, 1
.text:004C2428                     and     ecx, 7                          ; Logical AND
.text:004C242B                     mov     eax, esi
.text:004C242D                     shl     edx, cl                         ; Shift Logical Left
.text:004C242F                     shr     eax, 3                          ; Shift Logical Right
.text:004C2432                     mov     [ebp+var_3C], edi
.text:004C2435                     mov     [ebp+var_38], esi
.text:004C2438                     mov     cl, [ebp+eax+var_30]
.text:004C243C                     test    cl, dl                          ; Logical Compare
.text:004C243E                     setnz   dl                              ; Set Byte if Not Zero (ZF=0)
.text:004C2441                     push    edx
.text:004C2442                     lea     ecx, [ebp+var_3C]               ; Load Effective Address
.text:004C2445                     call    sub_004CEC40                    ; Call Procedure
.text:004C244A                     inc     esi                             ; Increment by 1
.text:004C244B                     cmp     esi, 70                         ; Compare Two Operands
.text:004C244E                     jb      short loc_004C2421

Здесь push 9 - это как раз те самые 9 байтов, отводимые под битовый массив запрещённых заклинаний. Битовый массив читается из файла карты. Т.е. мы никак не можем прочесть больше, потому что прочитаем данные, которые в файле карты следуют за этим битовым массивом. Но это некритично, т.к. в плагине мы расширяем этот битовый массив, а все объекты в Героях 3 инициализируются только при старте карты, т.е. при загрузке сейва заклинания в магических гильдиях/свитках/святилищах/пирамидах и т.п. не меняются (к нашей радости). Ноги у того "мусора", о котором я писал ранее и который приходилось "выбрасывать", растут отсюда. Поэтому следующие патчи не нужны (я оставил на всякий, вдруг реально до редактора карт дойдём):

Код: Выделить всё
// ===============================================================
// -------------------------- New Game ---------------------------
// ---------------------------------------------------------------
// Don't need these patches yet, as we read a standard map
// Will work only if we change map format
//_PI->WriteByte       (0x4C2415, CeilDiv(SPELLS_NUM, 8));
//_PI->WriteByte       (0x4C244D, SPELLS_NUM);
//_PI->WriteByte       (0x4C246F, SPELLS_NUM);
//_PI->WriteDword      (0x4C24C9, SPELLS_NUM * sizeof(_Spell_));
//_PI->WriteByte       (0x4C250E, SPELLS_NUM);
//_PI->WriteDword      (0x4C2557, SPELLS_NUM * sizeof(_Spell_));
//_PI->WriteDword      (0x4C260D, SPELLS_NUM * sizeof(_Spell_));
// ===============================================================

Запрещённые заклинания будут браться прямиком из NewSpells.ini. В отличие от оригинальной игры, RMG с плагином будет поддерживать запрет заклинаний, включая новые.
Вернуться к началу

offlineАватара пользователя
leiz  
Подмастерье
Подмастерье
 
Сообщения: 187
Зарегистрирован: 15 сен 2018, 07:58
Пол: Не указан
Поблагодарили: 95 раз.

Re: Как создать плагин для HD мода

Сообщение leiz » 24 окт 2021, 14:40

AlexSpl писал(а):

Над названием заклинания Rejuvenation нужно подумать. Омолаживаться существам некуда. У них дефолтное здоровье. Нужно что-то вроде Fortify Health (это из TES: Oblivion).

Toughness, например. И по смыслу подходит, и в стилистику названий вписывается.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 24 окт 2021, 17:12

Версия для тестов запрещённых заклинаний. Новое заклинание можно запретить установив <Enabled> = 0, старое заклинание запрещается в отдельной секции [Enabled Spells]. Например, запретим Haste и Slow (в том числе на рандомных картах):

Код: Выделить всё
<Haste> = 0
<Slow> = 0

В [Enabled Spells] можно только запретить (0) заклинания (переписать глобальные настройки карты). При значении 1 действуют глобальные запреты карты. Чтобы разрешить заклинание, несмотря на запреты карты, установите значение в -1.

NewSpells.zip
(393.2 КБ) Скачиваний: 136
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 24 окт 2021, 21:12

AlexSpl писал(а):

Сделал опрятный ini-файл.

Отлично, теперь нам осталось повыносить описания в отдельные языковые ini, а в нашем основном ini добавить вверху самой первой секцию:

Код: Выделить всё
[Language]
<NewSpellsLanguage> = "#ru.ini" ("#en.ini")


Описания на разных языках будем хранить в отдельных языковых ini: #ru.ini и #en.ini (с кодировкой 1251), которые будут находится в папке Lang, которая будет находится в папке плагина вместе с dll и основным ini с настройками.

Изображение Изображение Изображение Изображение Изображение

Как и обещал сделал картинки ко всем добавляемым заклам и анимации (Behemoth's Claws, Toughness), а также нашел звуки к Explosion и Ignition. Описания ЗДЕСЬ.

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

NewSpells_Images_Animations_Sounds.zip
Архив с картинками, анимациями и звуками:
(1020.02 КБ) Скачиваний: 119
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 24 окт 2021, 22:04

Здорово получилось, только звуки нужно сжать. Слишком большой размер по сравнению с теми, что в игре.
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 24 окт 2021, 22:09

Цитата:
Здорово получилось, только звуки нужно сжать. Слишком большой размер по сравнению с теми, что в игре.

Нашел косяк на картинке Toughness белый ореол возле носика. Фон плохо удалился, недосмотрел. Сейчас в течении 15 мин поправлю все картикнки Toughness и заодно пережму звуки и перезалью архив.

UPD: Подправил Toughness.

Toughness.zip
(10.65 КБ) Скачиваний: 120


Остальное позже гляну. Хочется еще большие картинки для Claws и Explosion для книги заклинаний сделать так, чтобы без голубых пикселей на краях, для той части изображения, которая выходит на голубой фон. Toughness так сделал.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 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)
Поблагодарили: 2185 раз.

Re: Как создать плагин для HD мода

Сообщение AlexSpl » 25 окт 2021, 00:05

Проверьте ещё размеры картинок, чтобы все одинакового размера были (оригинального). Некритично, но если можно так сделать, то будет вообще хорошо.

Toughness будет в Воде:

Изображение

Добавил анимации, но в будущем, конечно, желательно улучшить. Для Toughness подошло бы не вращение, а "опрокидывание", как у Bless. Пока самая интересная (неоригинальная) анимация у Death Blow.

* * *
Добавил все заклинания, для Incineration написал код (там по шаблону, поэтому быстро получилось). Новые ударные очень круто смотрятся! Только не слишком ли сильное Incineration получилось? Fireball - 65 урона, Inferno - 70, а Incineration - 225?
Вернуться к началу

offlineRolex  
имя: Alex
Ветеран
Ветеран
 
Сообщения: 898
Зарегистрирован: 22 сен 2020, 18:58
Откуда: УКРАИНА
Пол: Мужчина
Поблагодарили: 53 раз.

Re: Как создать плагин для HD мода

Сообщение Rolex » 25 окт 2021, 01:26

AlexSpl писал(а):

Проверьте ещё размеры картинок, чтобы все одинакового размера были (оригинального).

А все дело в том, что в оригинале нет единого оригинального размера. По высоте картинки могут быть от 40 и до 56 пикселей. Вот обратите внимание на два закла над Toughness - Телепорт и Клон. Они очень сильно отличаются в размерах.
Телепорт и Молитва мелкие, а Клон и Защита от Воды - большие. Походные тоже, кстати, крупные. Я изначально делал все одинакового размера, а потом понял некоторые картинки можно делать чуточку больше (в зависимости от самой картинки) и это будет выглядеть лучше.

AlexSpl писал(а):

Для Toughness подошло бы не вращение, а "опрокидывание", как у Bless.

Думал об этом, но нужно ещё типа крышку открывать и ещё что выливать, а очень непросто сделать. Просто так опрокидывать будет плохо смотреться. Да и нам по количеству кадров нужно выходить на 18-22.
AlexSpl писал(а):

Пока самая интересная (неоригинальная) анимация у Death Blow.

Которую я сделал из оригинальной путем добавления дополнительных 8 кадров.
Последний раз редактировалось Rolex 25 окт 2021, 01:34, всего редактировалось 2 раз(а).
Вернуться к началу

Пред.След.

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

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

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