| 
 
				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	      = 180Size_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 47proc Генерация_закопанных_бонусов 
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.14MoP Key Delete RandomMapTavernVideos BIK ASM 
				
(This post was last modified: 20.10.2019 19:50 by myoffice91.)
 |