You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
10277 lines
198 KiB
10277 lines
198 KiB
#pragma warning (disable : 4731) // frame pointer register 'ebp' modified by inline assembly code |
|
|
|
void __fastcall drawTopArchesUpperScreen(unsigned char *pbDst) |
|
{ |
|
unsigned char *dst; // edi MAPDST |
|
unsigned char *tbl; // ebx |
|
unsigned char *src; // esi MAPDST |
|
short cel_type_16; // ax MAPDST |
|
|
|
gpCelFrame = (unsigned char *)speed_cel_frame_num_from_light_index_frame_num; |
|
dst = pbDst; |
|
if ( !(_BYTE)light_table_index ) |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = ((level_cel_block >> 12) & 7) + 8; |
|
goto LABEL_11; |
|
} |
|
if ( (_BYTE)light_table_index != lightmax ) |
|
{ |
|
if ( !(level_cel_block & 0x8000) ) |
|
{ |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
tbl = (unsigned char *)&pLightTbl[256 * light_table_index]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov ebx, tbl |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // upper (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 10h |
|
loc_46325B: |
|
cmp edi, gpBufEnd |
|
jb short loc_4632BF |
|
mov ecx, 8 |
|
loc_463268: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463268 |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_4632BF |
|
mov ecx, 8 |
|
loc_463299: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463299 |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_46325B |
|
loc_4632BF: |
|
pop ebp |
|
} |
|
break; |
|
case 1: // upper (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov eax, edi |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
mov ebp, 20h |
|
loc_4632D5: |
|
mov edx, 20h |
|
loc_4632DA: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js loc_4633F8 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb loc_46341F |
|
mov ecx, eax |
|
mov eax, edi |
|
and eax, 1 |
|
cmp eax, WorldBoolFlag |
|
jnz short loc_463377 |
|
push edx |
|
shr ecx, 1 |
|
jb short loc_463340 |
|
shr ecx, 1 |
|
jnb short loc_46331C |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_46331C: |
|
test cl, cl |
|
jz short loc_46333E |
|
loc_463320: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463320 |
|
loc_46333E: |
|
jmp short loc_463374 |
|
|
|
loc_463340: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463353 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463353: |
|
test cl, cl |
|
jz short loc_463374 |
|
loc_463357: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463357 |
|
loc_463374: |
|
pop edx |
|
jmp short loc_4633EF |
|
|
|
loc_463377: |
|
push edx |
|
shr ecx, 1 |
|
jb short loc_4633B0 |
|
shr ecx, 1 |
|
jnb short loc_46338D |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_46338D: |
|
test cl, cl |
|
jz short loc_4633AE |
|
loc_463391: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463391 |
|
loc_4633AE: |
|
jmp short loc_4633EE |
|
|
|
loc_4633B0: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4633CC |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4633CC: |
|
test cl, cl |
|
jz short loc_4633EE |
|
loc_4633D0: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4633D0 |
|
loc_4633EE: |
|
pop edx |
|
loc_4633EF: |
|
test edx, edx |
|
jz short loc_463404 |
|
jmp loc_4632DA |
|
|
|
loc_4633F8: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz loc_4632DA |
|
loc_463404: |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
sub edi, 320h |
|
dec ebp |
|
jnz loc_4632D5 |
|
loc_46341F: |
|
pop ebp |
|
} |
|
break; |
|
case 2: // upper (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
loc_463432: |
|
cmp edi, gpBufEnd |
|
jb loc_463692 |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4634D2 |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_463499 |
|
shr ecx, 1 |
|
jnb short loc_463475 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_463475: |
|
test cl, cl |
|
jz short loc_463497 |
|
loc_463479: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463479 |
|
loc_463497: |
|
jmp short loc_4634CD |
|
|
|
loc_463499: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4634AC |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_4634AC: |
|
test cl, cl |
|
jz short loc_4634CD |
|
loc_4634B0: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_4634B0 |
|
loc_4634CD: |
|
jmp loc_46354F |
|
|
|
loc_4634D2: |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_463511 |
|
shr ecx, 1 |
|
jnb short loc_4634EE |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_4634EE: |
|
test cl, cl |
|
jz short loc_46350F |
|
loc_4634F2: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_4634F2 |
|
loc_46350F: |
|
jmp short loc_46354F |
|
|
|
loc_463511: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_46352D |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_46352D: |
|
test cl, cl |
|
jz short loc_46354F |
|
loc_463531: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463531 |
|
loc_46354F: |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge loc_463432 |
|
mov ebp, 2 |
|
loc_463563: |
|
cmp edi, gpBufEnd |
|
jb loc_463692 |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_463603 |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_4635CA |
|
shr ecx, 1 |
|
jnb short loc_4635A6 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4635A6: |
|
test cl, cl |
|
jz short loc_4635C8 |
|
loc_4635AA: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4635AA |
|
loc_4635C8: |
|
jmp short loc_4635FE |
|
|
|
loc_4635CA: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4635DD |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_4635DD: |
|
test cl, cl |
|
jz short loc_4635FE |
|
loc_4635E1: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_4635E1 |
|
loc_4635FE: |
|
jmp loc_463680 |
|
|
|
loc_463603: |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_463642 |
|
shr ecx, 1 |
|
jnb short loc_46361F |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_46361F: |
|
test cl, cl |
|
jz short loc_463640 |
|
loc_463623: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463623 |
|
loc_463640: |
|
jmp short loc_463680 |
|
|
|
loc_463642: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_46365E |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_46365E: |
|
test cl, cl |
|
jz short loc_463680 |
|
loc_463662: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463662 |
|
loc_463680: |
|
sub edi, 320h |
|
add ebp, 2 |
|
cmp ebp, 20h |
|
jnz loc_463563 |
|
loc_463692: |
|
pop ebp |
|
} |
|
break; |
|
case 3: // upper (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
loc_4636A5: |
|
cmp edi, gpBufEnd |
|
jb loc_463905 |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_463743 |
|
shr ecx, 1 |
|
jb short loc_463703 |
|
shr ecx, 1 |
|
jnb short loc_4636DF |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4636DF: |
|
test cl, cl |
|
jz short loc_463701 |
|
loc_4636E3: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4636E3 |
|
loc_463701: |
|
jmp short loc_463737 |
|
|
|
loc_463703: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463716 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463716: |
|
test cl, cl |
|
jz short loc_463737 |
|
loc_46371A: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46371A |
|
loc_463737: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
jmp loc_4637C0 |
|
|
|
loc_463743: |
|
shr ecx, 1 |
|
jb short loc_46377B |
|
shr ecx, 1 |
|
jnb short loc_463758 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463758: |
|
test cl, cl |
|
jz short loc_463779 |
|
loc_46375C: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46375C |
|
loc_463779: |
|
jmp short loc_4637B9 |
|
|
|
loc_46377B: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463797 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_463797: |
|
test cl, cl |
|
jz short loc_4637B9 |
|
loc_46379B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_46379B |
|
loc_4637B9: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
loc_4637C0: |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge loc_4636A5 |
|
mov ebp, 2 |
|
loc_4637D6: |
|
cmp edi, gpBufEnd |
|
jb loc_463905 |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_463874 |
|
shr ecx, 1 |
|
jb short loc_463834 |
|
shr ecx, 1 |
|
jnb short loc_463810 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_463810: |
|
test cl, cl |
|
jz short loc_463832 |
|
loc_463814: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463814 |
|
loc_463832: |
|
jmp short loc_463868 |
|
|
|
loc_463834: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463847 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463847: |
|
test cl, cl |
|
jz short loc_463868 |
|
loc_46384B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46384B |
|
loc_463868: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
jmp loc_4638F1 |
|
|
|
loc_463874: |
|
shr ecx, 1 |
|
jb short loc_4638AC |
|
shr ecx, 1 |
|
jnb short loc_463889 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463889: |
|
test cl, cl |
|
jz short loc_4638AA |
|
loc_46388D: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46388D |
|
loc_4638AA: |
|
jmp short loc_4638EA |
|
|
|
loc_4638AC: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4638C8 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4638C8: |
|
test cl, cl |
|
jz short loc_4638EA |
|
loc_4638CC: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4638CC |
|
loc_4638EA: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
loc_4638F1: |
|
sub edi, 320h |
|
add edi, ebp |
|
add ebp, 2 |
|
cmp ebp, 20h |
|
jnz loc_4637D6 |
|
loc_463905: |
|
pop ebp |
|
} |
|
break; |
|
case 4: // upper (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
loc_463918: |
|
cmp edi, gpBufEnd |
|
jb loc_463AAD |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4639B8 |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_46397F |
|
shr ecx, 1 |
|
jnb short loc_46395B |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_46395B: |
|
test cl, cl |
|
jz short loc_46397D |
|
loc_46395F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_46395F |
|
loc_46397D: |
|
jmp short loc_4639B3 |
|
|
|
loc_46397F: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463992 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463992: |
|
test cl, cl |
|
jz short loc_4639B3 |
|
loc_463996: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463996 |
|
loc_4639B3: |
|
jmp loc_463A35 |
|
|
|
loc_4639B8: |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_4639F7 |
|
shr ecx, 1 |
|
jnb short loc_4639D4 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_4639D4: |
|
test cl, cl |
|
jz short loc_4639F5 |
|
loc_4639D8: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_4639D8 |
|
loc_4639F5: |
|
jmp short loc_463A35 |
|
|
|
loc_4639F7: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463A13 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_463A13: |
|
test cl, cl |
|
jz short loc_463A35 |
|
loc_463A17: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463A17 |
|
loc_463A35: |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge loc_463918 |
|
mov ebp, 8 |
|
loc_463A49: |
|
cmp edi, gpBufEnd |
|
jb short loc_463AAD |
|
mov ecx, 8 |
|
loc_463A56: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463A56 |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_463AAD |
|
mov ecx, 8 |
|
loc_463A87: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463A87 |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_463A49 |
|
loc_463AAD: |
|
pop ebp |
|
} |
|
break; |
|
default: // upper (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
loc_463AC0: |
|
cmp edi, gpBufEnd |
|
jb loc_463C55 |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_463B5E |
|
shr ecx, 1 |
|
jb short loc_463B1E |
|
shr ecx, 1 |
|
jnb short loc_463AFA |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_463AFA: |
|
test cl, cl |
|
jz short loc_463B1C |
|
loc_463AFE: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463AFE |
|
loc_463B1C: |
|
jmp short loc_463B52 |
|
|
|
loc_463B1E: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463B31 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463B31: |
|
test cl, cl |
|
jz short loc_463B52 |
|
loc_463B35: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463B35 |
|
loc_463B52: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
jmp loc_463BDB |
|
|
|
loc_463B5E: |
|
shr ecx, 1 |
|
jb short loc_463B96 |
|
shr ecx, 1 |
|
jnb short loc_463B73 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_463B73: |
|
test cl, cl |
|
jz short loc_463B94 |
|
loc_463B77: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463B77 |
|
loc_463B94: |
|
jmp short loc_463BD4 |
|
|
|
loc_463B96: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_463BB2 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_463BB2: |
|
test cl, cl |
|
jz short loc_463BD4 |
|
loc_463BB6: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463BB6 |
|
loc_463BD4: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
loc_463BDB: |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge loc_463AC0 |
|
mov ebp, 8 |
|
loc_463BF1: |
|
cmp edi, gpBufEnd |
|
jb short loc_463C55 |
|
mov ecx, 8 |
|
loc_463BFE: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_463BFE |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_463C55 |
|
mov ecx, 8 |
|
loc_463C2F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_463C2F |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_463BF1 |
|
loc_463C55: |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
src = (unsigned char *)pSpeedCels |
|
+ *(_DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
LABEL_11: |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 8: // upper (top transparent), without lighting |
|
__asm { |
|
mov edx, 10h |
|
loc_463C60: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_8S |
|
mov ecx, 8 |
|
loc_463C71: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_463C71 |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb ret_464688_8S |
|
mov ecx, 8 |
|
loc_463C9F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_463C9F |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_463C60 |
|
ret_464688_8S: |
|
} |
|
break; |
|
case 9: // upper (top transparent), without lighting |
|
__asm { |
|
push ebp |
|
mov eax, edi |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
mov ebp, 20h |
|
loc_463CD2: |
|
mov edx, 20h |
|
loc_463CD7: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js loc_463D76 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb loc_463D9D |
|
mov ecx, eax |
|
mov eax, edi |
|
and eax, 1 |
|
cmp eax, WorldBoolFlag |
|
jnz short loc_463D36 |
|
shr ecx, 1 |
|
jnb short loc_463D0D |
|
inc esi |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_463D6D |
|
jmp short loc_463D46 |
|
|
|
loc_463D0D: |
|
shr ecx, 1 |
|
jnb short loc_463D1D |
|
inc esi |
|
inc edi |
|
mov al, [esi] |
|
inc esi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_463D6D |
|
loc_463D1D: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_463D1D |
|
jmp short loc_463D6D |
|
|
|
loc_463D36: |
|
shr ecx, 1 |
|
jnb short loc_463D46 |
|
mov al, [esi] |
|
inc esi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_463D6D |
|
jmp short loc_463D0D |
|
|
|
loc_463D46: |
|
shr ecx, 1 |
|
jnb short loc_463D58 |
|
mov al, [esi] |
|
add esi, 2 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_463D6D |
|
loc_463D58: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_463D58 |
|
loc_463D6D: |
|
test edx, edx |
|
jz short loc_463D82 |
|
jmp loc_463CD7 |
|
|
|
loc_463D76: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz loc_463CD7 |
|
loc_463D82: |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
sub edi, 320h |
|
dec ebp |
|
jnz loc_463CD2 |
|
loc_463D9D: |
|
pop ebp |
|
} |
|
break; |
|
case 10: // upper (top transparent), without lighting |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_463DAF: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_10S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_463E04 |
|
shr ecx, 2 |
|
jnb short loc_463DEB |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_463E2E |
|
loc_463DEB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_463DEB |
|
jmp short loc_463E2E |
|
|
|
loc_463E04: |
|
shr ecx, 2 |
|
jnb short loc_463E19 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_463E2E |
|
loc_463E19: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_463E19 |
|
loc_463E2E: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge loc_463DAF |
|
mov edx, 2 |
|
loc_463E42: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_10S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_463E97 |
|
shr ecx, 2 |
|
jnb short loc_463E7E |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_463EC1 |
|
loc_463E7E: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_463E7E |
|
jmp short loc_463EC1 |
|
|
|
loc_463E97: |
|
shr ecx, 2 |
|
jnb short loc_463EAC |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_463EC1 |
|
loc_463EAC: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_463EAC |
|
loc_463EC1: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz loc_463E42 |
|
ret_464688_10S: |
|
} |
|
break; |
|
case 11: // upper (top transparent), without lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_463EE5: |
|
cmp edi, gpBufEnd |
|
jb loc_46400B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov ebp, ecx |
|
mov WorldBoolFlag, eax |
|
jz short loc_463F3A |
|
shr ecx, 2 |
|
jz short loc_463F26 |
|
loc_463F0F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_463F0F |
|
loc_463F26: |
|
and ebp, 2 |
|
jz short loc_463F64 |
|
mov ax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
jmp short loc_463F64 |
|
|
|
loc_463F3A: |
|
shr ecx, 2 |
|
jz short loc_463F54 |
|
loc_463F3F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_463F3F |
|
loc_463F54: |
|
and ebp, 2 |
|
jz short loc_463F64 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
loc_463F64: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge loc_463EE5 |
|
mov edx, 2 |
|
loc_463F7A: |
|
cmp edi, gpBufEnd |
|
jb loc_46400B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_463FCD |
|
shr ecx, 2 |
|
jz short loc_463FB9 |
|
loc_463FA2: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_463FA2 |
|
loc_463FB9: |
|
and ebp, 2 |
|
jz short loc_463FF7 |
|
mov ax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
jmp short loc_463FF7 |
|
|
|
loc_463FCD: |
|
shr ecx, 2 |
|
jz short loc_463FE7 |
|
loc_463FD2: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_463FD2 |
|
loc_463FE7: |
|
and ebp, 2 |
|
jz short loc_463FF7 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
loc_463FF7: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz loc_463F7A |
|
loc_46400B: |
|
pop ebp |
|
} |
|
break; |
|
case 12: // upper (top transparent), without lighting |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_46401D: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_12S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_464072 |
|
shr ecx, 2 |
|
jnb short loc_464059 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_46409C |
|
loc_464059: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_464059 |
|
jmp short loc_46409C |
|
|
|
loc_464072: |
|
shr ecx, 2 |
|
jnb short loc_464087 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46409C |
|
loc_464087: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_464087 |
|
loc_46409C: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge loc_46401D |
|
mov edx, 8 |
|
loc_4640B0: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_12S |
|
mov ecx, 8 |
|
loc_4640C1: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_4640C1 |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb ret_464688_12S |
|
mov ecx, 8 |
|
loc_4640EF: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_4640EF |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_4640B0 |
|
ret_464688_12S: |
|
} |
|
break; |
|
default: // upper (top transparent), without lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_46411F: |
|
cmp edi, gpBufEnd |
|
jb loc_464209 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov ebp, ecx |
|
mov WorldBoolFlag, eax |
|
jz short loc_464174 |
|
shr ecx, 2 |
|
jz short loc_464160 |
|
loc_464149: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_464149 |
|
loc_464160: |
|
and ebp, 2 |
|
jz short loc_46419E |
|
mov ax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
jmp short loc_46419E |
|
|
|
loc_464174: |
|
shr ecx, 2 |
|
jz short loc_46418E |
|
loc_464179: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_464179 |
|
loc_46418E: |
|
and ebp, 2 |
|
jz short loc_46419E |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
loc_46419E: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge loc_46411F |
|
mov edx, 8 |
|
loc_4641B4: |
|
cmp edi, gpBufEnd |
|
jb short loc_464209 |
|
mov ecx, 8 |
|
loc_4641C1: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_4641C1 |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_464209 |
|
mov ecx, 8 |
|
loc_4641EB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_4641EB |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_4641B4 |
|
loc_464209: |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = (level_cel_block >> 12) & 7; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // upper (top transparent), black |
|
__asm { |
|
mov edx, 10h |
|
xor eax, eax |
|
loc_464216: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_0B |
|
mov ecx, 8 |
|
loc_464227: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464227 |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb ret_464688_0B |
|
mov ecx, 8 |
|
loc_46424A: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46424A |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_464216 |
|
ret_464688_0B: |
|
} |
|
break; |
|
case 1: // upper (top transparent), black |
|
__asm { |
|
push ebp |
|
mov eax, edi |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
mov ebp, 20h |
|
loc_464273: |
|
mov edx, 20h |
|
loc_464278: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_4642F4 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb loc_46431B |
|
mov ecx, eax |
|
add esi, ecx |
|
mov eax, edi |
|
and eax, 1 |
|
cmp eax, WorldBoolFlag |
|
jnz short loc_4642C7 |
|
xor eax, eax |
|
shr ecx, 1 |
|
jnb short loc_4642AD |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4642EE |
|
jmp short loc_4642D6 |
|
|
|
loc_4642AD: |
|
shr ecx, 1 |
|
jnb short loc_4642B9 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4642EE |
|
loc_4642B9: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4642B9 |
|
jmp short loc_4642EE |
|
|
|
loc_4642C7: |
|
xor eax, eax |
|
shr ecx, 1 |
|
jnb short loc_4642D6 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4642EE |
|
jmp short loc_4642AD |
|
|
|
loc_4642D6: |
|
shr ecx, 1 |
|
jnb short loc_4642E3 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4642EE |
|
loc_4642E3: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4642E3 |
|
loc_4642EE: |
|
test edx, edx |
|
jz short loc_464300 |
|
jmp short loc_464278 |
|
|
|
loc_4642F4: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz loc_464278 |
|
loc_464300: |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
sub edi, 320h |
|
dec ebp |
|
jnz loc_464273 |
|
loc_46431B: |
|
pop ebp |
|
} |
|
break; |
|
case 2: // upper (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_46432D: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_2B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_46436F |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_464361 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_46438A |
|
loc_464361: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464361 |
|
jmp short loc_46438A |
|
|
|
loc_46436F: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_46437F |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46438A |
|
loc_46437F: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46437F |
|
loc_46438A: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_464399 |
|
sub edx, 2 |
|
jmp short loc_46432D |
|
|
|
loc_464399: |
|
mov edx, 2 |
|
loc_46439E: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_2B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4643E0 |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4643D2 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4643FB |
|
loc_4643D2: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4643D2 |
|
jmp short loc_4643FB |
|
|
|
loc_4643E0: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4643F0 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4643FB |
|
loc_4643F0: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4643F0 |
|
loc_4643FB: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_46439E |
|
ret_464688_2B: |
|
} |
|
break; |
|
case 3: // upper (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_46441A: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_3B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_46445A |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_46444C |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_464475 |
|
loc_46444C: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46444C |
|
jmp short loc_464475 |
|
|
|
loc_46445A: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_46446A |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_464475 |
|
loc_46446A: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46446A |
|
loc_464475: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_464486 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_46441A |
|
|
|
loc_464486: |
|
mov edx, 2 |
|
loc_46448B: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_3B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4644CB |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4644BD |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4644E6 |
|
loc_4644BD: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4644BD |
|
jmp short loc_4644E6 |
|
|
|
loc_4644CB: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4644DB |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4644E6 |
|
loc_4644DB: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4644DB |
|
loc_4644E6: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_46448B |
|
ret_464688_3B: |
|
} |
|
break; |
|
case 4: // upper (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_464507: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_4B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_464549 |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_46453B |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_464564 |
|
loc_46453B: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46453B |
|
jmp short loc_464564 |
|
|
|
loc_464549: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_464559 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_464564 |
|
loc_464559: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464559 |
|
loc_464564: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_464573 |
|
sub edx, 2 |
|
jmp short loc_464507 |
|
|
|
loc_464573: |
|
mov edx, 8 |
|
xor eax, eax |
|
loc_46457A: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_4B |
|
mov ecx, 8 |
|
loc_46458B: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46458B |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb ret_464688_4B |
|
mov ecx, 8 |
|
loc_4645AE: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4645AE |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_46457A |
|
ret_464688_4B: |
|
} |
|
break; |
|
default: // upper (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_4645D3: |
|
cmp edi, gpBufEnd |
|
jb ret_464688_5B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_464613 |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_464605 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_46462E |
|
loc_464605: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464605 |
|
jmp short loc_46462E |
|
|
|
loc_464613: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_464623 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46462E |
|
loc_464623: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464623 |
|
loc_46462E: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_46463F |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_4645D3 |
|
|
|
loc_46463F: |
|
mov edx, 8 |
|
xor eax, eax |
|
loc_464646: |
|
cmp edi, gpBufEnd |
|
jb short ret_464688_5B |
|
mov ecx, 8 |
|
loc_464653: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464653 |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short ret_464688_5B |
|
mov ecx, 8 |
|
loc_464672: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464672 |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_464646 |
|
ret_464688_5B: |
|
} |
|
break; |
|
} |
|
} |
|
|
|
void __fastcall drawBottomArchesUpperScreen(unsigned char *pbDst, unsigned int *pMask) |
|
{ |
|
unsigned char *dst; // edi MAPDST |
|
unsigned char *src; // esi MAPDST |
|
short cel_type_16; // ax MAPDST |
|
unsigned char *tbl; |
|
|
|
gpCelFrame = (unsigned char *)speed_cel_frame_num_from_light_index_frame_num; |
|
dst = pbDst; |
|
gpDrawMask = pMask; |
|
if ( !(_BYTE)light_table_index ) |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = ((level_cel_block >> 12) & 7) + 8; |
|
LABEL_12: |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 8: // upper (bottom transparent), without lighting |
|
__asm { |
|
mov edx, 20h |
|
loc_464C7F: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_8S |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_464C98: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_464CA1 |
|
mov [edi], al |
|
loc_464CA1: |
|
inc edi |
|
dec ecx |
|
jnz short loc_464C98 |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_464C7F |
|
ret_4652C1_8S: |
|
} |
|
break; |
|
case 9: // upper (bottom transparent), without lighting |
|
__asm { |
|
mov ecx, 20h |
|
loc_464CC6: |
|
push ecx |
|
mov eax, gpDrawMask |
|
mov eax, [eax] |
|
mov gdwCurrentMask, eax |
|
mov edx, 20h |
|
loc_464CD8: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_464D12 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb ret_4652C0_9S |
|
push edx |
|
mov edx, gdwCurrentMask |
|
mov ecx, eax |
|
loc_464CF8: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_464D01 |
|
mov [edi], al |
|
loc_464D01: |
|
inc edi |
|
dec ecx |
|
jnz short loc_464CF8 |
|
mov gdwCurrentMask, edx |
|
pop edx |
|
test edx, edx |
|
jz short loc_464D2F |
|
jmp short loc_464CD8 |
|
|
|
loc_464D12: |
|
neg al |
|
add edi, eax |
|
mov ecx, eax |
|
and ecx, 1Fh |
|
jz short loc_464D2B |
|
mov ebx, gdwCurrentMask |
|
shl ebx, cl |
|
mov gdwCurrentMask, ebx |
|
loc_464D2B: |
|
sub edx, eax |
|
jnz short loc_464CD8 |
|
loc_464D2F: |
|
pop ecx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec ecx |
|
jnz short loc_464CC6 |
|
ret_4652C0_9S: |
|
pop eax |
|
} |
|
break; |
|
case 10: // upper (bottom transparent), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
loc_464D50: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_10S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_464D7B |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_464D88 |
|
loc_464D7B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
dec ecx |
|
lea edi, [edi+4] |
|
jnz short loc_464D7B |
|
loc_464D88: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_464D50 |
|
mov edx, 2 |
|
loc_464D98: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_10S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_464DC3 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
test ecx, ecx |
|
lea edi, [edi+2] |
|
jz short loc_464DD0 |
|
loc_464DC3: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464DC3 |
|
loc_464DD0: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_464D98 |
|
ret_4652C1_10S: |
|
} |
|
break; |
|
case 11: // upper (bottom transparent), without lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
loc_464DE9: |
|
cmp edi, gpBufEnd |
|
jb loc_464E77 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_464E10 |
|
loc_464E03: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464E03 |
|
loc_464E10: |
|
and ebp, 2 |
|
jz short loc_464E21 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_464E21: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_464DE9 |
|
mov edx, 2 |
|
loc_464E33: |
|
cmp edi, gpBufEnd |
|
jb short loc_464E77 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_464E56 |
|
loc_464E49: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464E49 |
|
loc_464E56: |
|
and ebp, 2 |
|
jz short loc_464E67 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_464E67: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_464E33 |
|
loc_464E77: |
|
pop ebp |
|
} |
|
break; |
|
case 12: // upper (bottom transparent), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
loc_464E82: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_12S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_464EAD |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_464EBA |
|
loc_464EAD: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464EAD |
|
loc_464EBA: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_464E82 |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_464ED7: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_12S |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_464EF0: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_464EF9 |
|
mov [edi], al |
|
loc_464EF9: |
|
inc edi |
|
dec ecx |
|
jnz short loc_464EF0 |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_464ED7 |
|
ret_4652C1_12S: |
|
} |
|
break; |
|
default: // upper (bottom transparent), without lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
loc_464F1F: |
|
cmp edi, gpBufEnd |
|
jb loc_464FB6 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_464F46 |
|
loc_464F39: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464F39 |
|
loc_464F46: |
|
and ebp, 2 |
|
jz short loc_464F57 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_464F57: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_464F1F |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_464F76: |
|
cmp edi, gpBufEnd |
|
jb short loc_464FB6 |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_464F8B: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_464F94 |
|
mov [edi], al |
|
loc_464F94: |
|
inc edi |
|
dec ecx |
|
jnz short loc_464F8B |
|
mov ebp, esi |
|
and ebp, 2 |
|
add esi, ebp |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_464F76 |
|
loc_464FB6: |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
if ( (_BYTE)light_table_index != lightmax ) |
|
{ |
|
if ( !(level_cel_block & 0x8000) ) |
|
{ |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
tbl = (unsigned char *)&pLightTbl[256 * light_table_index]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov ebx, tbl |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // upper (bottom transparent), with lighting |
|
__asm { |
|
mov edx, 20h |
|
loc_464892: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_0L |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_4648AB: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_4648B5 |
|
xlat |
|
mov [edi], al |
|
loc_4648B5: |
|
inc edi |
|
dec ecx |
|
jnz short loc_4648AB |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_464892 |
|
ret_4652C1_0L: |
|
} |
|
break; |
|
case 1: // upper (bottom transparent), with lighting |
|
__asm { |
|
mov ecx, 20h |
|
loc_4648DA: |
|
push ecx |
|
mov eax, gpDrawMask |
|
mov eax, [eax] |
|
mov gdwCurrentMask, eax |
|
mov edx, 20h |
|
loc_4648EC: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_464927 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb ret_4652C0_1L |
|
mov ecx, eax |
|
push edx |
|
mov edx, gdwCurrentMask |
|
loc_46490C: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_464916 |
|
xlat |
|
mov [edi], al |
|
loc_464916: |
|
inc edi |
|
dec ecx |
|
jnz short loc_46490C |
|
mov gdwCurrentMask, edx |
|
pop edx |
|
test edx, edx |
|
jz short loc_464944 |
|
jmp short loc_4648EC |
|
|
|
loc_464927: |
|
neg al |
|
add edi, eax |
|
mov ecx, eax |
|
and ecx, 1Fh |
|
jz short loc_464940 |
|
push eax |
|
mov eax, gdwCurrentMask |
|
shl eax, cl |
|
mov gdwCurrentMask, eax |
|
pop eax |
|
loc_464940: |
|
sub edx, eax |
|
jnz short loc_4648EC |
|
loc_464944: |
|
pop ecx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec ecx |
|
jnz loc_4648DA |
|
ret_4652C0_1L: |
|
pop eax |
|
} |
|
break; |
|
case 2: // upper (bottom transparent), with lighting |
|
__asm { |
|
mov edx, 1Eh |
|
loc_464969: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_2L |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46499E |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4649BB |
|
loc_46499E: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46499E |
|
loc_4649BB: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_464969 |
|
mov edx, 2 |
|
loc_4649CB: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_2L |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_464A00 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_464A1D |
|
loc_464A00: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464A00 |
|
loc_464A1D: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_4649CB |
|
ret_4652C1_2L: |
|
} |
|
break; |
|
case 3: // upper (bottom transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
loc_464A36: |
|
cmp edi, gpBufEnd |
|
jb loc_464AF8 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_464A6D |
|
loc_464A50: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464A50 |
|
loc_464A6D: |
|
and ebp, 2 |
|
jz short loc_464A88 |
|
mov ax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_464A88: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_464A36 |
|
mov edx, 2 |
|
loc_464A9A: |
|
cmp edi, gpBufEnd |
|
jb short loc_464AF8 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_464ACD |
|
loc_464AB0: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464AB0 |
|
loc_464ACD: |
|
and ebp, 2 |
|
jz short loc_464AE8 |
|
mov ax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_464AE8: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_464A9A |
|
loc_464AF8: |
|
pop ebp |
|
} |
|
break; |
|
case 4: // upper (bottom transparent), with lighting |
|
__asm { |
|
mov edx, 1Eh |
|
loc_464B03: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_4L |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_464B38 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_464B55 |
|
loc_464B38: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464B38 |
|
loc_464B55: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_464B03 |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_464B72: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_4L |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
mov eax, esi |
|
and eax, 2 |
|
add esi, eax |
|
loc_464B92: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_464B9C |
|
xlat |
|
mov [edi], al |
|
loc_464B9C: |
|
inc edi |
|
dec ecx |
|
jnz short loc_464B92 |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_464B72 |
|
ret_4652C1_4L: |
|
} |
|
break; |
|
default: // upper (bottom transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
loc_464BC2: |
|
cmp edi, gpBufEnd |
|
jb loc_464C74 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_464BF9 |
|
loc_464BDC: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_464BDC |
|
loc_464BF9: |
|
and ebp, 2 |
|
jz short loc_464C14 |
|
mov ax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_464C14: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_464BC2 |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_464C33: |
|
cmp edi, gpBufEnd |
|
jb short loc_464C74 |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_464C48: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_464C52 |
|
xlat |
|
mov [edi], al |
|
loc_464C52: |
|
inc edi |
|
dec ecx |
|
jnz short loc_464C48 |
|
mov ebp, esi |
|
and ebp, 2 |
|
add esi, ebp |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_464C33 |
|
loc_464C74: |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
src = (unsigned char *)pSpeedCels |
|
+ *(_DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
goto LABEL_12; |
|
} |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = (level_cel_block >> 12) & 7; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // upper (bottom transparent), black |
|
__asm { |
|
mov edx, 20h |
|
loc_464FC1: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_0B |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
xor eax, eax |
|
mov ecx, 20h |
|
loc_464FDC: |
|
shl edx, 1 |
|
jnb short loc_464FE2 |
|
mov [edi], al |
|
loc_464FE2: |
|
inc edi |
|
dec ecx |
|
jnz short loc_464FDC |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_464FC1 |
|
ret_4652C1_0B: |
|
} |
|
break; |
|
case 1: // upper (bottom transparent), black |
|
__asm { |
|
mov ecx, 20h |
|
loc_465007: |
|
push ecx |
|
mov eax, gpDrawMask |
|
mov eax, [eax] |
|
mov gdwCurrentMask, eax |
|
mov edx, 20h |
|
loc_465019: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_465054 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb ret_4652C0_1B |
|
push edx |
|
mov edx, gdwCurrentMask |
|
mov ecx, eax |
|
add esi, ecx |
|
xor eax, eax |
|
loc_46503D: |
|
shl edx, 1 |
|
jnb short loc_465043 |
|
mov [edi], al |
|
loc_465043: |
|
inc edi |
|
dec ecx |
|
jnz short loc_46503D |
|
mov gdwCurrentMask, edx |
|
pop edx |
|
test edx, edx |
|
jz short loc_465071 |
|
jmp short loc_465019 |
|
|
|
loc_465054: |
|
neg al |
|
add edi, eax |
|
mov ecx, eax |
|
and ecx, 1Fh |
|
jz short loc_46506D |
|
mov ebx, gdwCurrentMask |
|
shl ebx, cl |
|
mov gdwCurrentMask, ebx |
|
loc_46506D: |
|
sub edx, eax |
|
jnz short loc_465019 |
|
loc_465071: |
|
pop ecx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec ecx |
|
jnz loc_465007 |
|
ret_4652C0_1B: |
|
pop eax |
|
} |
|
break; |
|
case 2: // upper (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_465098: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_2B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4650BC |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4650C4 |
|
loc_4650BC: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4650BC |
|
loc_4650C4: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_4650D3 |
|
sub edx, 2 |
|
jmp short loc_465098 |
|
|
|
loc_4650D3: |
|
mov edx, 2 |
|
loc_4650D8: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_2B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4650FC |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465104 |
|
loc_4650FC: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4650FC |
|
loc_465104: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_4650D8 |
|
ret_4652C1_2B: |
|
} |
|
break; |
|
case 3: // upper (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_46511E: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_3B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465140 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465148 |
|
loc_465140: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465140 |
|
loc_465148: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_465159 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_46511E |
|
|
|
loc_465159: |
|
mov edx, 2 |
|
loc_46515E: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_3B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465180 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465188 |
|
loc_465180: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465180 |
|
loc_465188: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_46515E |
|
ret_4652C1_3B: |
|
} |
|
break; |
|
case 4: // upper (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_4651A4: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_4B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4651C8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4651D0 |
|
loc_4651C8: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4651C8 |
|
loc_4651D0: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_4651DF |
|
sub edx, 2 |
|
jmp short loc_4651A4 |
|
|
|
loc_4651DF: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_4651F1: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_4B |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
xor eax, eax |
|
mov ecx, 20h |
|
loc_46520C: |
|
shl edx, 1 |
|
jnb short loc_465212 |
|
mov [edi], al |
|
loc_465212: |
|
inc edi |
|
dec ecx |
|
jnz short loc_46520C |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_4651F1 |
|
ret_4652C1_4B: |
|
} |
|
break; |
|
default: // upper (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_465239: |
|
cmp edi, gpBufEnd |
|
jb ret_4652C1_5B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46525B |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465263 |
|
loc_46525B: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46525B |
|
loc_465263: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_465274 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_465239 |
|
|
|
loc_465274: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_465286: |
|
cmp edi, gpBufEnd |
|
jb short ret_4652C1_5B |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
xor eax, eax |
|
mov ecx, 20h |
|
loc_46529D: |
|
shl edx, 1 |
|
jnb short loc_4652A3 |
|
mov [edi], al |
|
loc_4652A3: |
|
inc edi |
|
dec ecx |
|
jnz short loc_46529D |
|
pop edx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_465286 |
|
ret_4652C1_5B: |
|
} |
|
break; |
|
} |
|
} |
|
|
|
void __fastcall drawUpperScreen(unsigned char *pbDst) |
|
{ |
|
unsigned char *dst; // edi MAPDST |
|
unsigned char *tbl; // ebx |
|
unsigned char *src; // esi MAPDST |
|
short cel_type_16; // ax MAPDST |
|
|
|
if ( cel_transparency_active ) |
|
{ |
|
if ( !arch_draw_type ) |
|
{ |
|
drawTopArchesUpperScreen(pbDst); |
|
return; |
|
} |
|
if ( arch_draw_type == 1 ) |
|
{ |
|
if ( block_lvid[level_piece_id] == 1 || block_lvid[level_piece_id] == 3 ) |
|
{ |
|
drawBottomArchesUpperScreen(pbDst, &LeftMask[31]); |
|
return; |
|
} |
|
} |
|
if ( arch_draw_type == 2 ) |
|
{ |
|
if ( block_lvid[level_piece_id] == 2 || block_lvid[level_piece_id] == 3 ) |
|
{ |
|
drawBottomArchesUpperScreen(pbDst, &RightMask[31]); |
|
return; |
|
} |
|
} |
|
} |
|
gpCelFrame = (unsigned char *)speed_cel_frame_num_from_light_index_frame_num; |
|
dst = pbDst; |
|
if ( !(_BYTE)light_table_index ) |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = ((level_cel_block >> 12) & 7) + 8; |
|
LABEL_22: |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 8: // upper (solid), without lighting |
|
__asm { |
|
mov edx, 20h |
|
loc_465A10: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_8S |
|
mov ecx, 8 |
|
loc_465A21: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465A21 |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_465A10 |
|
ret_465F33_8S: |
|
} |
|
break; |
|
case 9: // upper (solid), without lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 20h |
|
loc_465A42: |
|
mov edx, 20h |
|
loc_465A47: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_465A91 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_465AA2 |
|
mov ecx, eax |
|
shr ecx, 1 |
|
jnb short loc_465A6A |
|
mov al, [esi] |
|
inc esi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_465A8B |
|
loc_465A6A: |
|
shr ecx, 1 |
|
jnb short loc_465A7E |
|
mov ax, [esi] |
|
add esi, 2 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465A8B |
|
loc_465A7E: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465A7E |
|
loc_465A8B: |
|
test edx, edx |
|
jz short loc_465A99 |
|
jmp short loc_465A47 |
|
|
|
loc_465A91: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz short loc_465A47 |
|
loc_465A99: |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_465A42 |
|
loc_465AA2: |
|
pop ebp |
|
} |
|
break; |
|
case 10: // upper (solid), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
loc_465AAD: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_10S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465AD8 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465AE5 |
|
loc_465AD8: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465AD8 |
|
loc_465AE5: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_465AAD |
|
mov edx, 2 |
|
loc_465AF5: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_10S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465B20 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465B2D |
|
loc_465B20: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465B20 |
|
loc_465B2D: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_465AF5 |
|
ret_465F33_10S: |
|
} |
|
break; |
|
case 11: // upper (solid), without lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
loc_465B46: |
|
cmp edi, gpBufEnd |
|
jb loc_465BD4 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_465B6D |
|
loc_465B60: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465B60 |
|
loc_465B6D: |
|
and ebp, 2 |
|
jz short loc_465B7E |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_465B7E: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_465B46 |
|
mov edx, 2 |
|
loc_465B90: |
|
cmp edi, gpBufEnd |
|
jb short loc_465BD4 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_465BB3 |
|
loc_465BA6: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465BA6 |
|
loc_465BB3: |
|
and ebp, 2 |
|
jz short loc_465BC4 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_465BC4: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_465B90 |
|
loc_465BD4: |
|
pop ebp |
|
} |
|
break; |
|
case 12: // upper (solid), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
loc_465BDF: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_12S |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465C0A |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465C17 |
|
loc_465C0A: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465C0A |
|
loc_465C17: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_465BDF |
|
mov edx, 10h |
|
loc_465C27: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_12S |
|
mov ecx, 8 |
|
loc_465C38: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465C38 |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_465C27 |
|
ret_465F33_12S: |
|
} |
|
break; |
|
default: // upper (solid), without lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
loc_465C59: |
|
cmp edi, gpBufEnd |
|
jb short loc_465CC2 |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_465C7C |
|
loc_465C6F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465C6F |
|
loc_465C7C: |
|
and ebp, 2 |
|
jz short loc_465C8D |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_465C8D: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_465C59 |
|
mov edx, 10h |
|
loc_465C9F: |
|
cmp edi, gpBufEnd |
|
jb short loc_465CC2 |
|
mov ecx, 8 |
|
loc_465CAC: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465CAC |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_465C9F |
|
loc_465CC2: |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
if ( (_BYTE)light_table_index != lightmax ) |
|
{ |
|
if ( !(level_cel_block & 0x8000) ) |
|
{ |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
tbl = (unsigned char *)&pLightTbl[256 * light_table_index]; |
|
cel_type_16 = (unsigned short)level_cel_block >> 12; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov ebx, tbl |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // upper (solid), with lighting |
|
__asm { |
|
mov edx, 20h |
|
loc_465562: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_0L |
|
mov ecx, 20h |
|
push edx |
|
loc_465574: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_465574 |
|
pop edx |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_465562 |
|
ret_465F33_0L: |
|
} |
|
break; |
|
case 1: // upper (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 20h |
|
loc_4655BB: |
|
mov edx, 20h |
|
loc_4655C0: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_465644 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb loc_46565D |
|
mov ecx, eax |
|
push edx |
|
cmp cl, 4 |
|
jl short loc_465611 |
|
loc_4655DF: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_4655DF |
|
loc_465611: |
|
cmp cl, 2 |
|
jl short loc_46562C |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_46562C: |
|
and cl, 1 |
|
jz short loc_46563A |
|
mov dl, [esi] |
|
inc esi |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
inc edi |
|
loc_46563A: |
|
pop edx |
|
test edx, edx |
|
jz short loc_465650 |
|
jmp loc_4655C0 |
|
|
|
loc_465644: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz loc_4655C0 |
|
loc_465650: |
|
sub edi, 320h |
|
dec ebp |
|
jnz loc_4655BB |
|
loc_46565D: |
|
pop ebp |
|
} |
|
break; |
|
case 2: // upper (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
loc_465669: |
|
cmp edi, gpBufEnd |
|
jb loc_46575F |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
cmp cl, 4 |
|
jl short loc_4656BC |
|
loc_46568A: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_46568A |
|
loc_4656BC: |
|
cmp cl, 2 |
|
jl short loc_4656D7 |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_4656D7: |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge short loc_465669 |
|
mov ebp, 2 |
|
loc_4656E7: |
|
cmp edi, gpBufEnd |
|
jb short loc_46575F |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
cmp cl, 4 |
|
jl short loc_465736 |
|
loc_465704: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_465704 |
|
loc_465736: |
|
cmp cl, 2 |
|
jl short loc_465751 |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_465751: |
|
sub edi, 320h |
|
add ebp, 2 |
|
cmp ebp, 20h |
|
jnz short loc_4656E7 |
|
loc_46575F: |
|
pop ebp |
|
} |
|
break; |
|
case 3: // upper (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
loc_46576B: |
|
cmp edi, gpBufEnd |
|
jb loc_465861 |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
cmp cl, 4 |
|
jl short loc_4657B5 |
|
loc_465783: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_465783 |
|
loc_4657B5: |
|
cmp cl, 2 |
|
jl short loc_4657D0 |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_4657D0: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge short loc_46576B |
|
mov ebp, 2 |
|
loc_4657E9: |
|
cmp edi, gpBufEnd |
|
jb short loc_465861 |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
cmp cl, 4 |
|
jl short loc_46582F |
|
loc_4657FD: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_4657FD |
|
loc_46582F: |
|
cmp cl, 2 |
|
jl short loc_46584A |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_46584A: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
sub edi, 320h |
|
add edi, ebp |
|
add ebp, 2 |
|
cmp ebp, 20h |
|
jnz short loc_4657E9 |
|
loc_465861: |
|
pop ebp |
|
} |
|
break; |
|
case 4: // upper (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
loc_46586D: |
|
cmp edi, gpBufEnd |
|
jb loc_465933 |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
cmp cl, 4 |
|
jl short loc_4658C0 |
|
loc_46588E: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_46588E |
|
loc_4658C0: |
|
cmp cl, 2 |
|
jl short loc_4658DB |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_4658DB: |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge short loc_46586D |
|
mov ebp, 10h |
|
loc_4658EB: |
|
cmp edi, gpBufEnd |
|
jb short loc_465933 |
|
mov ecx, 20h |
|
loc_4658F8: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_4658F8 |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_4658EB |
|
loc_465933: |
|
pop ebp |
|
} |
|
break; |
|
default: // upper (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
loc_46593F: |
|
cmp edi, gpBufEnd |
|
jb loc_465A05 |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
cmp cl, 4 |
|
jl short loc_465989 |
|
loc_465957: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_465957 |
|
loc_465989: |
|
cmp cl, 2 |
|
jl short loc_4659A4 |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_4659A4: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge short loc_46593F |
|
mov ebp, 10h |
|
loc_4659BD: |
|
cmp edi, gpBufEnd |
|
jb short loc_465A05 |
|
mov ecx, 20h |
|
loc_4659CA: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_4659CA |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_4659BD |
|
loc_465A05: |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
src = (unsigned char *)pSpeedCels |
|
+ *(_DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; |
|
cel_type_16 = (unsigned short)level_cel_block >> 12; |
|
goto LABEL_22; |
|
} |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = ((unsigned int)level_cel_block >> 12) & 7; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // upper (solid), black |
|
__asm { |
|
mov edx, 20h |
|
xor eax, eax |
|
loc_465CCF: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_0B |
|
mov ecx, 8 |
|
loc_465CE0: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465CE0 |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_465CCF |
|
ret_465F33_0B: |
|
} |
|
break; |
|
case 1: // upper (solid), black |
|
__asm { |
|
push ebp |
|
mov ebp, 20h |
|
loc_465CFC: |
|
mov edx, 20h |
|
loc_465D01: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_465D41 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_465D52 |
|
mov ecx, eax |
|
add esi, ecx |
|
xor eax, eax |
|
shr ecx, 1 |
|
jnb short loc_465D25 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_465D3B |
|
loc_465D25: |
|
shr ecx, 1 |
|
jnb short loc_465D33 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465D3B |
|
loc_465D33: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465D33 |
|
loc_465D3B: |
|
test edx, edx |
|
jz short loc_465D49 |
|
jmp short loc_465D01 |
|
|
|
loc_465D41: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz short loc_465D01 |
|
loc_465D49: |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_465CFC |
|
loc_465D52: |
|
pop ebp |
|
} |
|
break; |
|
case 2: // upper (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_465D5F: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_2B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465D83 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465D8B |
|
loc_465D83: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465D83 |
|
loc_465D8B: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_465D9A |
|
sub edx, 2 |
|
jmp short loc_465D5F |
|
|
|
loc_465D9A: |
|
mov edx, 2 |
|
loc_465D9F: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_2B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465DC3 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465DCB |
|
loc_465DC3: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465DC3 |
|
loc_465DCB: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_465D9F |
|
ret_465F33_2B: |
|
} |
|
break; |
|
case 3: // upper (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_465DE5: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_3B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465E07 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465E0F |
|
loc_465E07: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465E07 |
|
loc_465E0F: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_465E20 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_465DE5 |
|
|
|
loc_465E20: |
|
mov edx, 2 |
|
loc_465E25: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_3B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465E47 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465E4F |
|
loc_465E47: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465E47 |
|
loc_465E4F: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_465E25 |
|
ret_465F33_3B: |
|
} |
|
break; |
|
case 4: // upper (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_465E6B: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_4B |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465E8F |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465E97 |
|
loc_465E8F: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465E8F |
|
loc_465E97: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_465EA6 |
|
sub edx, 2 |
|
jmp short loc_465E6B |
|
|
|
loc_465EA6: |
|
mov edx, 10h |
|
loc_465EAB: |
|
cmp edi, gpBufEnd |
|
jb ret_465F33_4B |
|
mov ecx, 8 |
|
loc_465EBC: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465EBC |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_465EAB |
|
ret_465F33_4B: |
|
} |
|
break; |
|
default: // upper (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_465ED6: |
|
cmp edi, gpBufEnd |
|
jb short ret_465F33_5B |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_465EF4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_465EFC |
|
loc_465EF4: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465EF4 |
|
loc_465EFC: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_465F0D |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_465ED6 |
|
|
|
loc_465F0D: |
|
mov edx, 10h |
|
loc_465F12: |
|
cmp edi, gpBufEnd |
|
jb short ret_465F33_5B |
|
mov ecx, 8 |
|
loc_465F1F: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_465F1F |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_465F12 |
|
ret_465F33_5B: |
|
} |
|
break; |
|
} |
|
} |
|
|
|
void __fastcall drawTopArchesLowerScreen(unsigned char *pbDst) |
|
{ |
|
unsigned char *dst; // edi MAPDST |
|
unsigned char *tbl; // ebx |
|
unsigned char *src; // esi MAPDST |
|
short cel_type_16; // ax MAPDST |
|
|
|
gpCelFrame = (unsigned char *)speed_cel_frame_num_from_light_index_frame_num; |
|
dst = pbDst; |
|
if ( !(_BYTE)light_table_index ) |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = ((level_cel_block >> 12) & 7) + 8; |
|
goto LABEL_11; |
|
} |
|
if ( (_BYTE)light_table_index == lightmax ) |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = (level_cel_block >> 12) & 7; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // lower (top transparent), black |
|
__asm { |
|
mov edx, 10h |
|
xor eax, eax |
|
loc_467484: |
|
cmp edi, gpBufEnd |
|
jb short loc_467494 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_4674A5 |
|
|
|
loc_467494: |
|
mov ecx, 8 |
|
loc_467499: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467499 |
|
loc_4674A5: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_4674BB |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_4674CB |
|
|
|
loc_4674BB: |
|
mov ecx, 8 |
|
loc_4674C0: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4674C0 |
|
loc_4674CB: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_467484 |
|
} |
|
break; |
|
case 1: // lower (top transparent), black |
|
__asm { |
|
mov eax, edi |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
mov ecx, 20h |
|
loc_4674E8: |
|
push ecx |
|
mov edx, 20h |
|
loc_4674EE: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_46756C |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_467507 |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_467566 |
|
|
|
loc_467507: |
|
mov ecx, eax |
|
add esi, ecx |
|
mov eax, edi |
|
and eax, 1 |
|
cmp eax, WorldBoolFlag |
|
jnz short loc_46753F |
|
xor eax, eax |
|
shr ecx, 1 |
|
jnb short loc_467525 |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_467566 |
|
jmp short loc_46754E |
|
|
|
loc_467525: |
|
shr ecx, 1 |
|
jnb short loc_467531 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_467566 |
|
loc_467531: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467531 |
|
jmp short loc_467566 |
|
|
|
loc_46753F: |
|
xor eax, eax |
|
shr ecx, 1 |
|
jnb short loc_46754E |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_467566 |
|
jmp short loc_467525 |
|
|
|
loc_46754E: |
|
shr ecx, 1 |
|
jnb short loc_46755B |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_467566 |
|
loc_46755B: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46755B |
|
loc_467566: |
|
test edx, edx |
|
jz short loc_467578 |
|
jmp short loc_4674EE |
|
|
|
loc_46756C: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz loc_4674EE |
|
loc_467578: |
|
pop ecx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
sub edi, 320h |
|
dec ecx |
|
jnz loc_4674E8 |
|
} |
|
break; |
|
case 2: // lower (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_4675A5: |
|
cmp edi, gpBufEnd |
|
jb short loc_4675B7 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_467608 |
|
|
|
loc_4675B7: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4675ED |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4675DF |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_467608 |
|
loc_4675DF: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4675DF |
|
jmp short loc_467608 |
|
|
|
loc_4675ED: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4675FD |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_467608 |
|
loc_4675FD: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4675FD |
|
loc_467608: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_467617 |
|
sub edx, 2 |
|
jmp short loc_4675A5 |
|
|
|
loc_467617: |
|
mov edx, 2 |
|
loc_46761C: |
|
cmp edi, gpBufEnd |
|
jb short loc_46762E |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_46767F |
|
|
|
loc_46762E: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_467664 |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_467656 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_46767F |
|
loc_467656: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467656 |
|
jmp short loc_46767F |
|
|
|
loc_467664: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_467674 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46767F |
|
loc_467674: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467674 |
|
loc_46767F: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_46761C |
|
} |
|
break; |
|
case 3: // lower (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_46769E: |
|
cmp edi, gpBufEnd |
|
jb short loc_4676B2 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_467701 |
|
|
|
loc_4676B2: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4676E6 |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4676D8 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_467701 |
|
loc_4676D8: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4676D8 |
|
jmp short loc_467701 |
|
|
|
loc_4676E6: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4676F6 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_467701 |
|
loc_4676F6: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4676F6 |
|
loc_467701: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_467712 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_46769E |
|
|
|
loc_467712: |
|
mov edx, 2 |
|
loc_467717: |
|
cmp edi, gpBufEnd |
|
jb short loc_46772B |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_46777A |
|
|
|
loc_46772B: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_46775F |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_467751 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_46777A |
|
loc_467751: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467751 |
|
jmp short loc_46777A |
|
|
|
loc_46775F: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_46776F |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46777A |
|
loc_46776F: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46776F |
|
loc_46777A: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_467717 |
|
} |
|
break; |
|
case 4: // lower (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_46779B: |
|
cmp edi, gpBufEnd |
|
jb short loc_4677AD |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_4677FE |
|
|
|
loc_4677AD: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4677E3 |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4677D5 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4677FE |
|
loc_4677D5: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4677D5 |
|
jmp short loc_4677FE |
|
|
|
loc_4677E3: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4677F3 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4677FE |
|
loc_4677F3: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4677F3 |
|
loc_4677FE: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_46780D |
|
sub edx, 2 |
|
jmp short loc_46779B |
|
|
|
loc_46780D: |
|
mov edx, 8 |
|
loc_467812: |
|
cmp edi, gpBufEnd |
|
jb short loc_467822 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_467835 |
|
|
|
loc_467822: |
|
mov ecx, 8 |
|
xor eax, eax |
|
loc_467829: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467829 |
|
loc_467835: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_46784B |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46785D |
|
|
|
loc_46784B: |
|
mov ecx, 8 |
|
xor eax, eax |
|
loc_467852: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467852 |
|
loc_46785D: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_467812 |
|
} |
|
break; |
|
default: // lower (top transparent), black |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
loc_467877: |
|
cmp edi, gpBufEnd |
|
jb short loc_46788B |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_4678DA |
|
|
|
loc_46788B: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_4678BF |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4678B1 |
|
inc edi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4678DA |
|
loc_4678B1: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4678B1 |
|
jmp short loc_4678DA |
|
|
|
loc_4678BF: |
|
xor eax, eax |
|
shr ecx, 2 |
|
jnb short loc_4678CF |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4678DA |
|
loc_4678CF: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4678CF |
|
loc_4678DA: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_4678EB |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_467877 |
|
|
|
loc_4678EB: |
|
mov edx, 8 |
|
loc_4678F0: |
|
cmp edi, gpBufEnd |
|
jb short loc_467900 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_467913 |
|
|
|
loc_467900: |
|
mov ecx, 8 |
|
xor eax, eax |
|
loc_467907: |
|
mov [edi+1], al |
|
mov [edi+3], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467907 |
|
loc_467913: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_467929 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46793B |
|
|
|
loc_467929: |
|
mov ecx, 8 |
|
xor eax, eax |
|
loc_467930: |
|
mov [edi], al |
|
mov [edi+2], al |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467930 |
|
loc_46793B: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_4678F0 |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
if ( !(level_cel_block & 0x8000) ) |
|
{ |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
tbl = (unsigned char *)&pLightTbl[256 * light_table_index]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov ebx, tbl |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // lower (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 10h |
|
loc_466133: |
|
cmp edi, gpBufEnd |
|
jb short loc_466143 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_466166 |
|
|
|
loc_466143: |
|
mov ecx, 8 |
|
loc_466148: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466148 |
|
loc_466166: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_46617C |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46619E |
|
|
|
loc_46617C: |
|
mov ecx, 8 |
|
loc_466181: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466181 |
|
loc_46619E: |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_466133 |
|
pop ebp |
|
} |
|
break; |
|
case 1: // lower (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov eax, edi |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
mov ecx, 20h |
|
loc_4661BD: |
|
push ecx |
|
mov ebp, 20h |
|
loc_4661C3: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js loc_4662E2 |
|
sub ebp, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_4661E3 |
|
add esi, eax |
|
add edi, eax |
|
jmp loc_4662D9 |
|
|
|
loc_4661E3: |
|
mov ecx, eax |
|
mov eax, edi |
|
and eax, 1 |
|
cmp eax, WorldBoolFlag |
|
jnz short loc_466263 |
|
shr ecx, 1 |
|
jb short loc_46622D |
|
shr ecx, 1 |
|
jnb short loc_466209 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_466209: |
|
test cl, cl |
|
jz short loc_46622B |
|
loc_46620D: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_46620D |
|
loc_46622B: |
|
jmp short loc_466261 |
|
|
|
loc_46622D: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_466240 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466240: |
|
test cl, cl |
|
jz short loc_466261 |
|
loc_466244: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466244 |
|
loc_466261: |
|
jmp short loc_4662D9 |
|
|
|
loc_466263: |
|
shr ecx, 1 |
|
jb short loc_46629B |
|
shr ecx, 1 |
|
jnb short loc_466278 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466278: |
|
test cl, cl |
|
jz short loc_466299 |
|
loc_46627C: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46627C |
|
loc_466299: |
|
jmp short loc_4662D9 |
|
|
|
loc_46629B: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4662B7 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4662B7: |
|
test cl, cl |
|
jz short loc_4662D9 |
|
loc_4662BB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4662BB |
|
loc_4662D9: |
|
test ebp, ebp |
|
jz short loc_4662EE |
|
jmp loc_4661C3 |
|
|
|
loc_4662E2: |
|
neg al |
|
add edi, eax |
|
sub ebp, eax |
|
jnz loc_4661C3 |
|
loc_4662EE: |
|
pop ecx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
sub edi, 320h |
|
dec ecx |
|
jnz loc_4661BD |
|
pop ebp |
|
} |
|
break; |
|
case 2: // lower (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_466370 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_46635F |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_466370 |
|
|
|
loc_46635F: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_466490 |
|
|
|
loc_466370: |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_466404 |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_4663CB |
|
shr ecx, 1 |
|
jnb short loc_4663A7 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4663A7: |
|
test cl, cl |
|
jz short loc_4663C9 |
|
loc_4663AB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4663AB |
|
loc_4663C9: |
|
jmp short loc_4663FF |
|
|
|
loc_4663CB: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4663DE |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_4663DE: |
|
test cl, cl |
|
jz short loc_4663FF |
|
loc_4663E2: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_4663E2 |
|
loc_4663FF: |
|
jmp loc_466481 |
|
|
|
loc_466404: |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_466443 |
|
shr ecx, 1 |
|
jnb short loc_466420 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466420: |
|
test cl, cl |
|
jz short loc_466441 |
|
loc_466424: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466424 |
|
loc_466441: |
|
jmp short loc_466481 |
|
|
|
loc_466443: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_46645F |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_46645F: |
|
test cl, cl |
|
jz short loc_466481 |
|
loc_466463: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466463 |
|
loc_466481: |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge loc_466370 |
|
loc_466490: |
|
mov ebp, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4664E8 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_4664D7 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add ebp, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_4664E8 |
|
|
|
loc_4664D7: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp loc_46660B |
|
|
|
loc_4664E8: |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_46657C |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_466543 |
|
shr ecx, 1 |
|
jnb short loc_46651F |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_46651F: |
|
test cl, cl |
|
jz short loc_466541 |
|
loc_466523: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466523 |
|
loc_466541: |
|
jmp short loc_466577 |
|
|
|
loc_466543: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_466556 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466556: |
|
test cl, cl |
|
jz short loc_466577 |
|
loc_46655A: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46655A |
|
loc_466577: |
|
jmp loc_4665F9 |
|
|
|
loc_46657C: |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_4665BB |
|
shr ecx, 1 |
|
jnb short loc_466598 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466598: |
|
test cl, cl |
|
jz short loc_4665B9 |
|
loc_46659C: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46659C |
|
loc_4665B9: |
|
jmp short loc_4665F9 |
|
|
|
loc_4665BB: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4665D7 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4665D7: |
|
test cl, cl |
|
jz short loc_4665F9 |
|
loc_4665DB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4665DB |
|
loc_4665F9: |
|
sub edi, 320h |
|
add ebp, 2 |
|
cmp ebp, 20h |
|
jnz loc_4664E8 |
|
loc_46660B: |
|
pop ebp |
|
} |
|
break; |
|
case 3: // lower (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_466671 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_466660 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_466671 |
|
|
|
loc_466660: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_466791 |
|
|
|
loc_466671: |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_466703 |
|
shr ecx, 1 |
|
jb short loc_4666C3 |
|
shr ecx, 1 |
|
jnb short loc_46669F |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_46669F: |
|
test cl, cl |
|
jz short loc_4666C1 |
|
loc_4666A3: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4666A3 |
|
loc_4666C1: |
|
jmp short loc_4666F7 |
|
|
|
loc_4666C3: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4666D6 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_4666D6: |
|
test cl, cl |
|
jz short loc_4666F7 |
|
loc_4666DA: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_4666DA |
|
loc_4666F7: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
jmp loc_466780 |
|
|
|
loc_466703: |
|
shr ecx, 1 |
|
jb short loc_46673B |
|
shr ecx, 1 |
|
jnb short loc_466718 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466718: |
|
test cl, cl |
|
jz short loc_466739 |
|
loc_46671C: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_46671C |
|
loc_466739: |
|
jmp short loc_466779 |
|
|
|
loc_46673B: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_466757 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_466757: |
|
test cl, cl |
|
jz short loc_466779 |
|
loc_46675B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_46675B |
|
loc_466779: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
loc_466780: |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge loc_466671 |
|
loc_466791: |
|
mov ebp, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4667E9 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_4667D8 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add ebp, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_4667E9 |
|
|
|
loc_4667D8: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp loc_46690C |
|
|
|
loc_4667E9: |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_46687B |
|
shr ecx, 1 |
|
jb short loc_46683B |
|
shr ecx, 1 |
|
jnb short loc_466817 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_466817: |
|
test cl, cl |
|
jz short loc_466839 |
|
loc_46681B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_46681B |
|
loc_466839: |
|
jmp short loc_46686F |
|
|
|
loc_46683B: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_46684E |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_46684E: |
|
test cl, cl |
|
jz short loc_46686F |
|
loc_466852: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466852 |
|
loc_46686F: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
jmp loc_4668F8 |
|
|
|
loc_46687B: |
|
shr ecx, 1 |
|
jb short loc_4668B3 |
|
shr ecx, 1 |
|
jnb short loc_466890 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466890: |
|
test cl, cl |
|
jz short loc_4668B1 |
|
loc_466894: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466894 |
|
loc_4668B1: |
|
jmp short loc_4668F1 |
|
|
|
loc_4668B3: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4668CF |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4668CF: |
|
test cl, cl |
|
jz short loc_4668F1 |
|
loc_4668D3: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4668D3 |
|
loc_4668F1: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
loc_4668F8: |
|
sub edi, 320h |
|
add edi, ebp |
|
add ebp, 2 |
|
cmp ebp, 20h |
|
jnz loc_4667E9 |
|
loc_46690C: |
|
pop ebp |
|
} |
|
break; |
|
case 4: // lower (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_466972 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_466961 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_466972 |
|
|
|
loc_466961: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_466A92 |
|
|
|
loc_466972: |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_466A06 |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_4669CD |
|
shr ecx, 1 |
|
jnb short loc_4669A9 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_4669A9: |
|
test cl, cl |
|
jz short loc_4669CB |
|
loc_4669AD: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_4669AD |
|
loc_4669CB: |
|
jmp short loc_466A01 |
|
|
|
loc_4669CD: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_4669E0 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_4669E0: |
|
test cl, cl |
|
jz short loc_466A01 |
|
loc_4669E4: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_4669E4 |
|
loc_466A01: |
|
jmp loc_466A83 |
|
|
|
loc_466A06: |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
shr ecx, 1 |
|
jb short loc_466A45 |
|
shr ecx, 1 |
|
jnb short loc_466A22 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466A22: |
|
test cl, cl |
|
jz short loc_466A43 |
|
loc_466A26: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466A26 |
|
loc_466A43: |
|
jmp short loc_466A83 |
|
|
|
loc_466A45: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_466A61 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_466A61: |
|
test cl, cl |
|
jz short loc_466A83 |
|
loc_466A65: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466A65 |
|
loc_466A83: |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge loc_466972 |
|
loc_466A92: |
|
mov ebp, 8 |
|
loc_466A97: |
|
cmp edi, gpBufEnd |
|
jb short loc_466AA7 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_466ACA |
|
|
|
loc_466AA7: |
|
mov ecx, 8 |
|
loc_466AAC: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466AAC |
|
loc_466ACA: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_466AE0 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_466B02 |
|
|
|
loc_466AE0: |
|
mov ecx, 8 |
|
loc_466AE5: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466AE5 |
|
loc_466B02: |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_466A97 |
|
pop ebp |
|
} |
|
break; |
|
default: // lower (top transparent), with lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_466B71 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_466B60 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_466B71 |
|
|
|
loc_466B60: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_466C91 |
|
|
|
loc_466B71: |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_466C03 |
|
shr ecx, 1 |
|
jb short loc_466BC3 |
|
shr ecx, 1 |
|
jnb short loc_466B9F |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_466B9F: |
|
test cl, cl |
|
jz short loc_466BC1 |
|
loc_466BA3: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466BA3 |
|
loc_466BC1: |
|
jmp short loc_466BF7 |
|
|
|
loc_466BC3: |
|
inc esi |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_466BD6 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466BD6: |
|
test cl, cl |
|
jz short loc_466BF7 |
|
loc_466BDA: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466BDA |
|
loc_466BF7: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
jmp loc_466C80 |
|
|
|
loc_466C03: |
|
shr ecx, 1 |
|
jb short loc_466C3B |
|
shr ecx, 1 |
|
jnb short loc_466C18 |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi], dl |
|
add edi, 2 |
|
loc_466C18: |
|
test cl, cl |
|
jz short loc_466C39 |
|
loc_466C1C: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466C1C |
|
loc_466C39: |
|
jmp short loc_466C79 |
|
|
|
loc_466C3B: |
|
mov dl, [esi] |
|
mov dl, [ebx+edx] |
|
inc esi |
|
mov [edi], dl |
|
inc edi |
|
shr ecx, 1 |
|
jnb short loc_466C57 |
|
mov dl, [esi+1] |
|
mov dl, [ebx+edx] |
|
add esi, 2 |
|
mov [edi+1], dl |
|
add edi, 2 |
|
loc_466C57: |
|
test cl, cl |
|
jz short loc_466C79 |
|
loc_466C5B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466C5B |
|
loc_466C79: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
loc_466C80: |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge loc_466B71 |
|
loc_466C91: |
|
mov ebp, 8 |
|
loc_466C96: |
|
cmp edi, gpBufEnd |
|
jb short loc_466CA6 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_466CC9 |
|
|
|
loc_466CA6: |
|
mov ecx, 8 |
|
loc_466CAB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, ah |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi+1], dl |
|
mov dl, ah |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-1], dl |
|
jnz short loc_466CAB |
|
loc_466CC9: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_466CDF |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_466D01 |
|
|
|
loc_466CDF: |
|
mov ecx, 8 |
|
loc_466CE4: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
shr eax, 10h |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
mov dl, al |
|
add edi, 4 |
|
mov dl, [ebx+edx] |
|
dec ecx |
|
mov [edi-2], dl |
|
jnz short loc_466CE4 |
|
loc_466D01: |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_466C96 |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
src = (unsigned char *)pSpeedCels + *(_DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
LABEL_11: |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 8: // lower (top transparent), without lighting |
|
__asm { |
|
mov edx, 10h |
|
loc_466D15: |
|
cmp edi, gpBufEnd |
|
jb short loc_466D25 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_466D41 |
|
|
|
loc_466D25: |
|
mov ecx, 8 |
|
loc_466D2A: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_466D2A |
|
loc_466D41: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_466D57 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_466D71 |
|
|
|
loc_466D57: |
|
mov ecx, 8 |
|
loc_466D5C: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_466D5C |
|
loc_466D71: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_466D15 |
|
} |
|
break; |
|
case 9: // lower (top transparent), without lighting |
|
__asm { |
|
mov eax, edi |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
mov ecx, 20h |
|
loc_466D8E: |
|
push ecx |
|
mov edx, 20h |
|
loc_466D94: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js loc_466E35 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_466DB1 |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_466E2C |
|
|
|
loc_466DB1: |
|
mov ecx, eax |
|
mov eax, edi |
|
and eax, 1 |
|
cmp eax, WorldBoolFlag |
|
jnz short loc_466DF5 |
|
shr ecx, 1 |
|
jnb short loc_466DCC |
|
inc esi |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_466E2C |
|
jmp short loc_466E05 |
|
|
|
loc_466DCC: |
|
shr ecx, 1 |
|
jnb short loc_466DDC |
|
inc esi |
|
inc edi |
|
mov al, [esi] |
|
inc esi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_466E2C |
|
loc_466DDC: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_466DDC |
|
jmp short loc_466E2C |
|
|
|
loc_466DF5: |
|
shr ecx, 1 |
|
jnb short loc_466E05 |
|
mov al, [esi] |
|
inc esi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_466E2C |
|
jmp short loc_466DCC |
|
|
|
loc_466E05: |
|
shr ecx, 1 |
|
jnb short loc_466E17 |
|
mov al, [esi] |
|
add esi, 2 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_466E2C |
|
loc_466E17: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_466E17 |
|
loc_466E2C: |
|
test edx, edx |
|
jz short loc_466E41 |
|
jmp loc_466D94 |
|
|
|
loc_466E35: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz loc_466D94 |
|
loc_466E41: |
|
pop ecx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
sub edi, 320h |
|
dec ecx |
|
jnz loc_466D8E |
|
} |
|
break; |
|
case 10: // lower (top transparent), without lighting |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_466EC1 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_466EB0 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_466EC1 |
|
|
|
loc_466EB0: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_466F3F |
|
|
|
loc_466EC1: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_466F0A |
|
shr ecx, 2 |
|
jnb short loc_466EF1 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_466F34 |
|
loc_466EF1: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_466EF1 |
|
jmp short loc_466F34 |
|
|
|
loc_466F0A: |
|
shr ecx, 2 |
|
jnb short loc_466F1F |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_466F34 |
|
loc_466F1F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_466F1F |
|
loc_466F34: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_466EC1 |
|
loc_466F3F: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_466F97 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_466F86 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_466F97 |
|
|
|
loc_466F86: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp ret_467944_10S |
|
|
|
loc_466F97: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_466FE0 |
|
shr ecx, 2 |
|
jnb short loc_466FC7 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_467009 |
|
loc_466FC7: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_466FC7 |
|
jmp short loc_467009 |
|
|
|
loc_466FE0: |
|
shr ecx, 2 |
|
jnb short loc_466FF4 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jz short loc_467009 |
|
loc_466FF4: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_466FF4 |
|
loc_467009: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_466F97 |
|
ret_467944_10S: |
|
} |
|
break; |
|
case 11: // lower (top transparent), without lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_46707C |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_46706B |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_46707C |
|
|
|
loc_46706B: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_4670FC |
|
|
|
loc_46707C: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov ebp, ecx |
|
mov WorldBoolFlag, eax |
|
jz short loc_4670C5 |
|
shr ecx, 2 |
|
jz short loc_4670B1 |
|
loc_46709A: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_46709A |
|
loc_4670B1: |
|
and ebp, 2 |
|
jz short loc_4670EF |
|
mov ax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
jmp short loc_4670EF |
|
|
|
loc_4670C5: |
|
shr ecx, 2 |
|
jz short loc_4670DF |
|
loc_4670CA: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_4670CA |
|
loc_4670DF: |
|
and ebp, 2 |
|
jz short loc_4670EF |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
loc_4670EF: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_46707C |
|
loc_4670FC: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467154 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_467143 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_467154 |
|
|
|
loc_467143: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp loc_4671DB |
|
|
|
loc_467154: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov ebp, ecx |
|
mov WorldBoolFlag, eax |
|
jz short loc_46719D |
|
shr ecx, 2 |
|
jz short loc_467189 |
|
loc_467172: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_467172 |
|
loc_467189: |
|
and ebp, 2 |
|
jz short loc_4671C7 |
|
mov ax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
jmp short loc_4671C7 |
|
|
|
loc_46719D: |
|
shr ecx, 2 |
|
jz short loc_4671B7 |
|
loc_4671A2: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_4671A2 |
|
loc_4671B7: |
|
and ebp, 2 |
|
jz short loc_4671C7 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
loc_4671C7: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz loc_467154 |
|
loc_4671DB: |
|
pop ebp |
|
} |
|
break; |
|
case 12: // lower (top transparent), without lighting |
|
__asm { |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467240 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_46722F |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_467240 |
|
|
|
loc_46722F: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_4672BE |
|
|
|
loc_467240: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov WorldBoolFlag, eax |
|
jz short loc_467289 |
|
shr ecx, 2 |
|
jnb short loc_467270 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_4672B3 |
|
loc_467270: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_467270 |
|
jmp short loc_4672B3 |
|
|
|
loc_467289: |
|
shr ecx, 2 |
|
jnb short loc_46729E |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], al |
|
test ecx, ecx |
|
lea edi, [edi+2] |
|
jz short loc_4672B3 |
|
loc_46729E: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
dec ecx |
|
lea edi, [edi+2] |
|
jnz short loc_46729E |
|
loc_4672B3: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_467240 |
|
loc_4672BE: |
|
mov edx, 8 |
|
loc_4672C3: |
|
cmp edi, gpBufEnd |
|
jb short loc_4672D3 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_4672EF |
|
|
|
loc_4672D3: |
|
mov ecx, 8 |
|
loc_4672D8: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_4672D8 |
|
loc_4672EF: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_467305 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46731F |
|
|
|
loc_467305: |
|
mov ecx, 8 |
|
loc_46730A: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_46730A |
|
loc_46731F: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_4672C3 |
|
} |
|
break; |
|
default: // lower (top transparent), without lighting |
|
__asm { |
|
push ebp |
|
xor eax, eax |
|
mov WorldBoolFlag, eax |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_46738D |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_46737C |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
mov eax, WorldBoolFlag |
|
shr ecx, 1 |
|
add eax, ecx |
|
mov WorldBoolFlag, eax |
|
jmp short loc_46738D |
|
|
|
loc_46737C: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp loc_46740D |
|
|
|
loc_46738D: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov eax, WorldBoolFlag |
|
inc eax |
|
and eax, 1 |
|
mov ebp, ecx |
|
mov WorldBoolFlag, eax |
|
jz short loc_4673D6 |
|
shr ecx, 2 |
|
jz short loc_4673C2 |
|
loc_4673AB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_4673AB |
|
loc_4673C2: |
|
and ebp, 2 |
|
jz short loc_467400 |
|
mov ax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
inc edi |
|
jmp short loc_467400 |
|
|
|
loc_4673D6: |
|
shr ecx, 2 |
|
jz short loc_4673F0 |
|
loc_4673DB: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_4673DB |
|
loc_4673F0: |
|
and ebp, 2 |
|
jz short loc_467400 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
loc_467400: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_46738D |
|
loc_46740D: |
|
mov edx, 8 |
|
loc_467412: |
|
cmp edi, gpBufEnd |
|
jb short loc_467422 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46743E |
|
|
|
loc_467422: |
|
mov ecx, 8 |
|
loc_467427: |
|
mov eax, [esi] |
|
add esi, 4 |
|
inc edi |
|
ror eax, 8 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
inc edi |
|
dec ecx |
|
jnz short loc_467427 |
|
loc_46743E: |
|
sub edi, 320h |
|
cmp edi, gpBufEnd |
|
jb short loc_467454 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46746E |
|
|
|
loc_467454: |
|
mov ecx, 8 |
|
loc_467459: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], al |
|
add edi, 2 |
|
ror eax, 10h |
|
mov [edi], al |
|
add edi, 2 |
|
dec ecx |
|
jnz short loc_467459 |
|
loc_46746E: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_467412 |
|
pop ebp |
|
} |
|
break; |
|
} |
|
} |
|
|
|
void __fastcall drawBottomArchesLowerScreen(unsigned char *pbDst, unsigned int *pMask) |
|
{ |
|
unsigned char *dst; // edi MAPDST |
|
short cel_type_16; // ax MAPDST |
|
unsigned char *src; // esi MAPDST |
|
unsigned char *tbl; |
|
|
|
gpCelFrame = (unsigned char *)speed_cel_frame_num_from_light_index_frame_num; |
|
dst = pbDst; |
|
gpDrawMask = pMask; |
|
if ( (_BYTE)light_table_index ) |
|
{ |
|
if ( (_BYTE)light_table_index == lightmax ) |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = (level_cel_block >> 12) & 7; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // lower (bottom transparent), black |
|
__asm { |
|
mov edx, 20h |
|
loc_46852E: |
|
cmp edi, gpBufEnd |
|
jb short loc_46853E |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_468558 |
|
|
|
loc_46853E: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
xor eax, eax |
|
mov ecx, 20h |
|
loc_46854D: |
|
shl edx, 1 |
|
jnb short loc_468553 |
|
mov [edi], al |
|
loc_468553: |
|
inc edi |
|
dec ecx |
|
jnz short loc_46854D |
|
pop edx |
|
loc_468558: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_46852E |
|
} |
|
break; |
|
case 1: // lower (bottom transparent), black |
|
__asm { |
|
mov ecx, 20h |
|
loc_468578: |
|
push ecx |
|
mov eax, gpDrawMask |
|
mov eax, [eax] |
|
mov gdwCurrentMask, eax |
|
mov edx, 20h |
|
loc_46858A: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_4685C7 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_4685A3 |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_4685C1 |
|
|
|
loc_4685A3: |
|
mov ecx, eax |
|
add esi, ecx |
|
push edx |
|
mov edx, gdwCurrentMask |
|
xor eax, eax |
|
loc_4685B0: |
|
shl edx, 1 |
|
jnb short loc_4685B6 |
|
mov [edi], al |
|
loc_4685B6: |
|
inc edi |
|
dec ecx |
|
jnz short loc_4685B0 |
|
mov gdwCurrentMask, edx |
|
pop edx |
|
loc_4685C1: |
|
test edx, edx |
|
jz short loc_4685E4 |
|
jmp short loc_46858A |
|
|
|
loc_4685C7: |
|
neg al |
|
add edi, eax |
|
mov ecx, eax |
|
and ecx, 1Fh |
|
jz short loc_4685E0 |
|
mov ebx, gdwCurrentMask |
|
shl ebx, cl |
|
mov gdwCurrentMask, ebx |
|
loc_4685E0: |
|
sub edx, eax |
|
jnz short loc_46858A |
|
loc_4685E4: |
|
pop ecx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec ecx |
|
jnz loc_468578 |
|
} |
|
break; |
|
case 2: // lower (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_46860B: |
|
cmp edi, gpBufEnd |
|
jb short loc_46861D |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_46863D |
|
|
|
loc_46861D: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_468635 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46863D |
|
loc_468635: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_468635 |
|
loc_46863D: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_46864C |
|
sub edx, 2 |
|
jmp short loc_46860B |
|
|
|
loc_46864C: |
|
mov edx, 2 |
|
loc_468651: |
|
cmp edi, gpBufEnd |
|
jb short loc_468663 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_468683 |
|
|
|
loc_468663: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46867B |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_468683 |
|
loc_46867B: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46867B |
|
loc_468683: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_468651 |
|
} |
|
break; |
|
case 3: // lower (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_46869D: |
|
cmp edi, gpBufEnd |
|
jb short loc_4686B1 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_4686CF |
|
|
|
loc_4686B1: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4686C7 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4686CF |
|
loc_4686C7: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4686C7 |
|
loc_4686CF: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_4686E0 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_46869D |
|
|
|
loc_4686E0: |
|
mov edx, 2 |
|
loc_4686E5: |
|
cmp edi, gpBufEnd |
|
jb short loc_4686F9 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_468717 |
|
|
|
loc_4686F9: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46870F |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_468717 |
|
loc_46870F: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46870F |
|
loc_468717: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_4686E5 |
|
} |
|
break; |
|
case 4: // lower (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_468733: |
|
cmp edi, gpBufEnd |
|
jb short loc_468745 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_468765 |
|
|
|
loc_468745: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46875D |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_468765 |
|
loc_46875D: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46875D |
|
loc_468765: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_468774 |
|
sub edx, 2 |
|
jmp short loc_468733 |
|
|
|
loc_468774: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_468786: |
|
cmp edi, gpBufEnd |
|
jb short loc_468796 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_4687B0 |
|
|
|
loc_468796: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
xor eax, eax |
|
mov ecx, 20h |
|
loc_4687A5: |
|
shl edx, 1 |
|
jnb short loc_4687AB |
|
mov [edi], al |
|
loc_4687AB: |
|
inc edi |
|
dec ecx |
|
jnz short loc_4687A5 |
|
pop edx |
|
loc_4687B0: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_468786 |
|
} |
|
break; |
|
default: // lower (bottom transparent), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_4687D2: |
|
cmp edi, gpBufEnd |
|
jb short loc_4687E6 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_468804 |
|
|
|
loc_4687E6: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4687FC |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_468804 |
|
loc_4687FC: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4687FC |
|
loc_468804: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_468815 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_4687D2 |
|
|
|
loc_468815: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_468827: |
|
cmp edi, gpBufEnd |
|
jb short loc_468837 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_468851 |
|
|
|
loc_468837: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
xor eax, eax |
|
mov ecx, 20h |
|
loc_468846: |
|
shl edx, 1 |
|
jnb short loc_46884C |
|
mov [edi], al |
|
loc_46884C: |
|
inc edi |
|
dec ecx |
|
jnz short loc_468846 |
|
pop edx |
|
loc_468851: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_468827 |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
if ( !(level_cel_block & 0x8000) ) |
|
{ |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
tbl = (unsigned char *)&pLightTbl[256 * light_table_index]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov ebx, tbl |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // lower (bottom transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 20h |
|
loc_467B49: |
|
cmp edi, gpBufEnd |
|
jb short loc_467B59 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_467B73 |
|
|
|
loc_467B59: |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_467B65: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_467B6F |
|
xlat |
|
mov [edi], al |
|
loc_467B6F: |
|
inc edi |
|
dec ecx |
|
jnz short loc_467B65 |
|
loc_467B73: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec ebp |
|
jnz short loc_467B49 |
|
pop ebp |
|
} |
|
break; |
|
case 1: // lower (bottom transparent), with lighting |
|
__asm { |
|
mov ecx, 20h |
|
loc_467B94: |
|
push ecx |
|
mov eax, gpDrawMask |
|
mov eax, [eax] |
|
mov gdwCurrentMask, eax |
|
mov edx, 20h |
|
loc_467BA6: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_467BE3 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_467BBF |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_467BDD |
|
|
|
loc_467BBF: |
|
mov ecx, eax |
|
push edx |
|
mov edx, gdwCurrentMask |
|
loc_467BC8: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_467BD2 |
|
xlat |
|
mov [edi], al |
|
loc_467BD2: |
|
inc edi |
|
dec ecx |
|
jnz short loc_467BC8 |
|
mov gdwCurrentMask, edx |
|
pop edx |
|
loc_467BDD: |
|
test edx, edx |
|
jz short loc_467C00 |
|
jmp short loc_467BA6 |
|
|
|
loc_467BE3: |
|
neg al |
|
add edi, eax |
|
mov ecx, eax |
|
and ecx, 1Fh |
|
jz short loc_467BFC |
|
push eax |
|
mov eax, gdwCurrentMask |
|
shl eax, cl |
|
mov gdwCurrentMask, eax |
|
pop eax |
|
loc_467BFC: |
|
sub edx, eax |
|
jnz short loc_467BA6 |
|
loc_467C00: |
|
pop ecx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec ecx |
|
jnz loc_467B94 |
|
} |
|
break; |
|
case 2: // lower (bottom transparent), with lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467C67 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_467C59 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_467C67 |
|
|
|
loc_467C59: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_467CB8 |
|
|
|
loc_467C67: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_467C90 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_467CAD |
|
loc_467C90: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467C90 |
|
loc_467CAD: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_467C67 |
|
loc_467CB8: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467D02 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_467CF1 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
jmp short loc_467D02 |
|
|
|
loc_467CF1: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp ret_468867_2L |
|
|
|
loc_467D02: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_467D2B |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_467D48 |
|
loc_467D2B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467D2B |
|
loc_467D48: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_467D02 |
|
ret_468867_2L: |
|
} |
|
break; |
|
case 3: // lower (bottom transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467DA3 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_467D95 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_467DA3 |
|
|
|
loc_467D95: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_467DF6 |
|
|
|
loc_467DA3: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_467DCE |
|
loc_467DB1: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467DB1 |
|
loc_467DCE: |
|
and ebp, 2 |
|
jz short loc_467DE9 |
|
mov ax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_467DE9: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_467DA3 |
|
loc_467DF6: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467E3D |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_467E2F |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
jmp short loc_467E3D |
|
|
|
loc_467E2F: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp short loc_467E93 |
|
|
|
loc_467E3D: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_467E68 |
|
loc_467E4B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467E4B |
|
loc_467E68: |
|
and ebp, 2 |
|
jz short loc_467E83 |
|
mov ax, [esi] |
|
add esi, 2 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_467E83: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_467E3D |
|
loc_467E93: |
|
pop ebp |
|
} |
|
break; |
|
case 4: // lower (bottom transparent), with lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467EE0 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_467ED2 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_467EE0 |
|
|
|
loc_467ED2: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_467F31 |
|
|
|
loc_467EE0: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_467F09 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_467F26 |
|
loc_467F09: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467F09 |
|
loc_467F26: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_467EE0 |
|
loc_467F31: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_467F43: |
|
cmp edi, gpBufEnd |
|
jb short loc_467F53 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_467F6F |
|
|
|
loc_467F53: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_467F60: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_467F6A |
|
xlat |
|
mov [edi], al |
|
loc_467F6A: |
|
inc edi |
|
dec ecx |
|
jnz short loc_467F60 |
|
pop edx |
|
loc_467F6F: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_467F43 |
|
} |
|
break; |
|
default: // lower (bottom transparent), with lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_467FD2 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_467FC4 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_467FD2 |
|
|
|
loc_467FC4: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_468025 |
|
|
|
loc_467FD2: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_467FFD |
|
loc_467FE0: |
|
mov eax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
xlat |
|
ror eax, 8 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_467FE0 |
|
loc_467FFD: |
|
and ebp, 2 |
|
jz short loc_468018 |
|
mov ax, [esi] |
|
add esi, 4 |
|
xlat |
|
ror ax, 8 |
|
xlat |
|
ror ax, 8 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_468018: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_467FD2 |
|
loc_468025: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_468037: |
|
cmp edi, gpBufEnd |
|
jb short loc_468047 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46806A |
|
|
|
loc_468047: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_468054: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_46805E |
|
xlat |
|
mov [edi], al |
|
loc_46805E: |
|
inc edi |
|
dec ecx |
|
jnz short loc_468054 |
|
mov ebp, esi |
|
and ebp, 2 |
|
add esi, ebp |
|
pop edx |
|
loc_46806A: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_468037 |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
src = (unsigned char *)pSpeedCels |
|
+ *(_DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; |
|
cel_type_16 = (unsigned char)(level_cel_block >> 12); |
|
} |
|
else |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = ((level_cel_block >> 12) & 7) + 8; |
|
} |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 8: // lower (bottom transparent), without lighting |
|
__asm { |
|
mov edx, 20h |
|
loc_46808B: |
|
cmp edi, gpBufEnd |
|
jb short loc_46809B |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_4680B6 |
|
|
|
loc_46809B: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_4680A8: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_4680B1 |
|
mov [edi], al |
|
loc_4680B1: |
|
inc edi |
|
dec ecx |
|
jnz short loc_4680A8 |
|
pop edx |
|
loc_4680B6: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_46808B |
|
} |
|
break; |
|
case 9: // lower (bottom transparent), without lighting |
|
__asm { |
|
mov ecx, 20h |
|
loc_4680D6: |
|
push ecx |
|
mov eax, gpDrawMask |
|
mov eax, [eax] |
|
mov gdwCurrentMask, eax |
|
mov edx, 20h |
|
loc_4680E8: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_468124 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_468101 |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_46811E |
|
|
|
loc_468101: |
|
mov ecx, eax |
|
push edx |
|
mov edx, gdwCurrentMask |
|
loc_46810A: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_468113 |
|
mov [edi], al |
|
loc_468113: |
|
inc edi |
|
dec ecx |
|
jnz short loc_46810A |
|
mov gdwCurrentMask, edx |
|
pop edx |
|
loc_46811E: |
|
test edx, edx |
|
jz short loc_468141 |
|
jmp short loc_4680E8 |
|
|
|
loc_468124: |
|
neg al |
|
add edi, eax |
|
mov ecx, eax |
|
and ecx, 1Fh |
|
jz short loc_46813D |
|
mov ebx, gdwCurrentMask |
|
shl ebx, cl |
|
mov gdwCurrentMask, ebx |
|
loc_46813D: |
|
sub edx, eax |
|
jnz short loc_4680E8 |
|
loc_468141: |
|
pop ecx |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec ecx |
|
jnz loc_4680D6 |
|
} |
|
break; |
|
case 10: // lower (bottom transparent), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4681A8 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_46819A |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_4681A8 |
|
|
|
loc_46819A: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_4681DF |
|
|
|
loc_4681A8: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4681C7 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4681D4 |
|
loc_4681C7: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4681C7 |
|
loc_4681D4: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_4681A8 |
|
loc_4681DF: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468229 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_468218 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
jmp short loc_468229 |
|
|
|
loc_468218: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp ret_468867_10S |
|
|
|
loc_468229: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_468248 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_468255 |
|
loc_468248: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_468248 |
|
loc_468255: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_468229 |
|
ret_468867_10S: |
|
} |
|
break; |
|
case 11: // lower (bottom transparent), without lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4682B0 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_4682A2 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_4682B0 |
|
|
|
loc_4682A2: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_4682E9 |
|
|
|
loc_4682B0: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_4682CB |
|
loc_4682BE: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4682BE |
|
loc_4682CB: |
|
and ebp, 2 |
|
jz short loc_4682DC |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_4682DC: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_4682B0 |
|
loc_4682E9: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468330 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_468322 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
jmp short loc_468330 |
|
|
|
loc_468322: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp short loc_46836C |
|
|
|
loc_468330: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_46834B |
|
loc_46833E: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46833E |
|
loc_46834B: |
|
and ebp, 2 |
|
jz short loc_46835C |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_46835C: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_468330 |
|
loc_46836C: |
|
pop ebp |
|
} |
|
break; |
|
case 12: // lower (bottom transparent), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4683B9 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_4683AB |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_4683B9 |
|
|
|
loc_4683AB: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_4683F0 |
|
|
|
loc_4683B9: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4683D8 |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4683E5 |
|
loc_4683D8: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4683D8 |
|
loc_4683E5: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_4683B9 |
|
loc_4683F0: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_468402: |
|
cmp edi, gpBufEnd |
|
jb short loc_468412 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46842D |
|
|
|
loc_468412: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_46841F: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_468428 |
|
mov [edi], al |
|
loc_468428: |
|
inc edi |
|
dec ecx |
|
jnz short loc_46841F |
|
pop edx |
|
loc_46842D: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_468402 |
|
} |
|
break; |
|
default: // lower (bottom transparent), without lighting |
|
__asm { |
|
push ebp |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468490 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_468482 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_468490 |
|
|
|
loc_468482: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_4684C9 |
|
|
|
loc_468490: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebp, ecx |
|
shr ecx, 2 |
|
jz short loc_4684AB |
|
loc_46849E: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46849E |
|
loc_4684AB: |
|
and ebp, 2 |
|
jz short loc_4684BC |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_4684BC: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_468490 |
|
loc_4684C9: |
|
mov eax, gpDrawMask |
|
sub eax, 40h |
|
mov gpDrawMask, eax |
|
mov edx, 10h |
|
loc_4684DB: |
|
cmp edi, gpBufEnd |
|
jb short loc_4684EB |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46850D |
|
|
|
loc_4684EB: |
|
push edx |
|
mov eax, gpDrawMask |
|
mov edx, [eax] |
|
mov ecx, 20h |
|
loc_4684F8: |
|
mov al, [esi] |
|
inc esi |
|
shl edx, 1 |
|
jnb short loc_468501 |
|
mov [edi], al |
|
loc_468501: |
|
inc edi |
|
dec ecx |
|
jnz short loc_4684F8 |
|
mov ebp, esi |
|
and ebp, 2 |
|
add esi, ebp |
|
pop edx |
|
loc_46850D: |
|
sub edi, 320h |
|
mov eax, gpDrawMask |
|
sub eax, 4 |
|
mov gpDrawMask, eax |
|
dec edx |
|
jnz short loc_4684DB |
|
pop ebp |
|
} |
|
break; |
|
} |
|
} |
|
|
|
void __fastcall drawLowerScreen(unsigned char *pbDst) |
|
{ |
|
unsigned char *dst; // edi MAPDST |
|
unsigned char *src; // esi MAPDST |
|
unsigned char *tbl; // ebx |
|
short cel_type_16; // ax MAPDST |
|
|
|
if ( cel_transparency_active ) |
|
{ |
|
if ( !arch_draw_type ) |
|
{ |
|
drawTopArchesLowerScreen(pbDst); |
|
return; |
|
} |
|
if ( arch_draw_type == 1 ) |
|
{ |
|
if ( block_lvid[level_piece_id] == 1 || block_lvid[level_piece_id] == 3 ) |
|
{ |
|
drawBottomArchesLowerScreen(pbDst, &LeftMask[31]); |
|
return; |
|
} |
|
} |
|
if ( arch_draw_type == 2 ) |
|
{ |
|
if ( block_lvid[level_piece_id] == 2 || block_lvid[level_piece_id] == 3 ) |
|
{ |
|
drawBottomArchesLowerScreen(pbDst, &RightMask[31]); |
|
return; |
|
} |
|
} |
|
} |
|
gpCelFrame = (unsigned char *)speed_cel_frame_num_from_light_index_frame_num; |
|
dst = pbDst; |
|
if ( (_BYTE)light_table_index ) |
|
{ |
|
if ( (_BYTE)light_table_index == lightmax ) |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = (level_cel_block >> 12) & 7; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // lower (solid), black |
|
__asm { |
|
mov edx, 20h |
|
xor eax, eax |
|
loc_469414: |
|
cmp edi, gpBufEnd |
|
jb short loc_469424 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_469431 |
|
|
|
loc_469424: |
|
mov ecx, 8 |
|
loc_469429: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_469429 |
|
loc_469431: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_469414 |
|
} |
|
break; |
|
case 1: // lower (solid), black |
|
__asm { |
|
mov ecx, 20h |
|
loc_469444: |
|
push ecx |
|
mov edx, 20h |
|
loc_46944A: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_469490 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_469463 |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_46948A |
|
|
|
loc_469463: |
|
mov ecx, eax |
|
add esi, ecx |
|
xor eax, eax |
|
shr ecx, 1 |
|
jnb short loc_469474 |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_46948A |
|
loc_469474: |
|
shr ecx, 1 |
|
jnb short loc_469482 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46948A |
|
loc_469482: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_469482 |
|
loc_46948A: |
|
test edx, edx |
|
jz short loc_469498 |
|
jmp short loc_46944A |
|
|
|
loc_469490: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz short loc_46944A |
|
loc_469498: |
|
pop ecx |
|
sub edi, 320h |
|
dec ecx |
|
jnz short loc_469444 |
|
} |
|
break; |
|
case 2: // lower (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_4694AE: |
|
cmp edi, gpBufEnd |
|
jb short loc_4694C0 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_4694E0 |
|
|
|
loc_4694C0: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4694D8 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4694E0 |
|
loc_4694D8: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4694D8 |
|
loc_4694E0: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_4694EF |
|
sub edx, 2 |
|
jmp short loc_4694AE |
|
|
|
loc_4694EF: |
|
mov edx, 2 |
|
loc_4694F4: |
|
cmp edi, gpBufEnd |
|
jb short loc_469506 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_469526 |
|
|
|
loc_469506: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46951E |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_469526 |
|
loc_46951E: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46951E |
|
loc_469526: |
|
sub edi, 320h |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_4694F4 |
|
} |
|
break; |
|
case 3: // lower (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_469540: |
|
cmp edi, gpBufEnd |
|
jb short loc_469554 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_469572 |
|
|
|
loc_469554: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46956A |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_469572 |
|
loc_46956A: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46956A |
|
loc_469572: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_469583 |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_469540 |
|
|
|
loc_469583: |
|
mov edx, 2 |
|
loc_469588: |
|
cmp edi, gpBufEnd |
|
jb short loc_46959C |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_4695BA |
|
|
|
loc_46959C: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4695B2 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_4695BA |
|
loc_4695B2: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4695B2 |
|
loc_4695BA: |
|
sub edi, 320h |
|
add edi, edx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_469588 |
|
} |
|
break; |
|
case 4: // lower (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_4695D6: |
|
cmp edi, gpBufEnd |
|
jb short loc_4695E8 |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
jmp short loc_469608 |
|
|
|
loc_4695E8: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_469600 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_469608 |
|
loc_469600: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_469600 |
|
loc_469608: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_469617 |
|
sub edx, 2 |
|
jmp short loc_4695D6 |
|
|
|
loc_469617: |
|
mov edx, 10h |
|
loc_46961C: |
|
cmp edi, gpBufEnd |
|
jb short loc_46962C |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_469639 |
|
|
|
loc_46962C: |
|
mov ecx, 8 |
|
loc_469631: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_469631 |
|
loc_469639: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_46961C |
|
} |
|
break; |
|
default: // lower (solid), black |
|
__asm { |
|
mov edx, 1Eh |
|
xor eax, eax |
|
loc_46964B: |
|
cmp edi, gpBufEnd |
|
jb short loc_46965F |
|
add esi, 20h |
|
sub esi, edx |
|
add edi, 20h |
|
sub edi, edx |
|
jmp short loc_46967D |
|
|
|
loc_46965F: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_469675 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46967D |
|
loc_469675: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_469675 |
|
loc_46967D: |
|
sub edi, 320h |
|
test edx, edx |
|
jz short loc_46968E |
|
add edi, edx |
|
sub edx, 2 |
|
jmp short loc_46964B |
|
|
|
loc_46968E: |
|
mov edx, 10h |
|
loc_469693: |
|
cmp edi, gpBufEnd |
|
jb short loc_4696A3 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_4696B0 |
|
|
|
loc_4696A3: |
|
mov ecx, 8 |
|
loc_4696A8: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4696A8 |
|
loc_4696B0: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_469693 |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
if ( !(level_cel_block & 0x8000) ) |
|
{ |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
tbl = (unsigned char *)&pLightTbl[256 * light_table_index]; |
|
cel_type_16 = (unsigned short)level_cel_block >> 12; |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov ebx, tbl |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 0: // lower (solid), with lighting |
|
__asm { |
|
mov edx, 20h |
|
push ebp |
|
loc_468B09: |
|
push edx |
|
cmp edi, gpBufEnd |
|
jb short loc_468B1A |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_468B4B |
|
|
|
loc_468B1A: |
|
xor edx, edx |
|
mov ebp, 8 |
|
loc_468B21: |
|
mov eax, [esi] |
|
add esi, 4 |
|
ror eax, 10h |
|
mov dl, al |
|
mov cl, [ebx+edx] |
|
mov dl, ah |
|
mov ch, [ebx+edx] |
|
ror eax, 10h |
|
shl ecx, 10h |
|
mov dl, al |
|
mov cl, [ebx+edx] |
|
mov dl, ah |
|
mov ch, [ebx+edx] |
|
mov [edi], ecx |
|
add edi, 4 |
|
dec ebp |
|
jnz short loc_468B21 |
|
loc_468B4B: |
|
sub edi, 320h |
|
pop edx |
|
dec edx |
|
jnz short loc_468B09 |
|
pop ebp |
|
} |
|
break; |
|
case 1: // lower (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ecx, 20h |
|
loc_468B61: |
|
push ecx |
|
mov ebp, 20h |
|
loc_468B67: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
jns short loc_468B78 |
|
neg al |
|
add edi, eax |
|
sub ebp, eax |
|
jmp short loc_468BEA |
|
|
|
loc_468B78: |
|
sub ebp, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_468B88 |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_468BEA |
|
|
|
loc_468B88: |
|
mov ecx, eax |
|
cmp cl, 4 |
|
jl short loc_468BC1 |
|
loc_468B8F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_468B8F |
|
loc_468BC1: |
|
cmp cl, 2 |
|
jl short loc_468BDC |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_468BDC: |
|
and cl, 1 |
|
jz short loc_468BEA |
|
mov dl, [esi] |
|
inc esi |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
inc edi |
|
loc_468BEA: |
|
test ebp, ebp |
|
jnz loc_468B67 |
|
pop ecx |
|
sub edi, 320h |
|
dec ecx |
|
jnz loc_468B61 |
|
pop ebp |
|
} |
|
break; |
|
case 2: // lower (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468C4E |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_468C40 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
jmp short loc_468C4E |
|
|
|
loc_468C40: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_468C75 |
|
|
|
loc_468C4E: |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
loc_468C5E: |
|
mov dl, [esi] |
|
inc esi |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
inc edi |
|
dec ecx |
|
jnz short loc_468C5E |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge short loc_468C4E |
|
loc_468C75: |
|
mov ebp, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468CBC |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_468CAE |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add ebp, ecx |
|
jmp short loc_468CBC |
|
|
|
loc_468CAE: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp short loc_468CE6 |
|
|
|
loc_468CBC: |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
loc_468CCC: |
|
mov dl, [esi] |
|
inc esi |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
inc edi |
|
dec ecx |
|
jnz short loc_468CCC |
|
add ebp, 2 |
|
sub edi, 320h |
|
cmp ebp, 20h |
|
jnz short loc_468CBC |
|
loc_468CE6: |
|
pop ebp |
|
} |
|
break; |
|
case 3: // lower (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468D34 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_468D26 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
jmp short loc_468D34 |
|
|
|
loc_468D26: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_468D5B |
|
|
|
loc_468D34: |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
loc_468D3B: |
|
mov dl, [esi] |
|
inc esi |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
inc edi |
|
dec ecx |
|
jnz short loc_468D3B |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge short loc_468D34 |
|
loc_468D5B: |
|
mov ebp, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468DA2 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_468D94 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add ebp, ecx |
|
jmp short loc_468DA2 |
|
|
|
loc_468D94: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp short loc_468DCC |
|
|
|
loc_468DA2: |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
loc_468DA9: |
|
mov dl, [esi] |
|
inc esi |
|
mov dl, [ebx+edx] |
|
mov [edi], dl |
|
inc edi |
|
dec ecx |
|
jnz short loc_468DA9 |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
sub edi, 320h |
|
add edi, ebp |
|
add ebp, 2 |
|
cmp ebp, 20h |
|
jnz short loc_468DA2 |
|
loc_468DCC: |
|
pop ebp |
|
} |
|
break; |
|
case 4: // lower (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468E1A |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_468E0C |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
jmp short loc_468E1A |
|
|
|
loc_468E0C: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_468E87 |
|
|
|
loc_468E1A: |
|
add edi, ebp |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
mov edx, ecx |
|
and edx, 2 |
|
add esi, edx |
|
cmp cl, 4 |
|
jl short loc_468E61 |
|
loc_468E2F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_468E2F |
|
loc_468E61: |
|
cmp cl, 2 |
|
jl short loc_468E7C |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_468E7C: |
|
sub edi, 320h |
|
sub ebp, 2 |
|
jge short loc_468E1A |
|
loc_468E87: |
|
mov ebp, 10h |
|
loc_468E8C: |
|
cmp edi, gpBufEnd |
|
jb short loc_468E9C |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_468ED3 |
|
|
|
loc_468E9C: |
|
mov ecx, 20h |
|
loc_468EA1: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_468EA1 |
|
loc_468ED3: |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_468E8C |
|
pop ebp |
|
} |
|
break; |
|
default: // lower (solid), with lighting |
|
__asm { |
|
push ebp |
|
mov ebp, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_468F2A |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_468F1C |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub ebp, ecx |
|
jmp short loc_468F2A |
|
|
|
loc_468F1C: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_468F97 |
|
|
|
loc_468F2A: |
|
mov ecx, 20h |
|
sub ecx, ebp |
|
cmp cl, 4 |
|
jl short loc_468F68 |
|
loc_468F36: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_468F36 |
|
loc_468F68: |
|
cmp cl, 2 |
|
jl short loc_468F83 |
|
mov dl, [esi] |
|
mov ch, [ebx+edx] |
|
mov [edi], ch |
|
mov dl, [esi+1] |
|
mov ch, [ebx+edx] |
|
mov [edi+1], ch |
|
add esi, 2 |
|
add edi, 2 |
|
loc_468F83: |
|
mov edx, esi |
|
and edx, 2 |
|
add esi, edx |
|
sub edi, 320h |
|
add edi, ebp |
|
sub ebp, 2 |
|
jge short loc_468F2A |
|
loc_468F97: |
|
mov ebp, 10h |
|
loc_468F9C: |
|
cmp edi, gpBufEnd |
|
jb short loc_468FAC |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_468FE3 |
|
|
|
loc_468FAC: |
|
mov ecx, 20h |
|
loc_468FB1: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov dl, al |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
ror eax, 10h |
|
mov [edi], ch |
|
mov ch, [ebx+edx] |
|
mov dl, al |
|
mov [edi+1], ch |
|
mov ch, [ebx+edx] |
|
mov dl, ah |
|
mov [edi+2], ch |
|
mov ch, [ebx+edx] |
|
mov [edi+3], ch |
|
add edi, 4 |
|
sub cl, 4 |
|
cmp cl, 4 |
|
jge short loc_468FB1 |
|
loc_468FE3: |
|
sub edi, 320h |
|
dec ebp |
|
jnz short loc_468F9C |
|
pop ebp |
|
} |
|
break; |
|
} |
|
return; |
|
} |
|
src = (unsigned char *)pSpeedCels |
|
+ *(_DWORD *)&gpCelFrame[4 * (light_table_index + 16 * (level_cel_block & 0xFFF))]; |
|
cel_type_16 = (unsigned short)level_cel_block >> 12; |
|
} |
|
else |
|
{ |
|
if ( level_cel_block & 0x8000 ) |
|
level_cel_block = *(_DWORD *)&gpCelFrame[64 * (level_cel_block & 0xFFF)] |
|
+ (unsigned short)(level_cel_block & 0xF000); |
|
src = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF)); |
|
cel_type_16 = (((unsigned int)level_cel_block >> 12) & 7) + 8; |
|
} |
|
__asm { |
|
xor edx, edx |
|
xor ecx, ecx |
|
mov edi, dst |
|
mov esi, src |
|
} |
|
switch ( cel_type_16 ) |
|
{ |
|
case 8: // lower (solid), without lighting |
|
__asm { |
|
mov edx, 20h |
|
loc_468FF7: |
|
cmp edi, gpBufEnd |
|
jb short loc_469007 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_469019 |
|
|
|
loc_469007: |
|
mov ecx, 8 |
|
loc_46900C: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46900C |
|
loc_469019: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_468FF7 |
|
} |
|
break; |
|
case 9: // lower (solid), without lighting |
|
__asm { |
|
mov ecx, 20h |
|
loc_46902C: |
|
push ecx |
|
mov edx, 20h |
|
loc_469032: |
|
xor eax, eax |
|
mov al, [esi] |
|
inc esi |
|
test al, al |
|
js short loc_469082 |
|
sub edx, eax |
|
cmp edi, gpBufEnd |
|
jb short loc_46904B |
|
add esi, eax |
|
add edi, eax |
|
jmp short loc_46907C |
|
|
|
loc_46904B: |
|
mov ecx, eax |
|
shr ecx, 1 |
|
jnb short loc_46905B |
|
mov al, [esi] |
|
inc esi |
|
mov [edi], al |
|
inc edi |
|
test ecx, ecx |
|
jz short loc_46907C |
|
loc_46905B: |
|
shr ecx, 1 |
|
jnb short loc_46906F |
|
mov ax, [esi] |
|
add esi, 2 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46907C |
|
loc_46906F: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46906F |
|
loc_46907C: |
|
test edx, edx |
|
jz short loc_46908A |
|
jmp short loc_469032 |
|
|
|
loc_469082: |
|
neg al |
|
add edi, eax |
|
sub edx, eax |
|
jnz short loc_469032 |
|
loc_46908A: |
|
pop ecx |
|
sub edi, 320h |
|
dec ecx |
|
jnz short loc_46902C |
|
} |
|
break; |
|
case 10: // lower (solid), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4690E0 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_4690D2 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_4690E0 |
|
|
|
loc_4690D2: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_469117 |
|
|
|
loc_4690E0: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_4690FF |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46910C |
|
loc_4690FF: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4690FF |
|
loc_46910C: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_4690E0 |
|
loc_469117: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_46915E |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_469150 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
jmp short loc_46915E |
|
|
|
loc_469150: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp short ret_469198_10S |
|
|
|
loc_46915E: |
|
mov ecx, 20h |
|
add edi, edx |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46917D |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_46918A |
|
loc_46917D: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46917D |
|
loc_46918A: |
|
add edx, 2 |
|
sub edi, 320h |
|
cmp edx, 20h |
|
jl short loc_46915E |
|
ret_469198_10S: |
|
} |
|
break; |
|
case 11: // lower (solid), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4691E4 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_4691D6 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_4691E4 |
|
|
|
loc_4691D6: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_46921D |
|
|
|
loc_4691E4: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebx, ecx |
|
shr ecx, 2 |
|
jz short loc_4691FF |
|
loc_4691F2: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4691F2 |
|
loc_4691FF: |
|
and ebx, 2 |
|
jz short loc_469210 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_469210: |
|
add edi, edx |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_4691E4 |
|
loc_46921D: |
|
mov edx, 2 |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_469264 |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Ah |
|
jg short loc_469256 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_2[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
add edx, ecx |
|
jmp short loc_469264 |
|
|
|
loc_469256: |
|
sub edi, 2D00h |
|
add esi, 100h |
|
jmp short ret_4692A0_11S |
|
|
|
loc_469264: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebx, ecx |
|
shr ecx, 2 |
|
jz short loc_46927F |
|
loc_469272: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_469272 |
|
loc_46927F: |
|
and ebx, 2 |
|
jz short loc_469290 |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_469290: |
|
add edi, edx |
|
add edx, 2 |
|
sub edi, 320h |
|
cmp edx, 20h |
|
jl short loc_469264 |
|
ret_4692A0_11S: |
|
} |
|
break; |
|
case 12: // lower (solid), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_4692EC |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_4692DE |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_4692EC |
|
|
|
loc_4692DE: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_469323 |
|
|
|
loc_4692EC: |
|
add edi, edx |
|
mov ecx, 20h |
|
sub ecx, edx |
|
shr ecx, 2 |
|
jnb short loc_46930B |
|
mov ax, [esi+2] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
test ecx, ecx |
|
jz short loc_469318 |
|
loc_46930B: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46930B |
|
loc_469318: |
|
sub edi, 320h |
|
sub edx, 2 |
|
jge short loc_4692EC |
|
loc_469323: |
|
mov edx, 10h |
|
loc_469328: |
|
cmp edi, gpBufEnd |
|
jb short loc_469338 |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_46934A |
|
|
|
loc_469338: |
|
mov ecx, 8 |
|
loc_46933D: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_46933D |
|
loc_46934A: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_469328 |
|
} |
|
break; |
|
default: // lower (solid), without lighting |
|
__asm { |
|
mov edx, 1Eh |
|
mov eax, edi |
|
sub eax, gpBufEnd |
|
jb short loc_46939F |
|
add eax, 3FFh |
|
shr eax, 8 |
|
cmp eax, 2Dh |
|
jg short loc_469391 |
|
mov ecx, WorldTbl3x16[eax*4] |
|
mov eax, ecx |
|
add esi, WorldTbl17_1[ecx] |
|
shl eax, 6 |
|
lea eax, [eax+eax*2] |
|
shr ecx, 1 |
|
sub edi, eax |
|
sub edx, ecx |
|
jmp short loc_46939F |
|
|
|
loc_469391: |
|
sub edi, 3000h |
|
add esi, 120h |
|
jmp short loc_4693D8 |
|
|
|
loc_46939F: |
|
mov ecx, 20h |
|
sub ecx, edx |
|
mov ebx, ecx |
|
shr ecx, 2 |
|
jz short loc_4693BA |
|
loc_4693AD: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4693AD |
|
loc_4693BA: |
|
and ebx, 2 |
|
jz short loc_4693CB |
|
mov ax, [esi] |
|
add esi, 4 |
|
mov [edi], ax |
|
add edi, 2 |
|
loc_4693CB: |
|
sub edi, 320h |
|
add edi, edx |
|
sub edx, 2 |
|
jge short loc_46939F |
|
loc_4693D8: |
|
mov edx, 10h |
|
loc_4693DD: |
|
cmp edi, gpBufEnd |
|
jb short loc_4693ED |
|
add esi, 20h |
|
add edi, 20h |
|
jmp short loc_4693FF |
|
|
|
loc_4693ED: |
|
mov ecx, 8 |
|
loc_4693F2: |
|
mov eax, [esi] |
|
add esi, 4 |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4693F2 |
|
loc_4693FF: |
|
sub edi, 320h |
|
dec edx |
|
jnz short loc_4693DD |
|
} |
|
break; |
|
} |
|
} |
|
|
|
void __fastcall world_draw_black_tile(unsigned char *pbDst) |
|
{ |
|
__asm { |
|
mov edi, ecx |
|
mov edx, 1Eh |
|
mov ebx, 1 |
|
xor eax, eax |
|
loc_4696D0: |
|
add edi, edx |
|
mov ecx, ebx |
|
loc_4696D4: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4696D4 |
|
add edi, edx |
|
sub edi, 340h |
|
test edx, edx |
|
jz short loc_4696EE |
|
sub edx, 2 |
|
inc ebx |
|
jmp short loc_4696D0 |
|
|
|
loc_4696EE: |
|
mov edx, 2 |
|
mov ebx, 0Fh |
|
loc_4696F8: |
|
add edi, edx |
|
mov ecx, ebx |
|
loc_4696FC: |
|
mov [edi], eax |
|
add edi, 4 |
|
dec ecx |
|
jnz short loc_4696FC |
|
add edi, edx |
|
sub edi, 340h |
|
dec ebx |
|
add edx, 2 |
|
cmp edx, 20h |
|
jnz short loc_4696F8 |
|
} |
|
}
|
|
|