Quote:Мне просто не очень нравится идея тащить в плагин библиотечные функции c++, которые и так есть в общих библиотеках.
Сама игра запускается и при отсутствии Visual C++ Redistributanble 2005, 2008, 2010, etc. Это удобно, в том числе на Линуксе.
Спасибо!
wessonsm, я бы эти проверки как-то вынес в промежуточную функцию. Я так понимаю, нужно просто по условию вместо отрисовки видеокадра отрисовать pcx-фон. Возможно, какая-то сложность ускользает.
Code:
// Фикс раздвоения кнопок при нажатии
int __stdcall hook_ButtonDraw(LoHook* hook, HookContext* c) {
if ( (IsVideoFullScreen())&&(PlayingCredits()) ) {
VideoDrawCurrentFrame();
}
return EXEC_DEFAULT;
}
Вот здесь вместо VideoDrawCurrentFrame(), если нет видео, вставить вызов отрисовки PCX задника. Только ты перехватил отрисовку любых кнопок в игре ведь?
Да, надо будет пару вечеров посидеть еще над этим плагином. Меня самого не вполне устраивает текущий вариант.
(05.01.2025 02:14)Berserker Wrote: [ -> ]А не было возможности сделать так, чтобы композитные png не были нужны вообще для главного меню?
Сделал.
Оптимизировал хуки, немного причесал исходник.
Композитные png не требуются в главном меню (но не в других диалогах).
Если в json имеются ключи вида "era:{png_backs:{***}}" для кнопок главного меню,
их требуется удалить для корректной работы плагина.
По совету Берсеркера скомпилировал с ключом /MT, чтобы не было зависимостей от внешних библиотек.
Это привело к увеличению размера плагина в 4 раза - с 14,5 кБ до 58 кБ
Ссылки остались те же:
Мод
Плагин
(15.01.2025 17:13)Berserker Wrote: [ -> ]Только ты перехватил отрисовку любых кнопок в игре ведь?
Только в главном меню.
Хук стоит сплайс, но если кнопка находится не в главном меню, просто вызывается замещенная функция без изменений.
Quote:Это привело к увеличению размера плагина в 4 раза - с 14,5 кБ до 58 кБ
Это превышает свободное место на моей 3-дюймовой дискете )))
Отличное обновление, спасибо! Такое можно по умолчанию в сборках использовать. Только можешь описать все фишки плагина (прототип readme?).
Quote:Вот теперь тебя люблю я,
Вот тебя тебя хвалю я
Потому что даже Берсу
Твой плагин да угодил ))) © Плагдодыр
Berserker, я придумал как сделать, чтобы png кадры дефов кнопок главного меню заранее кэшировались в памяти, такой маленький трюк.
Еще перед созданием диалога последовательно рисую их в экранный буффер функцией 0x47B820_Def_DrawSimple, это провоцирует помещение их в кэш.
На экране их не видно, потому что нет перерисовки экрана, но в кэш они попадают.
Субъективно тормозов стало меньше.
Теперь вопрос как бы измерить, насколько уменьшились тормоза?
Субъективным ощущениям доверять не стоит.
Первое, что приходит в голову замерять время отрисовки кнопки при клике на нее функцией GetTime(), до и после.
Если кадр нажатой кнопки есть в кэше, время будет меньше.
Скоро наверное выложу обновленный плагин и результаты тестов.
wessonsm, можно нагрузить процессор сторонней задачей, и следом открывать игру, замеряя время...
Думаю с нагрузкой "наглядность" станет осязаема даже таймером
wessonsm, у меня была идея сделать отслеживание жизни def-ов и принудительно кэшировать кадры, но отложил. Там есть нюансы, что из возможности динамического перенаправления кадров дефов на произвольную png картинку, можно получить вечную блокировку (мёртвый груз в кэше) для ранее загруженных кадров.
Ты всё верно делаешь, правда, сама по себе отрисовка время забирает. А сравнить можно так: засекаешь через GetTime() время до и после вызова функции отрисовки изображения в первый раз, а затем во второй. Находишь разницу. Можно без хуков.