mirror of
https://gitlab.com/hashborgir/plugy.git
synced 2024-11-30 12:36:02 +00:00
208 lines
5.9 KiB
C++
208 lines
5.9 KiB
C++
/*=================================================================
|
||
File created by Yohann NICOLAS.
|
||
Add support 1.13d by L'Autour.
|
||
|
||
Changing the current save path.
|
||
|
||
=================================================================*/
|
||
|
||
#include "savePath.h"
|
||
#include "common.h"
|
||
#include "error.h"
|
||
#include "d2functions.h"
|
||
|
||
char* savePath = NULL;
|
||
bool active_changingSavePath = false;
|
||
|
||
|
||
FCT_ASM( changeSavePath )
|
||
PUSH EDI
|
||
PUSH EDX
|
||
PUSH ESI
|
||
MOV EDI,DWORD PTR DS:[savePath]
|
||
XOR AL,AL
|
||
CLD
|
||
OR ECX,0xFFFFFFFF
|
||
REPNE SCAS BYTE PTR ES:[EDI]
|
||
NOT ECX
|
||
SUB EDI,ECX
|
||
XCHG EDI,ESI
|
||
CMP BYTE PTR [ESI+1],':'
|
||
JE END_CHANGESP
|
||
//RELATIVE_PATH:
|
||
MOV EDX,ECX
|
||
OR ECX,0xFFFFFFFF
|
||
REPNE SCAS BYTE PTR ES:[EDI]
|
||
DEC EDI
|
||
CMP BYTE PTR [EDI-1],'\\'
|
||
JE NEXT
|
||
MOV BYTE PTR [EDI],'\\'
|
||
INC EDI
|
||
NEXT:
|
||
MOV ECX,EDX
|
||
END_CHANGESP:
|
||
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
|
||
POP ESI
|
||
POP EDX
|
||
POP EDI
|
||
PUSH ESI
|
||
CALL EBP
|
||
CMP EAX,-1
|
||
RETN
|
||
}}
|
||
|
||
FCT_ASM( changeSavePath_111 )
|
||
PUSH EAX
|
||
PUSH EDI
|
||
PUSH EDX
|
||
PUSH ESI
|
||
MOV EDI,DWORD PTR DS:[savePath]
|
||
XOR AL,AL
|
||
CLD
|
||
OR ECX,0xFFFFFFFF
|
||
REPNE SCAS BYTE PTR ES:[EDI]
|
||
NOT ECX
|
||
SUB EDI,ECX
|
||
XCHG EDI,ESI
|
||
CMP BYTE PTR [ESI+1],':'
|
||
JE END_CHANGESP
|
||
//RELATIVE_PATH:
|
||
MOV EDX,ECX
|
||
OR ECX,0xFFFFFFFF
|
||
REPNE SCAS BYTE PTR ES:[EDI]
|
||
DEC EDI
|
||
CMP BYTE PTR [EDI-1],'\\'
|
||
JE NEXT
|
||
MOV BYTE PTR [EDI],'\\'
|
||
INC EDI
|
||
NEXT:
|
||
MOV ECX,EDX
|
||
END_CHANGESP:
|
||
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
|
||
POP ESI
|
||
POP EDX
|
||
POP EDI
|
||
POP EAX
|
||
CMP EAX,-1
|
||
JE DONOT_JMP
|
||
ADD DWORD PTR SS:[ESP],5
|
||
DONOT_JMP:
|
||
RETN
|
||
}}
|
||
|
||
FCT_ASM ( forCreateSavePath )
|
||
PUSH EDI
|
||
MOV EDI,DWORD PTR DS:[savePath]
|
||
MOV ECX,EDI
|
||
CMP BYTE PTR DS:[EDI+1],':'
|
||
JNZ END_CREATESP
|
||
PUSH ESI
|
||
XOR AL,AL
|
||
CLD
|
||
OR ECX,0xFFFFFFFF
|
||
REPNE SCAS BYTE PTR ES:[EDI]
|
||
NOT ECX
|
||
SUB EDI,ECX
|
||
XCHG EDI,ESI
|
||
REP MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
|
||
POP ESI
|
||
END_CREATESP:
|
||
POP EDI
|
||
MOV DWORD PTR SS:[ESP+8],ECX
|
||
JMP D2Storm503
|
||
}}
|
||
|
||
|
||
|
||
void Install_ChangingSavePath()
|
||
{
|
||
static int isInstalled = false;
|
||
if (isInstalled) return;
|
||
|
||
log_msg("Patch Fog for change the save path. (changingSavePath)\n");
|
||
|
||
if (version_Fog >= V111)
|
||
{
|
||
// Appel de notre fct d'ajout d'un sous-r<>pertoire
|
||
mem_seek R7(Fog, 000, 000, 000, 185F6, 1C106, 1F086, 17F86, 1E146);
|
||
memt_byte( 0x83 ,0xE8); // CALL changeSavePath
|
||
MEMT_REF4( 0x0575FFF8, changeSavePath_111);
|
||
//6FF685F6 . 83F8 FF CMP EAX,-1
|
||
//6FF685F9 . 75 05 JNZ SHORT fog.6FF68600
|
||
//6FF6C106 . 83F8 FF CMP EAX,-1
|
||
//6FF6C109 . 75 05 JNZ SHORT fog.6FF6C110
|
||
//6FF6F086 . 83F8 FF CMP EAX,-1
|
||
//6FF6F089 . 75 05 JNZ SHORT Fog.6FF6F090
|
||
//6FF67F86 . 83F8 FF CMP EAX,-1
|
||
//6FF67F89 . 75 05 JNZ SHORT Fog.6FF67F90
|
||
//6FF6E146 . 83F8 FF CMP EAX,-1
|
||
//6FF6E149 . 75 05 JNZ SHORT Fog.6FF50F64
|
||
|
||
// Pour cr<63>er le bon chemin de sauvegarde
|
||
mem_seek R7(Fog, 000, 000, 000, 18616, 1C126, 1F0A6, 17FA6, 1E166);
|
||
MEMJ_REF4( D2Storm503, forCreateSavePath);
|
||
//6FF68615 . E8 A246FFFF CALL <JMP.&Storm.#503>
|
||
//6FF6C125 . E8 C20BFFFF CALL <JMP.&Storm.#503>
|
||
//6FF6F0A5 . E8 34DDFEFF CALL <JMP.&Storm.#503>
|
||
//6FF67FA5 . E8 504EFFFF CALL <JMP.&Storm.#503>
|
||
//6FF6E165 . E8 6AEBFEFF CALL <JMP.&Storm.#503>
|
||
|
||
|
||
// Remove registry update
|
||
mem_seek R7(Fog, 000, 000, 000, 1861A, 1C12A, 1F0AA, 17FAA, 1E16A);
|
||
memt_byte( 0x56 ,0xEB); // JMP SHORT fog.6FF6862C
|
||
memt_byte( 0x6A ,0x10); //
|
||
memt_byte( 0x00 ,0x90); // NOP
|
||
//6FF6861A . 56 PUSH ESI
|
||
//6FF6861B . 6A 00 PUSH 0
|
||
//6FF6861D . 68 7C7BF76F PUSH fog.6FF77B7C ; ASCII "Save Path"
|
||
//6FF68622 . 68 2876F76F PUSH fog.6FF77628 ; ASCII "Diablo II"
|
||
//6FF68627 . E8 1A47FFFF CALL <JMP.&Storm.#425>
|
||
//6FF6C12A . 56 PUSH ESI
|
||
//6FF6C12B . 6A 00 PUSH 0
|
||
//6FF6C12D . 68 BC73F76F PUSH fog.6FF773BC ; ASCII "Save Path"
|
||
//6FF6C132 . 68 C873F76F PUSH fog.6FF773C8 ; ASCII "Diablo II"
|
||
//6FF6C137 . E8 E60BFFFF CALL <JMP.&Storm.#425>
|
||
//6FF6F0AA . 56 PUSH ESI
|
||
//6FF6F0AB . 6A 00 PUSH 0
|
||
//6FF6F0AD . 68 D466F76F PUSH Fog.6FF766D4 ; ASCII "Save Path"
|
||
//6FF6F0B2 . 68 E066F76F PUSH Fog.6FF766E0 ; ASCII "Diablo II"
|
||
//6FF6F0B7 . E8 58DDFEFF CALL <JMP.&Storm.#425>
|
||
//6FF67FAA . 56 PUSH ESI
|
||
//6FF67FAB . 6A 00 PUSH 0
|
||
//6FF6E16A . 56 PUSH ESI
|
||
//6FF6E16B . 6A 00 PUSH 0
|
||
|
||
} else {
|
||
|
||
// Appel de notre fct d'ajout d'un sous-r<>pertoire
|
||
mem_seek( (DWORD)D2FogGetSavePath + 0x28);//6FF61928-6FF50000
|
||
memt_byte( 0x56 ,0x90); // NOP
|
||
memt_byte( 0xFF ,0xE8); // CALL changeSavePath
|
||
MEMT_REF4( 0xFFF883D5, changeSavePath);
|
||
//6FF61928 56 PUSH ESI
|
||
//6FF61929 FFD5 CALL EBP
|
||
//6FF6192B 83F8 FF CMP EAX,-1
|
||
|
||
// Pour cr<63>er le bon chemin de sauvegarde
|
||
mem_seek( (DWORD)D2FogGetSavePath + 0xBD);//6FF619BC
|
||
MEMJ_REF4( D2Storm503, forCreateSavePath);
|
||
//6FF619BC . E8 5D2A0000 CALL <JMP.&Storm.#503>
|
||
|
||
// Remove registry update
|
||
mem_seek( (DWORD)D2FogGetSavePath + 0xC1);//6FF619C1-6FF50000
|
||
memt_byte( 0x56 ,0xEB); // JMP SHORT FOG.6FF619D2
|
||
memt_byte( 0x53 ,0x0F); //6FF619C3-6FF619D2
|
||
//6FF619C1 56 PUSH ESI
|
||
//6FF619C2 53 PUSH EBX
|
||
//6FF619C3 68 A877F76F PUSH Fog.6FF777A8 ; ASCII "Save Path"
|
||
//6FF619C8 68 9068F76F PUSH Fog.6FF76890 ; ASCII "Diablo II"
|
||
//6FF619CD E8 AC2A0000 CALL <JMP.&Storm.#425>
|
||
}
|
||
|
||
log_msg("\n");
|
||
|
||
isInstalled = true;
|
||
}
|
||
|
||
/*================================= END OF FILE =================================*/ |