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.)
|