Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
			
			 
			
				 (27.05.2021 17:12)XEPOMAHT Wrote:   (27.05.2021 17:02)Berserker Wrote:  Поделись микропатчем, тоже применю. 
 
Там просто 2 хука - первый сохраняет координаты, второй применяет их в воговском коде: 
 
Code: 
 Hook 415AD2h, WoG_PlaceCreature,        TJump; замена концовки функции SoD_HintMessage 
Hook 7575A3h, Fix_PlaceCreature,        TJump; исправить функцию WoG_PlaceCreature
  
 
Code: 
 proc WoG_PlaceCreature 
    mov [HintWindowX], eax ; сохранить 
    mov [HintWindowY], ecx ; координаты 
    pushad 
    mov eax, 7570D9h 
    mov ecx, 697428h 
    call eax 
    popad 
    push 415AF3h 
    ret 
endp 
 
proc Fix_PlaceCreature 
    push 0 
    push -1 
    push 0 
    push -1 
    push 0 
    push -1 
    push 0 
    push -1 
    push [HintWindowY] 
    push [HintWindowX] 
    mov eax, 4F6C00h 
    mov edx, 4 
    mov ecx, [ebp-38h] 
    call eax 
    push 7575B3h 
    ret 
endp
  
 
Обошёлся одним перехватчиком (координаты из стека взять можно):
 
Code: 
 function Hook_ZvsPlaceCreature_End (Context: ApiJack.PHookContext): longbool; stdcall; 
begin 
  PatchApi.Call(FASTCALL_, Ptr($4F6C00), [pinteger(Context.EBP - $38)^, 4, pinteger(Context.EBP + 60)^, pinteger(Context.EBP + 64)^, -1, 0, -1, 0, -1, 0, -1, 0]); 
 
  result          := false; 
  Context.RetAddr := Ptr($7575B3); 
end; 
 
(* Fix adventure map RMB popup coordinates: use tile coordinates, not centering *) 
  ApiJack.HookCode(Ptr($7575A3), @Hook_ZvsPlaceCreature_End);
  
			 
			
			
  
Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов 
Поддержать проект 
			
		 |  
	 
 | 
	| 17.09.2021 01:27 | 
	
		
	 | 
	
		
		XEPOMAHT 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 2481 
	
		
	 | 
	
		
			
			 
			
				 (17.09.2021 14:32)Berserker Wrote:  Да тут в любом случае не идеально выходит. 
Идеально - подменить всю воговскую функцию целиком вместе с её вызовом, на который уже напрямую пускать координаты подсказки прямо из содовской функции. Но это вряд ли кто-то будет делать (в MoP 2, насколько помню, эта функция вообще стёрта, т.к. все подсказки для карты выводятся родным для игры содовским кодом без костылей).
  (17.09.2021 14:32)Berserker Wrote:  Хотя я бы не считал функцию PlaceCreature самостоятельной, так как она обращается к ECX и EDI, а последний нарушает все соглашения о вызовах. 
Лично я не держусь за соглашения о вызовах на жестко привязанных "к месту" функциях, которые с 1% вероятностью могут вызываться сторонним кодом. Например в MoP сотни, если уже не тысячи, функций с нестандартными соглашениями, как непосредственно моповские, так и модифицированные содовские. Часто приходится избавляться от соглашения ради снижения размера кода игры, чтобы новый код влез в содовское пространство функции. В Тифоне такая роскошь конечно непозволительна.   
			 
			
			
			
		 |  
	 
 | 
	| 17.09.2021 15:02 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 17.09.2021 17:25 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 17.09.2021 18:56 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 17.09.2021 19:49 | 
	
		
	 | 
	
		
		XEPOMAHT 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 2481 
	
		
	 | 
	
		
			
			 
			
				 (17.09.2021 19:49)Berserker Wrote:  XEPOMAHT, в Эра плюс все DL-диалоги по координатам последнего щелчка отображаются? 
ERM-функция 99 в ERA+ это делает.
  (17.09.2021 19:49)Berserker Wrote:  Про перехват по какому именно адресу идёт речь в Эре? 
Извини, спутал с эровским хуком на хинт.
 
А хук на кастомные подсказки к объектам лучше ставить сразу после соотвествующего хука в Тифоне:
 
Code: 
 ; Использование реального подтипа для подсказок по ПКМ: 
      Hook 0x413912, MouseHintControl0, TJump; запоминание истинного подтипа в Temp
  
Там сразу пишешь в edi адрес на текст подсказки (ну или z-переменной, в которой эта подсказка записана) и возвращаешь код в 4159A0 - игра сама скопирует текст в буфер и выведет подсказку без всяких костылей. 
 Экраны Форджа и Бастиона в ERA+
 
Графика пока 8-битная, но в будущем оба города будут использовать 32-битную графику, т.е. станет непосредственно использоваться оригинальные PNG-файлы вместо def (т.к. и Фордж и Бастион делались изначально в 32-битном виде, а потом уже конвертировались в 8-битные def).
  
 
			 
			
			
			
		 |  
	 
 | 
	| 17.09.2021 20:09 | 
	
		
	 | 
	
		
		Berserker 
 
 
		
		
		
			
			
 
 
			
 
 
			
Posts: 16788 
	
		
	 | 
	
		
 | 
	| 23.09.2021 10:29 | 
	
		
	 |