igrik
Posts: 2819
|
|
26.05.2021 14:45 |
|
Berserker
Posts: 16637
|
Добрый день всем!
1) LoadImageAsPcx16 загружает изображения в формате pcx16. Pcx16 — формат без поддержки полупрозрачности. Поэтому фон у png белый по умолчанию.
2) В Windows какнонические пути с обратными косыми чертами. "D:\Heroes 3\Mods". Для API верхнего уровня поддерживаются и прямые косые черты с целью совместимости с Unix-программами. D:/Heroes 3/Mods. Такие пути на лету преобразовываются в канонические низкоуровневыми библиотеками системы (и VFS Эры в том числе). Я использую прямые косые черты в документации, поскольку «\» — символ экранирования во многих языках программирования и на heroescommunity.com.
3) Правильный путь к файлу "..\Mods\ERA+\anim\obj%X2.gif": "anim\obj%X2.gif".
Никогда не нужно указывать папку Mods и имя мода. Так мы нарушаем работу системы модов, обращаясь к конкретному моду. Нужно обращаться к файлам так, как будто бы папки Mods не существует вообще.
4) Не исключаю багов в IF-подкомандах.
5) Для поддержки png с полупрозрачностью в вог-диалогах нужно в WoG Native Dialogs добавить поддержку файлов с расширением *.pcx, для которых создавать элемент Pcx8 или Pcx16. Первый более распространён в ресурсах игры, так что pcx8 даже круче. Либо сделать поддержку двойных расширений: '****.pcx.pcx16' преобразовывается в '****.pcx', но создаётся pcx16 элемент формы.
Всё, все игровые pcx будут поддерживаться, а любой pcx можно заменить на png на лету, поместив его в Data\Pcx\[***\***\***\]имя.png
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
26.05.2021 17:25 |
|
XEPOMAHT
Posts: 2348
|
(26.05.2021 19:02)Berserker Wrote: Эра не масштабирует png при отрисовке вообще. То есть DrawPcx16 => получаем имя pcx, находим соответствующий png, отрисоываем его часть без масштабирования.
wog native dialogs.era масштабирует. Если размер выше 100х100, то картинка уменьшается до 100х100. Но тут я сам отмасштабировал, ибо на 32х32 не будет видно ничего.
(26.05.2021 19:02)Berserker Wrote: Второе — функции загрузки pcx8/pcx16 перехватываются, создаются болванки с теми же размерами, что и png.
В случае с WND заменяющий png почему-то обрезается. Т.е. размеры изображения всё равно пушатся на функцию подготовки диалога ДО замены pcx и png, поэтому в памяти оно может и полноразмерно, но отображается всё равно в обрезанном виде, т.е. по XY из pcx, а не png.
(26.05.2021 19:02)Berserker Wrote: Третье — WND не должен быть поддерживать *.pcx картинки вообще. Покажи весь код с путями.
Ну он же ставит дефолтный pcx при отсутствии pcx, при чём по имени из скрипта, ну а pcx потом по тому же имени и подменяется на png. Значит поддержка там всё-таки есть. Но да, по путям из скрипта pcx никогда не будет найден, там в 100% будет дефолтный pcx как ни крути.
|
|
26.05.2021 19:16 |
|
Berserker
Posts: 16637
|
XEPOMAHT, WND не содержит функций для работы с изображениями вообще. Сейчас pcx расширение ещё не поддерживается WND. игрик попробует его добавить. Что произошло (предположительно):
1) WND вызывает Эровскую функцию LoadImageAsPcx16. Эра пробует найти картинку, не находит. Ранее выводилась ошибка, но Дима попросил убрать вывод ошибок. Era создаёт изображение по умолчанию 32x32 и возвращает pcx16 ресурс.
2) WND смотрит размеры pcx16 ресурса. Это 32х32. Создаёт элемент Pcx16DlgItem для диалога с именем ресурса.
3) При отображении диалога вызывается функция Pcx16DlgItem.Draw, а там DrawPcx16ToBuf, а там перехват Эры срабатывает. Эра находит png-файл и отрисовывает его вместо pcx. Вот при этой отрисовке вообще не поддерживается масштабирование. Должны отрисоваться пиксели из прямоугольной области [0; 0; 32; 32].
Что будет?
igrik добавит поддержку расширений *.pcx, *.pcx16, для которых не будет вызывать LoadImageAsPcx16, а будет вызывать LoadPcx8 или LoadPcx16 соответственно, после чего создавать Pcx8DlgItem или Pcx16DlgItem. Так заработает показ любых игровых pcx. А дальше в дело вступает Эра. Она перехватывает LoadPcx8/LoadPcx16 и, если для pcx есть png файл, создаёт болванку с размерами png, чтобы позже отрисовка png была с корректными размерами. То есть всё будет работать «из коробки».
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
|
|
26.05.2021 19:47 |
|
Berserker
Posts: 16637
|
|
27.05.2021 17:02 |
|
XEPOMAHT
Posts: 2348
|
(27.05.2021 17:02)Berserker Wrote: Поделись микропатчем, тоже применю.
Там просто 2 хука - первый сохраняет координаты, второй применяет их в воговском коде:
Code:
Hook 415AD2h, WoG_PlaceCreature, TJump; замена концовки функции SoD_HintMessage
Hook 7575A3h, Fix_PlaceCreature, TJump; исправить функцию WoG_PlaceCreature
Code:
proc WoG_PlaceCreature
mov [HintWindowX], eax ; сохранить
mov [HintWindowY], ecx ; координаты
pushad
mov eax, 7570D9h
mov ecx, 697428h
call eax
popad
push 415AF3h
ret
endp
proc Fix_PlaceCreature
push 0
push -1
push 0
push -1
push 0
push -1
push 0
push -1
push [HintWindowY]
push [HintWindowX]
mov eax, 4F6C00h
mov edx, 4
mov ecx, [ebp-38h]
call eax
push 7575B3h
ret
endp
(This post was last modified: 27.05.2021 17:13 by XEPOMAHT.)
|
|
27.05.2021 17:12 |
|
Berserker
Posts: 16637
|
|
27.05.2021 17:16 |
|