etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				Ну тогда сами скажите откуда берётся резервирование ECX (EDX не был упомянут).
			 
			
			
			
		 |  
	 
 | 
	| 04.03.2010 01:02 | 
	
		
	 | 
	
		
		GrayFace 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 1233 
	
		
	 | 
	
		
			
			 
			
				 (03.03.2010 23:59)baratorch Wrote:  Мой патчер из bmp кусочков склеивал картинку под нужное разрешение, и сохранял ее в формате Zsoft PCX в папке Дата. А теперь при переходе на Длл смысла сохранять картинку в файл нет. Нужно чтобы ее клеила Длл и конвертила в формат загруженного героями PCX. В этом формате я вроде бы разобрался, у него вроде как палитра записана 16-ти битными цветами, кто знает какой там формат цвета - 565, 4444 или че другое? 
55ACAE читает структуру {size, width, height: int}, где size - размер буфера картинки (width*height). 
55ACD8 читает буфер картинки (содержит все строки подряд, начиная с 0). 
55ACFA читает палитру, по 3 байта на цвет. 
Проще всего подменить их + можно запретить в 55AA9A загрузку тех битмапок, которые ты генерируешь.
			  
			
			
			
		 |  
	 
 | 
	| 04.03.2010 23:43 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				спасибо, но я пойду своим путем. Он более правильный, т.к. мне в результате понадобится лишь подменять указатель на загруженный РСХ8. 
 
я посмотрел на функцию 44F940 - она рисует загруженный PCX 8 bit на геройскую ~поверхность~ , по ней довольно просто определил структуру уже загруженного PCX8. единственное чего я пока не знаю, это в каков формат 16-битового цвета в героях. Ну это не страшно, найду опытным путем.
			 
			
			
			
		 |  
	 
 | 
	| 05.03.2010 21:48 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
 | 
	| 05.03.2010 21:51 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 05.03.2010 21:58 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				Ну я с 565 и начну, просто он еще бывает 4444, или какой-нить экзотический 5551.
			 
			
			
			
		 |  
	 
 | 
	| 05.03.2010 22:52 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 06.03.2010 00:22 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				уже все сделал ) 
загруженный pcx8:  
+36 - ширина 
+40 - высота 
+44 - размер строки (сканлайна) 
+48 - указатель на массив пикселей 
+80 - палитра - массив из 256 16-битных RGB565 цветов. 
на всякий случай я расположил массив пикселей сразу за палитрой, хотя его вроде можно куда угодно засунуть. массив пикселей такой же как у bmp8, только строки в обратном (т.е. в прямом    ) порядке. 
это все что нужно геройской функции чтоб нарисовать pcx8
			  
			
			
			
				
(This post was last modified: 07.03.2010 01:25 by baratorch.)
 
			 
		 |  
	 
 | 
	| 06.03.2010 01:07 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				блин я ж теперь знаю как рисовать на геройскую поверхность, этож можно и альфаблендинг и обычные шрифты со сглаживанием, и какие угодно фильтры применить..  
Никто еще не делал шрифты-мод?   
Думаю для ХД это актуально.
			  
			
			
			
		 |  
	 
 | 
	| 06.03.2010 01:26 | 
	
		
	 | 
	
		
		SAG 
 
 
		
		
		
			
			
			
 
 
			
Posts: 173 
	
		
	 | 
	
		
			
			 
			
				я рисовал на геройскую поверхность через GetDC, но она разумеется сразу перерисовывается, так что ищу путь сделать хук на WM_Paint. Правда, неясно как замедлится работа приложения из за этого. Было бы круто рисовать сразу на DirectX поверхность, если можешь то дай ее handle. 
Практическое применение - создать несколько новых нажимаемых кнопок на карте, статических надписей и т.д. 
Шрифты меня вполне устраивают ,альфаблендинг - пока слабо представляю зачем он может понадобиться.
			 
			
			
			
		 |  
	 
 | 
	| 09.03.2010 14:26 | 
	
		
	 | 
	
		
		gamecreator 
 
 
		
		
		
			
			
			
 
 
			
Posts: 7107 
	
		
	 | 
	
		
 | 
	| 09.03.2010 17:52 | 
	
		
	 | 
	
		
		feanor 
 
 
		
		
		
			
			
			 
			
Posts: 624 
	
		
	 | 
	
		
			
			 
			
				Quote:создать несколько новых нажимаемых кнопок на карте 
зачем для этого изврат с поверхностями? 
МОР писал, что лишние кнопки можно в экзешнике нарастить.
			  
			
			
			
		 |  
	 
 | 
	| 09.03.2010 20:21 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				Я очень слабо знаком с DirectX, но если я правильно понял внутренности графического движка героев, то я не очень понимаю зачем героям DirectDraw, ибо все в героях рисуется собственными функциями  на собственные "поверхности" (то есть все операции в оперативе и с помощью CPU), и только самый последний готовый геройский БэкБуфер летит на экран посредством функцй DirectDraw.  
 
Функция 0x603190 как раз осуществляет этот полет( "поверхность" - в ecx, и 4 аргумента определяют прямоугольник, который должен нарисоваться на экране) к тому же эта функция рисует курсор мыши (теми же геройскими средствами) перед тем как отобразить прямоугольник "поверхности" на экране. 
 
Более того, некоторые графические фильтры в героях ('засерение' карты загадки, окрашивание прямоугольников с числом монстров на поле боя) реализованы через флоатин'-поинт операции, т.е они жутко медленные. Я для прикола применял эти фильтры для всей геройской картинки - игра сильно тормозила (в хайрезе) на 3ГГц CPU. 
 
Геройский бэкбуфер - 0x6992d0, не знаю ДиректДравный ли это Сёрфис, или собственный геройский формат.  
Функция 0x603190 в героях вызывается только с этой 0x6992d0 поверхностью. 
 
Ну а добавлять кнопки и надписи можно и нужно геройскими средствами. Так буду делать я.
			 
			
			
			
				
(This post was last modified: 09.03.2010 23:49 by baratorch.)
 
			 
		 |  
	 
 | 
	| 09.03.2010 23:43 | 
	
		
	 | 
	
		
		etoprostoya 
 
 
		
		
		
			
			
			 
			
Posts: 1809 
	
		
	 | 
	
		
			
			 
			
				 (09.03.2010 23:43)baratorch Wrote:  Более того, некоторые графические фильтры в героях ('засерение' карты загадки, окрашивание прямоугольников с числом монстров на поле боя) реализованы через флоатин'-поинт операции, т.е они жутко медленные. Я для прикола применял эти фильтры для всей геройской картинки - игра сильно тормозила (в хайрезе) на 3ГГц CPU. 
А можно узнать адрес этой тормознутой функции-фильтра "засерения"?
			  
			
			
			
		 |  
	 
 | 
	| 10.03.2010 00:51 | 
	
		
	 | 
	
		
		baratorch 
 
 
		
		
		
			
			
			 
			
Posts: 197 
	
		
	 | 
	
		
			
			 
			
				int __thiscall sub_44E610(int this_ecx_surface, int x, int y, int width, int height, float a6, float a7) 
 
от a6 и a7 зависит что будет делать функция с прямоугольником изображения - засерит, закраснит, или что другое нехорошее сделает... 
 
помимо того что в ней куча флоатин-поинт вычислений над каждым пикселем, так еще и if-ы и switch на каждый пиксель.
			 
			
			
			
				
(This post was last modified: 10.03.2010 02:15 by baratorch.)
 
			 
		 |  
	 
 | 
	| 10.03.2010 02:13 | 
	
		
	 |