alloc(newmem,2048,"DiabloImmortal.exe"+748302)
label(returnhere)
label(originalcode)
label(exit)


newmem: //this is allocated memory, you have read,write,execute access
//place your code here


originalcode:
// new 2
// test byte ptr [rdi+00000208],20 = bat 00 = tat
// byte ptr [rdi+158],3F > 0F tat fog

//[rdi+270] = float X LEFT+UP 511
//[rdi+274] = float Y LEFT+UP 510

//[rdi+2B8] = float X RIGHT+DOWN 677
//[rdi+2BC] = float Y RIGHT+DOWN 383

//[rdi+218] = float 572
//[rdi+78] = float (float)0.42


// new 3

// byte ptr [r14+18],3F > 0F tat fog
// byte ptr [r14+38],1F = bat 00 tat
// byte ptr [r14+50],40 = bat

//x RIGHT [r14-10] float 685 autoit 655
//y DOWN [r14-C] float 508  autoit 75
//x LEFT [r14-8] float 559 autoit 585
//y_max [r14-4] float 382 autoit 10



// mov eax,[rdi+28]
cmp qword ptr [r14+18],10
// cmp qword ptr [r14+18],10
// mov ecx,eax
// mov rax,[rsi]
//mov r15,[rax+rcx*8]
// mov rax,[r15]
// mov rbp,[rax+00000130]

//jb 7FF6FFDA8333 > ja no fog hoac mov rcx,[r14] > nop no fog



// Vung nho cap phat, r14 dang quan ly tam flat map hien tai
push rax
mov rax,newmem+500         // Su dung moc +500 de khong so thieu bo dem
push rbx

mov rbx,[rax+0]            // Lay con tro index hien tai trong hang doi
add rbx,8                  // Nhay them 8 bytes cho tam map tiep theo

// =========================================================================
// 1. TU DONG XOA FOG (SUONG MU) KHI PHAT HIEN TAM MAP MOI
// =========================================================================
cmp r14,0                  // Kiem tra con tro r14 co hop le khong
je if01
cmp byte ptr [r14+18],3F
jne if01
cmp byte ptr [r14+38],1F
jne if01
cmp byte ptr [r14+50],40
jne if01
mov byte ptr [r14+18],0F   // Ep tu 3F sang 0F de xoa sach suong mu
if01:

// =========================================================================
// 2. GHI NHAN TAM MAP VAO HANG DOI (QUEUE) DE THEO DOI
// =========================================================================
cmp r14,0
je if03
cmp byte ptr [r14+18],0F   // Chi xu ly tam map da duoc mo fog thanh cong
jne if03
cmp byte ptr [r14+38],1F
jne if03
cmp byte ptr [r14+50],40
jne if03
cmp dword ptr [rax+0],50   // Gioi han hang doi toi da 50 phan tu
ja if03

// --- KIEM TRA PHAM VI TOA DO FLAT TILES (LOGIC GÓC ĐỐI XỨNG CHUẨN) ---
// Thay vi check don truc loi lom, ep 2 diem goc phai lot long vung map lon

// --- KIEM TRA TRUC X ---
cmp dword ptr [r14-10],(float)655  // x RIGHT > 685 - 30
jb if03
cmp dword ptr [r14-10],(float)715  // x RIGHT < 685 + 30
ja if03
// --- KIEM TRA TRUC Y ---
cmp dword ptr [r14-C],(float)478  // y DOWN > 508 - 30
jb if03
cmp dword ptr [r14-C],(float)538 // y DOWN < 508 + 30
ja if03

// --- CHONG LUU TRUNG DIA CHI (RÀO ĐỦ 15 Ô ĐỂ KHÔNG BỊ NHÂN BẢN TRÀN QUEUE) ---
cmp [rax+8*1],r14
je if03
cmp [rax+8*2],r14
je if03
cmp [rax+8*3],r14
je if03
cmp [rax+8*4],r14
je if03
cmp [rax+8*5],r14
je if03
cmp [rax+8*6],r14
je if03
cmp [rax+8*7],r14
je if03
cmp [rax+8*8],r14
je if03
cmp [rax+8*9],r14
je if03
cmp [rax+8*10],r14
je if03
cmp [rax+8*11],r14
je if03
cmp [rax+8*12],r14
je if03
cmp [rax+8*13],r14
je if03
cmp [rax+8*14],r14
je if03
cmp [rax+8*15],r14
je if03

// --- LUU TRU VAO HANG DOI ---
cmp qword ptr [rax+rbx],00 // Neu o trong trong bo dem dang san sang
jne if03
mov [rax+0],rbx            // Cap nhat chi so index moi
mov [rax+rbx],r14          // Nem dia chi r14 vao hang doi de quan ly
if03:

// =========================================================================
// 3. LOGIC XU LY CHUYEN TẤM MAP - TAT MAP CU PHIA SAU DE CHONG CHAY NGUOC
// =========================================================================

// --- Neu dang o Map 1, nhung Map 2 va Map 3 phia truoc da duoc tai -> An Map 1 ---
cmp r14,0
je if03_m
cmp byte ptr [r14+38],1F   // Neu tam map nay dang bat hien thi
jne if03_m
cmp [rax+8*1],r14          // Va no chinh la tam map so 1 cu phia sau lung
jne if03_m
cmp qword ptr [rax+8*2],0  // Da xuat hien tam map 2 o phia truoc
je if03_m
cmp qword ptr [rax+8*3],0  // Da xuat hien tam map 3 o phia truoc
je if03_m

mov byte ptr [r14+38],00   // EP +38 VE 00 = TAT HIEN THI MAP 1
if03_m:


// --- Dam bao tam Map so 2 (Map hien tai bot dang dung) luon duoc mo ---
cmp r14,0
je if04_m
cmp byte ptr [r14+38],00   // Neu map dang bi an
jne if04_m
cmp [rax+8*2],r14          // Nhung nhan vat da tien thang vao vung cua Map 2
jne if04_m

mov byte ptr [r14+38],1F   // Kich hoat mo hien thi cho Map 2
if04_m:


// --- Neu dang o Map 3, nhung Map 4 va Map 5 phia truoc da kich hoat -> An Map 3 ---
cmp r14,0
je if05_m
cmp byte ptr [r14+38],1F
jne if05_m
cmp [rax+8*3],r14          // Neu day la tam map so 3 cu sau lung
jne if05_m
cmp qword ptr [rax+8*4],0  // Da tai map 4 phia truoc
je if05_m
cmp qword ptr [rax+8*5],0  // Da tai map 5 phia truoc
je if05_m                  // (Thiếu lệnh JMP ở bản cũ, đã bù vào)

mov byte ptr [r14+38],00   // EP +38 VE 00 = TAT HIEN THI MAP 3
if05_m:

// =========================================================================
// 4. TU DONG XOA DON HANG DOI KHI TAM MAP DA BI AN HOAN TOAN
// =========================================================================
cmp r14,0
je if04
cmp byte ptr [r14+38],00   // Neu tam map nay da bi tat han hien thi
jne if04

cmp qword ptr [rax+rbx-8],0 // Kiem tra o nho lien truoc co du lieu khong
je if04
cmp dword ptr [rax+0],0    // Kiem tra index hang doi co lon hon 0 khong
je if04
mov qword ptr [rax+rbx-8],0 // Don dep sach 8 bytes dia chi cua tam map cu
mov dword ptr [rax+rbx-4],0
sub dword ptr [rax+0],8    // Lui con tro Queue lai 1 nac
if04:

pop rbx
pop rax

exit:
jmp returnhere

"DiabloImmortal.exe"+748302:
jmp newmem
returnhere:
