Current time: 16.02.2025, 22:16 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: 6185
Post: #84

Глянь в хелпах про EnumDisplaySettings...


Welcome!
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: 395
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: 395
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: 16720
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-2025 MyBB Group