| 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: 6186
 
 | 
			| 
 
				Глянь в хелпах про EnumDisplaySettings...
			 
 Welcome!
 |  | 
	| 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: recordName: 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 |  |