Current time: 21.04.2024, 02:57 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Программирование ВОГ
Author Message
etoprostoya Offline

Posts: 1809
Post: #76

Спасибо, посмотрю.
10.03.2010 02:20
Find all posts by this user Quote this message in a reply
SAG Offline

Posts: 173
Post: #77

(09.03.2010 23:43)baratorch Wrote:  Ну а добавлять кнопки и надписи можно и нужно геройскими средствами. Так буду делать я.
можно подробнее расписать весь процесс?
10.03.2010 14:46
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #78

Посмотрел я ту тормознутую функцию... Там в цикле для каждого пикселя происходит три деления (видимо, для каждого компонента цвета), а деление, как известно, самая тормознутая операция всех времён и народов компьютеров.
Но это ещё пол-беды. Настоящая беда программистов из 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
Find all posts by this user Quote this message in a reply
GrayFace Offline
Forum Moderators

Posts: 1233
Post: #79

(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
10.03.2010 19:21
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #80

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
Find all posts by this user Quote this message in a reply
SAG Offline

Posts: 173
Post: #81

(10.03.2010 21:04)baratorch Wrote:  'процесса' нету пока. Я над этим работаю.
ждемс...это важно. для нормальной игры надо сделать 3-5 кнопок если не больше
11.03.2010 18:29
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #82

хаха! 'Человеческие' новые кнопки в героях!

добавил 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
Find all posts by this user Quote this message in a reply
baratorch Offline

Posts: 197
Post: #83

Подскажите пожалуйста, кто знает. Как средствами Win32 API получить список всех разрешений экрана поддерживаемых системой?
13.03.2010 23:16
Find all posts by this user Quote this message in a reply
Efrit Offline
Administrators

Posts: 6183
Post: #84

Глянь в хелпах про 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
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #85

Список разрешений экрана только через драйвер видеокарты (и\или монитора). То есть только через DirectX (или OpenGL).

Efrit прав. Нужно перебирать моды в EnumDisplaySettings и получать список возможных разрешений, пока функция возвращает не ноль.
(This post was last modified: 14.03.2010 00:28 by etoprostoya.)
13.03.2010 23:49
Find all posts by this user Quote this message in a reply
Дьякон Offline

Posts: 392
Post: #86

Поделитесь методами отлова участка кода, который выделил определенную память. Может есть какой-то простой способ?


Страус труп (с) Бьерн
23.03.2010 22:39
Find all posts by this user Quote this message in a reply
GrayFace Offline
Forum Moderators

Posts: 1233
Post: #87

Я просто ставил хук в malloc и запоминал адрес, размер, адрес возврата. Код есть для отдельной dll.
25.03.2010 14:17
Find all posts by this user Quote this message in a reply
Дьякон Offline

Posts: 392
Post: #88

Хм... спасибо большое, попробую. Довольно логично ))))))))))))))


Страус труп (с) Бьерн
25.03.2010 22:21
Find all posts by this user Quote this message in a reply
etoprostoya Offline

Posts: 1809
Post: #89

(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
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16486
Post: #90

Да.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
26.04.2010 00:33
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group