XEPOMAHT, видимо ты забыл, что надо  Squares изменить массив 480h на 800h
 
Code: 
 00752B5C  | 69C0 80040000                 | imul eax,eax,480h     | 144*2*4 = 1152
  
на:
 
Code: 
 00752B5C  | 69C0 00080000                 | imul eax,eax,800h     | 256 * 2 * 4 = 2048;
  
и так везде найди imul eax,eax,480h    поменяй на 800h. Смотри мой готовый код патчинг  WERD.asm 
 
-------------------------
 MOP,  
Изменение сохранение файла формата "GM1" на "SM1". Раньше маленькая карта сохранялось в WOG данных массива размером 144х144х2х24, оставалось много неиспользуемого места. Теперь размер карты ровно размеру массива, что экономит вес.
 
Code: 
 proc WERD 
... 
 
;------------------- 
mov byte[5859D8h],0E8h;При_загрузки_игры_сохранение_файла 
mov byte[6834DEh],2Ah; 67 -> 2A; g -> *;  *.gm? 
 
mov byte[6912B9h],53h; 47 -> 53; G -> S;  
mov byte[677D93h],53h; 47 -> 53; G -> S; Нажать F5 
 
;Нажать сохранения 
mov byte[6603F1h],53h; 47 -> 53; .SM%d 
mov byte[6912B9h],53; 47 -> 53;  .SM1 
 
 
;конец 
 
mov byte[00754D56h],Option_Бесконечные_ресурсы_ИИ 
   .if ~byte [eax] 
       mov dword [682EFDh],'ENG.'; лод 
 
... 
... 
... 
endp
  
Code: 
 proc Load_Werd_Txt 
... 
 
vAlloc 524288 
 
;===============1=== 
;144 * 144 * 2 * 4=165888 
;256 * 256 * 2 * 4=524288;1 
;-------- 
;144 * 144 * 2 * (8 + 8) = 663552 
;256 * 256 * 2 * (8 + 8) = 2097152 
 
;  // Patch Squares 
  mov dword[73644Ch], eax  ;  @Squares;1 
  mov dword[73BB32h], eax  ;  @Squares;2 
  mov dword[73BE35h], eax  ;  @Squares;3 
   
  mov dword[74AA76h], eax 
   
  mov dword[75118Fh], eax  ;  @Squares;5 
  mov dword[751975h], eax  ;  @Squares;6 
  mov dword[752B68h], eax  ;  @Squares;7 
  mov dword[752B87h], eax  ;  @Squares;8 
  mov dword[752BA0h], eax  ;  @Squares;9 
  mov dword[752BBFh], eax  ;  @Squares;10 
  mov dword[752BD8h], eax  ;  @Squares;11 
  mov dword[752BF6h], eax  ;  @Squares;12 
  mov dword[752C0Fh], eax  ;  @Squares;13 
  mov dword[752C2Eh], eax  ;  @Squares;14 
  mov dword[752C47h], eax  ;  @Squares;15 
  mov dword[752C66h], eax  ;  @Squares;16 
;  // Patch Squares2 
vAlloc 2097152;eax;ecx;edx; 
  mov dword[73BB51h], eax  ;  @Squares2;1 
  mov dword[74AA98h], eax  ; 
   
  mov dword[751582h], eax  ;  @Squares2;3 
  mov dword[752472h], eax  ;  @Squares2;4 
  mov dword[752FA4h], eax  ;  @Squares2;5 
  push -1 
  push -1 
call ExtraMapSizeSquares 
 
... 
retn 
endp 
 
proc ExtraMapVar256 
  mov edi,SECOND_DIM_SIZE_256 
  mov ecx,SQUARES_SIZE_256 
  mov ebx,SECOND_DIM_SIZE2_256 
  mov edx,SQUARES2_SIZE_256 
  mov esi,256 
;    mov al,6 
ret 
endp 
 
proc ExtraMapVar144 
  mov edi,SECOND_DIM_SIZE_144 
  mov ecx,SQUARES_SIZE_144 
  mov ebx,SECOND_DIM_SIZE2_144 
  mov edx,SQUARES2_SIZE_144 
  mov esi,144 
;    mov al,2 
ret 
endp 
 
proc ExtraMapSizeSquares 
pushad 
mov eax,dword [esp+28h] 
.if dword[SquaresCache] = eax 
;  Дебаг "Равен" 
;  ПоказатьЦифрБ eax 
  jmp .ок 
.endif 
 
.if dword[esp+24h] = -1 
  call ExtraMapVar256 
.elseif dword[esp+24h] = 0 
  call ExtraMapVar144 
 
 
.elseif;dword [eax+18h]  
 
  .if eax = Size_Map_M;36 
  mov edi,SECOND_DIM_SIZE_36 
  mov ecx,SQUARES_SIZE_36 
  mov ebx,SECOND_DIM_SIZE2_36 
  mov edx,SQUARES2_SIZE_36 
  mov esi,36 
;  mov al,0 
  .elseif eax = Size_Map_S;72 
  mov edi,SECOND_DIM_SIZE_72 
  mov ecx,SQUARES_SIZE_72 
  mov ebx,SECOND_DIM_SIZE2_72 
  mov edx,SQUARES2_SIZE_72 
  mov esi,72 
;  mov al,1 
  .elseif eax = Size_Map_L;108 
  mov edi,SECOND_DIM_SIZE_108 
  mov ecx,SQUARES_SIZE_108 
  mov ebx,SECOND_DIM_SIZE2_108 
  mov edx,SQUARES2_SIZE_108 
  mov esi,108 
;  mov al,2 
  .elseif eax = Size_Map_X;144 
          call ExtraMapVar144 
;  mov edi,3 
  .elseif eax = Size_Map_H;180 
  mov edi,SECOND_DIM_SIZE_180 
  mov ecx,SQUARES_SIZE_180 
  mov ebx,SECOND_DIM_SIZE2_180 
  mov edx,SQUARES2_SIZE_180 
  mov esi,180 
;  mov al,4 
  .elseif eax = Size_Map_XH;216 
  mov edi,SECOND_DIM_SIZE_216 
  mov ecx,SQUARES_SIZE_216 
  mov ebx,SECOND_DIM_SIZE2_216 
  mov edx,SQUARES2_SIZE_216 
  mov esi,216 
;  mov al,5 
;  .elseif dword [eax+18h] = Size_Map_G;252 
  .elseif 
      call ExtraMapVar256 
;  mov edi,6 
  .endif;SizeMap 
 
.endif 
 
mov dword[SquaresCache],eax 
;  // Patch calculating Squares addresses 
  mov dword[736442h],   edi;eax; 
  mov dword[73BB28h],   edi;eax; 
  mov dword[73BE2Bh],   edi;eax; 
  mov dword[74AA6Bh],   edi;eax 
   
  mov dword[75118Ah],   ecx; 
  mov dword[751970h],   ecx; 
  mov dword[752B5Eh],   edi;eax; 
  mov dword[752B7Dh],  edi;eax; 
  mov dword[752B96h],  edi;eax; 
  mov dword[752BB5h],  edi;eax; 
  mov dword[752BCEh],  edi;eax; 
  mov dword[752BECh],   edi;eax; 
  mov dword[752C05h],  edi;eax; 
  mov dword[752C24h],   edi;eax; 
  mov dword[752C3Dh],   edi;eax; 
  mov dword[752C5Ch],   edi;eax; 
;  // Patch calculating Squares2 addresses 
  mov dword[73BB44h],  ebx; 
  mov dword[74AA8Ah],  ebx 
   
   
  mov dword[75157Dh],  edx; 
  mov dword[75246Dh],  edx; 
  mov dword[752FBDh],  edx; 
;  // Fix cycles 
  mov dword[752B14h], esi;256  ;  256; 
  mov dword[752B33h], esi;256  ;  256; 
.ок: 
popad 
 
ret 8 
endp
  
  
Size_Map_H	      = 180 
Size_Map_XH	      = 216 
Size_Map_G	      = 252 
     SECOND_DIM_SIZE_36   = 36 * 2 * 4;     SECOND_DIM_SIZE2_36  = 36 * 2 * 16;     SQUARES_SIZE_36      = 36 * 36 * 2 * 4;     SQUARES2_SIZE_36     = 36 * 36 * 2 * 16; 
     SECOND_DIM_SIZE_72   = 72 * 2 * 4;     SECOND_DIM_SIZE2_72  = 72 * 2 * 16;     SQUARES_SIZE_72      = 72 * 72 * 2 * 4;     SQUARES2_SIZE_72     = 72 * 72 * 2 * 16; 
     SECOND_DIM_SIZE_108   = 108 * 2 * 4;     SECOND_DIM_SIZE2_108  = 108 * 2 * 16;     SQUARES_SIZE_108      = 108 * 108 * 2 * 4;     SQUARES2_SIZE_108     = 108 * 108 * 2 * 16; 
     SECOND_DIM_SIZE_144   = 144 * 2 * 4;     SECOND_DIM_SIZE2_144  = 144 * 2 * 16;     SQUARES_SIZE_144      = 144 * 144 * 2 * 4;     SQUARES2_SIZE_144     = 144 * 144 * 2 * 16; 
     SECOND_DIM_SIZE_180   = 180 * 2 * 4;     SECOND_DIM_SIZE2_180  = 180 * 2 * 16;     SQUARES_SIZE_180      = 180 * 180 * 2 * 4;     SQUARES2_SIZE_180     = 180 * 180 * 2 * 16; 
     SECOND_DIM_SIZE_216   = 216 * 2 * 4;     SECOND_DIM_SIZE2_216  = 216 * 2 * 16;     SQUARES_SIZE_216      = 216 * 216 * 2 * 4;     SQUARES2_SIZE_216     = 216 * 216 * 2 * 16; 
     SECOND_DIM_SIZE_256   = 256 * 2 * 4;     SECOND_DIM_SIZE2_256  = 256 * 2 * 16;     SQUARES_SIZE_256      = 256 * 256 * 2 * 4;     SQUARES2_SIZE_256     = 256 * 256 * 2 * 16;  
Code: 
 proc При_загрузки_игры_сохранение_файла 
;Код оригинал 
mov ecx,edx 
and ecx,3 
 
;---------- 
push esi 
push dword [ebx+1060h];edx неиспольз. 
@@: 
dec esi 
.if word[esi] = '.S' | word[esi] = '.s' 
    pop edx 
    pop esi 
    push dword [edx+18h] 
    push 1 
    mov byte[NewVersion],1 
    jmp @f    ;вниз 
.elseif word[esi] = '.G' | word[esi] = '.g' 
.д: 
    pop edx 
    pop esi 
    push Size_Map_X 
    push 0 
    mov byte[NewVersion],0 
    jmp @f    ;вниз 
.endif 
dec edx 
.if edx = 0 
    jmp .д 
.endif 
jmp @b        ;вверх 
@@: 
 
    call ExtraMapSizeSquares 
 
ret 
endp
  
  
proc Загрузка_игры 
	push Размер_карты 
	push 1;S s 
	call ExtraMapSizeSquares 
.... 
endp  
proc Инструкция_карты 
 
	push Размер_карты 
	push 1;S s 
	call ExtraMapSizeSquares 
... 
endp  
; Загрузка игры, чтение данных из сейва 
proc Чтение_данных_из_сейва 
        local Search_Object_Coordinate_X:DWORD        local Search_Object_Coordinate_Y:DWORD        local Search_Object_Coordinate_L:DWORD 
 
; настройки Чата 
call Настройки_чата 
; загрузка CrAnim 
GZipRead 2985400h, 84000 
; загрузка таблицы запрета монстров 
GZipRead CRTABLE_таблица_запрета, 1000 
; загрузка альтерветок 
GZipRead Таблица_параметров_альтерветок_для_строительства, 1512 
; загрузка переменных WERD 
GZipRead SAVE_WERD_DATA, END_SAVE_WERD_DATA - SAVE_WERD_DATA 
; ЗАГРУЗКИ 
pushad 
;Дебаг "Чтение данных из сейва" 
;ЗаписьОтчетЦифра "Option_1 - ", Option_1,  0 
;ЗаписьОтчетЦифра "Option_2- ", Option_2,  1 
;ChatMessage TextBuffer 
.if Option_1 
	.if byte[NewVersion] = 0 
		mov eax,288;seek 
.elseif 
@@: 
		mov eax,seek 
	.endif 
		imul eax,2 
		mov [РаскопкиРазмерКартX2],eax ; 144*2= 288 
		imul eax,eax 
		mov [РаскопкиРазмерКартДинамическаяПамять],eax;82944 
		mov ecx,2 
		xor edx,edx 
		DIV ECX 
		mov [РаскопкиРазмерКартДинамическаяПамятьБезПодземле],eax;41472 
.elseif 
	.if byte[NewVersion] = 0 
		mov [РаскопкиРазмерКартX2],288 
		mov [РаскопкиРазмерКартДинамическаяПамять],82944 
		mov [РаскопкиРазмерКартДинамическаяПамятьБезПодземле],41472 
	.elseif 
		jmp @b 
	.endif 
 
.endif 
popad 
... 
... 
endp  
Hook 5859D8h+1, При_загрузки_игры_сохранение_файла;  EDI = .GM1 --    2E 47  
proc Генерация_закопанных_бонусов 
Code: 
 rv Таблица_закопанных_ценностей, vAlloc, 82944
  
на
 
Code: 
             rv Таблица_закопанных_ценностей, vAlloc, [РаскопкиРазмерКартДинамическаяПамять];82944
  
---
 
Code: 
 .until signed edi >= Таблица_закопанных_бонусов+82944
  
на
 
Code: 
 mov ecx,Таблица_закопанных_бонусов 
add ecx,[РаскопкиРазмерКартДинамическаяПамять] 
   .until signed edi >= ecx;82944        ;
  
...... 
endp  
Code: 
     rv esi, GetHeroStruc, Герой_проводящий_раскопки 
    movsx eax, [esi + _Hero_.X] 
    imul eax, 2 
    movsx ecx, [esi + _Hero_.Y] 
    imul ecx, 288 
    movsx ebx, [esi + _Hero_.L] 
    imul ebx, 41472 
    add ebx, eax 
    add ebx, ecx 
    mov eax, Таблица_закопанных_ценностей
  
на
 
Code: 
     rv esi, GetHeroStruc, Герой_проводящий_раскопки 
    movsx eax, [esi + _Hero_.X] 
    imul eax, 2 
    movsx ecx, [esi + _Hero_.Y] 
    imul ecx, [РаскопкиРазмерКартX2];288 
    movsx ebx, [esi + _Hero_.L] 
    imul ebx, [РаскопкиРазмерКартДинамическаяПамятьБезПодземле];41472 
    add ebx, eax 
    add ebx, ecx    ; координат 6082 
mov eax,ebx 
mov [КоординатРаскопка],eax 
    mov eax, Таблица_закопанных_ценностей
  
 
на
 
Code: 
     mov ebx, [РаскопкиРазмерКартДинамическаяПамять];82944
  
  
	     
Code: 
 GZipWrite Таблица_закопанных_ценностей, 82944
  
на 	   
	
	     
Code: 
 GZipWrite Таблица_закопанных_ценностей, [РаскопкиРазмерКартДинамическаяПамять];82944
  
  
 
			 
			
			
  
 
- Heroes 3 MoP Fan-Patch 3.14
 
- MoP Key Delete RandomMap
 
- TavernVideos BIK ASM
  
			
				
(This post was last modified: 20.10.2019 19:50 by myoffice91.)
 
			 
		 |