
//alloc(newmem,2048,"DiabloImmortal.exe"+3BE2DE)
//alloc(newmem,2048,"DiabloImmortal.exe"+3C65AE)
//alloc(newmem,2048,"DiabloImmortal.exe"+3C0FBE)
//alloc(newmem,2048,"DiabloImmortal.exe"+3C20FE)
alloc(newmem,2048,"DiabloImmortal.exe"+435B23)


label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
//place your code here

originalcode:
// movaps [rax-68],xmm11
movaps xmm11,xmm3 // ko du byte > movaps [rax-68],xmm11
movaps xmm10,xmm2
// mov rbx,rcx
// cmp byte ptr [rcx+6C],00

// rcx+6C = bat 1 tat 0
// rcx+2C = y hp
// rcx+30 = x hp
// rcx+34 = % hp
// rcx++18 = 3F67C000 // pic ? npc quest chinh

// summon = y 50 x 78 % 7.8 float
// enemy = y 50 x 52 % 23.39999962
// 42480000 42500000 41BB3333
// rbx+0 = float object x hp
// rbx+4 = float object y hp
// rbx+10 = float object x 3d
// rbx+18 = float object y 3d



// new rbx cu loi float x y
// rsi+0 =
// rdi+0 = name path png

// new 01
// rcx+6C = bat 1 tat 0
// rcx+34 = y hp 42480000
// rcx+28 = x hp 42500000
// rcx+2C = hp 41BB3333
// rcx+58 = % hp
// rdi+0 = float object x hp
// rdi+4 = float object y hp


push rax // addresscc
push r9 // address

mov rax,newmem+500 // address 0x0 value vtmem


mov r9,[rax+8*50] //> chuyen rcx = rbx = [rax+20]

//mov byte ptr [rcx+6C],01 // test

cmp byte ptr [rcx+6C],00
jne exit01
cmp [rcx+34],42480000 // y hp do
jne exit01
cmp [rcx+28],42500000 // x hp do
jne exit01
cmp [rcx+2C],41BB3333 // hp do
jne exit01

mov [rax],rcx // 6C bat = 0 tat = 1, +2C x y hp
mov [rax+8],rdi // float x float y
mov byte ptr [rax+10],1 // hp enemy
mov [rax+18],rdi // rdi png // float x float y

exit01:


 cmp byte ptr [rax+8*30],00 // npc ? bat = 0 tat = 1
 jne exit02
 cmp byte ptr [rcx+6C],00 // npc ?
 jne exit02
 cmp [rcx+28],42820000 // x hp ? npc
 jne exit02
 cmp [rcx+2C],42820000 //  ? npc
 jne exit02
 cmp [rcx+18],3F67C000 // pic ? npc quest cam chinh co o vuong
 jne exit02
 mov [rax],rcx // 6C bat = 0 tat = 1, +2C x y hp
 mov [rax+8],rbx // float x float y
 mov byte ptr [rax+10],2 // npc ?
 mov [rax+18],rdi // rdi png // float x float y
 exit02:


 cmp byte ptr [rax+8*30],00 // npc ? bat = 0 tat = 1
 jne exit11
 cmp byte ptr [rcx+6C],00 // npc ?
 jne exit11
 cmp [rcx+28],42820000 // x hp ? npc
 jne exit11
 cmp [rcx+2C],42820000 //  ? npc
 jne exit11
 cmp [rcx+18],3F680000 // pic ? npc quest chinh cam khong co o vuong
 jne exit11
 mov [rax],rcx // 6C bat = 0 tat = 1, +2C x y hp
 mov [rax+8],rbx // float x float y
 mov byte ptr [rax+10],2 // npc ?
 mov [rax+18],rdi // rdi png // float x float y
 exit11:




cmp byte ptr [rax+8*30],00 // npc ? bat = 0 tat = 1
  jne exit12
  cmp byte ptr [rcx+6C],00 // drop item ? quest
  jne exit12
  cmp [rcx+28],42820000 // x float 65
  jne exit12
  cmp [rcx+2C],42820000 // y float 65
  jne exit12

  // === CHECK X (324 < X < 384) tại [rdi] === 345
  cmp dword ptr [rdi], (float)314     // [rdi] >= 345-30 thì bỏ qua (hoặc dùng 43A20000)
  jna exit12
  cmp dword ptr [rdi], (float)455     // [rdi] <= 345+30 thì bỏ qua (hoặc dùng 43C00000)
  jae exit12

  // === CHECK Y (176 < Y < 236) tại [rdi+4] === 253
  cmp dword ptr [rdi+4], (float)196   // [rdi+4] >= 253-30 thì bỏ qua (hoặc dùng 43300000)
  jna exit12
  cmp dword ptr [rdi+4], (float)310    // [rdi+4] <= 253+30 thì bỏ qua (hoặc dùng 436C0000)
  jae exit12

  mov [rax+40],rcx // 6C bat = 0 tat = 1, +2C x y hp
  mov [rax+48],rbx // float x float y
  mov byte ptr [rax+50],3 // npc ?
  mov [rax+58],rdi // rdi png // float x float y
exit12:




// cmp byte ptr [rcx+6C],00 // npc summon
// jne exit03
// cmp [rcx+2C],42480000 // x ? npc
// jne exit03
// cmp [rcx+30],429C0000 // sx ? npc
// jne exit03
// cmp [rcx+34],40F9999A // s ? npc
// jne exit03

// cmp [rax+8*50],48 // for loop < 10
// ja exit03
// cmp [rax+r9+8*10],rbx // for loop < 10 <> rbx *11 > *10
// je exit03
// mov [rax+r9+8*11],rbx // float x float y
// add r9,8
// mov [rax+8*50],r9
// exit03:

// cmp [rax+8*50],40 // for loop > 10 > = 0
// jb exit04
// mov [rax+8*50],0
// exit04:





//cmp byte ptr [rcx+6C],01 // test all bar %
//jne exit09
//mov [rax+100],rcx // 6C bat = 0 tat = 1, +2C x y hp
//mov [rax+108],rbx // float x float y
//mov [rax+118],rdi // rdi png
//exit09:





pop r9


cmp byte ptr [rcx+6C],00 // time drop item quest
jne exit10
cmp [rcx+2C],42680000 // y hp do 58
jne exit10
cmp [rcx+30],4334B333 // sx hp do 180.6999969
jne exit10
cmp [rcx+34],41266666 // sy hp do 10.39999962
jne exit10

mov [rax+8*61],rcx // 6C bat = 0 tat = 1, +2C x y hp
exit10:


pop rax


exit:
jmp returnhere


//"DiabloImmortal.exe"+3BE2DE:
//"DiabloImmortal.exe"+3C65AE:
//"DiabloImmortal.exe"+3C0FBE:
//"DiabloImmortal.exe"+3C20FE:
"DiabloImmortal.exe"+435B23:

jmp newmem
nop
nop
nop
returnhere:

