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

Full Version: Программирование ВОГ
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Pages: 1 2 3 4 5 6 7 8 9
Спасибо, посмотрю.
(09.03.2010 23:43)baratorch Wrote: [ -> ]Ну а добавлять кнопки и надписи можно и нужно геройскими средствами. Так буду делать я.
можно подробнее расписать весь процесс?
Посмотрел я ту тормознутую функцию... Там в цикле для каждого пикселя происходит три деления (видимо, для каждого компонента цвета), а деление, как известно, самая тормознутая операция всех времён и народов компьютеров.
Но это ещё пол-беды. Настоящая беда программистов из 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, то можно даже, наверное, вместить в имеющийся размер.
Вот тока я никогда не правил екзешники.
(06.03.2010 01:07)baratorch Wrote: [ -> ]уже все сделал )

загруженный pcx8:
+36 - ширина
+40 - высота
+44 - размер строки (сканлайна)
+48 - указатель на массив пикселей
+80 - палитра - массив из 256 16-битных RGB565 цветов.
на всякий случай я расположил массив пикселей сразу за палитрой, хотя его вроде можно куда угодно засунуть. массив пикселей такой же как у bmp8, только строки в обратном (т.е. в прямом Sm ) порядке.
это все что нужно геройской функции чтоб нарисовать 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
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)baratorch Wrote: [ -> ]'процесса' нету пока. Я над этим работаю.
ждемс...это важно. для нормальной игры надо сделать 3-5 кнопок если не больше
хаха! 'Человеческие' новые кнопки в героях!

добавил 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
Подскажите пожалуйста, кто знает. Как средствами Win32 API получить список всех разрешений экрана поддерживаемых системой?
Глянь в хелпах про EnumDisplaySettings...
Список разрешений экрана только через драйвер видеокарты (и\или монитора). То есть только через DirectX (или OpenGL).

Efrit прав. Нужно перебирать моды в EnumDisplaySettings и получать список возможных разрешений, пока функция возвращает не ноль.
Поделитесь методами отлова участка кода, который выделил определенную память. Может есть какой-то простой способ?
Я просто ставил хук в malloc и запоминал адрес, размер, адрес возврата. Код есть для отдельной dll.
Хм... спасибо большое, попробую. Довольно логично ))))))))))))))
(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 стандартных?
Да.
Pages: 1 2 3 4 5 6 7 8 9
Reference URL's