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.
10278 lines
198 KiB
10278 lines
198 KiB
|
7 years ago
|
#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
|
||
|
|
}
|
||
|
|
}
|