etoprostoya
Posts: 1809
|
|
10.03.2010 02:20 |
|
SAG
Posts: 173
|
(09.03.2010 23:43)baratorch Wrote: Ну а добавлять кнопки и надписи можно и нужно геройскими средствами. Так буду делать я.
можно подробнее расписать весь процесс?
|
|
10.03.2010 14:46 |
|
etoprostoya
Posts: 1809
|
Посмотрел я ту тормознутую функцию... Там в цикле для каждого пикселя происходит три деления (видимо, для каждого компонента цвета), а деление, как известно, самая тормознутая операция всех времён и народов компьютеров.
Но это ещё пол-беды. Настоящая беда программистов из NWC в том, что это деление происходит примерно вот так:
a1 = 7FFFFFFFh/A1;
for(int x = 0; x < X; x++)
{ for(int y = 0; y < Y; y++) { mass1[x*Y+y] = mass2[x*Y+y]/a1; }
}
Заметили, что сначала находится обратная величина, а потом на эту обратную идёт деление? Этот алгоритм можно оптимизировать и скорость его увеличится в разы, т.к. вместо деления нужно будет использовать умножение, плюс коррекция (а может и без неё прокатит). Если убрать начальные проверки длины и высоты на 0, то можно даже, наверное, вместить в имеющийся размер.
Вот тока я никогда не правил екзешники.
|
|
10.03.2010 15:07 |
|
GrayFace
Posts: 1233
|
(06.03.2010 01:07)baratorch Wrote: уже все сделал )
загруженный pcx8:
+36 - ширина
+40 - высота
+44 - размер строки (сканлайна)
+48 - указатель на массив пикселей
+80 - палитра - массив из 256 16-битных RGB565 цветов.
на всякий случай я расположил массив пикселей сразу за палитрой, хотя его вроде можно куда угодно засунуть. массив пикселей такой же как у bmp8, только строки в обратном (т.е. в прямом ) порядке.
это все что нужно геройской функции чтоб нарисовать pcx8
Там еще есть обычная 3-байтовая палитра, которая вряд ли используется. Про счетчик ссылок и имя не забывай.
00000000 _Pcx_ struc ; (sizeof=0x56C)
00000000 VTable dd ?
00000004 Name db 12 dup(?) ; string©
00000010 field_10 dd ?
00000014 LodItemType dd ? ; = 10 (always?)
00000018 RefCount dd ?
0000001C BufSize dd ? ; w*h
00000020 PicSize dd ? ; w*h
00000024 Width dd ? ; struct offset
00000028 Height dd ?
0000002C ScanlineSize dd ?
00000030 Buffer dd ?
00000034 field_34 dd ?
00000038 field_38 dd ?
0000003C field_3C dd ?
00000040 field_40 dd ?
00000044 field_44 dd ?
00000048 field_48 dd ?
0000004C field_4C dd ?
00000050 DevicePalette dw 256 dup(?)
00000250 Palette _Palette_ ?
0000056C _Pcx_ ends
|
|
10.03.2010 19:21 |
|
baratorch
Posts: 197
|
GrayFace, что за счетчик ссылок?
функция, которая рисует pcx8, обращается только к Height, ScanlineSize, Buffer и DevicePalette, всё остальное не используется.
что за 00000000 VTable? Мне в это поле понадобилось поместить указатель на [(адрес пустой функции) - 4]. В оригинальном PCX вместо пустой функции - деструктор PCXa. Пустышку я подкладываю по причине устройства моей модификации:
Свои ХайРез-PCXы я создаю и конструирую в момент DLL_PROCESS_ATTACH. Затем у меня стоит Хук на геройской функции загрузки PCXa: эта функция загрузки при нужном имени сразу возвращает указатель на мой уже загруженный PCX. А уничтожаются мои PCXы при DLL_PROCESS_DETACH.
(10.03.2010 14:46)SAG Wrote: (09.03.2010 23:43)baratorch Wrote: Ну а добавлять кнопки и надписи можно и нужно геройскими средствами. Так буду делать я.
можно подробнее расписать весь процесс?
'процесса' нету пока. Я над этим работаю.
|
|
10.03.2010 21:04 |
|
SAG
Posts: 173
|
(10.03.2010 21:04)baratorch Wrote: 'процесса' нету пока. Я над этим работаю.
ждемс...это важно. для нормальной игры надо сделать 3-5 кнопок если не больше
|
|
11.03.2010 18:29 |
|
baratorch
Posts: 197
|
хаха! 'Человеческие' новые кнопки в героях!
добавил 3 кнопки на адвенча менеджер и повесил на них 3 функции из диалога адвенча-опшнз. Так же на них можно и подсказки в статус-баре повесить и подсказки-мессаджи по правому клику.
Не надо коментить их расположение, картинки, и то что на них повесил, это всего лишь показательный пример того что могу.
На экран приключений игра позволяет поместить сколько угодно кнопок (думаю в другие окна аналогично).
скачать:
http://sites.google.com/site/heroes3hd/f...ects=0&d=1
инструкция:
распаковать в папку с игрой с установленным ХайРезом версии 0.95 beta 4.
Изменить в файле HiRez.ini разрешенние на нужное (на всякий: кодировка файла должна быть ANSI, разделитель ширины и высоты - латинская малая 'х')
Запускать Heroes3_HD_0.99a.exe
(This post was last modified: 11.03.2010 23:43 by baratorch.)
|
|
11.03.2010 23:41 |
|
baratorch
Posts: 197
|
Подскажите пожалуйста, кто знает. Как средствами Win32 API получить список всех разрешений экрана поддерживаемых системой?
|
|
13.03.2010 23:16 |
|
Efrit
Posts: 6183
|
Глянь в хелпах про EnumDisplaySettings...
Welcome to the soldier side,
Where there is no one here but me.
People all grow up to die,
There is no one here but me...
|
|
13.03.2010 23:26 |
|
etoprostoya
Posts: 1809
|
Список разрешений экрана только через драйвер видеокарты (и\или монитора). То есть только через DirectX (или OpenGL).
Efrit прав. Нужно перебирать моды в EnumDisplaySettings и получать список возможных разрешений, пока функция возвращает не ноль.
(This post was last modified: 14.03.2010 00:28 by etoprostoya.)
|
|
13.03.2010 23:49 |
|
Дьякон
Posts: 395
|
Поделитесь методами отлова участка кода, который выделил определенную память. Может есть какой-то простой способ?
Страус труп (с) Бьерн
|
|
23.03.2010 22:39 |
|
Дьякон
Posts: 395
|
Хм... спасибо большое, попробую. Довольно логично ))))))))))))))
Страус труп (с) Бьерн
|
|
25.03.2010 22:21 |
|
etoprostoya
Posts: 1809
|
(26.03.2010 02:19)Berserker Wrote: PLodhead = ^Lodhead; TLodStruct = packed record // тип для чтения информации о файле NameFile: array[1..16] of char; // Имя файла. 0 в конце обязателен. StartSingleFile: Longint; // начало файла в лоде. LenSingleFile: Longint; // длина файла вне архива Unk1: Longint; // Тип файла RealSize: Longint; // размер запакованного файла, 0 если файл не запакован. end;
Нашёл такое описание:
Quote:FATRecord: record Name: array[1..12]of char; //Имя файла. Unknown: array[1..4] of char; //Возможно мусор. Offset: LongInt; //Смещение до файла. Size: LongInt; //Размер файла. Unknown: array[1..4] of char; //Возможно мусор. CompressedSize: LongInt; //Сжатый размер файла.
end;
Интересно, значит ли это, что файлы в лоде могут иметь имя длиной до 15 символов (с точкой и расширением), вместо 12 стандартных?
|
|
26.04.2010 00:31 |
|