#include "stdafx.h"
#include "MiniMap.h"
#include "Offset.h"
#include "Util.h"
bool MiniMapTable[MAX_MINI_MAP];
void InitMiniMap() // OK
{
memset(MiniMapTable,0,sizeof(MiniMapTable)); // 1.04J DONE
SetCompleteHook(0xE8,0x00636F24,&MiniMapLoad); // 1.04J DONE
SetCompleteHook(0xFF,0x00639964,&MiniMapCore); // 1.04J DONE
SetCompleteHook(0xFF,0x0049C77E,&MiniMapCheck); // 1.04J DONE
}
void MiniMapCore() // OK
{
((void(*)())0x0063612C)(); // 1.04J DONE
MiniMapLoad();
}
void MiniMapLoad() // OK
{
if(*(int*)(MAIN_CURRENT_MAP) < MAX_MINI_MAP)
{
char buff[64];
wsprintf(buff,"Minimap\\World%d\\Map1.jpg",(*(int*)(MAIN_CURRENT_MAP)+1));
if(MiniMapFileCheck(*(int*)(MAIN_CURRENT_MAP)) != 0)
{
MiniMapTable[*(int*)(MAIN_CURRENT_MAP)] = 1;
((bool(*)(char*,DWORD,DWORD,DWORD,BYTE))0x006F9D4F)(buff,1920,9729,10496,1);
}
}
}
bool MiniMapCheck(int map) // OK
{
if(map == 30 || (map < MAX_MINI_MAP && MiniMapTable[map] != 0))
{
return 1;
}
else
{
return 0;
}
}
bool MiniMapFileCheck(int map) // OK
{
if(map == 30){return 1;}
char buff[64];
wsprintf(buff,".\\Data\\Minimap\\World%d\\Map1.ozj",(map+1));
FILE* file;
if(fopen_s(&file,buff,"r") != 0)
{
return 0;
}
else
{
fclose(file);
return 1;
}
}
#include "stdafx.h"
#include "CustomMapNew.h"
#include "TMemory.h"
#include "ToolKit.h"
CCustomMap gCustomMap;
char * Map51 = "Interface\\Elbeland.tga";
char * Map56 = "Interface\\SwampOfCalmness.tga";
char * Map57 = "Interface\\Raklion.tga";
char * Map58 = "Interface\\RaklionBoss.tga";
char * Map62 = "Interface\\santatown.tga";
char * Map63 = "Interface\\Vulcanus.tga";
char * Map64 = "Interface\\duelarena.tga";
char * Map83 = "Interface\\Acheron.tga";
char * Map84 = "Interface\\Debenter.tga";
char * Map85 = "Interface\\UrukMountain.tga";
char * Map86 = "Interface\\Ferea.tga";
char * Map87 = "Interface\\lorencia.tga";
char * Map88 = "Interface\\Nars.tga";
char * Map89 = "Interface\\NixiesLake.tga";
char * Map90 = "Interface\\DeepDungeon.tga";
char * Map91 = "Interface\\DeepDungeon.tga";
char * Map92 = "Interface\\DeepDungeon.tga";
char * Map93 = "Interface\\DeepDungeon.tga";
char * Map94 = "Interface\\DeepDungeon.tga";
char * Map95 = "Interface\\SwampOfDarkness.tga";
char * Map96 = "Interface\\KuberaMine.tga";
char* LoadMapName(signed int MapNumber)
{
if (MapNumber >= 51 && MapNumber <= 100)
{
return pGetTextLine(pTextLineThis, (2532 + MapNumber - 51));
}
return pMapName(MapNumber);
}
void __declspec(naked) LoadNewInterfaceMapName()
{
_asm
{
MOV DWORD PTR SS:[EBP-0x0B4],0x32 // MOV DWORD PTR SS:[EBP-0x0D0],0x32 // 0x32 = 50 IT Final (Hook place)
PUSH 0x0076C05C // .PUSH 0x0076C05C // Arg1 = ASCII "Interface\IllusionTemple.tga"
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x33
PUSH Map51
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x38
PUSH Map56
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x39
PUSH Map57
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x3A
PUSH Map58
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x3E
PUSH Map62
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x3F
PUSH Map63
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x40
PUSH Map64
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x53
PUSH Map83
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x54
PUSH Map84
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x55
PUSH Map85
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x56
PUSH Map86
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x57
PUSH Map87
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x58
PUSH Map88
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x59
PUSH Map89
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x5A
PUSH Map90
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x5B
PUSH Map91
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x5C
PUSH Map92
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x5D
PUSH Map93
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x5E
PUSH Map94
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x5F
PUSH Map95
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV DWORD PTR SS:[EBP-0x0B4],0x60
PUSH Map96
LEA EAX,DWORD PTR SS:[EBP-0x0B4]
PUSH EAX
MOV ECX,DWORD PTR SS:[EBP-0x0B8]
ADD ECX,0x4
CALL InterfaceLoad1
MOV ECX,EAX
CALL InterfaceLoad2
MOV ESP,EBP
POP EBP
RETN
InterfaceLoad1:
MOV EDI, 0x00461510
JMP EDI
// ---
InterfaceLoad2:
MOV EDI, 0x00408710
JMP EDI
}
}
void CCustomMap::Load()
{
SetOp((LPVOID)0x005F97B1, (LPVOID)LoadMapName, ASM::CALL);
SetOp((LPVOID)0x00675D9F, (LPVOID)LoadMapName, ASM::CALL);
SetOp((LPVOID)0x00679035, (LPVOID)LoadMapName, ASM::CALL);
ToolKit.WriteJmp(0x00461153,(DWORD)&LoadNewInterfaceMapName);
//Bypass in terrains files
SetByte2((PVOID)0x00639A36,0xEB);
SetByte2((PVOID)0x00639A3C,0xEB);
SetByte2((PVOID)0x00639C29,0xEB);
SetByte2((PVOID)0x00639C2F,0xEB);
SetByte2((PVOID)0x00639CCC,0xEB);
SetByte2((PVOID)0x00639CD2,0xEB);
//Increase terrains amount
SetByte2((PVOID)0x00639A35,0x69);
SetByte2((PVOID)0x00639C28,0x69);
SetByte2((PVOID)0x00639CCB,0x69);
}