Hi people
I leaved my private server and MuOnline's development since 2014.
I've come to share a bit of my old work... It's for 97.04 GS:
Maps.cpp
Regards .
I leaved my private server and MuOnline's development since 2014.
I've come to share a bit of my old work... It's for 97.04 GS:
Maps.cpp
Code:
#include "Maps.h"
unsigned char MapStruct[25][0x4DB68] = {0x00};
int num_maps;
void FixMapAttribute()
{
*(DWORD*)(0x4055A2) = (DWORD)&MapStruct;
*(DWORD*)(0x405616) = (DWORD)&MapStruct;
*(DWORD*)(0x405737) = (DWORD)&MapStruct;
*(DWORD*)(0x405A31) = (DWORD)&MapStruct;
*(DWORD*)(0x405A99) = (DWORD)&MapStruct;
*(DWORD*)(0x405B3F) = (DWORD)&MapStruct;
*(DWORD*)(0x4060C7) = (DWORD)&MapStruct;
*(DWORD*)(0x406470) = (DWORD)&MapStruct;
*(DWORD*)(0x4064B7) = (DWORD)&MapStruct;
*(DWORD*)(0x4065FF) = (DWORD)&MapStruct;
*(DWORD*)(0x407867) = (DWORD)&MapStruct;
*(DWORD*)(0x407B1A) = (DWORD)&MapStruct;
*(DWORD*)(0x407B46) = (DWORD)&MapStruct;
*(DWORD*)(0x407DB9) = (DWORD)&MapStruct;
*(DWORD*)(0x408577) = (DWORD)&MapStruct;
*(DWORD*)(0x4085B6) = (DWORD)&MapStruct;
*(DWORD*)(0x4086D2) = (DWORD)&MapStruct;
*(DWORD*)(0x409700) = (DWORD)&MapStruct;
*(DWORD*)(0x40A014) = (DWORD)&MapStruct;
*(DWORD*)(0x40A12A) = (DWORD)&MapStruct;
*(DWORD*)(0x40A214) = (DWORD)&MapStruct;
*(DWORD*)(0x40CAE9) = (DWORD)&MapStruct;
*(DWORD*)(0x40CCE9) = (DWORD)&MapStruct;
*(DWORD*)(0x40CE2A) = (DWORD)&MapStruct;
*(DWORD*)(0x412652) = (DWORD)&MapStruct;
*(DWORD*)(0x4126A9) = (DWORD)&MapStruct+0xB0;
*(DWORD*)(0x4126D0) = (DWORD)&MapStruct+0xB8;
*(DWORD*)(0x41270F) = (DWORD)&MapStruct+0xB0;
*(DWORD*)(0x412736) = (DWORD)&MapStruct+0xB8;
*(DWORD*)(0x41894E) = (DWORD)&MapStruct+0x20;
*(DWORD*)(0x418A6A) = (DWORD)&MapStruct;
*(DWORD*)(0x418BB0) = (DWORD)&MapStruct;
*(DWORD*)(0x419EF9) = (DWORD)&MapStruct;
*(DWORD*)(0x424DBC) = (DWORD)&MapStruct;
*(DWORD*)(0x424DEE) = (DWORD)&MapStruct;
*(DWORD*)(0x425396) = (DWORD)&MapStruct;
*(DWORD*)(0x4253C8) = (DWORD)&MapStruct;
*(DWORD*)(0x436E3C) = (DWORD)&MapStruct;
*(DWORD*)(0x4373AB) = (DWORD)&MapStruct;
*(DWORD*)(0x43776F) = (DWORD)&MapStruct;
*(DWORD*)(0x437B11) = (DWORD)&MapStruct;
*(DWORD*)(0x437ED7) = (DWORD)&MapStruct;
*(DWORD*)(0x43830C) = (DWORD)&MapStruct;
*(DWORD*)(0x438668) = (DWORD)&MapStruct;
*(DWORD*)(0x4389EC) = (DWORD)&MapStruct;
*(DWORD*)(0x454E30) = (DWORD)&MapStruct;
*(DWORD*)(0x45C68A) = (DWORD)&MapStruct;
*(DWORD*)(0x45C702) = (DWORD)&MapStruct;
*(DWORD*)(0x45C74A) = (DWORD)&MapStruct;
*(DWORD*)(0x45C7C6) = (DWORD)&MapStruct;
*(DWORD*)(0x45C81B) = (DWORD)&MapStruct;
*(DWORD*)(0x45C894) = (DWORD)&MapStruct;
*(DWORD*)(0x45CA19) = (DWORD)&MapStruct;
*(DWORD*)(0x45CA62) = (DWORD)&MapStruct;
*(DWORD*)(0x45D221) = (DWORD)&MapStruct;
*(DWORD*)(0x45D4FB) = (DWORD)&MapStruct;
*(DWORD*)(0x45EDE6) = (DWORD)&MapStruct;
*(DWORD*)(0x460F6C) = (DWORD)&MapStruct;
*(DWORD*)(0x460FB3) = (DWORD)&MapStruct;
*(DWORD*)(0x460FD5) = (DWORD)&MapStruct;
*(DWORD*)(0x460FF7) = (DWORD)&MapStruct;
*(DWORD*)(0x461019) = (DWORD)&MapStruct;
*(DWORD*)(0x4624C0) = (DWORD)&MapStruct;
*(DWORD*)(0x462561) = (DWORD)&MapStruct;
*(DWORD*)(0x462587) = (DWORD)&MapStruct;
*(DWORD*)(0x4626E9) = (DWORD)&MapStruct;
*(DWORD*)(0x462939) = (DWORD)&MapStruct;
*(DWORD*)(0x46295D) = (DWORD)&MapStruct;
*(DWORD*)(0x466197) = (DWORD)&MapStruct;
*(DWORD*)(0x469848) = (DWORD)&MapStruct+0xAA;
*(DWORD*)(0x469874) = (DWORD)&MapStruct+0x24;
*(DWORD*)(0x469970) = (DWORD)&MapStruct+0x20;
*(DWORD*)(0x46998D) = (DWORD)&MapStruct+0x24;
*(DWORD*)(0x47116E) = (DWORD)&MapStruct;
*(DWORD*)(0x471902) = (DWORD)&MapStruct+0x24;
*(DWORD*)(0x47192A) = (DWORD)&MapStruct+0xAC;
*(DWORD*)(0x47195C) = (DWORD)&MapStruct+0xA9;
*(DWORD*)(0x471979) = (DWORD)&MapStruct+0xA8;
*(DWORD*)(0x4719BA) = (DWORD)&MapStruct+0xAA;
*(DWORD*)(0x4719DA) = (DWORD)&MapStruct+0xAB;
*(DWORD*)(0x472EF1) = (DWORD)&MapStruct;
*(DWORD*)(0x472FBF) = (DWORD)&MapStruct;
*(DWORD*)(0x47302A) = (DWORD)&MapStruct;
*(DWORD*)(0x473087) = (DWORD)&MapStruct;
*(DWORD*)(0x473112) = (DWORD)&MapStruct;
*(DWORD*)(0x473152) = (DWORD)&MapStruct;
*(DWORD*)(0x47335C) = (DWORD)&MapStruct;
*(DWORD*)(0x474114) = (DWORD)&MapStruct;
*(DWORD*)(0x47640E) = (DWORD)&MapStruct+0xAC;
*(DWORD*)(0x476442) = (DWORD)&MapStruct+0xA8;
*(DWORD*)(0x47646A) = (DWORD)&MapStruct+0xA9;
*(DWORD*)(0x476492) = (DWORD)&MapStruct+0x2A;
*(DWORD*)(0x4764C0) = (DWORD)&MapStruct+0x80;
*(DWORD*)(0x4764F3) = (DWORD)&MapStruct+0x80;
*(DWORD*)(0x47651E) = (DWORD)&MapStruct+0x2A;
*(DWORD*)(0x4765AF) = (DWORD)&MapStruct+0x20;
*(DWORD*)(0x4765D5) = (DWORD)&MapStruct+0x24;
*(DWORD*)(0x47768C) = (DWORD)&MapStruct;
*(DWORD*)(0x4776BE) = (DWORD)&MapStruct;
*(DWORD*)(0x47C4C1) = (DWORD)&MapStruct;
*(DWORD*)(0x47C50B) = (DWORD)&MapStruct;
*(DWORD*)(0x47C84A) = (DWORD)&MapStruct;
*(DWORD*)(0x47C8A6) = (DWORD)&MapStruct;
*(DWORD*)(0x47CFB7) = (DWORD)&MapStruct;
*(DWORD*)(0x47CFDB) = (DWORD)&MapStruct;
*(DWORD*)(0x48942B) = (DWORD)&MapStruct;
*(DWORD*)(0x489496) = (DWORD)&MapStruct;
*(DWORD*)(0x48A67A) = (DWORD)&MapStruct;
*(DWORD*)(0x48A6AB) = (DWORD)&MapStruct;
*(DWORD*)(0x490509) = (DWORD)&MapStruct;
*(DWORD*)(0x491657) = (DWORD)&MapStruct;
*(DWORD*)(0x49581D) = (DWORD)&MapStruct;
*(DWORD*)(0x496272) = (DWORD)&MapStruct;
*(DWORD*)(0x4974AF) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x4974D0) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x4975BF) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x4975E0) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x4976CF) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x4976F0) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x4977DF) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497800) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497923) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497944) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497A83) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497AA4) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497B85) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497BA3) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497C55) = (DWORD)&MapStruct+0x10;
*(DWORD*)(0x497C73) = (DWORD)&MapStruct+0x10;
}
void MapInit()
{
FixMapAttribute();
BYTE cMapLoadFix[] = {0xFF,0x15,0x4B,0x4A,0x4D,0x00,0xE9,0xA2,0x03,0x00,0x00};
*(DWORD*)0x004D4A4B = (DWORD)&MapLoad;
memcpy((int *)0x0048A309,cMapLoadFix,sizeof(cMapLoadFix));
num_maps = 25;
memset((PBYTE)0x4122FC, num_maps-0x01, 1);//ItemSerialCreateRecv
memset((PBYTE)0x4188DD, num_maps-0x01, 1);//CGItemGetRequest
memset((PBYTE)0x443782, num_maps-0x01, 1);//MapNumberCheck
memset((PBYTE)0x45BA63, num_maps-0x01, 1);//GetMapMoveLevel
memset((PBYTE)0x45C620, num_maps-0x01, 1);//gObjSetCharacter
memset((PBYTE)0x460E00, num_maps-0x01, 1);//gObjCheckXYMapTile
memset((PBYTE)0x4623B0, num_maps-0x01, 1);//gObjBackSpring
memset((PBYTE)0x4627E0, num_maps-0x01, 1);//gObjBackSpring2
memset((PBYTE)0x47334E, num_maps, 1); //gObjSetState
memset((PBYTE)0x47C499, num_maps, 1); //gObjCheckTeleportArea
memset((PBYTE)0x47C7D4, num_maps, 1); //gObjCheckAttackArea
memset((PBYTE)0x47C7FE, num_maps, 1); //gObjCheckAttackArea
memset((PBYTE)0x489424, num_maps, 1);
memset((PBYTE)0x48948F, num_maps, 1);
memset((PBYTE)0x4904FB, num_maps, 1); //WndProc
}
CHAR MapBuff[25][24] = {
"..\\data\\terrain1.att",
"..\\data\\terrain2.att",
"..\\data\\terrain3.att",
"..\\data\\terrain4.att",
"..\\data\\terrain5.att",
"..\\data\\terrain6.att",
"..\\data\\terrain7.att",
"..\\data\\terrain8.att",
"..\\data\\terrain9.att",
"..\\data\\terrain10.att",
"..\\data\\terrain11.att",
"..\\data\\terrain12.att",
"..\\data\\terrain12.att",
"..\\data\\terrain12.att",
"..\\data\\terrain12.att",
"..\\data\\terrain12.att",
"..\\data\\terrain12.att",
"..\\data\\(null).att",
"..\\data\\(null).att",
"..\\data\\(null).att",
"..\\data\\terrain21.att",
"..\\data\\terrain22.att",
"..\\data\\terrain23.att",
"..\\data\\terrain24.att",
"..\\data\\terrain25.att"
};
void MapLoad()
{
for(int i = 0;i<num_maps;i++)
{
_asm
{
mov ecx, i
imul ecx, ecx, 0x4DB68
add ecx, offset MapStruct
mov eax, 0x402225
call eax
mov eax, i
push eax
mov ecx, i
imul ecx, ecx, 18h
add ecx, offset MapBuff
push ecx
mov ecx, 0x687DE60
mov eax, 0x00401A7D
call eax
push eax
mov ecx, i
imul ecx, ecx, 0x4DB68
add ecx, offset MapStruct
mov eax, 0x00401FC3
call eax
}
}
}
Regards .
Last edited: