mirror of
https://github.com/jmarshall23/Hellfire.git
synced 2026-08-11 23:40:51 +02:00
6947 lines
117 KiB
C++
6947 lines
117 KiB
C++
/*-----------------------------------------------------------------------**
|
|
** Diablo
|
|
**
|
|
** Scrolling file
|
|
**
|
|
** (C)1995 Condor, Inc. All rights reserved.
|
|
**
|
|
**-----------------------------------------------------------------------**
|
|
** $Header: /Diablo/SCRLASM.CPP 2 1/23/97 12:21p Jmorin $
|
|
**-----------------------------------------------------------------------**
|
|
**
|
|
** File Routines
|
|
** CheckForScroll
|
|
** DrawAndBlit
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
#include "diablo.h"
|
|
#pragma hdrstop
|
|
#include "scrlasm.h"
|
|
#include "gendung.h"
|
|
#include "lighting.h"
|
|
|
|
//*************************************************************************
|
|
// Externs from scrollrt.cpp
|
|
//*************************************************************************
|
|
extern long nLVal;
|
|
extern DWORD gdwPNum;
|
|
extern long ClipY;
|
|
extern int gnPieceNum;
|
|
extern BOOL nTrans;
|
|
extern char gbPartialTrans;
|
|
extern char lightmax;
|
|
|
|
|
|
//*************************************************************************
|
|
// Private
|
|
//*************************************************************************
|
|
static long sgLineVal, cm;
|
|
static byte wt;
|
|
static long *t;
|
|
static long sgRightMask[32] = {
|
|
0xeaaaaaaa, // 1110 1010 1010 1010 1010 1010 1010 1010
|
|
0xf5555555, // 1111 0101 0101 0101 0101 0101 0101 0101
|
|
0xfeaaaaaa, // 1111 1110 1010 1010 1010 1010 1010 1010
|
|
0xff555555, // 1111 1111 0101 0101 0101 0101 0101 0101
|
|
0xffeaaaaa, // 1111 1111 1110 1010 1010 1010 1010 1010
|
|
0xfff55555, // 1111 1111 1111 0101 0101 0101 0101 0101
|
|
0xfffeaaaa, // 1111 1111 1111 1110 1010 1010 1010 1010
|
|
0xffff5555, // 1111 1111 1111 1111 0101 0101 0101 0101
|
|
0xffffeaaa, // 1111 1111 1111 1111 1110 1010 1010 1010
|
|
0xfffff555, // 1111 1111 1111 1111 1111 0101 0101 0101
|
|
0xfffffeaa, // 1111 1111 1111 1111 1111 1110 1010 1010
|
|
0xffffff55, // 1111 1111 1111 1111 1111 1111 0101 0101
|
|
0xffffffea, // 1111 1111 1111 1111 1111 1111 1110 1010
|
|
0xfffffff5, // 1111 1111 1111 1111 1111 1111 1111 0101
|
|
0xfffffffe, // 1111 1111 1111 1111 1111 1111 1111 1110
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff }; // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
|
|
static long sgLeftMask[32] = {
|
|
0xaaaaaaab, // 1010 1010 1010 1010 1010 1010 1010 1011
|
|
0x5555555f, // 0101 0101 0101 0101 0101 0101 0101 1111
|
|
0xaaaaaabf, // 1010 1010 1010 1010 1010 1010 1011 1111
|
|
0x555555ff, // 0101 0101 0101 0101 0101 0101 1111 1111
|
|
0xaaaaabff, // 1010 1010 1010 1010 1010 1011 1111 1111
|
|
0x55555fff, // 0101 0101 0101 0101 0101 1111 1111 1111
|
|
0xaaaabfff, // 1010 1010 1010 1010 1011 1111 1111 1111
|
|
0x5555ffff, // 0101 0101 0101 0101 1111 1111 1111 1111
|
|
0xaaabffff, // 1010 1010 1010 1011 1111 1111 1111 1111
|
|
0x555fffff, // 0101 0101 0101 1111 1111 1111 1111 1111
|
|
0xaabfffff, // 1010 1010 1011 1111 1111 1111 1111 1111
|
|
0x55ffffff, // 0101 0101 1111 1111 1111 1111 1111 1111
|
|
0xabffffff, // 1010 1011 1111 1111 1111 1111 1111 1111
|
|
0x5fffffff, // 0101 1111 1111 1111 1111 1111 1111 1111
|
|
0xbfffffff, // 1011 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff, // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
0xffffffff }; // 1111 1111 1111 1111 1111 1111 1111 1111
|
|
|
|
static long sgFullMask[32] = {
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555, // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
0xaaaaaaaa, // 1010 1010 1010 1010 1010 1010 1010 1010
|
|
0x55555555 }; // 0101 0101 0101 0101 0101 0101 0101 0101
|
|
|
|
|
|
/*-----------------------------------------------------------------------**
|
|
** Now with Y clipping (top clip)
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void TDecodeMicroTile (BYTE *pDecodeTo)
|
|
{
|
|
t = µoffset[0][0];
|
|
__asm {
|
|
mov edi,dword ptr [pDecodeTo] // Dest
|
|
|
|
mov eax,dword ptr [nLVal]
|
|
or al,al
|
|
jz _NoLt
|
|
cmp al,byte ptr [lightmax]
|
|
jz _Black
|
|
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jnz _Speed
|
|
|
|
mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov ebx,dword ptr [nLVal]; // Light conversion table
|
|
shl ebx,8
|
|
add ebx,dword ptr [pLightTbl];
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
jz _Type0 // Solid 32x32 block
|
|
cmp ax,1
|
|
jz _Type1 // 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _Type2 // Left Triangle
|
|
cmp ax,3
|
|
jz _Type3 // Right Triangle
|
|
cmp ax,4
|
|
jz _Type4 // Left Triangle to wall
|
|
jmp _Type5 // Right Triangle to wall
|
|
|
|
_Speed: mov esi,dword ptr [t]
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,4
|
|
add eax,dword ptr [nLVal]
|
|
shl eax,2
|
|
add esi,eax // Source
|
|
mov eax,dword ptr [esi]
|
|
mov esi,dword ptr [pSpeedCels]
|
|
add esi,eax
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
_SCmp: cmp ax,8
|
|
jz _Type8 // PreTrans Solid 32x32 block
|
|
cmp ax,9
|
|
jz _Type9 // PreTrans 32x32 block with '0' holes
|
|
cmp ax,10
|
|
jz _TypeA // PreTrans Left Triangle
|
|
cmp ax,11
|
|
jz _TypeB // PreTrans Right Triangle
|
|
cmp ax,12
|
|
jz _TypeC // PreTrans Left Triangle to wall
|
|
jmp _TypeD // PreTrans Right Triangle to wall
|
|
|
|
_NoLt: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RNoLt
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RNoLt: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
add eax,8
|
|
jmp _SCmp
|
|
|
|
_Black: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RBlk
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RBlk: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
jz _TypeG // Black Trans Solid 32x32 block
|
|
cmp ax,1
|
|
jz _TypeH // Black Trans 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _TypeI // Black Trans Left Triangle
|
|
cmp ax,3
|
|
jz _TypeJ // Black Trans Right Triangle
|
|
cmp ax,4
|
|
jz _TypeK // Black Trans Left Triangle to wall
|
|
jmp _TypeL // Black Trans Right Triangle to wall
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type0: mov edx,16
|
|
_T0Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquad2
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquad1
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T0Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type1: mov eax,edi
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
mov ecx,32
|
|
|
|
_T1Lp1: push ecx
|
|
mov edx,32
|
|
|
|
_T1Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T1J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
mov ecx,eax
|
|
mov eax,edi
|
|
and eax,1
|
|
cmp eax,dword ptr [sgLineVal]
|
|
jnz _T1Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T1x
|
|
|
|
_T1Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T1x: or edx,edx
|
|
jz _T1Nxt
|
|
jmp _T1Lp2
|
|
|
|
_T1J: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _T1Lp2
|
|
|
|
_T1Nxt: pop ecx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _T1Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type2: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T2Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T2Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T2x
|
|
|
|
_T2Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T2x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T2b
|
|
sub edx,2
|
|
jmp _T2Lp1
|
|
|
|
_T2b: mov edx,2
|
|
_T2Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T2Od2
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T2x2
|
|
|
|
_T2Od2:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T2x2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T2Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type3: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T3Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T3Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T3x
|
|
|
|
_T3Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T3x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T3b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T3Lp1
|
|
|
|
_T3b: mov edx,2
|
|
_T3Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T3Od2
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T3x2
|
|
|
|
_T3Od2:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T3x2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T3Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type4: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T4Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T4Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T4x
|
|
|
|
_T4Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T4x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T4b
|
|
sub edx,2
|
|
jmp _T4Lp1
|
|
|
|
_T4b: mov edx,8
|
|
_T4Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquad2
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquad1
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T4Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type5: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T5Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T5Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T5x
|
|
|
|
_T5Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T5x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T5b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T5Lp1
|
|
|
|
_T5b: mov edx,8
|
|
_T5Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquad2
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquad1
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T5Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type8: mov edx,16
|
|
_T8Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_T8Lp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _T8Lp2
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_T8Lp3: lodsd
|
|
stosb
|
|
inc edi
|
|
ror eax,16
|
|
stosb
|
|
inc edi
|
|
loop _T8Lp3
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T8Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type9: mov eax,edi
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
mov ecx,32
|
|
|
|
_T9Lp1: push ecx
|
|
mov edx,32
|
|
|
|
_T9Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T9J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
mov ecx,eax
|
|
mov eax,edi
|
|
and eax,1
|
|
cmp eax,dword ptr [sgLineVal]
|
|
jnz _T9Od
|
|
shr ecx,1
|
|
jnc _T9w
|
|
inc esi
|
|
inc edi
|
|
jecxz _T9x
|
|
jmp _T9w2
|
|
_T9w: shr ecx,1
|
|
jnc _T9Lp3
|
|
inc esi
|
|
inc edi
|
|
movsb
|
|
jecxz _T9x
|
|
_T9Lp3: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _T9Lp3
|
|
jmp _T9x
|
|
|
|
_T9Od: shr ecx,1
|
|
jnc _T9w2
|
|
movsb
|
|
jecxz _T9x
|
|
jmp _T9w
|
|
_T9w2: shr ecx,1
|
|
jnc _T9Lp4
|
|
movsb
|
|
inc esi
|
|
inc edi
|
|
jecxz _T9x
|
|
_T9Lp4: lodsd
|
|
stosb
|
|
inc edi
|
|
ror eax,16
|
|
stosb
|
|
inc edi
|
|
loop _T9Lp4
|
|
|
|
_T9x: or edx,edx
|
|
jz _T9Nxt
|
|
jmp _T9Lp2
|
|
|
|
_T9J: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _T9Lp2
|
|
|
|
_T9Nxt: pop ecx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _T9Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeA: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TALp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TAOd
|
|
shr ecx,2
|
|
jnc _TALp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TAx
|
|
_TALp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TALp2
|
|
jmp _TAx
|
|
|
|
_TAOd: shr ecx,2
|
|
jnc _TALp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TAx
|
|
_TALp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TALp3
|
|
|
|
_TAx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TAb
|
|
sub edx,2
|
|
jmp _TALp1
|
|
|
|
_TAb: mov edx,2
|
|
_TALp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TAOd2
|
|
shr ecx,2
|
|
jnc _TALp5
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TAx2
|
|
_TALp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TALp5
|
|
jmp _TAx2
|
|
|
|
_TAOd2: shr ecx,2
|
|
jnc _TALp6
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TAx2
|
|
_TALp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TALp6
|
|
|
|
_TAx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TALp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeB: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TBLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TBOd
|
|
shr ecx,2
|
|
jnc _TBLp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TBx
|
|
_TBLp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TBLp2
|
|
jmp _TBx
|
|
|
|
_TBOd: shr ecx,2
|
|
jnc _TBLp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TBx
|
|
_TBLp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TBLp3
|
|
|
|
_TBx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TBb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TBLp1
|
|
|
|
_TBb: mov edx,2
|
|
_TBLp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TBOd2
|
|
shr ecx,2
|
|
jnc _TBLp5
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TBx2
|
|
_TBLp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TBLp5
|
|
jmp _TBx2
|
|
|
|
_TBOd2: shr ecx,2
|
|
jnc _TBLp6
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TBx2
|
|
_TBLp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TBLp6
|
|
|
|
_TBx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TBLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeC: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TCLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TCOd
|
|
shr ecx,2
|
|
jnc _TCLp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TCx
|
|
_TCLp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TCLp2
|
|
jmp _TCx
|
|
|
|
_TCOd: shr ecx,2
|
|
jnc _TCLp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TCx
|
|
_TCLp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TCLp3
|
|
|
|
_TCx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TCb
|
|
sub edx,2
|
|
jmp _TCLp1
|
|
|
|
_TCb: mov edx,8
|
|
_TCLp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TCLp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TCLp5
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TCLp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TCLp6
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TCLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeD: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TDLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TDOd
|
|
shr ecx,2
|
|
jnc _TDLp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TDx
|
|
_TDLp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TDLp2
|
|
jmp _TDx
|
|
|
|
_TDOd: shr ecx,2
|
|
jnc _TDLp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TDx
|
|
_TDLp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TDLp3
|
|
|
|
_TDx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TDb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TDLp1
|
|
|
|
_TDb: mov edx,8
|
|
_TDLp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TDLp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TDLp5
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TDLp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TDLp6
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TDLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeG: mov edx,16
|
|
xor eax,eax
|
|
_TGLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TGLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TGLp2
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TGLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TGLp3
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TGLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeH: mov eax,edi
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
mov ecx,32
|
|
|
|
_THLp1: push ecx
|
|
mov edx,32
|
|
|
|
_THLp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _THJ
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
mov ecx,eax
|
|
add esi,ecx
|
|
mov eax,edi
|
|
and eax,1
|
|
cmp eax,dword ptr [sgLineVal]
|
|
jnz _THOd
|
|
xor eax,eax
|
|
shr ecx,1
|
|
jnc _THw
|
|
inc edi
|
|
jecxz _THx
|
|
jmp _THw2
|
|
_THw: shr ecx,1
|
|
jnc _THLp3
|
|
inc edi
|
|
stosb
|
|
jecxz _THx
|
|
_THLp3: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _THLp3
|
|
jmp _THx
|
|
|
|
_THOd: xor eax,eax
|
|
shr ecx,1
|
|
jnc _THw2
|
|
stosb
|
|
jecxz _THx
|
|
jmp _THw
|
|
_THw2: shr ecx,1
|
|
jnc _THLp4
|
|
stosb
|
|
inc edi
|
|
jecxz _THx
|
|
_THLp4: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _THLp4
|
|
|
|
_THx: or edx,edx
|
|
jz _THNxt
|
|
jmp _THLp2
|
|
|
|
_THJ: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _THLp2
|
|
|
|
_THNxt: pop ecx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _THLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeI: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TILp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TIOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TIx
|
|
_TILp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TILp2
|
|
jmp _TIx
|
|
|
|
_TIOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TIx
|
|
_TILp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TILp3
|
|
|
|
_TIx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TIb
|
|
sub edx,2
|
|
jmp _TILp1
|
|
|
|
_TIb: mov edx,2
|
|
_TILp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TIOd2
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp5
|
|
inc edi
|
|
stosb
|
|
jecxz _TIx2
|
|
_TILp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TILp5
|
|
jmp _TIx2
|
|
|
|
_TIOd2: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp6
|
|
stosb
|
|
inc edi
|
|
jecxz _TIx2
|
|
_TILp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TILp6
|
|
|
|
_TIx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TILp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeJ: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TJLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TJOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TJx
|
|
_TJLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TJLp2
|
|
jmp _TJx
|
|
|
|
_TJOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TJx
|
|
_TJLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TJLp3
|
|
|
|
_TJx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TJb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TJLp1
|
|
|
|
_TJb: mov edx,2
|
|
_TJLp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TJOd2
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp5
|
|
inc edi
|
|
stosb
|
|
jecxz _TJx2
|
|
_TJLp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TJLp5
|
|
jmp _TJx2
|
|
|
|
_TJOd2: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp6
|
|
stosb
|
|
inc edi
|
|
jecxz _TJx2
|
|
_TJLp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TJLp6
|
|
|
|
_TJx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TJLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeK: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TKLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TKOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TKLp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TKx
|
|
_TKLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TKLp2
|
|
jmp _TKx
|
|
|
|
_TKOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TKLp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TKx
|
|
_TKLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TKLp3
|
|
|
|
_TKx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TKb
|
|
sub edx,2
|
|
jmp _TKLp1
|
|
|
|
_TKb: mov edx,8
|
|
xor eax,eax
|
|
_TKLp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TKLp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TKLp5
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TKLp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TKLp6
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TKLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeL: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TLLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TLOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TLLp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TLx
|
|
_TLLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TLLp2
|
|
jmp _TLx
|
|
|
|
_TLOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TLLp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TLx
|
|
_TLLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TLLp3
|
|
|
|
_TLx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TLb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TLLp1
|
|
|
|
_TLb: mov edx,8
|
|
xor eax,eax
|
|
_TLLp4: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TLLp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TLLp5
|
|
sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
_TLLp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TLLp6
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TLLp4
|
|
jmp _Done
|
|
|
|
xbyte1: // blank first
|
|
|
|
shr ecx,1
|
|
jnc xword2
|
|
inc esi
|
|
inc edi
|
|
|
|
xword1: // xlat first
|
|
shr ecx,1
|
|
jnc xquadt1
|
|
mov dl,[esi]
|
|
mov dl,[ebx+edx]
|
|
add esi,2
|
|
mov [edi],dl
|
|
add edi,2
|
|
|
|
xquadt1:
|
|
test cl,cl
|
|
jz xend
|
|
|
|
xquad1: // xlat first
|
|
/* debug
|
|
shl ecx,2
|
|
add esi,ecx
|
|
add edi,ecx
|
|
ret
|
|
*/
|
|
|
|
mov eax,[esi]
|
|
add esi,4
|
|
mov dl,al
|
|
shr eax,16
|
|
mov dl,[ebx+edx]
|
|
mov [edi],dl
|
|
mov dl,al
|
|
add edi,4
|
|
mov dl,[ebx+edx]
|
|
dec ecx
|
|
mov [edi-2],dl
|
|
jnz xquad1
|
|
|
|
ret
|
|
|
|
|
|
xbyte2: // xlat first
|
|
|
|
shr ecx,1
|
|
jnc xword1
|
|
mov dl,[esi]
|
|
mov dl,[ebx+edx]
|
|
inc esi
|
|
mov [edi],dl
|
|
inc edi
|
|
|
|
xword2: // blank first
|
|
shr ecx,1
|
|
jnc xquadt2
|
|
mov dl,[esi+1]
|
|
mov dl,[ebx+edx]
|
|
add esi,2
|
|
mov [edi+1],dl
|
|
add edi,2
|
|
|
|
xquadt2:
|
|
test cl,cl
|
|
jz xend
|
|
|
|
xquad2: // blank first
|
|
/* debug
|
|
shl ecx,2
|
|
add esi,ecx
|
|
add edi,ecx
|
|
ret
|
|
*/
|
|
|
|
|
|
mov eax,[esi]
|
|
add esi,4
|
|
mov dl,ah
|
|
shr eax,16
|
|
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 xquad2
|
|
|
|
xend:
|
|
ret
|
|
|
|
_PDone: pop eax
|
|
_Done: nop
|
|
|
|
|
|
} // end of asm block
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------**
|
|
** Now with Y clipping and Masking Transparency
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void TDecodeM12Tile (BYTE *pDecodeTo, long *mask)
|
|
{
|
|
t = µoffset[0][0];
|
|
__asm {
|
|
mov edi,dword ptr [pDecodeTo] // Dest
|
|
|
|
mov eax,dword ptr [nLVal]
|
|
or al,al
|
|
jz _NoLt
|
|
cmp al,byte ptr [lightmax]
|
|
jz _Black
|
|
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jnz _Speed
|
|
|
|
mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov ebx,dword ptr [nLVal]; // Light conversion table
|
|
shl ebx,8
|
|
add ebx,dword ptr [pLightTbl];
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
jz _Type0 // Solid 32x32 block
|
|
cmp ax,1
|
|
jz _Type1 // 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _Type2 // Left Triangle
|
|
cmp ax,3
|
|
jz _Type3 // Right Triangle
|
|
cmp ax,4
|
|
jz _Type4 // Left Triangle to wall
|
|
jmp _Type5 // Right Triangle to wall
|
|
|
|
_Speed: mov esi,dword ptr [t]
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,4
|
|
add eax,dword ptr [nLVal]
|
|
shl eax,2
|
|
add esi,eax // Source
|
|
mov eax,dword ptr [esi]
|
|
mov esi,dword ptr [pSpeedCels]
|
|
add esi,eax
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
_SCmp: cmp ax,8
|
|
jz _Type8 // PreTrans Solid 32x32 block
|
|
cmp ax,9
|
|
jz _Type9 // PreTrans 32x32 block with '0' holes
|
|
cmp ax,10
|
|
jz _TypeA // PreTrans Left Triangle
|
|
cmp ax,11
|
|
jz _TypeB // PreTrans Right Triangle
|
|
cmp ax,12
|
|
jz _TypeC // PreTrans Left Triangle to wall
|
|
jmp _TypeD // PreTrans Right Triangle to wall
|
|
|
|
_NoLt: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RNoLt
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RNoLt: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
add eax,8
|
|
jmp _SCmp
|
|
|
|
_Black: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RBlk
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RBlk: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
jz _TypeG // Black Trans Solid 32x32 block
|
|
cmp ax,1
|
|
jz _TypeH // Black Trans 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _TypeI // Black Trans Left Triangle
|
|
cmp ax,3
|
|
jz _TypeJ // Black Trans Right Triangle
|
|
cmp ax,4
|
|
jz _TypeK // Black Trans Left Triangle to wall
|
|
jmp _TypeL // Black Trans Right Triangle to wall
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type0: mov edx,32
|
|
_T0Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T0Lp2: lodsb
|
|
shl edx,1
|
|
jnc _T0S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T0S1: inc edi
|
|
loop _T0Lp2
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T0Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type1: mov ecx,32
|
|
|
|
_T1Lp1: push ecx
|
|
mov eax,dword ptr [mask]
|
|
mov eax,dword ptr [eax]
|
|
mov dword ptr [cm],eax
|
|
|
|
mov edx,32
|
|
|
|
_T1Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T1J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
mov ecx,eax
|
|
push edx
|
|
mov edx,dword ptr [cm]
|
|
_T1Lp3: lodsb
|
|
shl edx,1
|
|
jnc _T1S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T1S1: inc edi
|
|
loop _T1Lp3
|
|
mov dword ptr [cm],edx
|
|
pop edx
|
|
or edx,edx
|
|
jz _T1Nxt
|
|
jmp _T1Lp2
|
|
|
|
_T1J: neg al // Do jump
|
|
add edi,eax
|
|
mov ecx,eax
|
|
and ecx,01fh
|
|
jz _T1S2
|
|
push eax
|
|
mov eax,dword ptr [cm]
|
|
shl eax,cl
|
|
mov dword ptr [cm],eax
|
|
pop eax
|
|
_T1S2: sub edx,eax
|
|
jnz _T1Lp2
|
|
_T1Nxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec ecx
|
|
jnz _T1Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type2: mov edx,30
|
|
_T2Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T2Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T2x
|
|
_T2Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T2Lp2
|
|
_T2x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T2b
|
|
sub edx,2
|
|
jmp _T2Lp1
|
|
|
|
_T2b: mov edx,2
|
|
_T2Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T2Lp4
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T2x2
|
|
_T2Lp4: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T2Lp4
|
|
_T2x2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T2Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type3: mov edx,30
|
|
_T3Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T3Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T3x
|
|
_T3Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T3Lp2
|
|
_T3x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T3b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T3Lp1
|
|
|
|
_T3b: mov edx,2
|
|
_T3Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T3Lp4
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T3x2
|
|
_T3Lp4: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T3Lp4
|
|
_T3x2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T3Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type4: mov edx,30
|
|
_T4Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T4Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T4x
|
|
_T4Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T4Lp2
|
|
_T4x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T4b
|
|
sub edx,2
|
|
jmp _T4Lp1
|
|
|
|
_T4b: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_T4Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T4Lp4: lodsb
|
|
shl edx,1
|
|
jnc _T4S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T4S1: inc edi
|
|
loop _T4Lp4
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T4Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type5: mov edx,30
|
|
_T5Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T5Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T5x
|
|
_T5Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T5Lp2
|
|
_T5x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T5b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T5Lp1
|
|
|
|
_T5b: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_T5Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T5Lp4: lodsb
|
|
shl edx,1
|
|
jnc _T5S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T5S1: inc edi
|
|
loop _T5Lp4
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T5Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type8: mov edx,32
|
|
_T8Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T8Lp2: lodsb
|
|
shl edx,1
|
|
jnc _T8S1
|
|
mov byte ptr [edi],al
|
|
_T8S1: inc edi
|
|
loop _T8Lp2
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T8Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type9: mov ecx,32
|
|
|
|
_T9Lp1: push ecx
|
|
mov eax,dword ptr [mask]
|
|
mov eax,dword ptr [eax]
|
|
mov dword ptr [cm],eax
|
|
|
|
mov edx,32
|
|
|
|
_T9Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T9J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
push edx
|
|
mov edx,dword ptr [cm]
|
|
mov ecx,eax
|
|
_T9Lp3: lodsb
|
|
shl edx,1
|
|
jnc _T9S1
|
|
mov byte ptr [edi],al
|
|
_T9S1: inc edi
|
|
loop _T9Lp3
|
|
mov dword ptr [cm],edx
|
|
pop edx
|
|
or edx,edx
|
|
jz _T9Nxt
|
|
jmp _T9Lp2
|
|
|
|
_T9J: neg al // Do jump
|
|
add edi,eax
|
|
mov ecx,eax
|
|
and ecx,01fh
|
|
jz _T9S2
|
|
mov ebx,dword ptr [cm]
|
|
shl ebx,cl
|
|
mov dword ptr [cm],ebx
|
|
_T9S2: sub edx,eax
|
|
jnz _T9Lp2
|
|
_T9Nxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec ecx
|
|
jnz _T9Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeA: mov edx,30
|
|
_TALp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp2
|
|
movsw
|
|
jecxz _TAx
|
|
_TALp2: rep movsd
|
|
_TAx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TAb
|
|
sub edx,2
|
|
jmp _TALp1
|
|
|
|
_TAb: mov edx,2
|
|
_TALp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp4
|
|
movsw
|
|
jecxz _TAx2
|
|
_TALp4: rep movsd
|
|
_TAx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TALp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeB: mov edx,30
|
|
_TBLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp2
|
|
movsw
|
|
jecxz _TBx
|
|
_TBLp2: rep movsd
|
|
_TBx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TBb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TBLp1
|
|
|
|
_TBb: mov edx,2
|
|
_TBLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp4
|
|
movsw
|
|
jecxz _TBx2
|
|
_TBLp4: rep movsd
|
|
_TBx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TBLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeC: mov edx,30
|
|
_TCLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TCLp2
|
|
movsw
|
|
jecxz _TCx
|
|
_TCLp2: rep movsd
|
|
_TCx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TCb
|
|
sub edx,2
|
|
jmp _TCLp1
|
|
|
|
_TCb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TCLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_TCLp4: lodsb
|
|
shl edx,1
|
|
jnc _TCS1
|
|
mov byte ptr [edi],al
|
|
_TCS1: inc edi
|
|
loop _TCLp4
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TCLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeD: mov edx,30
|
|
_TDLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TDLp2
|
|
movsw
|
|
jecxz _TDx
|
|
_TDLp2: rep movsd
|
|
_TDx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TDb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TDLp1
|
|
|
|
_TDb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TDLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_TDLp4: lodsb
|
|
shl edx,1
|
|
jnc _TDS1
|
|
mov byte ptr [edi],al
|
|
_TDS1: inc edi
|
|
loop _TDLp4
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TDLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeG: mov edx,32
|
|
_TGLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
xor eax,eax
|
|
mov ecx,32
|
|
_TGLp2: shl edx,1
|
|
jnc _TGS1
|
|
mov byte ptr [edi],al
|
|
_TGS1: inc edi
|
|
loop _TGLp2
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TGLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeH: mov ecx,32
|
|
|
|
_THLp1: push ecx
|
|
mov eax,dword ptr [mask]
|
|
mov eax,dword ptr [eax]
|
|
mov dword ptr [cm],eax
|
|
|
|
mov edx,32
|
|
|
|
_THLp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _THJ
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
push edx
|
|
mov edx,dword ptr [cm]
|
|
mov ecx,eax
|
|
add esi,ecx
|
|
xor eax,eax
|
|
_THLp3: shl edx,1
|
|
jnc _THS1
|
|
mov byte ptr [edi],al
|
|
_THS1: inc edi
|
|
loop _THLp3
|
|
mov dword ptr [cm],edx
|
|
pop edx
|
|
or edx,edx
|
|
jz _THNxt
|
|
jmp _THLp2
|
|
|
|
_THJ: neg al // Do jump
|
|
add edi,eax
|
|
mov ecx,eax
|
|
and ecx,01fh
|
|
jz _THS2
|
|
mov ebx,dword ptr [cm]
|
|
shl ebx,cl
|
|
mov dword ptr [cm],ebx
|
|
_THS2: sub edx,eax
|
|
jnz _THLp2
|
|
_THNxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec ecx
|
|
jnz _THLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeI: mov edx,30
|
|
xor eax,eax
|
|
_TILp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TILp2
|
|
stosw
|
|
jecxz _TIx
|
|
_TILp2: rep stosd
|
|
_TIx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TIb
|
|
sub edx,2
|
|
jmp _TILp1
|
|
|
|
_TIb: mov edx,2
|
|
_TILp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
shr ecx,2
|
|
jnc _TILp4
|
|
stosw
|
|
jecxz _TIx2
|
|
_TILp4: rep stosd
|
|
_TIx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TILp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeJ: mov edx,30
|
|
xor eax,eax
|
|
_TJLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp2
|
|
stosw
|
|
jecxz _TJx
|
|
_TJLp2: rep stosd
|
|
_TJx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TJb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TJLp1
|
|
|
|
_TJb: mov edx,2
|
|
_TJLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp4
|
|
stosw
|
|
jecxz _TJx2
|
|
_TJLp4: rep stosd
|
|
_TJx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TJLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeK: mov edx,30
|
|
xor eax,eax
|
|
_TKLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TKLp2
|
|
stosw
|
|
jecxz _TKx
|
|
_TKLp2: rep stosd
|
|
_TKx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TKb
|
|
sub edx,2
|
|
jmp _TKLp1
|
|
|
|
_TKb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TKLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
xor eax,eax
|
|
mov ecx,32
|
|
_TKLp4: shl edx,1
|
|
jnc _TKS1
|
|
mov byte ptr [edi],al
|
|
_TKS1: inc edi
|
|
loop _TKLp4
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TKLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeL: mov edx,30
|
|
xor eax,eax
|
|
_TLLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TLLp2
|
|
stosw
|
|
jecxz _TLx
|
|
_TLLp2: rep stosd
|
|
_TLx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TLb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TLLp1
|
|
|
|
_TLb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TLLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
xor eax,eax
|
|
mov ecx,32
|
|
_TLLp4: shl edx,1
|
|
jnc _TLS1
|
|
mov byte ptr [edi],al
|
|
_TLS1: inc edi
|
|
loop _TLLp4
|
|
pop edx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TLLp3
|
|
jmp _Done
|
|
|
|
_PDone: pop eax
|
|
_Done: nop
|
|
|
|
} // end of asm block
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------**
|
|
** Now with Y clipping (top clip)
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void DecodeMicroTile (BYTE *pDecodeTo)
|
|
{
|
|
if (nTrans) {
|
|
if (gbPartialTrans == PART_TRANS_NONE) {
|
|
TDecodeMicroTile(pDecodeTo);
|
|
return;
|
|
} else {
|
|
if (gbPartialTrans == PART_TRANS_LEFT) {
|
|
wt = nWTypeTable[gnPieceNum];
|
|
if ((wt == WTYPE_LEFT) || (wt == WTYPE_ULC)) {
|
|
TDecodeM12Tile(pDecodeTo, &sgLeftMask[31]);
|
|
return;
|
|
}
|
|
if (wt == WTYPE_LRC) {
|
|
TDecodeM12Tile(pDecodeTo, &sgRightMask[31]);
|
|
return;
|
|
}
|
|
}
|
|
if (gbPartialTrans == PART_TRANS_RIGHT) {
|
|
wt = nWTypeTable[gnPieceNum];
|
|
if ((wt == WTYPE_RIGHT) || (wt == WTYPE_ULC)) {
|
|
TDecodeM12Tile(pDecodeTo, &sgRightMask[31]);
|
|
return;
|
|
}
|
|
if (wt == WTYPE_LRC) {
|
|
TDecodeM12Tile(pDecodeTo, &sgLeftMask[31]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
t = µoffset[0][0];
|
|
__asm {
|
|
mov edi,dword ptr [pDecodeTo] // Dest
|
|
|
|
mov eax,dword ptr [nLVal]
|
|
or al,al
|
|
jz _NoLt
|
|
cmp al,byte ptr [lightmax]
|
|
jz _Black
|
|
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jnz _Speed
|
|
|
|
mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov ebx,dword ptr [nLVal] // Light conversion table
|
|
shl ebx,8
|
|
add ebx,dword ptr [pLightTbl]
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
jz _Type0 // Solid 32x32 block
|
|
cmp ax,1
|
|
jz _Type1 // 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _Type2 // Left Triangle
|
|
cmp ax,3
|
|
jz _Type3 // Right Triangle
|
|
cmp ax,4
|
|
jz _Type4 // Left Triangle to wall
|
|
jmp _Type5 // Right Triangle to wall
|
|
|
|
_Speed: mov esi,dword ptr [t]
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,4
|
|
add eax,dword ptr [nLVal]
|
|
shl eax,2
|
|
add esi,eax // Source
|
|
mov eax,dword ptr [esi]
|
|
mov esi,dword ptr [pSpeedCels]
|
|
add esi,eax
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
_SCmp: cmp ax,8
|
|
jz _Type8 // PreTrans Solid 32x32 block
|
|
cmp ax,9
|
|
jz _Type9 // PreTrans 32x32 block with '0' holes
|
|
cmp ax,10
|
|
jz _TypeA // PreTrans Left Triangle
|
|
cmp ax,11
|
|
jz _TypeB // PreTrans Right Triangle
|
|
cmp ax,12
|
|
jz _TypeC // PreTrans Left Triangle to wall
|
|
jmp _TypeD // PreTrans Right Triangle to wall
|
|
|
|
_NoLt: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RNoLt
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RNoLt: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
add eax,8
|
|
jmp _SCmp
|
|
|
|
_Black: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RBlk
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RBlk: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
jz _TypeG // Black Trans Solid 32x32 block
|
|
cmp ax,1
|
|
jz _TypeH // Black Trans 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _TypeI // Black Trans Left Triangle
|
|
cmp ax,3
|
|
jz _TypeJ // Black Trans Right Triangle
|
|
cmp ax,4
|
|
jz _TypeK // Black Trans Left Triangle to wall
|
|
jmp _TypeL // Black Trans Right Triangle to wall
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type0: mov edx,32
|
|
_T0Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquads
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T0Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type1: mov ecx,32
|
|
|
|
_T1Lp1: push ecx
|
|
mov edx,32
|
|
|
|
_T1Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T1J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
mov ecx,eax
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
or edx,edx
|
|
jz _T1Nxt
|
|
jmp _T1Lp2
|
|
|
|
_T1J: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _T1Lp2
|
|
_T1Nxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _T1Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type2: mov edx,30
|
|
_T2Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T2b
|
|
sub edx,2
|
|
jmp _T2Lp1
|
|
|
|
_T2b: mov edx,2
|
|
_T2Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T2Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type3: mov edx,30
|
|
_T3Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T3b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T3Lp1
|
|
|
|
_T3b: mov edx,2
|
|
_T3Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T3Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type4: mov edx,30
|
|
_T4Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T4b
|
|
sub edx,2
|
|
jmp _T4Lp1
|
|
|
|
_T4b: mov edx,16
|
|
_T4Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquads
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T4Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type5: mov edx,30
|
|
_T5Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T5b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T5Lp1
|
|
|
|
_T5b: mov edx,16
|
|
_T5Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
|
|
push edx
|
|
call xquads
|
|
pop edx
|
|
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T5Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type8: mov edx,32
|
|
_T8Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
rep movsd
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T8Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type9: mov ecx,32
|
|
|
|
_T9Lp1: push ecx
|
|
mov edx,32
|
|
|
|
_T9Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T9J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
mov ecx,eax
|
|
shr ecx,1
|
|
jnc _T9w
|
|
movsb
|
|
jecxz _T9x
|
|
_T9w: shr ecx,1
|
|
jnc _T9Lp3
|
|
movsw
|
|
jecxz _T9x
|
|
_T9Lp3: rep movsd
|
|
_T9x: or edx,edx
|
|
jz _T9Nxt
|
|
jmp _T9Lp2
|
|
|
|
_T9J: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _T9Lp2
|
|
_T9Nxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
loop _T9Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeA: mov edx,30
|
|
_TALp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp2
|
|
movsw
|
|
jecxz _TAx
|
|
_TALp2: rep movsd
|
|
_TAx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TAb
|
|
sub edx,2
|
|
jmp _TALp1
|
|
|
|
_TAb: mov edx,2
|
|
_TALp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp4
|
|
movsw
|
|
jecxz _TAx2
|
|
_TALp4: rep movsd
|
|
_TAx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TALp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeB: mov edx,30
|
|
_TBLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp2
|
|
movsw
|
|
jecxz _TBx
|
|
_TBLp2: rep movsd
|
|
_TBx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TBb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TBLp1
|
|
|
|
_TBb: mov edx,2
|
|
_TBLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp4
|
|
movsw
|
|
jecxz _TBx2
|
|
_TBLp4: rep movsd
|
|
_TBx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TBLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeC: mov edx,30
|
|
_TCLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TCLp2
|
|
movsw
|
|
jecxz _TCx
|
|
_TCLp2: rep movsd
|
|
_TCx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TCb
|
|
sub edx,2
|
|
jmp _TCLp1
|
|
|
|
_TCb: mov edx,16
|
|
_TCLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
rep movsd
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TCLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeD: mov edx,30
|
|
_TDLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TDLp2
|
|
movsw
|
|
jecxz _TDx
|
|
_TDLp2: rep movsd
|
|
_TDx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TDb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TDLp1
|
|
|
|
_TDb: mov edx,16
|
|
_TDLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
rep movsd
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TDLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeG: mov edx,32
|
|
xor eax,eax
|
|
_TGLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
rep stosd
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TGLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeH: mov ecx,32
|
|
|
|
_THLp1: push ecx
|
|
mov edx,32
|
|
|
|
_THLp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _THJ
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _PDone
|
|
mov ecx,eax
|
|
add esi,ecx
|
|
xor eax,eax
|
|
shr ecx,1
|
|
jnc _THw
|
|
stosb
|
|
jecxz _THx
|
|
_THw: shr ecx,1
|
|
jnc _THLp3
|
|
stosw
|
|
jecxz _THx
|
|
_THLp3: rep stosd
|
|
_THx: or edx,edx
|
|
jz _THNxt
|
|
jmp _THLp2
|
|
|
|
_THJ: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _THLp2
|
|
_THNxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
loop _THLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeI: mov edx,30
|
|
xor eax,eax
|
|
_TILp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TILp2
|
|
stosw
|
|
jecxz _TIx
|
|
_TILp2: rep stosd
|
|
_TIx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TIb
|
|
sub edx,2
|
|
jmp _TILp1
|
|
|
|
_TIb: mov edx,2
|
|
_TILp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TILp4
|
|
stosw
|
|
jecxz _TIx2
|
|
_TILp4: rep stosd
|
|
_TIx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TILp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeJ: mov edx,30
|
|
xor eax,eax
|
|
_TJLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp2
|
|
stosw
|
|
jecxz _TJx
|
|
_TJLp2: rep stosd
|
|
_TJx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TJb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TJLp1
|
|
|
|
_TJb: mov edx,2
|
|
_TJLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp4
|
|
stosw
|
|
jecxz _TJx2
|
|
_TJLp4: rep stosd
|
|
_TJx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TJLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeK: mov edx,30
|
|
xor eax,eax
|
|
_TKLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TKLp2
|
|
stosw
|
|
jecxz _TKx
|
|
_TKLp2: rep stosd
|
|
_TKx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TKb
|
|
sub edx,2
|
|
jmp _TKLp1
|
|
|
|
_TKb: mov edx,16
|
|
_TKLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
rep stosd
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TKLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeL: mov edx,30
|
|
xor eax,eax
|
|
_TLLp1: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TLLp2
|
|
stosw
|
|
jecxz _TLx
|
|
_TLLp2: rep stosd
|
|
_TLx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TLb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TLLp1
|
|
|
|
_TLb: mov edx,16
|
|
_TLLp3: cmp edi,dword ptr [ClipY]
|
|
jb _Done
|
|
mov ecx,8
|
|
rep stosd
|
|
sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TLLp3
|
|
jmp _Done
|
|
|
|
xbytes:
|
|
|
|
shr cl,1
|
|
jnc xwords
|
|
|
|
mov dl, [esi]
|
|
mov dl, [ebx+edx]
|
|
mov [edi],dl
|
|
|
|
add esi,1
|
|
add edi,1
|
|
|
|
xwords:
|
|
shr cl,1
|
|
jnc xquads
|
|
|
|
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
|
|
|
|
xquads:
|
|
test cl,cl
|
|
jz xend
|
|
|
|
xnext:
|
|
mov eax, [esi]
|
|
add esi,4
|
|
|
|
mov dl,al
|
|
mov ch,[ebx+edx]
|
|
|
|
mov dl,ah
|
|
ror eax,16
|
|
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
|
|
|
|
dec cl
|
|
jnz xnext
|
|
|
|
xend:
|
|
ret
|
|
|
|
_PDone: pop eax
|
|
_Done: nop
|
|
|
|
} // end of asm block
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------**
|
|
** Now with Y clipping
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void TCDecodeMicroTile (BYTE *pDecodeTo)
|
|
{
|
|
t = µoffset[0][0];
|
|
__asm {
|
|
mov edi,dword ptr [pDecodeTo] // Dest
|
|
|
|
mov eax,dword ptr [nLVal]
|
|
or al,al
|
|
jz _NoLt
|
|
cmp al,byte ptr [lightmax]
|
|
jz _Black
|
|
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jnz _Speed
|
|
|
|
mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov ebx,dword ptr [nLVal]; // Light conversion table
|
|
shl ebx,8
|
|
add ebx,dword ptr [pLightTbl];
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
jz _Type0 // Solid 32x32 block
|
|
cmp ax,1
|
|
jz _Type1 // 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _Type2 // Left Triangle
|
|
cmp ax,3
|
|
jz _Type3 // Right Triangle
|
|
cmp ax,4
|
|
jz _Type4 // Left Triangle to wall
|
|
jmp _Type5 // Right Triangle to wall
|
|
|
|
_Speed: mov esi,dword ptr [t]
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,4
|
|
add eax,dword ptr [nLVal]
|
|
shl eax,2
|
|
add esi,eax // Source
|
|
mov eax,dword ptr [esi]
|
|
mov esi,dword ptr [pSpeedCels]
|
|
add esi,eax
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
_SCmp: cmp ax,8
|
|
jz _Type8 // PreTrans Solid 32x32 block
|
|
cmp ax,9
|
|
jz _Type9 // PreTrans 32x32 block with '0' holes
|
|
cmp ax,10
|
|
jz _TypeA // PreTrans Left Triangle
|
|
cmp ax,11
|
|
jz _TypeB // PreTrans Right Triangle
|
|
cmp ax,12
|
|
jz _TypeC // PreTrans Left Triangle to wall
|
|
jmp _TypeD // PreTrans Right Triangle to wall
|
|
|
|
_NoLt: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RNoLt
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RNoLt: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
add eax,8
|
|
jmp _SCmp
|
|
|
|
_Black: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RBlk
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RBlk: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
jz _TypeG // Black Trans Solid 32x32 block
|
|
cmp ax,1
|
|
jz _TypeH // Black Trans 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _TypeI // Black Trans Left Triangle
|
|
cmp ax,3
|
|
jz _TypeJ // Black Trans Right Triangle
|
|
cmp ax,4
|
|
jz _TypeK // Black Trans Left Triangle to wall
|
|
jmp _TypeL // Black Trans Right Triangle to wall
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type0: mov edx,16
|
|
_T0Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T0C1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T0C2
|
|
_T0C1: mov ecx,8
|
|
|
|
push edx
|
|
call xquad2
|
|
pop edx
|
|
|
|
_T0C2: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T0C3
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T0C4
|
|
_T0C3: mov ecx,8
|
|
|
|
push edx
|
|
call xquad1
|
|
pop edx
|
|
|
|
_T0C4: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T0Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type1: mov eax,edi
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
mov ecx,32
|
|
|
|
_T1Lp1: push ecx
|
|
mov edx,32
|
|
|
|
_T1Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T1J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T1C1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _T1x
|
|
_T1C1: mov ecx,eax
|
|
mov eax,edi
|
|
and eax,1
|
|
cmp eax,dword ptr [sgLineVal]
|
|
jnz _T1Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T1x
|
|
|
|
_T1Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T1x: or edx,edx
|
|
jz _T1Nxt
|
|
jmp _T1Lp2
|
|
|
|
_T1J: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _T1Lp2
|
|
_T1Nxt: pop ecx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _T1Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type2: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T2Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T2C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _T2x
|
|
_T2C1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T2Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T2x
|
|
|
|
_T2Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T2x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T2b
|
|
sub edx,2
|
|
jmp _T2Lp1
|
|
|
|
_T2b: mov edx,2
|
|
_T2Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _T2C2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _T2x2
|
|
_T2C2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T2Od2
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T2x2
|
|
|
|
_T2Od2:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T2x2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T2Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type3: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T3Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T3C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T3x
|
|
_T3C1: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T3Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T3x
|
|
|
|
_T3Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T3x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T3b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T3Lp1
|
|
|
|
_T3b: mov edx,2
|
|
_T3Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _T3C2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T3x2
|
|
_T3C2: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T3Od2
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T3x2
|
|
|
|
_T3Od2:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T3x2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T3Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type4: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T4Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T4C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _T4x
|
|
_T4C1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T4Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T4x
|
|
|
|
_T4Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T4x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T4b
|
|
sub edx,2
|
|
jmp _T4Lp1
|
|
|
|
_T4b: mov edx,8
|
|
_T4Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _T4C2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T4C3
|
|
_T4C2: mov ecx,8
|
|
|
|
push edx
|
|
call xquad2
|
|
pop edx
|
|
|
|
_T4C3: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T4C4
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T4C5
|
|
_T4C4: mov ecx,8
|
|
|
|
push edx
|
|
call xquad1
|
|
pop edx
|
|
|
|
_T4C5: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T4Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type5: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_T5Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T5C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T5x
|
|
_T5C1: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _T5Od
|
|
|
|
push edx
|
|
call xbyte1
|
|
pop edx
|
|
jmp _T5x
|
|
|
|
_T5Od:
|
|
push edx
|
|
call xbyte2
|
|
pop edx
|
|
|
|
_T5x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T5b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T5Lp1
|
|
|
|
_T5b: mov edx,8
|
|
_T5Lp4: cmp edi,dword ptr [ClipY]
|
|
jb _T5C2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T5C3
|
|
_T5C2: mov ecx,8
|
|
|
|
push edx
|
|
call xquad2
|
|
pop edx
|
|
|
|
_T5C3: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T5C4
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T5C5
|
|
_T5C4: mov ecx,8
|
|
|
|
push edx
|
|
call xquad1
|
|
pop edx
|
|
|
|
_T5C5: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T5Lp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type8: mov edx,16
|
|
_T8Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T8C1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T8C2
|
|
_T8C1: mov ecx,8
|
|
_T8Lp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
inc edi
|
|
ror eax,16
|
|
stosb
|
|
loop _T8Lp2
|
|
_T8C2: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T8C3
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T8C4
|
|
_T8C3: mov ecx,8
|
|
_T8Lp3: lodsd
|
|
stosb
|
|
inc edi
|
|
ror eax,16
|
|
stosb
|
|
inc edi
|
|
loop _T8Lp3
|
|
_T8C4: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T8Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type9: mov eax,edi
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
mov ecx,32
|
|
|
|
_T9Lp1: push ecx
|
|
mov edx,32
|
|
|
|
_T9Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T9J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T9C1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _T9x
|
|
_T9C1: mov ecx,eax
|
|
mov eax,edi
|
|
and eax,1
|
|
cmp eax,dword ptr [sgLineVal]
|
|
jnz _T9Od
|
|
shr ecx,1
|
|
jnc _T9w
|
|
inc esi
|
|
inc edi
|
|
jecxz _T9x
|
|
jmp _T9w2
|
|
_T9w: shr ecx,1
|
|
jnc _T9Lp3
|
|
inc esi
|
|
inc edi
|
|
movsb
|
|
jecxz _T9x
|
|
_T9Lp3: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
inc edi
|
|
ror eax,16
|
|
stosb
|
|
loop _T9Lp3
|
|
jmp _T9x
|
|
|
|
_T9Od: shr ecx,1
|
|
jnc _T9w2
|
|
movsb
|
|
jecxz _T9x
|
|
jmp _T9w
|
|
_T9w2: shr ecx,1
|
|
jnc _T9Lp4
|
|
movsb
|
|
inc esi
|
|
inc edi
|
|
jecxz _T9x
|
|
_T9Lp4: lodsd
|
|
stosb
|
|
inc edi
|
|
ror eax,16
|
|
stosb
|
|
inc edi
|
|
loop _T9Lp4
|
|
|
|
_T9x: or edx,edx
|
|
jz _T9Nxt
|
|
jmp _T9Lp2
|
|
|
|
_T9J: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _T9Lp2
|
|
_T9Nxt: pop ecx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _T9Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeA: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TALp1: cmp edi,dword ptr [ClipY]
|
|
jb _TAC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TAx
|
|
_TAC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TAOd
|
|
shr ecx,2
|
|
jnc _TALp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TAx
|
|
_TALp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TALp2
|
|
jmp _TAx
|
|
|
|
_TAOd: shr ecx,2
|
|
jnc _TALp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TAx
|
|
_TALp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TALp3
|
|
|
|
_TAx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TAb
|
|
sub edx,2
|
|
jmp _TALp1
|
|
|
|
_TAb: mov edx,2
|
|
_TALp4: cmp edi,dword ptr [ClipY]
|
|
jb _TAC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TAx2
|
|
_TAC2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TAOd2
|
|
shr ecx,2
|
|
jnc _TALp5
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TAx2
|
|
_TALp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TALp5
|
|
jmp _TAx2
|
|
|
|
_TAOd2: shr ecx,2
|
|
jnc _TALp6
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TAx2
|
|
_TALp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TALp6
|
|
|
|
_TAx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TALp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeB: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TBLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TBC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TBx
|
|
_TBC1: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TBOd
|
|
shr ecx,2
|
|
jnc _TBLp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TBx
|
|
_TBLp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TBLp2
|
|
jmp _TBx
|
|
|
|
_TBOd: shr ecx,2
|
|
jnc _TBLp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TBx
|
|
_TBLp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TBLp3
|
|
|
|
_TBx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TBb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TBLp1
|
|
|
|
_TBb: mov edx,2
|
|
_TBLp4: cmp edi,dword ptr [ClipY]
|
|
jb _TBC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TBx2
|
|
_TBC2: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TBOd2
|
|
shr ecx,2
|
|
jnc _TBLp5
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TBx2
|
|
_TBLp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TBLp5
|
|
jmp _TBx2
|
|
|
|
_TBOd2: shr ecx,2
|
|
jnc _TBLp6
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TBx2
|
|
_TBLp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TBLp6
|
|
|
|
_TBx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TBLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeC: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TCLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TCC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TCx
|
|
_TCC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TCOd
|
|
shr ecx,2
|
|
jnc _TCLp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TCx
|
|
_TCLp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TCLp2
|
|
jmp _TCx
|
|
|
|
_TCOd: shr ecx,2
|
|
jnc _TCLp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TCx
|
|
_TCLp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TCLp3
|
|
|
|
_TCx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TCb
|
|
sub edx,2
|
|
jmp _TCLp1
|
|
|
|
_TCb: mov edx,8
|
|
_TCLp4: cmp edi,dword ptr [ClipY]
|
|
jb _TCC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TCC3
|
|
_TCC2: mov ecx,8
|
|
_TCLp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TCLp5
|
|
_TCC3: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _TCC4
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TCC5
|
|
_TCC4: mov ecx,8
|
|
_TCLp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TCLp6
|
|
_TCC5: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TCLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeD: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TDLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TDC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TDx
|
|
_TDC1: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TDOd
|
|
shr ecx,2
|
|
jnc _TDLp2
|
|
lodsw
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
jecxz _TDx
|
|
_TDLp2: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TDLp2
|
|
jmp _TDx
|
|
|
|
_TDOd: shr ecx,2
|
|
jnc _TDLp3
|
|
lodsw
|
|
stosb
|
|
inc edi
|
|
jecxz _TDx
|
|
_TDLp3: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TDLp3
|
|
|
|
_TDx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TDb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TDLp1
|
|
|
|
_TDb: mov edx,8
|
|
_TDLp4: cmp edi,dword ptr [ClipY]
|
|
jb _TDC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TDC3
|
|
_TDC2: mov ecx,8
|
|
_TDLp5: lodsd
|
|
inc edi
|
|
ror eax,8
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
loop _TDLp5
|
|
_TDC3: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _TDC4
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TDC5
|
|
_TDC4: mov ecx,8
|
|
_TDLp6: lodsd
|
|
stosb
|
|
ror eax,16
|
|
inc edi
|
|
stosb
|
|
inc edi
|
|
loop _TDLp6
|
|
_TDC5: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TDLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeG: mov edx,16
|
|
xor eax,eax
|
|
_TGLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TGC1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TGC2
|
|
_TGC1: mov ecx,8
|
|
_TGLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TGLp2
|
|
_TGC2: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _TGC3
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TGC4
|
|
_TGC3: mov ecx,8
|
|
_TGLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TGLp3
|
|
_TGC4: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TGLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeH: mov eax,edi
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
mov ecx,32
|
|
|
|
_THLp1: push ecx
|
|
mov edx,32
|
|
|
|
_THLp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _THJ
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _THC1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _THx
|
|
_THC1: mov ecx,eax
|
|
add esi,ecx
|
|
mov eax,edi
|
|
and eax,1
|
|
cmp eax,dword ptr [sgLineVal]
|
|
jnz _THOd
|
|
xor eax,eax
|
|
shr ecx,1
|
|
jnc _THw
|
|
inc edi
|
|
jecxz _THx
|
|
jmp _THw2
|
|
_THw: shr ecx,1
|
|
jnc _THLp3
|
|
inc edi
|
|
stosb
|
|
jecxz _THx
|
|
_THLp3: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _THLp3
|
|
jmp _THx
|
|
|
|
_THOd: xor eax,eax
|
|
shr ecx,1
|
|
jnc _THw2
|
|
stosb
|
|
jecxz _THx
|
|
jmp _THw
|
|
_THw2: shr ecx,1
|
|
jnc _THLp4
|
|
stosb
|
|
inc edi
|
|
jecxz _THx
|
|
_THLp4: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _THLp4
|
|
|
|
_THx: or edx,edx
|
|
jz _THNxt
|
|
jmp _THLp2
|
|
|
|
_THJ: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _THLp2
|
|
_THNxt: pop ecx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _THLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeI: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TILp1: cmp edi,dword ptr [ClipY]
|
|
jb _TIC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TIx
|
|
_TIC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TIOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TIx
|
|
_TILp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TILp2
|
|
jmp _TIx
|
|
|
|
_TIOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TIx
|
|
_TILp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TILp3
|
|
|
|
_TIx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TIb
|
|
sub edx,2
|
|
jmp _TILp1
|
|
|
|
_TIb: mov edx,2
|
|
_TILp4: cmp edi,dword ptr [ClipY]
|
|
jb _TIC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TIx2
|
|
_TIC2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TIOd2
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp5
|
|
inc edi
|
|
stosb
|
|
jecxz _TIx2
|
|
_TILp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TILp5
|
|
jmp _TIx2
|
|
|
|
_TIOd2: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TILp6
|
|
stosb
|
|
inc edi
|
|
jecxz _TIx2
|
|
_TILp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TILp6
|
|
|
|
_TIx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TILp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeJ: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TJLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TJC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TJx
|
|
_TJC1: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TJOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TJx
|
|
_TJLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TJLp2
|
|
jmp _TJx
|
|
|
|
_TJOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TJx
|
|
_TJLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TJLp3
|
|
|
|
_TJx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TJb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TJLp1
|
|
|
|
_TJb: mov edx,2
|
|
_TJLp4: cmp edi,dword ptr [ClipY]
|
|
jb _TJC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TJx2
|
|
_TJC2: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TJOd2
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp5
|
|
inc edi
|
|
stosb
|
|
jecxz _TJx2
|
|
_TJLp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TJLp5
|
|
jmp _TJx2
|
|
|
|
_TJOd2: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TJLp6
|
|
stosb
|
|
inc edi
|
|
jecxz _TJx2
|
|
_TJLp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TJLp6
|
|
|
|
_TJx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TJLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeK: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TKLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TKC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TKx
|
|
_TKC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TKOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TKLp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TKx
|
|
_TKLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TKLp2
|
|
jmp _TKx
|
|
|
|
_TKOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TKLp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TKx
|
|
_TKLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TKLp3
|
|
|
|
_TKx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TKb
|
|
sub edx,2
|
|
jmp _TKLp1
|
|
|
|
_TKb: mov edx,8
|
|
_TKLp4: cmp edi,dword ptr [ClipY]
|
|
jb _TKC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TKC3
|
|
_TKC2: mov ecx,8
|
|
xor eax,eax
|
|
_TKLp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TKLp5
|
|
_TKC3: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _TKC4
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TKC5
|
|
_TKC4: mov ecx,8
|
|
xor eax,eax
|
|
_TKLp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TKLp6
|
|
_TKC5: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TKLp4
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeL: xor eax,eax
|
|
mov dword ptr [sgLineVal],eax
|
|
mov edx,30
|
|
_TLLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TLC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TLx
|
|
_TLC1: mov ecx,32
|
|
sub ecx,edx
|
|
mov eax,dword ptr [sgLineVal]
|
|
inc eax
|
|
and eax,1
|
|
mov dword ptr [sgLineVal],eax
|
|
jz _TLOd
|
|
xor eax,eax
|
|
shr ecx,2
|
|
jnc _TLLp2
|
|
inc edi
|
|
stosb
|
|
jecxz _TLx
|
|
_TLLp2: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TLLp2
|
|
jmp _TLx
|
|
|
|
_TLOd: xor eax,eax
|
|
shr ecx,2
|
|
jnc _TLLp3
|
|
stosb
|
|
inc edi
|
|
jecxz _TLx
|
|
_TLLp3: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TLLp3
|
|
|
|
_TLx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TLb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TLLp1
|
|
|
|
_TLb: mov edx,8
|
|
_TLLp4: cmp edi,dword ptr [ClipY]
|
|
jb _TLC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TLC3
|
|
_TLC2: mov ecx,8
|
|
xor eax,eax
|
|
_TLLp5: mov byte ptr [edi+1],al
|
|
mov byte ptr [edi+3],al
|
|
add edi,4
|
|
loop _TLLp5
|
|
_TLC3: sub edi,NBUFFW32
|
|
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _TLC4
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TLC5
|
|
_TLC4: mov ecx,8
|
|
xor eax,eax
|
|
_TLLp6: mov byte ptr [edi],al
|
|
mov byte ptr [edi+2],al
|
|
add edi,4
|
|
loop _TLLp6
|
|
_TLC5: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TLLp4
|
|
jmp _Done
|
|
|
|
xbyte1: // blank first
|
|
|
|
shr ecx,1
|
|
jnc xword2
|
|
inc esi
|
|
inc edi
|
|
|
|
xword1: // xlat first
|
|
shr ecx,1
|
|
jnc xquadt1
|
|
mov dl,[esi]
|
|
mov dl,[ebx+edx]
|
|
add esi,2
|
|
mov [edi],dl
|
|
add edi,2
|
|
|
|
xquadt1:
|
|
test cl,cl
|
|
jz xend
|
|
|
|
xquad1: // xlat first
|
|
/* debug
|
|
shl ecx,2
|
|
add esi,ecx
|
|
add edi,ecx
|
|
ret
|
|
*/
|
|
|
|
mov eax,[esi]
|
|
add esi,4
|
|
mov dl,al
|
|
shr eax,16
|
|
mov dl,[ebx+edx]
|
|
mov [edi],dl
|
|
mov dl,al
|
|
add edi,4
|
|
mov dl,[ebx+edx]
|
|
dec ecx
|
|
mov [edi-2],dl
|
|
jnz xquad1
|
|
|
|
ret
|
|
|
|
|
|
xbyte2: // xlat first
|
|
|
|
shr ecx,1
|
|
jnc xword1
|
|
mov dl,[esi]
|
|
mov dl,[ebx+edx]
|
|
inc esi
|
|
mov [edi],dl
|
|
inc edi
|
|
|
|
xword2: // blank first
|
|
shr ecx,1
|
|
jnc xquadt2
|
|
mov dl,[esi+1]
|
|
mov dl,[ebx+edx]
|
|
add esi,2
|
|
mov [edi+1],dl
|
|
add edi,2
|
|
|
|
xquadt2:
|
|
test cl,cl
|
|
jz xend
|
|
|
|
xquad2: // blank first
|
|
/* debug
|
|
shl ecx,2
|
|
add esi,ecx
|
|
add edi,ecx
|
|
ret
|
|
*/
|
|
|
|
|
|
mov eax,[esi]
|
|
add esi,4
|
|
mov dl,ah
|
|
shr eax,16
|
|
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 xquad2
|
|
|
|
xend:
|
|
ret
|
|
|
|
_Done: nop
|
|
|
|
} // end of asm block
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------**
|
|
** Now with Y clipping and Masking Transparency
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void TCDecodeM12Tile (BYTE *pDecodeTo, long *mask)
|
|
{
|
|
t = µoffset[0][0];
|
|
__asm {
|
|
mov edi,dword ptr [pDecodeTo] // Dest
|
|
|
|
mov eax,dword ptr [nLVal]
|
|
or al,al
|
|
jz _NoLt
|
|
cmp al,byte ptr [lightmax]
|
|
jz _Black
|
|
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jnz _Speed
|
|
|
|
mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov ebx,dword ptr [nLVal]; // Light conversion table
|
|
shl ebx,8
|
|
add ebx,dword ptr [pLightTbl];
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
jz _Type0 // Solid 32x32 block
|
|
cmp ax,1
|
|
jz _Type1 // 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _Type2 // Left Triangle
|
|
cmp ax,3
|
|
jz _Type3 // Right Triangle
|
|
cmp ax,4
|
|
jz _Type4 // Left Triangle to wall
|
|
jmp _Type5 // Right Triangle to wall
|
|
|
|
_Speed: mov esi,dword ptr [t]
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,4
|
|
add eax,dword ptr [nLVal]
|
|
shl eax,2
|
|
add esi,eax // Source
|
|
mov eax,dword ptr [esi]
|
|
mov esi,dword ptr [pSpeedCels]
|
|
add esi,eax
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
_SCmp: cmp ax,8
|
|
jz _Type8 // PreTrans Solid 32x32 block
|
|
cmp ax,9
|
|
jz _Type9 // PreTrans 32x32 block with '0' holes
|
|
cmp ax,10
|
|
jz _TypeA // PreTrans Left Triangle
|
|
cmp ax,11
|
|
jz _TypeB // PreTrans Right Triangle
|
|
cmp ax,12
|
|
jz _TypeC // PreTrans Left Triangle to wall
|
|
jmp _TypeD // PreTrans Right Triangle to wall
|
|
|
|
_NoLt: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RNoLt
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RNoLt: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
add eax,8
|
|
jmp _SCmp
|
|
|
|
_Black: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RBlk
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RBlk: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
jz _TypeG // Black Trans Solid 32x32 block
|
|
cmp ax,1
|
|
jz _TypeH // Black Trans 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _TypeI // Black Trans Left Triangle
|
|
cmp ax,3
|
|
jz _TypeJ // Black Trans Right Triangle
|
|
cmp ax,4
|
|
jz _TypeK // Black Trans Left Triangle to wall
|
|
jmp _TypeL // Black Trans Right Triangle to wall
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type0: mov edx,32
|
|
_T0Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T0C1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T0C2
|
|
_T0C1: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T0Lp2: lodsb
|
|
shl edx,1
|
|
jnc _T0S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T0S1: inc edi
|
|
loop _T0Lp2
|
|
pop edx
|
|
_T0C2: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T0Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type1: mov ecx,32
|
|
|
|
_T1Lp1: push ecx
|
|
mov eax,dword ptr [mask]
|
|
mov eax,dword ptr [eax]
|
|
mov dword ptr [cm],eax
|
|
|
|
mov edx,32
|
|
|
|
_T1Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T1J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T1C1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _T1x
|
|
_T1C1: mov ecx,eax
|
|
push edx
|
|
mov edx,dword ptr [cm]
|
|
_T1Lp3: lodsb
|
|
shl edx,1
|
|
jnc _T1S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T1S1: inc edi
|
|
loop _T1Lp3
|
|
mov dword ptr [cm],edx
|
|
pop edx
|
|
_T1x: or edx,edx
|
|
jz _T1Nxt
|
|
jmp _T1Lp2
|
|
|
|
_T1J: neg al // Do jump
|
|
add edi,eax
|
|
mov ecx,eax
|
|
and ecx,01fh
|
|
jz _T1S2
|
|
push eax
|
|
mov eax,dword ptr [cm]
|
|
shl eax,cl
|
|
mov dword ptr [cm],eax
|
|
pop eax
|
|
_T1S2: sub edx,eax
|
|
jnz _T1Lp2
|
|
_T1Nxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec ecx
|
|
jnz _T1Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type2: mov edx,30
|
|
_T2Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T2C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _T2x
|
|
_T2C1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T2Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T2x
|
|
_T2Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T2Lp2
|
|
_T2x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T2b
|
|
sub edx,2
|
|
jmp _T2Lp1
|
|
|
|
_T2b: mov edx,2
|
|
_T2Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _T2C2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _T2x2
|
|
_T2C2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T2Lp4
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T2x2
|
|
_T2Lp4: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T2Lp4
|
|
_T2x2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T2Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type3: mov edx,30
|
|
_T3Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T3C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T3x
|
|
_T3C1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T3Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T3x
|
|
_T3Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T3Lp2
|
|
_T3x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T3b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T3Lp1
|
|
|
|
_T3b: mov edx,2
|
|
_T3Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _T3C2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T3x2
|
|
_T3C2: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T3Lp4
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T3x2
|
|
_T3Lp4: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T3Lp4
|
|
_T3x2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T3Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type4: mov edx,30
|
|
_T4Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T4C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _T4x
|
|
_T4C1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T4Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T4x
|
|
_T4Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T4Lp2
|
|
_T4x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T4b
|
|
sub edx,2
|
|
jmp _T4Lp1
|
|
|
|
_T4b: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_T4Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _T4C2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T4C3
|
|
_T4C2: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T4Lp4: lodsb
|
|
shl edx,1
|
|
jnc _T4S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T4S1: inc edi
|
|
loop _T4Lp4
|
|
pop edx
|
|
_T4C3: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T4Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type5: mov edx,30
|
|
_T5Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T5C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T5x
|
|
_T5C1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _T5Lp2
|
|
lodsw
|
|
xlatb
|
|
ror ax,8
|
|
xlatb
|
|
ror ax,8
|
|
stosw
|
|
jecxz _T5x
|
|
_T5Lp2: lodsd
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
xlatb
|
|
ror eax,8
|
|
stosd
|
|
loop _T5Lp2
|
|
_T5x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T5b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T5Lp1
|
|
|
|
_T5b: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_T5Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _T5C2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T5C3
|
|
_T5C2: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T5Lp4: lodsb
|
|
shl edx,1
|
|
jnc _T5S1
|
|
xlatb
|
|
mov byte ptr [edi],al
|
|
_T5S1: inc edi
|
|
loop _T5Lp4
|
|
pop edx
|
|
_T5C3: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T5Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type8: mov edx,32
|
|
_T8Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T8C1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T8C2
|
|
_T8C1: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_T8Lp2: lodsb
|
|
shl edx,1
|
|
jnc _T8S1
|
|
mov byte ptr [edi],al
|
|
_T8S1: inc edi
|
|
loop _T8Lp2
|
|
pop edx
|
|
_T8C2: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _T8Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type9: mov ecx,32
|
|
|
|
_T9Lp1: push ecx
|
|
mov eax,dword ptr [mask]
|
|
mov eax,dword ptr [eax]
|
|
mov dword ptr [cm],eax
|
|
|
|
mov edx,32
|
|
|
|
_T9Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T9J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T9C1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _T9x
|
|
_T9C1: mov ecx,eax
|
|
push edx
|
|
mov edx,dword ptr [cm]
|
|
_T9Lp3: lodsb
|
|
shl edx,1
|
|
jnc _T9S1
|
|
mov byte ptr [edi],al
|
|
_T9S1: inc edi
|
|
loop _T9Lp3
|
|
mov dword ptr [cm],edx
|
|
pop edx
|
|
_T9x: or edx,edx
|
|
jz _T9Nxt
|
|
jmp _T9Lp2
|
|
|
|
_T9J: neg al // Do jump
|
|
add edi,eax
|
|
mov ecx,eax
|
|
and ecx,01fh
|
|
jz _T9S2
|
|
mov ebx,dword ptr [cm]
|
|
shl ebx,cl
|
|
mov dword ptr [cm],ebx
|
|
_T9S2: sub edx,eax
|
|
jnz _T9Lp2
|
|
_T9Nxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec ecx
|
|
jnz _T9Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeA: mov edx,30
|
|
_TALp1: cmp edi,dword ptr [ClipY]
|
|
jb _TAC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TAx
|
|
_TAC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp2
|
|
movsw
|
|
jecxz _TAx
|
|
_TALp2: rep movsd
|
|
_TAx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TAb
|
|
sub edx,2
|
|
jmp _TALp1
|
|
|
|
_TAb: mov edx,2
|
|
_TALp3: cmp edi,dword ptr [ClipY]
|
|
jb _TAC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TAx2
|
|
_TAC2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp4
|
|
movsw
|
|
jecxz _TAx2
|
|
_TALp4: rep movsd
|
|
_TAx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TALp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeB: mov edx,30
|
|
_TBLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TBC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TBx
|
|
_TBC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp2
|
|
movsw
|
|
jecxz _TBx
|
|
_TBLp2: rep movsd
|
|
_TBx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TBb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TBLp1
|
|
|
|
_TBb: mov edx,2
|
|
_TBLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TBC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TBx2
|
|
_TBC2: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp4
|
|
movsw
|
|
jecxz _TBx2
|
|
_TBLp4: rep movsd
|
|
_TBx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TBLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeC: mov edx,30
|
|
_TCLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TCC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TCx
|
|
_TCC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TCLp2
|
|
movsw
|
|
jecxz _TCx
|
|
_TCLp2: rep movsd
|
|
_TCx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TCb
|
|
sub edx,2
|
|
jmp _TCLp1
|
|
|
|
_TCb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TCLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TCC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TCC3
|
|
_TCC2: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_TCLp4: lodsb
|
|
shl edx,1
|
|
jnc _TCS1
|
|
mov byte ptr [edi],al
|
|
_TCS1: inc edi
|
|
loop _TCLp4
|
|
pop edx
|
|
_TCC3: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TCLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeD: mov edx,30
|
|
_TDLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TDC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TDx
|
|
_TDC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TDLp2
|
|
movsw
|
|
jecxz _TDx
|
|
_TDLp2: rep movsd
|
|
_TDx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TDb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TDLp1
|
|
|
|
_TDb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TDLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TDC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TDC3
|
|
_TDC2: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
mov ecx,32
|
|
_TDLp4: lodsb
|
|
shl edx,1
|
|
jnc _TDS1
|
|
mov byte ptr [edi],al
|
|
_TDS1: inc edi
|
|
loop _TDLp4
|
|
pop edx
|
|
_TDC3: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TDLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeG: mov edx,32
|
|
_TGLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TGC1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TGC2
|
|
_TGC1: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
xor eax,eax
|
|
mov ecx,32
|
|
_TGLp2: shl edx,1
|
|
jnc _TGS1
|
|
mov byte ptr [edi],al
|
|
_TGS1: inc edi
|
|
loop _TGLp2
|
|
pop edx
|
|
_TGC2: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TGLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeH: mov ecx,32
|
|
|
|
_THLp1: push ecx
|
|
mov eax,dword ptr [mask]
|
|
mov eax,dword ptr [eax]
|
|
mov dword ptr [cm],eax
|
|
|
|
mov edx,32
|
|
|
|
_THLp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _THJ
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _THC1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _THx
|
|
_THC1: mov ecx,eax
|
|
add esi,ecx
|
|
push edx
|
|
mov edx,dword ptr [cm]
|
|
xor eax,eax
|
|
_THLp3: shl edx,1
|
|
jnc _THS1
|
|
mov byte ptr [edi],al
|
|
_THS1: inc edi
|
|
loop _THLp3
|
|
mov dword ptr [cm],edx
|
|
pop edx
|
|
_THx: or edx,edx
|
|
jz _THNxt
|
|
jmp _THLp2
|
|
|
|
_THJ: neg al // Do jump
|
|
add edi,eax
|
|
mov ecx,eax
|
|
and ecx,01fh
|
|
jz _THS2
|
|
mov ebx,dword ptr [cm]
|
|
shl ebx,cl
|
|
mov dword ptr [cm],ebx
|
|
_THS2: sub edx,eax
|
|
jnz _THLp2
|
|
_THNxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec ecx
|
|
jnz _THLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeI: mov edx,30
|
|
xor eax,eax
|
|
_TILp1: cmp edi,dword ptr [ClipY]
|
|
jb _TIC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TIx
|
|
_TIC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TILp2
|
|
stosw
|
|
jecxz _TIx
|
|
_TILp2: rep stosd
|
|
_TIx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TIb
|
|
sub edx,2
|
|
jmp _TILp1
|
|
|
|
_TIb: mov edx,2
|
|
_TILp3: cmp edi,dword ptr [ClipY]
|
|
jb _TIC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TIx2
|
|
_TIC2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TILp4
|
|
stosw
|
|
jecxz _TIx2
|
|
_TILp4: rep stosd
|
|
_TIx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TILp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeJ: mov edx,30
|
|
xor eax,eax
|
|
_TJLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TJC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TJx
|
|
_TJC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp2
|
|
stosw
|
|
jecxz _TJx
|
|
_TJLp2: rep stosd
|
|
_TJx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TJb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TJLp1
|
|
|
|
_TJb: mov edx,2
|
|
_TJLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TJC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TJx2
|
|
_TJC2: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp4
|
|
stosw
|
|
jecxz _TJx2
|
|
_TJLp4: rep stosd
|
|
_TJx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TJLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeK: mov edx,30
|
|
xor eax,eax
|
|
_TKLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TKC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TKx
|
|
_TKC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TKLp2
|
|
stosw
|
|
jecxz _TKx
|
|
_TKLp2: rep stosd
|
|
_TKx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TKb
|
|
sub edx,2
|
|
jmp _TKLp1
|
|
|
|
_TKb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TKLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TKC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TKC3
|
|
_TKC2: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
xor eax,eax
|
|
mov ecx,32
|
|
_TKLp4: shl edx,1
|
|
jnc _TKS1
|
|
mov byte ptr [edi],al
|
|
_TKS1: inc edi
|
|
loop _TKLp4
|
|
pop edx
|
|
_TKC3: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TKLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeL: mov edx,30
|
|
xor eax,eax
|
|
_TLLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TLC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TLx
|
|
_TLC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TLLp2
|
|
stosw
|
|
jecxz _TLx
|
|
_TLLp2: rep stosd
|
|
_TLx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TLb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TLLp1
|
|
|
|
_TLb: mov eax,dword ptr [mask]
|
|
sub eax,64
|
|
mov dword ptr [mask],eax
|
|
mov edx,16
|
|
_TLLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TLC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TLC3
|
|
_TLC2: push edx
|
|
mov eax,dword ptr [mask]
|
|
mov edx,dword ptr [eax]
|
|
xor eax,eax
|
|
mov ecx,32
|
|
_TLLp4: shl edx,1
|
|
jnc _TLS1
|
|
mov byte ptr [edi],al
|
|
_TLS1: inc edi
|
|
loop _TLLp4
|
|
pop edx
|
|
_TLC3: sub edi,NBUFFW32
|
|
mov eax,dword ptr [mask]
|
|
sub eax,4
|
|
mov dword ptr [mask],eax
|
|
dec edx
|
|
jnz _TLLp3
|
|
|
|
_Done: nop
|
|
|
|
} // end of asm block
|
|
}
|
|
|
|
|
|
/*-----------------------------------------------------------------------**
|
|
** Now with Y clipping
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void CDecodeMicroTile (BYTE *pDecodeTo)
|
|
{
|
|
if (nTrans) {
|
|
switch (gbPartialTrans) {
|
|
case PART_TRANS_NONE:
|
|
TCDecodeMicroTile(pDecodeTo);
|
|
return;
|
|
case PART_TRANS_LEFT:
|
|
wt = nWTypeTable[gnPieceNum];
|
|
if ((wt == WTYPE_LEFT) || (wt == WTYPE_ULC)) {
|
|
TCDecodeM12Tile(pDecodeTo, &sgLeftMask[31]);
|
|
return;
|
|
}
|
|
if (wt == WTYPE_LRC) {
|
|
TCDecodeM12Tile(pDecodeTo, &sgRightMask[31]);
|
|
return;
|
|
}
|
|
break;
|
|
case PART_TRANS_RIGHT:
|
|
wt = nWTypeTable[gnPieceNum];
|
|
if ((wt == WTYPE_RIGHT) || (wt == WTYPE_ULC)) {
|
|
TCDecodeM12Tile(pDecodeTo, &sgRightMask[31]);
|
|
return;
|
|
}
|
|
if (wt == WTYPE_LRC) {
|
|
TCDecodeM12Tile(pDecodeTo, &sgLeftMask[31]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
t = µoffset[0][0];
|
|
__asm {
|
|
|
|
mov edi,dword ptr [pDecodeTo] // Dest
|
|
|
|
mov eax,dword ptr [nLVal]
|
|
or al,al
|
|
jz _NoLt
|
|
cmp al,byte ptr [lightmax]
|
|
jz _Black
|
|
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jnz _Speed
|
|
|
|
mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov ebx,dword ptr [nLVal]; // Light conversion table
|
|
shl ebx,8
|
|
add ebx,dword ptr [pLightTbl];
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
jz _Type0 // Solid 32x32 block
|
|
cmp ax,1
|
|
jz _Type1 // 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _Type2 // Left Triangle
|
|
cmp ax,3
|
|
jz _Type3 // Right Triangle
|
|
cmp ax,4
|
|
jz _Type4 // Left Triangle to wall
|
|
jmp _Type5 // Right Triangle to wall
|
|
|
|
_Speed: mov esi,dword ptr [t]
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,4
|
|
add eax,dword ptr [nLVal]
|
|
shl eax,2
|
|
add esi,eax // Source
|
|
mov eax,dword ptr [esi]
|
|
mov esi,dword ptr [pSpeedCels]
|
|
add esi,eax
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,0fh
|
|
_SCmp: cmp ax,8
|
|
jz _Type8 // PreTrans Solid 32x32 block
|
|
cmp ax,9
|
|
jz _Type9 // PreTrans 32x32 block with '0' holes
|
|
cmp ax,10
|
|
jz _TypeA // PreTrans Left Triangle
|
|
cmp ax,11
|
|
jz _TypeB // PreTrans Right Triangle
|
|
cmp ax,12
|
|
jz _TypeC // PreTrans Left Triangle to wall
|
|
jmp _TypeD // PreTrans Right Triangle to wall
|
|
|
|
_NoLt: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RNoLt
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RNoLt: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
add eax,8
|
|
jmp _SCmp
|
|
|
|
_Black: mov eax,dword ptr [gdwPNum]
|
|
and eax,08000h
|
|
jz _RBlk
|
|
|
|
mov esi,dword ptr [t] // Get old micro tile number
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,6
|
|
add esi,eax
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,0f000h
|
|
add eax,dword ptr [esi]
|
|
mov dword ptr [gdwPNum],eax
|
|
|
|
_RBlk: mov ebx,dword ptr [pDungeonCels]
|
|
mov esi,ebx
|
|
mov eax,dword ptr [gdwPNum]
|
|
and eax,00fffh
|
|
shl eax,2
|
|
add ebx,eax
|
|
add esi,dword ptr [ebx] // Source
|
|
|
|
mov eax,dword ptr [gdwPNum] // Determine draw type
|
|
mov al,ah
|
|
shr eax,4
|
|
and eax,07h
|
|
jz _TypeG // Black Trans Solid 32x32 block
|
|
cmp ax,1
|
|
jz _TypeH // Black Trans 32x32 block with '0' holes
|
|
cmp ax,2
|
|
jz _TypeI // Black Trans Left Triangle
|
|
cmp ax,3
|
|
jz _TypeJ // Black Trans Right Triangle
|
|
cmp ax,4
|
|
jz _TypeK // Black Trans Left Triangle to wall
|
|
jmp _TypeL // Black Trans Right Triangle to wall
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type0: mov edx,32
|
|
push ebp
|
|
_T0Lp1:
|
|
push edx
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T0C1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T0C2
|
|
_T0C1:
|
|
xor edx,edx
|
|
mov ebp,8
|
|
_T0Lp2:
|
|
mov eax,[esi]
|
|
add esi,4
|
|
ror eax,16
|
|
mov dl,al
|
|
mov cl,[ebx+edx]
|
|
mov dl,ah
|
|
mov ch,[ebx+edx]
|
|
ror eax,16
|
|
shl ecx,16
|
|
mov dl,al
|
|
mov cl,[ebx+edx]
|
|
mov dl,ah
|
|
mov ch,[ebx+edx]
|
|
mov [edi],ecx
|
|
add edi,4
|
|
|
|
dec ebp
|
|
jnz _T0Lp2
|
|
_T0C2:
|
|
sub edi,NBUFFW32
|
|
pop edx
|
|
dec edx
|
|
jnz _T0Lp1
|
|
pop ebp
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type1: push ebp
|
|
mov ecx,32
|
|
_T1Lp1: push ecx
|
|
mov ebp,32
|
|
_T1Lp2:
|
|
xor eax,eax // Load control byte
|
|
mov al,[esi]
|
|
inc esi
|
|
|
|
or al,al
|
|
jns _T1NoSkip
|
|
neg al
|
|
add edi,eax
|
|
sub ebp,eax
|
|
jmp _T1continue
|
|
_T1NoSkip:
|
|
sub ebp,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T1NotCliped
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _T1continue
|
|
_T1NotCliped:
|
|
mov ecx,eax
|
|
call xbytes
|
|
_T1continue:
|
|
or ebp,ebp
|
|
jnz _T1Lp2
|
|
|
|
pop ecx
|
|
sub edi,NBUFFW32
|
|
dec ecx
|
|
jnz _T1Lp1
|
|
pop ebp
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type2:
|
|
push ebp
|
|
mov ebp,30
|
|
_T2Lp1:
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T2NotClipped
|
|
add esi,32
|
|
add edi,32
|
|
sub esi,ebp
|
|
jmp _T2continue
|
|
_T2NotClipped:
|
|
add edi,ebp
|
|
mov ecx,32
|
|
sub ecx,ebp
|
|
call xbytes
|
|
_T2continue:
|
|
sub edi,NBUFFW32
|
|
sub ebp,2
|
|
jge _T2Lp1
|
|
|
|
|
|
mov ebp,2
|
|
_T2Lp2:
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T2NotClipped2
|
|
add esi,32
|
|
add edi,32
|
|
sub esi,ebp
|
|
jmp _T2continue2
|
|
_T2NotClipped2:
|
|
add edi,ebp
|
|
mov ecx,32
|
|
sub ecx,ebp
|
|
call xbytes
|
|
_T2continue2:
|
|
add ebp,2
|
|
sub edi,NBUFFW32
|
|
cmp ebp,32
|
|
jnz _T2Lp2
|
|
|
|
pop ebp
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type3: mov edx,30
|
|
_T3Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T3C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T3x
|
|
_T3C1: mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
_T3x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T3b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T3Lp1
|
|
|
|
_T3b: mov edx,2
|
|
_T3Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _T3C2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T3x2
|
|
_T3C2: mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
_T3x2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _T3Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type4: mov edx,30
|
|
_T4Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T4C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _T4x
|
|
_T4C1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
_T4x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T4b
|
|
sub edx,2
|
|
jmp _T4Lp1
|
|
|
|
_T4b: mov edx,16
|
|
_T4Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _T4C2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T4C3
|
|
_T4C2: mov ecx,8
|
|
|
|
push edx
|
|
call xquads
|
|
pop edx
|
|
|
|
_T4C3: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T4Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type5: mov edx,30
|
|
_T5Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T5C1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _T5x
|
|
_T5C1: mov ecx,32
|
|
sub ecx,edx
|
|
|
|
push edx
|
|
call xbytes
|
|
pop edx
|
|
|
|
_T5x: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _T5b
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _T5Lp1
|
|
|
|
_T5b: mov edx,16
|
|
_T5Lp3: cmp edi,dword ptr [ClipY]
|
|
jb _T5C2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T5C3
|
|
_T5C2: mov ecx,8
|
|
|
|
push edx
|
|
call xquads
|
|
pop edx
|
|
|
|
_T5C3: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T5Lp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type8: mov edx,32
|
|
_T8Lp1: cmp edi,dword ptr [ClipY]
|
|
jb _T8C1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _T8C2
|
|
_T8C1: mov ecx,8
|
|
rep movsd
|
|
_T8C2: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _T8Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_Type9: mov ecx,32
|
|
|
|
_T9Lp1: push ecx
|
|
mov edx,32
|
|
|
|
_T9Lp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _T9J
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _T9C1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _T9x
|
|
_T9C1: mov ecx,eax
|
|
shr ecx,1
|
|
jnc _T9w
|
|
movsb
|
|
jecxz _T9x
|
|
_T9w: shr ecx,1
|
|
jnc _T9Lp3
|
|
movsw
|
|
jecxz _T9x
|
|
_T9Lp3: rep movsd
|
|
_T9x: or edx,edx
|
|
jz _T9Nxt
|
|
jmp _T9Lp2
|
|
|
|
_T9J: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _T9Lp2
|
|
_T9Nxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
loop _T9Lp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeA: mov edx,30
|
|
_TALp1: cmp edi,dword ptr [ClipY]
|
|
jb _TAC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TAx
|
|
_TAC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp2
|
|
movsw
|
|
jecxz _TAx
|
|
_TALp2: rep movsd
|
|
_TAx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TAb
|
|
sub edx,2
|
|
jmp _TALp1
|
|
|
|
_TAb: mov edx,2
|
|
_TALp3: cmp edi,dword ptr [ClipY]
|
|
jb _TAC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TAx2
|
|
_TAC2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TALp4
|
|
movsw
|
|
jecxz _TAx2
|
|
_TALp4: rep movsd
|
|
_TAx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TALp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeB: mov edx,30
|
|
_TBLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TBC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TBx
|
|
_TBC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp2
|
|
movsw
|
|
jecxz _TBx
|
|
_TBLp2: rep movsd
|
|
_TBx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TBb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TBLp1
|
|
|
|
_TBb: mov edx,2
|
|
_TBLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TBC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TBx2
|
|
_TBC2: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TBLp4
|
|
movsw
|
|
jecxz _TBx2
|
|
_TBLp4: rep movsd
|
|
_TBx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TBLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeC: mov edx,30
|
|
_TCLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TCC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TCx
|
|
_TCC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TCLp2
|
|
movsw
|
|
jecxz _TCx
|
|
_TCLp2: rep movsd
|
|
_TCx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TCb
|
|
sub edx,2
|
|
jmp _TCLp1
|
|
|
|
_TCb: mov edx,16
|
|
_TCLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TCC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TCC3
|
|
_TCC2: mov ecx,8
|
|
rep movsd
|
|
_TCC3: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TCLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeD: mov edx,30
|
|
_TDLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TDC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TDx
|
|
_TDC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TDLp2
|
|
movsw
|
|
jecxz _TDx
|
|
_TDLp2: rep movsd
|
|
_TDx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TDb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TDLp1
|
|
|
|
_TDb: mov edx,16
|
|
_TDLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TDC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TDC3
|
|
_TDC2: mov ecx,8
|
|
rep movsd
|
|
_TDC3: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TDLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeG: mov edx,32
|
|
xor eax,eax
|
|
_TGLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TGC1
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TGC2
|
|
_TGC1: mov ecx,8
|
|
rep stosd
|
|
_TGC2: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TGLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeH: mov ecx,32
|
|
|
|
_THLp1: push ecx
|
|
mov edx,32
|
|
|
|
_THLp2: xor eax,eax // Load control byte
|
|
lodsb
|
|
or al,al
|
|
js _THJ
|
|
|
|
sub edx,eax
|
|
cmp edi,dword ptr [ClipY]
|
|
jb _THC1
|
|
add esi,eax
|
|
add edi,eax
|
|
jmp _THx
|
|
_THC1: mov ecx,eax
|
|
add esi,ecx
|
|
xor eax,eax
|
|
shr ecx,1
|
|
jnc _THw
|
|
stosb
|
|
jecxz _THx
|
|
_THw: shr ecx,1
|
|
jnc _THLp3
|
|
stosw
|
|
jecxz _THx
|
|
_THLp3: rep stosd
|
|
_THx: or edx,edx
|
|
jz _THNxt
|
|
jmp _THLp2
|
|
|
|
_THJ: neg al // Do jump
|
|
add edi,eax
|
|
sub edx,eax
|
|
jnz _THLp2
|
|
_THNxt: pop ecx
|
|
sub edi,NBUFFW32
|
|
loop _THLp1
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeI: mov edx,30
|
|
xor eax,eax
|
|
_TILp1: cmp edi,dword ptr [ClipY]
|
|
jb _TIC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TIx
|
|
_TIC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TILp2
|
|
stosw
|
|
jecxz _TIx
|
|
_TILp2: rep stosd
|
|
_TIx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TIb
|
|
sub edx,2
|
|
jmp _TILp1
|
|
|
|
_TIb: mov edx,2
|
|
_TILp3: cmp edi,dword ptr [ClipY]
|
|
jb _TIC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TIx2
|
|
_TIC2: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TILp4
|
|
stosw
|
|
jecxz _TIx2
|
|
_TILp4: rep stosd
|
|
_TIx2: sub edi,NBUFFW32
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TILp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeJ: mov edx,30
|
|
xor eax,eax
|
|
_TJLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TJC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TJx
|
|
_TJC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp2
|
|
stosw
|
|
jecxz _TJx
|
|
_TJLp2: rep stosd
|
|
_TJx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TJb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TJLp1
|
|
|
|
_TJb: mov edx,2
|
|
_TJLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TJC2
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TJx2
|
|
_TJC2: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TJLp4
|
|
stosw
|
|
jecxz _TJx2
|
|
_TJLp4: rep stosd
|
|
_TJx2: sub edi,NBUFFW32
|
|
add edi,edx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _TJLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeK: mov edx,30
|
|
xor eax,eax
|
|
_TKLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TKC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
jmp _TKx
|
|
_TKC1: add edi,edx
|
|
mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TKLp2
|
|
stosw
|
|
jecxz _TKx
|
|
_TKLp2: rep stosd
|
|
_TKx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TKb
|
|
sub edx,2
|
|
jmp _TKLp1
|
|
|
|
_TKb: mov edx,16
|
|
_TKLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TKC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TKC3
|
|
_TKC2: mov ecx,8
|
|
rep stosd
|
|
_TKC3: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TKLp3
|
|
jmp _Done
|
|
|
|
/*-----------------------------------------------------------------------*/
|
|
|
|
_TypeL: mov edx,30
|
|
xor eax,eax
|
|
_TLLp1: cmp edi,dword ptr [ClipY]
|
|
jb _TLC1
|
|
add esi,32
|
|
sub esi,edx
|
|
add edi,32
|
|
sub edi,edx
|
|
jmp _TLx
|
|
_TLC1: mov ecx,32
|
|
sub ecx,edx
|
|
shr ecx,2
|
|
jnc _TLLp2
|
|
stosw
|
|
jecxz _TLx
|
|
_TLLp2: rep stosd
|
|
_TLx: sub edi,NBUFFW32
|
|
or edx,edx
|
|
jz _TLb
|
|
add edi,edx
|
|
sub edx,2
|
|
jmp _TLLp1
|
|
|
|
_TLb: mov edx,16
|
|
_TLLp3: cmp edi,dword ptr [ClipY]
|
|
jb _TLC2
|
|
add esi,32
|
|
add edi,32
|
|
jmp _TLC3
|
|
_TLC2: mov ecx,8
|
|
rep stosd
|
|
_TLC3: sub edi,NBUFFW32
|
|
dec edx
|
|
jnz _TLLp3
|
|
|
|
jmp _Done
|
|
|
|
xbytes:
|
|
|
|
shr cl,1
|
|
jnc xwords
|
|
|
|
mov dl, [esi]
|
|
mov dl, [ebx+edx]
|
|
mov [edi],dl
|
|
|
|
add esi,1
|
|
add edi,1
|
|
|
|
xwords:
|
|
shr cl,1
|
|
jnc xquads
|
|
|
|
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
|
|
|
|
xquads:
|
|
test cl,cl
|
|
jz xend
|
|
|
|
xnext:
|
|
mov eax, [esi]
|
|
add esi,4
|
|
|
|
mov dl,al
|
|
mov ch,[ebx+edx]
|
|
|
|
mov dl,ah
|
|
ror eax,16
|
|
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
|
|
|
|
dec cl
|
|
jnz xnext
|
|
|
|
xend:
|
|
ret
|
|
|
|
_Done:
|
|
|
|
} // end of asm block
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------**
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void DrawBlankMini(BYTE *pDecodeTo)
|
|
{
|
|
__asm {
|
|
mov edi,dword ptr [pDecodeTo] // Dest
|
|
|
|
mov edx,30
|
|
mov ebx,1
|
|
xor eax,eax
|
|
//mov eax,092929292h // yellow
|
|
_BLp1: add edi,edx
|
|
mov ecx,ebx
|
|
rep stosd
|
|
add edi,edx
|
|
sub edi,NBUFFW64
|
|
or edx,edx
|
|
jz _Bb
|
|
sub edx,2
|
|
inc ebx
|
|
jmp _BLp1
|
|
|
|
_Bb: mov edx,2
|
|
mov ebx,15
|
|
_BLp2: add edi,edx
|
|
mov ecx,ebx
|
|
rep stosd
|
|
add edi,edx
|
|
sub edi,NBUFFW64
|
|
dec ebx
|
|
add edx,2
|
|
cmp edx,32
|
|
jnz _BLp2
|
|
}
|
|
}
|
|
|