Wake of Gods Forum | Форум Во Имя Богов

Full Version: Отображение произвольного def`а на поле боя
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2
dll позволяет создавать объекты-изображения (условно "фигуры") в бою и управлять ими.

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

BattleFigures.zip

В архиве находится сама dll, а так же lib-файл и SDK (только на C++).
dll должна лежать в корневой папке Героев. lib и SDK должны быть включены в исходники использующего BattFigures.dll проекта (SDK автоматически подгружает lib).

SDK достаточно хорошо прокомментирован, думаю, понять, как пользоваться и какие есть возможности, не очень сложно.


Пример: SamplePlugin.zip

В примере на стеках играет специальная анимация всё время, пока на них наложена анти-магия; похожая вещь делается и для паралича.



Как сама BattleFigures.dll, так и, естественно, пример требует patcher_x86 (patcher_x86.dll и patcher_x86.ini в корневой папке игры).



Исходники (без отлова ошибок, но и исправленным освобождением памяти в деструкторе списка): https://www.dropbox.com/s/nmqzf6ehiscbxq...ources.zip


BattleFigures.dll глючить не должна - я хорошо отреверсил то, что в ней делаю. В неё встроен отлов ошибок, такой же, как и в HD, поэтому не удивляйтесь, что при любом вылете она будет выдавать окошко с ошибкой. Cама dll вряд ли является причиной этой ошибки, но её лог может помочь в поиске этой причины.

Возможно, не всеми возможностями dll удастся воспользоваться из-за кривости отрисовке боя Героев. Тут пока ничего не поделаешь.


SDK для других языков я писать не буду, т. к. и с этим упарился (и всё равно как-то криво вышло по-моему). Если кто-то напишет, а ещё лучше, научит, как делать адекватный экспорт, буду признателен. Sm
Поздравляю!
Вот что меня интересует, так это загрузка, выгрузка и отображение кадров дефов, то есть по сути то, с чем имеет дело alpha-плагин от Семёна. Для создания модов важно, чтобы кадровые сборные дефы могли редактировать по частям, то есть заменой кадров, а не дефов. Есть у тебя наработки? Это не срочно, но любое нововведение зависит от трудоёмкости.
Отображается конкретные кадры def`а посредством своих методов, и о некоторых из них я кое-что знаю. Загрузку я видел только def`а целиком, но не разбирал, а только пользовался.

Вообще, с самими ресурсами я мало работал. Структуры def`а, кадра и пр. описаны baratorch`ем, я ими только пользовался, и их лучше попросить их у него. Я узнал только некоторые подробности про 2 функции отрисовки, которые представлены у меня как 2 типа изображения. Про них могу рассказать.
Sav, а через !?CM добавляемые элементы будут отлавливаться? через CM:I по своим уникальным ID?
Нет, фигуры - просто настраиваемые изображения, сами по себе они неинтерактивны. Их можно сделать интерактивными, но этим должен заниматься уже пользователь, BattleFigures.dll даёт возможности только в плане отображения на экран.
а в процессе игры можно ли менять кадры деф-а, для отображения при той или и ной ситуации???
скажем эмулировать таким образом "кнопку", которая может быть активна или "недоступна"
Конечно, можно менять кадры def`а, можно заменить def на другой, как и любые другие параметры отображения.
Berserker, как думаешь, стоит ли менять способ реализации дополнит.игрового меню в битве для ФМ (сейчас он через DL вызывает панель всякий раз по ПКМ на герое)???
То есть сделать чтоб всегда висела якобы "панель" вверху, а состояние кнопок постоянно мониторить для каждой стороны и менять если нужно.

оцени своим профессионал.взором новую возможность посредсвом данной BattleFigures.dll и ответь пожалуйстаSorry
Несмотря на то, что я писал, что глючить не должно, оказалось, что это немного не так.
Обновил dll, исправил пару недочётов. Также обновился SDK, пара мелких расширений возможностей.

Обновил пример - теперь в нём полноценно изменяется анимация паралича: при наложении играется анимация до определённого кадра, потом на этом кадре анимация застывает и держится всё время, пока стек парализован, а при снятии паралича анимация играет "назад" и изображение исчезает.

Ссылки в первом посте указывают на обновлённые файлы.
Bes, не стоит.
Теперь меня ничего не держит. https://www.dropbox.com/s/nmqzf6ehiscbxq...ources.zip
Сам не знаю зачем (наверное, затем, что он тут не нужен), убрал отсюда отлов ошибок, но добавил исправленное позже освобождение памяти списком.

Я уже понял, что текущая обработка фигур никуда не годится (в плане удобства работы с ней) и я буду всё переделывать, но не факт, что я стану выделять потом это опять в отдельный плагин.

Геройские модули тут содержат немного побольше моей информации (отличима построчными комментариями), чем те, что в HD; возможно, интересующимся есть смысл обратить них внимание.
Реально ли сделать шкалу очерёдности хода, как в VCMI, используя данный модуль?
Да, модуль позволяет отображать произвольное количество произвольных изображений, но он позволяет им лишь отрисовываться, анимировать и позволяет программисту динамически изменять параметры отрисовки и анимации. Всё остальное, включая реакцию на наведение, нажатие, и т. д. - на совести у программиста.

По идеологии же это примерно то же, что и делать разделение дефа артефактов через альфа-плагин. Я бы не стал вводить шкалу очерёдности через BattleFigures, по мне её надо делать нормальным элементом интерфейса.

Я не играл в VCMI и видел шкалу только на скриншотах. Если она неинтерактивная, то простота её реализации и эффективность данного плагина для этих целей существенно выше.

В Хоте модуль используется для исправления анимации появления и исчезновения огненных стен и т. п., т. к. позволяет отрисовывать произвольную анимацию на гексе не поверх всего, а в общем порядке. В целом это что-то вроде замены оригинальной геройской анимации заклинаний и т. п. вещей: с большим функционалом, но для тех же целей.
В общем я всё таки пытаюсь сделать шкалу очерёдности хода через этот плагин и через патчер x86.
Но меня очень сильно тормозит полное отсутствие знаний основ С++. А именно я не могу вызвать нижеуказанную функцию для построения списка очередности. Я тупо не понимаю как передать в неё адреса структуры стеков.
Code:
// Сравнение приоритета хода стеков (если у первого приоритетнее - возврат 1)
char __thiscall A0_Battle_CompareStacksTurnPriority_sub_464B30(int this, struct_BattleStack *Stack1, struct_BattleStack *Stack2)
Поэтому прошу помощи.

На данный момент плагин работает через HD мод как подключаемый на хоте, соде и эре. Без HD только на эре через EraPlugins.
Пока что выглядит это так:
Pages: 1 2
Reference URL's