Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Расширение геройских структур
DF2 :: ФОРУМЫ > Игровые форумы > Heroes of Might & Magic III > Моды
hippocamus
Посмотрев, как Master of Puppets сделал расширение для двеллингов, решился высказать свою давнюю мечту - вынести весь массив героев в отдельную dll, расширив структуру героя по всем показателям - больше слотов для юнитов (13) (в бою участвуют только 7 первых, остальные - резерв. в боях с нейтралами часто бывает нужно часть регулярной армии сделать неактивной); больше навыков (254/3), больше заклинаний (255). Ну и самих героев число увеличить. Число классов уже увеличено, что радует, но развернуться-то негде wink.gif
А самая-самая крутая мечта - вынести все города в dll-ки со стандартизированным интерфейсом, и чтобы они лежали в папке Data\Towns, и по желанию можно было бы туда класть dll с новыми городами или изымать нежелательные из стандартных.
Также хотелось бы расширить массив почв, и задавать интервалы цветов для псевдоанимации в текстовике, а не в экзешнике.
Haart of the Abyss
Цитата
больше слотов для юнитов (13)
Почему именно 13? Давайте тогда уж 16 для ровного счёта. Или все 64. Само собой, по умолчанию будут включены только первые семь, остальное на усмотрение того, кто будет использовать длл.
SerAlexandr
Цитата(Лорд Хаарт @ 10 Sep 2010, 17:49)
Цитата
больше слотов для юнитов (13)
Почему именно 13? Давайте тогда уж 16 для ровного счёта. Или все 64. Само собой, по умолчанию будут включены только первые семь, остальное на усмотрение того, кто будет использовать длл.

Чтобы шесть убрать в запас, а с одним напасть.
hippocamus
13 чтоб рисовалось в окне героя. остальные - линейкой прокрутки.
feanor
Цитата
вынести весь массив героев в отдельную dll

Проблема номер раз. Собственно, перенос. Ну, предположим, достаточно будет только перебить указатель.
Проблема номер два. Сейвы. Ну, положим, её тоже можно как-нить решить.
Проблема номер три. Собственно расширение структур. А вот это такооооооой головняк...
Etoprostoya
Слишком много кода надо менять. Дизассемблировать уже известные функции (туча), поменять там некоторые константы, адреса, потом разобраться с ещё неизвестными (тоже туча, надеюсь, что меньше)... Либо заняться VCMI, хотя там ИИ уже не тот.

Добавлено ([mergetime]1284120123[/mergetime]):
Цитата(feanor @ 10 Sep 2010, 15:58)
Цитата
вынести весь массив героев в отдельную dll

Проблема номер ...

Проблема номер десять - редактор карт и генератор.
feanor
Проверил. Обращений к 699538h (указателю на весь массив героев) - 2383 штуки. Не меньше половины их - со смещениями. Расширять в лоб - замаешься.
hippocamus
А как расширять не в лоб?
feanor
Да, кстати, в моем хрустальном шаре отчетливо видится ворох проблем с дллками. В частности, дикий геморрой с перекрытием хуков.

Цитата
А как расширять не в лоб?

Хз, думать надо. Скажем, хранить инфу где-то еще и изменять методы доступа к ней.
hippocamus
Думаю, нужно составлять таблицу хуков, по типу как таблицу прерываний. Там хранятся ссылки на все структуры, а dll-ки не используют фиксированных адресов, а берут их из этой таблицы.
Haart of the Abyss
Флагшток тебе в… Ну, скажем, в руки.
Etoprostoya
Кто-то обещал не лезть в область программирования.
feanor
Цитата(cерый @ 10 Sep 2010, 21:06)
Нужно просто заново всю кодовую базу переписывать на нормальную чистую неограниченную платформу. Та база, на которой сделали игру разработчики не выдерживает нормальной работы кодера.

Значит так. Показываешь нам, сирым и убогим, как это сделать. А то мы тут десять лет ходим вокруг да около и не видим такого чистого неограниченного пути. За две недели управишься?
Доп. задание на доп. балл: показать нормальную работу кодера.


Добавлено ([mergetime]1284140073[/mergetime]):
Цитата(hippocamus @ 10 Sep 2010, 21:00)
Думаю, нужно составлять таблицу хуков, по типу как таблицу прерываний. Там хранятся ссылки на все структуры, а dll-ки не используют фиксированных адресов, а берут их из этой таблицы.

Не, библиотека структур и функций тащемта ничего сложного из себя не представляет. Я даже выкладывал БФ, используемую мной в артефактах для ТоЕ.
Проблема именно в хуках. Примерный вариант - спецДлл, которая вешает на все часто употребляемые хуки свои обработчики и экспортирует функции регистрации на эти обработчики.

Добавлено ([mergetime]1284140908[/mergetime]):
Примерно так:
Код
int (*freezeHooks[255])(int, int, int);

extern чего-то там void RegisterFreezeHook(int (*hook)(int,int,int))
{
 for (int i=0; i!=256; i++)
  {
     if ((int)(freezeHooks[i])==0) (freezeHooks[i])=hook;
  }
}

void OnFreeze(int param, int param2, int param3)
{
 for (int i=0; i!=256; i++)
  {
     if ((int)(freezeHooks[i])) (freezeHooks[i])(param, param2, param3);
  }
}

WriteHook((void*)0x40CO1D,(void*)OnFreeze,HOOKTYPE_CALL)

мог накосячить с указателями, но лезть в справочники влом
feanor
Цитата(feanor @ 10 Sep 2010, 21:48)
Цитата(cерый @ 10 Sep 2010, 21:06)
Нужно просто заново всю кодовую базу переписывать на нормальную чистую неограниченную платформу. Та база, на которой сделали игру разработчики не выдерживает нормальной работы кодера.

Значит так. Показываешь нам, сирым и убогим, как это сделать. А то мы тут десять лет ходим вокруг да около и не видим такого чистого неограниченного пути. За две недели управишься?
Доп. задание на доп. балл: показать нормальную работу кодера.

10+14 = 24
Axolotl
Я тут пару дней зарегался, осваиваюсь. Понимаю, что это не совсем то, чего хочет автор темы. Но, пока еще не наступила утопия.
О резерве я тоже долго мечтал. В общем есть у меня, написанный мною скрипт - "Оруженосца", работает он так - любого героя можно прикрепить к другому герою "оруженосцем", а в окне героя "рыцаря" Ctrl-Clck'ом можно передавать существ оруженосцу и обратно. Формально, герой-оруженосец просто убивается с запретом появления в таверне.
Просто, я как-то случайно выяснил, что "мертвому" герою командами скритпа можно нормально передавать существ, и они не затираются....Также сделал так, что при смерти героя, оруженосец тоже теряет свое войско, и снимается запрет на появление в таверне. Также героя-рыцаря (уже имеющего оруженосца) в моем скрипте нельзя сделать оруженосцем.
Если нужно выложу.
hippocamus
Ну, это очень интересный скрипт. Только, правда, совсем не то, о чём я говорил, но интересен с тактической точки зрения. Выложи этот скрипт (желательно создай тему в разделе Скрипты).
Berserker
Оригинальная идея.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2025 IPS, Inc.