10469 lines
224 KiB
C++
10469 lines
224 KiB
C++
/*
|
|
* UNPUBLISHED -- Rights reserved under the copyright laws of the
|
|
* United States. Use of a copyright notice is precautionary only and
|
|
* does not imply publication or disclosure.
|
|
*
|
|
* THIS DOCUMENTATION CONTAINS CONFIDENTIAL AND PROPRIETARY INFORMATION
|
|
* OF BLIZZARD ENTERTAINMENT. ANY DUPLICATION, MODIFICATION,
|
|
* DISTRIBUTION, OR DISCLOSURE IS STRICTLY PROHIBITED WITHOUT THE PRIOR
|
|
* EXPRESS WRITTEN PERMISSION OF BLIZZARD ENTERTAINMENT.
|
|
*/
|
|
|
|
#include "../types.h"
|
|
|
|
int world_4B325C = 0; // truncated with & 1, some kind of bool??
|
|
unsigned char world_4B3260[5] = { 0u, 0u, 0u, 0u, 0u }; // single mask, int nTileMask
|
|
int world_4B3265 = 0; // speed cel num
|
|
int world_4B3269[5] = { 0, 0, 0, 0, 0 }; // seems to be a single pointer, void *pTileMask
|
|
unsigned int tile_draw_masks[3][32] =
|
|
{
|
|
{
|
|
0xEAAAAAAA, 0xF5555555, 0xFEAAAAAA, 0xFF555555, 0xFFEAAAAA, 0xFFF55555, 0xFFFEAAAA, 0xFFFF5555,
|
|
0xFFFFEAAA, 0xFFFFF555, 0xFFFFFEAA, 0xFFFFFF55, 0xFFFFFFEA, 0xFFFFFFF5, 0xFFFFFFFE, 0xFFFFFFFF,
|
|
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
|
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
|
|
},
|
|
{
|
|
0xAAAAAAAB, 0x5555555F, 0xAAAAAABF, 0x555555FF, 0xAAAAABFF, 0x55555FFF, 0xAAAABFFF, 0x5555FFFF,
|
|
0xAAABFFFF, 0x555FFFFF, 0xAABFFFFF, 0x55FFFFFF, 0xABFFFFFF, 0x5FFFFFFF, 0xBFFFFFFF, 0xFFFFFFFF,
|
|
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
|
|
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF
|
|
},
|
|
{
|
|
0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555,
|
|
0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555,
|
|
0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555,
|
|
0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555, 0xAAAAAAAA, 0x55555555
|
|
}
|
|
};
|
|
int world_4B33FD[48] =
|
|
{
|
|
0, 0, 0,
|
|
4, 4, 4,
|
|
8, 8, 8,
|
|
12, 12, 12,
|
|
16, 16, 16,
|
|
20, 20, 20,
|
|
24, 24, 24,
|
|
28, 28, 28,
|
|
32, 32, 32,
|
|
36, 36, 36,
|
|
40, 40, 40,
|
|
44, 44, 44,
|
|
48, 48, 48,
|
|
52, 52, 52,
|
|
56, 56, 56,
|
|
60, 60, 60
|
|
};
|
|
int world_4B34BD[17] = { 0, 4, 8, 16, 24, 36, 48, 64, 80, 100, 120, 144, 168, 196, 224, 256, 288 };
|
|
int world_4B3501[17] = { 0, 32, 60, 88, 112, 136, 156, 176, 192, 208, 220, 232, 240, 248, 252, 256, 288 };
|
|
|
|
/* double check x&2 outputs */
|
|
|
|
/*
|
|
32x32 arch types
|
|
add 8 if light index is 0
|
|
|
|
|-| 0x8 (0)
|
|
|-|
|
|
|
|
/\ 0x9 (1)
|
|
\/
|
|
|
|
/| 0xA (2)
|
|
\|
|
|
|
|
|\ 0xB (3)
|
|
|/
|
|
|
|
|-| 0xC (4)
|
|
\|
|
|
|
|
|-| 0xD (5)
|
|
|/
|
|
*/
|
|
|
|
//----- (00463060) --------------------------------------------------------
|
|
void __fastcall drawTopArchesUpperScreen(void *a1)
|
|
{
|
|
char v1; // edx
|
|
unsigned int v2; // edi
|
|
_BYTE *v3; // esi
|
|
char *v4; // ebx
|
|
short v5; // ax
|
|
char *v6; // esi
|
|
short v7; // ax
|
|
unsigned int v8; // eax
|
|
unsigned char *v9; // esi
|
|
unsigned int v10; // eax
|
|
int v11; // eax
|
|
signed int v12; // ebp
|
|
signed int v13; // ecx
|
|
unsigned int v14; // eax
|
|
_BYTE *v15; // edi
|
|
signed int v16; // ecx
|
|
int v17; // eax
|
|
signed int v18; // ebp
|
|
signed int v19; // edx
|
|
unsigned int v20; // eax
|
|
char v21; // edx
|
|
unsigned int v22; // ecx
|
|
unsigned char v23; // cf
|
|
unsigned int v24; // ecx
|
|
unsigned int v25; // eax
|
|
unsigned int v26; // ecx
|
|
int v27; // eax
|
|
unsigned int v28; // ecx
|
|
unsigned int v29; // ecx
|
|
int v30; // eax
|
|
unsigned int v31; // ecx
|
|
unsigned int v32; // eax
|
|
signed int v33; // ebp
|
|
_BYTE *v34; // edi
|
|
unsigned int v35; // ecx
|
|
char v36; // edx
|
|
unsigned int v37; // ecx
|
|
unsigned int v38; // ecx
|
|
unsigned int v39; // eax
|
|
unsigned int v40; // ecx
|
|
int v41; // eax
|
|
char v42; // edx
|
|
unsigned int v43; // ecx
|
|
unsigned int v44; // ecx
|
|
int v45; // eax
|
|
unsigned int v46; // ecx
|
|
unsigned int v47; // eax
|
|
unsigned char v48; // of
|
|
signed int v49; // ebp
|
|
_BYTE *v50; // edi
|
|
unsigned int v51; // ecx
|
|
char v52; // edx
|
|
unsigned int v53; // ecx
|
|
unsigned int v54; // ecx
|
|
unsigned int v55; // eax
|
|
unsigned int v56; // ecx
|
|
int v57; // eax
|
|
char v58; // edx
|
|
unsigned int v59; // ecx
|
|
unsigned int v60; // ecx
|
|
int v61; // eax
|
|
unsigned int v62; // ecx
|
|
unsigned int v63; // eax
|
|
signed int v64; // ebp
|
|
unsigned int v65; // ecx
|
|
unsigned int v66; // ecx
|
|
unsigned int v67; // ecx
|
|
unsigned int v68; // eax
|
|
unsigned int v69; // ecx
|
|
int v70; // eax
|
|
unsigned int v71; // ecx
|
|
unsigned int v72; // ecx
|
|
int v73; // eax
|
|
unsigned int v74; // ecx
|
|
unsigned int v75; // eax
|
|
signed int v76; // ebp
|
|
unsigned int v77; // ecx
|
|
unsigned int v78; // ecx
|
|
unsigned int v79; // ecx
|
|
unsigned int v80; // eax
|
|
unsigned int v81; // ecx
|
|
int v82; // eax
|
|
unsigned int v83; // ecx
|
|
unsigned int v84; // ecx
|
|
int v85; // eax
|
|
unsigned int v86; // ecx
|
|
unsigned int v87; // eax
|
|
signed int v88; // ebp
|
|
_BYTE *v89; // edi
|
|
unsigned int v90; // ecx
|
|
char v91; // edx
|
|
unsigned int v92; // ecx
|
|
unsigned int v93; // ecx
|
|
unsigned int v94; // eax
|
|
unsigned int v95; // ecx
|
|
int v96; // eax
|
|
unsigned int v97; // ecx
|
|
unsigned int v98; // ecx
|
|
int v99; // eax
|
|
unsigned int v100; // ecx
|
|
unsigned int v101; // eax
|
|
signed int v102; // ebp
|
|
signed int v103; // ecx
|
|
unsigned int v104; // eax
|
|
_BYTE *v105; // edi
|
|
signed int v106; // ecx
|
|
int v107; // eax
|
|
signed int v108; // ebp
|
|
unsigned int v109; // ecx
|
|
unsigned int v110; // ecx
|
|
unsigned int v111; // ecx
|
|
unsigned int v112; // eax
|
|
unsigned int v113; // ecx
|
|
int v114; // eax
|
|
unsigned int v115; // ecx
|
|
unsigned int v116; // ecx
|
|
int v117; // eax
|
|
unsigned int v118; // ecx
|
|
unsigned int v119; // eax
|
|
signed int v120; // ebp
|
|
signed int v121; // ecx
|
|
unsigned int v122; // eax
|
|
_BYTE *v123; // edi
|
|
signed int v124; // ecx
|
|
int v125; // eax
|
|
signed int v126; // edx
|
|
signed int v127; // ecx
|
|
int v128; // eax
|
|
_BYTE *v129; // edi
|
|
_BYTE *v130; // edi
|
|
signed int v131; // ecx
|
|
int v132; // eax
|
|
_BYTE *v133; // edi
|
|
signed int v134; // ebp
|
|
signed int v135; // edx
|
|
unsigned int v136; // eax
|
|
unsigned int v137; // ecx
|
|
unsigned int v138; // ecx
|
|
char *v139; // esi
|
|
_BYTE *v140; // edi
|
|
char v141; // al
|
|
int v142; // eax
|
|
_BYTE *v143; // edi
|
|
char v144; // al
|
|
unsigned int v145; // ecx
|
|
char v146; // al
|
|
int v147; // eax
|
|
_BYTE *v148; // edi
|
|
signed int v149; // edx
|
|
_BYTE *v150; // edi
|
|
unsigned int v151; // ecx
|
|
int v152; // eax
|
|
unsigned int v153; // ecx
|
|
_BYTE *v154; // edi
|
|
int v155; // eax
|
|
_BYTE *v156; // edi
|
|
unsigned int v157; // ecx
|
|
short v158; // ax
|
|
int v159; // eax
|
|
_BYTE *v160; // edi
|
|
signed int v161; // edx
|
|
_BYTE *v162; // edi
|
|
unsigned int v163; // ecx
|
|
int v164; // eax
|
|
unsigned int v165; // ecx
|
|
_BYTE *v166; // edi
|
|
int v167; // eax
|
|
_BYTE *v168; // edi
|
|
unsigned int v169; // ecx
|
|
short v170; // ax
|
|
int v171; // eax
|
|
_BYTE *v172; // edi
|
|
signed int v173; // edx
|
|
unsigned int v174; // ecx
|
|
int v175; // eax
|
|
char v176; // bp
|
|
unsigned int i; // ecx
|
|
int v178; // eax
|
|
_BYTE *v179; // edi
|
|
int v180; // ebp
|
|
_BYTE *v181; // edi
|
|
unsigned int j; // ecx
|
|
int v183; // eax
|
|
_BYTE *v184; // edi
|
|
short v185; // ax
|
|
signed int v186; // edx
|
|
unsigned int v187; // ecx
|
|
int v188; // eax
|
|
unsigned int k; // ecx
|
|
int v190; // eax
|
|
_BYTE *v191; // edi
|
|
_BYTE *v192; // edi
|
|
unsigned int l; // ecx
|
|
int v194; // eax
|
|
_BYTE *v195; // edi
|
|
short v196; // ax
|
|
signed int v197; // edx
|
|
_BYTE *v198; // edi
|
|
unsigned int v199; // ecx
|
|
int v200; // eax
|
|
unsigned int v201; // ecx
|
|
_BYTE *v202; // edi
|
|
int v203; // eax
|
|
_BYTE *v204; // edi
|
|
unsigned int v205; // ecx
|
|
short v206; // ax
|
|
int v207; // eax
|
|
_BYTE *v208; // edi
|
|
signed int v209; // edx
|
|
signed int v210; // ecx
|
|
int v211; // eax
|
|
_BYTE *v212; // edi
|
|
_BYTE *v213; // edi
|
|
signed int v214; // ecx
|
|
int v215; // eax
|
|
_BYTE *v216; // edi
|
|
signed int v217; // edx
|
|
unsigned int v218; // ecx
|
|
int v219; // eax
|
|
unsigned int m; // ecx
|
|
int v221; // eax
|
|
_BYTE *v222; // edi
|
|
_BYTE *v223; // edi
|
|
unsigned int n; // ecx
|
|
int v225; // eax
|
|
_BYTE *v226; // edi
|
|
short v227; // ax
|
|
signed int v228; // edx
|
|
signed int v229; // ecx
|
|
int v230; // eax
|
|
_BYTE *v231; // edi
|
|
_BYTE *v232; // edi
|
|
signed int v233; // ecx
|
|
int v234; // eax
|
|
_BYTE *v235; // edi
|
|
signed int v236; // edx
|
|
signed int v237; // ecx
|
|
_BYTE *v238; // edi
|
|
signed int v239; // ecx
|
|
signed int v240; // ebp
|
|
signed int v241; // edx
|
|
unsigned int v242; // eax
|
|
unsigned int v243; // ecx
|
|
unsigned int v244; // ecx
|
|
_BYTE *v245; // edi
|
|
unsigned int v246; // ecx
|
|
signed int ii; // edx
|
|
_BYTE *v248; // edi
|
|
unsigned int v249; // ecx
|
|
unsigned int v250; // ecx
|
|
_BYTE *v251; // edi
|
|
unsigned int v252; // ecx
|
|
signed int v253; // edx
|
|
_BYTE *v254; // edi
|
|
unsigned int v255; // ecx
|
|
unsigned int v256; // ecx
|
|
_BYTE *v257; // edi
|
|
unsigned int v258; // ecx
|
|
signed int jj; // edx
|
|
unsigned int v260; // ecx
|
|
unsigned int v261; // ecx
|
|
_BYTE *v262; // edi
|
|
unsigned int v263; // ecx
|
|
_BYTE *v264; // edi
|
|
signed int v265; // edx
|
|
unsigned int v266; // ecx
|
|
unsigned int v267; // ecx
|
|
_BYTE *v268; // edi
|
|
unsigned int v269; // ecx
|
|
signed int kk; // edx
|
|
_BYTE *v271; // edi
|
|
unsigned int v272; // ecx
|
|
unsigned int v273; // ecx
|
|
_BYTE *v274; // edi
|
|
unsigned int v275; // ecx
|
|
signed int v276; // edx
|
|
signed int v277; // ecx
|
|
_BYTE *v278; // edi
|
|
signed int v279; // ecx
|
|
signed int ll; // edx
|
|
unsigned int v281; // ecx
|
|
unsigned int v282; // ecx
|
|
_BYTE *v283; // edi
|
|
unsigned int v284; // ecx
|
|
unsigned int v285; // edi
|
|
signed int v286; // edx
|
|
signed int v287; // ecx
|
|
_BYTE *v288; // edi
|
|
signed int v289; // ecx
|
|
int v290; // [esp-14h] [ebp-18h]
|
|
int v291; // [esp-14h] [ebp-18h]
|
|
|
|
world_4B3265 = (int)speed_cel_frame_num_from_light_index_frame_num;
|
|
v2 = (unsigned int)a1;
|
|
if ( !(_BYTE)light_table_index )
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v6 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v8 = level_cel_block;
|
|
_LOBYTE(v8) = BYTE1(v8);
|
|
v7 = ((v8 >> 4) & 7) + 8;
|
|
goto LABEL_11;
|
|
}
|
|
if ( (_BYTE)light_table_index != lightmax )
|
|
{
|
|
if ( !(level_cel_block & 0x8000) )
|
|
{
|
|
v3 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v4 = &pLightTbl[256 * light_table_index];
|
|
v5 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
if ( BYTE1(level_cel_block) >> 4 )
|
|
{
|
|
switch ( v5 )
|
|
{
|
|
case 1:
|
|
world_4B325C = (unsigned char)a1 & 1;
|
|
v18 = 32;
|
|
do
|
|
{
|
|
v19 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v20 = (unsigned char)*v3++;
|
|
if ( (v20 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v20) = -(char)v20;
|
|
v2 += v20;
|
|
v19 -= v20;
|
|
if ( !v19 )
|
|
goto LABEL_67;
|
|
}
|
|
v21 = v19 - v20;
|
|
if ( v2 < screen_buf_end )
|
|
return;
|
|
if ( (v2 & 1) == world_4B325C )
|
|
{
|
|
v290 = v21;
|
|
v22 = v20 >> 1;
|
|
if ( v20 & 1 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v23 = v22 & 1;
|
|
v26 = v20 >> 2;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v21) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v21];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v26 )
|
|
{
|
|
do
|
|
{
|
|
v27 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v21) = v27;
|
|
*(_BYTE *)v2 = v4[v21];
|
|
_LOBYTE(v21) = BYTE2(v27);
|
|
v2 += 4;
|
|
--v26;
|
|
*(_BYTE *)(v2 - 2) = v4[v21];
|
|
}
|
|
while ( v26 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v22 & 1;
|
|
v24 = v20 >> 2;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v21) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v21];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v24 )
|
|
{
|
|
do
|
|
{
|
|
v25 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v21) = BYTE1(v25);
|
|
v25 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v21];
|
|
_LOBYTE(v21) = BYTE1(v25);
|
|
v2 += 4;
|
|
--v24;
|
|
*(_BYTE *)(v2 - 1) = v4[v21];
|
|
}
|
|
while ( v24 );
|
|
}
|
|
}
|
|
v19 = v290;
|
|
}
|
|
else
|
|
{
|
|
v291 = v21;
|
|
v28 = v20 >> 1;
|
|
if ( v20 & 1 )
|
|
{
|
|
_LOBYTE(v21) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v21];
|
|
v23 = v28 & 1;
|
|
v31 = v20 >> 2;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v21) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v21];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v31 )
|
|
{
|
|
do
|
|
{
|
|
v32 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v21) = BYTE1(v32);
|
|
v32 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v21];
|
|
_LOBYTE(v21) = BYTE1(v32);
|
|
v2 += 4;
|
|
--v31;
|
|
*(_BYTE *)(v2 - 1) = v4[v21];
|
|
}
|
|
while ( v31 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v28 & 1;
|
|
v29 = v20 >> 2;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v21) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v21];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v29 )
|
|
{
|
|
do
|
|
{
|
|
v30 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v21) = v30;
|
|
*(_BYTE *)v2 = v4[v21];
|
|
_LOBYTE(v21) = BYTE2(v30);
|
|
v2 += 4;
|
|
--v29;
|
|
*(_BYTE *)(v2 - 2) = v4[v21];
|
|
}
|
|
while ( v29 );
|
|
}
|
|
}
|
|
v19 = v291;
|
|
}
|
|
}
|
|
while ( v19 );
|
|
LABEL_67:
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
v2 -= 800;
|
|
--v18;
|
|
}
|
|
while ( v18 );
|
|
break;
|
|
case 2:
|
|
world_4B325C = 0;
|
|
v33 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v34 = (_BYTE *)(v33 + v2);
|
|
v35 = 32 - v33;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v36 = v35 & 2;
|
|
v3 += v36;
|
|
v23 = v35 & 1;
|
|
v37 = v35 >> 1;
|
|
if ( v23 )
|
|
{
|
|
++v3;
|
|
++v34;
|
|
v23 = v37 & 1;
|
|
v40 = v37 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v36) = *v3;
|
|
v3 += 2;
|
|
*v34 = v4[v36];
|
|
v34 += 2;
|
|
}
|
|
if ( (_BYTE)v40 )
|
|
{
|
|
do
|
|
{
|
|
v41 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v36) = v41;
|
|
*v34 = v4[v36];
|
|
_LOBYTE(v36) = BYTE2(v41);
|
|
v34 += 4;
|
|
--v40;
|
|
*(v34 - 2) = v4[v36];
|
|
}
|
|
while ( v40 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v37 & 1;
|
|
v38 = v37 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v36) = v3[1];
|
|
v3 += 2;
|
|
v34[1] = v4[v36];
|
|
v34 += 2;
|
|
}
|
|
if ( (_BYTE)v38 )
|
|
{
|
|
do
|
|
{
|
|
v39 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v36) = BYTE1(v39);
|
|
v39 >>= 16;
|
|
v34[1] = v4[v36];
|
|
_LOBYTE(v36) = BYTE1(v39);
|
|
v34 += 4;
|
|
--v38;
|
|
*(v34 - 1) = v4[v36];
|
|
}
|
|
while ( v38 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v42 = v35 & 2;
|
|
v3 += v42;
|
|
v23 = v35 & 1;
|
|
v43 = v35 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v42) = *v3++;
|
|
*v34++ = v4[v42];
|
|
v23 = v43 & 1;
|
|
v46 = v43 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v42) = v3[1];
|
|
v3 += 2;
|
|
v34[1] = v4[v42];
|
|
v34 += 2;
|
|
}
|
|
if ( (_BYTE)v46 )
|
|
{
|
|
do
|
|
{
|
|
v47 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v42) = BYTE1(v47);
|
|
v47 >>= 16;
|
|
v34[1] = v4[v42];
|
|
_LOBYTE(v42) = BYTE1(v47);
|
|
v34 += 4;
|
|
--v46;
|
|
*(v34 - 1) = v4[v42];
|
|
}
|
|
while ( v46 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v43 & 1;
|
|
v44 = v43 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v42) = *v3;
|
|
v3 += 2;
|
|
*v34 = v4[v42];
|
|
v34 += 2;
|
|
}
|
|
if ( (_BYTE)v44 )
|
|
{
|
|
do
|
|
{
|
|
v45 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v42) = v45;
|
|
*v34 = v4[v42];
|
|
_LOBYTE(v42) = BYTE2(v45);
|
|
v34 += 4;
|
|
--v44;
|
|
*(v34 - 2) = v4[v42];
|
|
}
|
|
while ( v44 );
|
|
}
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v34 - 800);
|
|
v48 = __OFSUB__(v33, 2);
|
|
v33 -= 2;
|
|
if ( (v33 < 0) ^ v48 )
|
|
{
|
|
v49 = 2;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v50 = (_BYTE *)(v49 + v2);
|
|
v51 = 32 - v49;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v52 = v51 & 2;
|
|
v3 += v52;
|
|
v23 = v51 & 1;
|
|
v53 = v51 >> 1;
|
|
if ( v23 )
|
|
{
|
|
++v3;
|
|
++v50;
|
|
v23 = v53 & 1;
|
|
v56 = v53 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v52) = *v3;
|
|
v3 += 2;
|
|
*v50 = v4[v52];
|
|
v50 += 2;
|
|
}
|
|
if ( (_BYTE)v56 )
|
|
{
|
|
do
|
|
{
|
|
v57 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v52) = v57;
|
|
*v50 = v4[v52];
|
|
_LOBYTE(v52) = BYTE2(v57);
|
|
v50 += 4;
|
|
--v56;
|
|
*(v50 - 2) = v4[v52];
|
|
}
|
|
while ( v56 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v53 & 1;
|
|
v54 = v53 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v52) = v3[1];
|
|
v3 += 2;
|
|
v50[1] = v4[v52];
|
|
v50 += 2;
|
|
}
|
|
if ( (_BYTE)v54 )
|
|
{
|
|
do
|
|
{
|
|
v55 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v52) = BYTE1(v55);
|
|
v55 >>= 16;
|
|
v50[1] = v4[v52];
|
|
_LOBYTE(v52) = BYTE1(v55);
|
|
v50 += 4;
|
|
--v54;
|
|
*(v50 - 1) = v4[v52];
|
|
}
|
|
while ( v54 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v58 = v51 & 2;
|
|
v3 += v58;
|
|
v23 = v51 & 1;
|
|
v59 = v51 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v58) = *v3++;
|
|
*v50++ = v4[v58];
|
|
v23 = v59 & 1;
|
|
v62 = v59 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v58) = v3[1];
|
|
v3 += 2;
|
|
v50[1] = v4[v58];
|
|
v50 += 2;
|
|
}
|
|
if ( (_BYTE)v62 )
|
|
{
|
|
do
|
|
{
|
|
v63 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v58) = BYTE1(v63);
|
|
v63 >>= 16;
|
|
v50[1] = v4[v58];
|
|
_LOBYTE(v58) = BYTE1(v63);
|
|
v50 += 4;
|
|
--v62;
|
|
*(v50 - 1) = v4[v58];
|
|
}
|
|
while ( v62 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v59 & 1;
|
|
v60 = v59 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v58) = *v3;
|
|
v3 += 2;
|
|
*v50 = v4[v58];
|
|
v50 += 2;
|
|
}
|
|
if ( (_BYTE)v60 )
|
|
{
|
|
do
|
|
{
|
|
v61 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v58) = v61;
|
|
*v50 = v4[v58];
|
|
_LOBYTE(v58) = BYTE2(v61);
|
|
v50 += 4;
|
|
--v60;
|
|
*(v50 - 2) = v4[v58];
|
|
}
|
|
while ( v60 );
|
|
}
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v50 - 800);
|
|
v49 += 2;
|
|
}
|
|
while ( v49 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
world_4B325C = 0;
|
|
v64 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v65 = 32 - v64;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v23 = v65 & 1;
|
|
v66 = v65 >> 1;
|
|
if ( v23 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v23 = v66 & 1;
|
|
v69 = v66 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v69 )
|
|
{
|
|
do
|
|
{
|
|
v70 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v70;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v70);
|
|
v2 += 4;
|
|
--v69;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v69 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v66 & 1;
|
|
v67 = v66 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v67 )
|
|
{
|
|
do
|
|
{
|
|
v68 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v68);
|
|
v68 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v68);
|
|
v2 += 4;
|
|
--v67;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v67 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
else
|
|
{
|
|
v23 = v65 & 1;
|
|
v71 = v65 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v1];
|
|
v23 = v71 & 1;
|
|
v74 = v71 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v74 )
|
|
{
|
|
do
|
|
{
|
|
v75 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v75);
|
|
v75 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v75);
|
|
v2 += 4;
|
|
--v74;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v74 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v71 & 1;
|
|
v72 = v71 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v72 )
|
|
{
|
|
do
|
|
{
|
|
v73 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v73;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v73);
|
|
v2 += 4;
|
|
--v72;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v72 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
v2 = v64 + v2 - 800;
|
|
v48 = __OFSUB__(v64, 2);
|
|
v64 -= 2;
|
|
if ( (v64 < 0) ^ v48 )
|
|
{
|
|
v76 = 2;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v77 = 32 - v76;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v23 = v77 & 1;
|
|
v78 = v77 >> 1;
|
|
if ( v23 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v23 = v78 & 1;
|
|
v81 = v78 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v81 )
|
|
{
|
|
do
|
|
{
|
|
v82 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v82;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v82);
|
|
v2 += 4;
|
|
--v81;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v81 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v78 & 1;
|
|
v79 = v78 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v79 )
|
|
{
|
|
do
|
|
{
|
|
v80 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v80);
|
|
v80 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v80);
|
|
v2 += 4;
|
|
--v79;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v79 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
else
|
|
{
|
|
v23 = v77 & 1;
|
|
v83 = v77 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v1];
|
|
v23 = v83 & 1;
|
|
v86 = v83 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v86 )
|
|
{
|
|
do
|
|
{
|
|
v87 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v87);
|
|
v87 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v87);
|
|
v2 += 4;
|
|
--v86;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v86 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v83 & 1;
|
|
v84 = v83 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v84 )
|
|
{
|
|
do
|
|
{
|
|
v85 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v85;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v85);
|
|
v2 += 4;
|
|
--v84;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v84 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
v2 = v76 + v2 - 800;
|
|
v76 += 2;
|
|
}
|
|
while ( v76 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
world_4B325C = 0;
|
|
v88 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v89 = (_BYTE *)(v88 + v2);
|
|
v90 = 32 - v88;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v91 = v90 & 2;
|
|
v3 += v91;
|
|
v23 = v90 & 1;
|
|
v92 = v90 >> 1;
|
|
if ( v23 )
|
|
{
|
|
++v3;
|
|
++v89;
|
|
v23 = v92 & 1;
|
|
v95 = v92 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v91) = *v3;
|
|
v3 += 2;
|
|
*v89 = v4[v91];
|
|
v89 += 2;
|
|
}
|
|
if ( (_BYTE)v95 )
|
|
{
|
|
do
|
|
{
|
|
v96 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v91) = v96;
|
|
*v89 = v4[v91];
|
|
_LOBYTE(v91) = BYTE2(v96);
|
|
v89 += 4;
|
|
--v95;
|
|
*(v89 - 2) = v4[v91];
|
|
}
|
|
while ( v95 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v92 & 1;
|
|
v93 = v92 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v91) = v3[1];
|
|
v3 += 2;
|
|
v89[1] = v4[v91];
|
|
v89 += 2;
|
|
}
|
|
if ( (_BYTE)v93 )
|
|
{
|
|
do
|
|
{
|
|
v94 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v91) = BYTE1(v94);
|
|
v94 >>= 16;
|
|
v89[1] = v4[v91];
|
|
_LOBYTE(v91) = BYTE1(v94);
|
|
v89 += 4;
|
|
--v93;
|
|
*(v89 - 1) = v4[v91];
|
|
}
|
|
while ( v93 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v91 = v90 & 2;
|
|
v3 += v91;
|
|
v23 = v90 & 1;
|
|
v97 = v90 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v91) = *v3++;
|
|
*v89++ = v4[v91];
|
|
v23 = v97 & 1;
|
|
v100 = v97 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v91) = v3[1];
|
|
v3 += 2;
|
|
v89[1] = v4[v91];
|
|
v89 += 2;
|
|
}
|
|
if ( (_BYTE)v100 )
|
|
{
|
|
do
|
|
{
|
|
v101 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v91) = BYTE1(v101);
|
|
v101 >>= 16;
|
|
v89[1] = v4[v91];
|
|
_LOBYTE(v91) = BYTE1(v101);
|
|
v89 += 4;
|
|
--v100;
|
|
*(v89 - 1) = v4[v91];
|
|
}
|
|
while ( v100 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v97 & 1;
|
|
v98 = v97 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v91) = *v3;
|
|
v3 += 2;
|
|
*v89 = v4[v91];
|
|
v89 += 2;
|
|
}
|
|
if ( (_BYTE)v98 )
|
|
{
|
|
do
|
|
{
|
|
v99 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v91) = v99;
|
|
*v89 = v4[v91];
|
|
_LOBYTE(v91) = BYTE2(v99);
|
|
v89 += 4;
|
|
--v98;
|
|
*(v89 - 2) = v4[v91];
|
|
}
|
|
while ( v98 );
|
|
}
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v89 - 800);
|
|
v48 = __OFSUB__(v88, 2);
|
|
v88 -= 2;
|
|
if ( (v88 < 0) ^ v48 )
|
|
{
|
|
v102 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v103 = 8;
|
|
do
|
|
{
|
|
v104 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v91) = BYTE1(v104);
|
|
v104 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v91];
|
|
_LOBYTE(v91) = BYTE1(v104);
|
|
v2 += 4;
|
|
--v103;
|
|
*(_BYTE *)(v2 - 1) = v4[v91];
|
|
}
|
|
while ( v103 );
|
|
v105 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v105 < screen_buf_end )
|
|
break;
|
|
v106 = 8;
|
|
do
|
|
{
|
|
v107 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v91) = v107;
|
|
*v105 = v4[v91];
|
|
_LOBYTE(v91) = BYTE2(v107);
|
|
v105 += 4;
|
|
--v106;
|
|
*(v105 - 2) = v4[v91];
|
|
}
|
|
while ( v106 );
|
|
v2 = (unsigned int)(v105 - 800);
|
|
--v102;
|
|
}
|
|
while ( v102 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
world_4B325C = 0;
|
|
v108 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v109 = 32 - v108;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v23 = v109 & 1;
|
|
v110 = v109 >> 1;
|
|
if ( v23 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v23 = v110 & 1;
|
|
v113 = v110 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v113 )
|
|
{
|
|
do
|
|
{
|
|
v114 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v114;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v114);
|
|
v2 += 4;
|
|
--v113;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v113 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v110 & 1;
|
|
v111 = v110 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v111 )
|
|
{
|
|
do
|
|
{
|
|
v112 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v112);
|
|
v112 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v112);
|
|
v2 += 4;
|
|
--v111;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v111 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
else
|
|
{
|
|
v23 = v109 & 1;
|
|
v115 = v109 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v1];
|
|
v23 = v115 & 1;
|
|
v118 = v115 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v118 )
|
|
{
|
|
do
|
|
{
|
|
v119 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v119);
|
|
v119 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v119);
|
|
v2 += 4;
|
|
--v118;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v118 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v23 = v115 & 1;
|
|
v116 = v115 >> 1;
|
|
if ( v23 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v116 )
|
|
{
|
|
do
|
|
{
|
|
v117 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v117;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v117);
|
|
v2 += 4;
|
|
--v116;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v116 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
v2 = v108 + v2 - 800;
|
|
v48 = __OFSUB__(v108, 2);
|
|
v108 -= 2;
|
|
if ( (v108 < 0) ^ v48 )
|
|
{
|
|
v120 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v121 = 8;
|
|
do
|
|
{
|
|
v122 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v122);
|
|
v122 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v122);
|
|
v2 += 4;
|
|
--v121;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v121 );
|
|
v123 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v123 < screen_buf_end )
|
|
break;
|
|
v124 = 8;
|
|
do
|
|
{
|
|
v125 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v125;
|
|
*v123 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v125);
|
|
v123 += 4;
|
|
--v124;
|
|
*(v123 - 2) = v4[v1];
|
|
}
|
|
while ( v124 );
|
|
v2 = (unsigned int)(v123 - 800);
|
|
--v120;
|
|
}
|
|
while ( v120 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v12 = 16;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v13 = 8;
|
|
do
|
|
{
|
|
v14 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v14);
|
|
v14 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v14);
|
|
v2 += 4;
|
|
--v13;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v13 );
|
|
v15 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v15 < screen_buf_end )
|
|
break;
|
|
v16 = 8;
|
|
do
|
|
{
|
|
v17 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v17;
|
|
*v15 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v17);
|
|
v15 += 4;
|
|
--v16;
|
|
*(v15 - 2) = v4[v1];
|
|
}
|
|
while ( v16 );
|
|
v2 = (unsigned int)(v15 - 800);
|
|
--v12;
|
|
}
|
|
while ( v12 );
|
|
}
|
|
return;
|
|
}
|
|
v6 = (char *)pSpeedCels + *(_DWORD *)(4 * (light_table_index + 16 * (level_cel_block & 0xFFF)) + world_4B3265);
|
|
v7 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
LABEL_11:
|
|
if ( v7 == 8 )
|
|
{
|
|
v126 = 16;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v127 = 8;
|
|
do
|
|
{
|
|
v128 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v129 = (_BYTE *)(v2 + 1);
|
|
v128 = __ROR4__(v128, 8);
|
|
*v129 = v128;
|
|
v129 += 2;
|
|
*v129 = __ROR4__(v128, 16);
|
|
v2 = (unsigned int)(v129 + 1);
|
|
--v127;
|
|
}
|
|
while ( v127 );
|
|
v130 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v130 < screen_buf_end )
|
|
break;
|
|
v131 = 8;
|
|
do
|
|
{
|
|
v132 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v130 = v132;
|
|
v133 = v130 + 2;
|
|
*v133 = __ROR4__(v132, 16);
|
|
v130 = v133 + 2;
|
|
--v131;
|
|
}
|
|
while ( v131 );
|
|
v2 = (unsigned int)(v130 - 800);
|
|
--v126;
|
|
}
|
|
while ( v126 );
|
|
return;
|
|
}
|
|
if ( v7 != 9 )
|
|
{
|
|
switch ( v7 )
|
|
{
|
|
case 10:
|
|
world_4B325C = 0;
|
|
v149 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v150 = (_BYTE *)(v149 + v2);
|
|
v151 = 32 - v149;
|
|
v152 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v153 = v151 >> 2;
|
|
if ( !(v151 & 2)
|
|
|| (_LOWORD(v152) = *((_WORD *)v6 + 1),
|
|
v6 += 4,
|
|
v154 = v150 + 1,
|
|
*v154 = __ROR4__(v152, 8),
|
|
v150 = v154 + 1,
|
|
v153) )
|
|
{
|
|
do
|
|
{
|
|
v155 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v156 = v150 + 1;
|
|
v155 = __ROR4__(v155, 8);
|
|
*v156 = v155;
|
|
v156 += 2;
|
|
*v156 = __ROR4__(v155, 16);
|
|
v150 = v156 + 1;
|
|
--v153;
|
|
}
|
|
while ( v153 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v157 = v151 >> 2;
|
|
if ( !(v151 & 2) || (v158 = *((_WORD *)v6 + 1), v6 += 4, *v150 = v158, v150 += 2, v157) )
|
|
{
|
|
do
|
|
{
|
|
v159 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v150 = v159;
|
|
v160 = v150 + 2;
|
|
*v160 = __ROR4__(v159, 16);
|
|
v150 = v160 + 2;
|
|
--v157;
|
|
}
|
|
while ( v157 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v150 - 800);
|
|
v48 = __OFSUB__(v149, 2);
|
|
v149 -= 2;
|
|
if ( (v149 < 0) ^ v48 )
|
|
{
|
|
v161 = 2;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v162 = (_BYTE *)(v161 + v2);
|
|
v163 = 32 - v161;
|
|
v164 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v165 = v163 >> 2;
|
|
if ( !(v163 & 2)
|
|
|| (_LOWORD(v164) = *((_WORD *)v6 + 1),
|
|
v6 += 4,
|
|
v166 = v162 + 1,
|
|
*v166 = __ROR4__(v164, 8),
|
|
v162 = v166 + 1,
|
|
v165) )
|
|
{
|
|
do
|
|
{
|
|
v167 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v168 = v162 + 1;
|
|
v167 = __ROR4__(v167, 8);
|
|
*v168 = v167;
|
|
v168 += 2;
|
|
*v168 = __ROR4__(v167, 16);
|
|
v162 = v168 + 1;
|
|
--v165;
|
|
}
|
|
while ( v165 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v169 = v163 >> 2;
|
|
if ( !(v163 & 2) || (v170 = *((_WORD *)v6 + 1), v6 += 4, *v162 = v170, v162 += 2, v169) )
|
|
{
|
|
do
|
|
{
|
|
v171 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v162 = v171;
|
|
v172 = v162 + 2;
|
|
*v172 = __ROR4__(v171, 16);
|
|
v162 = v172 + 2;
|
|
--v169;
|
|
}
|
|
while ( v169 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v162 - 800);
|
|
v161 += 2;
|
|
}
|
|
while ( v161 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 11:
|
|
world_4B325C = 0;
|
|
v173 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v174 = 32 - v173;
|
|
v175 = ((_BYTE)world_4B325C + 1) & 1;
|
|
v176 = 32 - v173;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( v175 )
|
|
{
|
|
for ( i = v174 >> 2; i; --i )
|
|
{
|
|
v178 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v179 = (_BYTE *)(v2 + 1);
|
|
v178 = __ROR4__(v178, 8);
|
|
*v179 = v178;
|
|
v179 += 2;
|
|
v175 = __ROR4__(v178, 16);
|
|
*v179 = v175;
|
|
v2 = (unsigned int)(v179 + 1);
|
|
}
|
|
v180 = v176 & 2;
|
|
if ( v180 )
|
|
{
|
|
_LOWORD(v175) = *(_WORD *)v6;
|
|
v6 += 4;
|
|
v181 = (_BYTE *)(v2 + 1);
|
|
*v181 = __ROR4__(v175, 8);
|
|
v2 = (unsigned int)(v181 + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( j = v174 >> 2; j; --j )
|
|
{
|
|
v183 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v183;
|
|
v184 = (_BYTE *)(v2 + 2);
|
|
*v184 = __ROR4__(v183, 16);
|
|
v2 = (unsigned int)(v184 + 2);
|
|
}
|
|
v180 = v176 & 2;
|
|
if ( v180 )
|
|
{
|
|
v185 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v185;
|
|
v2 += 2;
|
|
}
|
|
}
|
|
v2 = v173 + v2 - 800;
|
|
v48 = __OFSUB__(v173, 2);
|
|
v173 -= 2;
|
|
if ( (v173 < 0) ^ v48 )
|
|
{
|
|
v186 = 2;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v187 = 32 - v186;
|
|
v188 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
for ( k = v187 >> 2; k; --k )
|
|
{
|
|
v190 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v191 = (_BYTE *)(v2 + 1);
|
|
v190 = __ROR4__(v190, 8);
|
|
*v191 = v190;
|
|
v191 += 2;
|
|
v188 = __ROR4__(v190, 16);
|
|
*v191 = v188;
|
|
v2 = (unsigned int)(v191 + 1);
|
|
}
|
|
v180 &= 2u;
|
|
if ( v180 )
|
|
{
|
|
_LOWORD(v188) = *(_WORD *)v6;
|
|
v6 += 4;
|
|
v192 = (_BYTE *)(v2 + 1);
|
|
*v192 = __ROR4__(v188, 8);
|
|
v2 = (unsigned int)(v192 + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( l = v187 >> 2; l; --l )
|
|
{
|
|
v194 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v194;
|
|
v195 = (_BYTE *)(v2 + 2);
|
|
*v195 = __ROR4__(v194, 16);
|
|
v2 = (unsigned int)(v195 + 2);
|
|
}
|
|
v180 &= 2u;
|
|
if ( v180 )
|
|
{
|
|
v196 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v196;
|
|
v2 += 2;
|
|
}
|
|
}
|
|
v2 = v186 + v2 - 800;
|
|
v186 += 2;
|
|
}
|
|
while ( v186 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 12:
|
|
world_4B325C = 0;
|
|
v197 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v198 = (_BYTE *)(v197 + v2);
|
|
v199 = 32 - v197;
|
|
v200 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v201 = v199 >> 2;
|
|
if ( !(v199 & 2)
|
|
|| (_LOWORD(v200) = *((_WORD *)v6 + 1),
|
|
v6 += 4,
|
|
v202 = v198 + 1,
|
|
*v202 = __ROR4__(v200, 8),
|
|
v198 = v202 + 1,
|
|
v201) )
|
|
{
|
|
do
|
|
{
|
|
v203 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v204 = v198 + 1;
|
|
v203 = __ROR4__(v203, 8);
|
|
*v204 = v203;
|
|
v204 += 2;
|
|
*v204 = __ROR4__(v203, 16);
|
|
v198 = v204 + 1;
|
|
--v201;
|
|
}
|
|
while ( v201 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v205 = v199 >> 2;
|
|
if ( !(v199 & 2) || (v206 = *((_WORD *)v6 + 1), v6 += 4, *v198 = v206, v198 += 2, v205) )
|
|
{
|
|
do
|
|
{
|
|
v207 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v198 = v207;
|
|
v208 = v198 + 2;
|
|
*v208 = __ROR4__(v207, 16);
|
|
v198 = v208 + 2;
|
|
--v205;
|
|
}
|
|
while ( v205 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v198 - 800);
|
|
v48 = __OFSUB__(v197, 2);
|
|
v197 -= 2;
|
|
if ( (v197 < 0) ^ v48 )
|
|
{
|
|
v209 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v210 = 8;
|
|
do
|
|
{
|
|
v211 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v212 = (_BYTE *)(v2 + 1);
|
|
v211 = __ROR4__(v211, 8);
|
|
*v212 = v211;
|
|
v212 += 2;
|
|
*v212 = __ROR4__(v211, 16);
|
|
v2 = (unsigned int)(v212 + 1);
|
|
--v210;
|
|
}
|
|
while ( v210 );
|
|
v213 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v213 < screen_buf_end )
|
|
break;
|
|
v214 = 8;
|
|
do
|
|
{
|
|
v215 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v213 = v215;
|
|
v216 = v213 + 2;
|
|
*v216 = __ROR4__(v215, 16);
|
|
v213 = v216 + 2;
|
|
--v214;
|
|
}
|
|
while ( v214 );
|
|
v2 = (unsigned int)(v213 - 800);
|
|
--v209;
|
|
}
|
|
while ( v209 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
world_4B325C = 0;
|
|
v217 = 30;
|
|
while ( v2 >= screen_buf_end )
|
|
{
|
|
v218 = 32 - v217;
|
|
v219 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
for ( m = v218 >> 2; m; --m )
|
|
{
|
|
v221 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v222 = (_BYTE *)(v2 + 1);
|
|
v221 = __ROR4__(v221, 8);
|
|
*v222 = v221;
|
|
v222 += 2;
|
|
v219 = __ROR4__(v221, 16);
|
|
*v222 = v219;
|
|
v2 = (unsigned int)(v222 + 1);
|
|
}
|
|
if ( (32 - (_BYTE)v217) & 2 )
|
|
{
|
|
_LOWORD(v219) = *(_WORD *)v6;
|
|
v6 += 4;
|
|
v223 = (_BYTE *)(v2 + 1);
|
|
*v223 = __ROR4__(v219, 8);
|
|
v2 = (unsigned int)(v223 + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( n = v218 >> 2; n; --n )
|
|
{
|
|
v225 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v225;
|
|
v226 = (_BYTE *)(v2 + 2);
|
|
*v226 = __ROR4__(v225, 16);
|
|
v2 = (unsigned int)(v226 + 2);
|
|
}
|
|
if ( (32 - (_BYTE)v217) & 2 )
|
|
{
|
|
v227 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v227;
|
|
v2 += 2;
|
|
}
|
|
}
|
|
v2 = v217 + v2 - 800;
|
|
v48 = __OFSUB__(v217, 2);
|
|
v217 -= 2;
|
|
if ( (v217 < 0) ^ v48 )
|
|
{
|
|
v228 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v229 = 8;
|
|
do
|
|
{
|
|
v230 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v231 = (_BYTE *)(v2 + 1);
|
|
v230 = __ROR4__(v230, 8);
|
|
*v231 = v230;
|
|
v231 += 2;
|
|
*v231 = __ROR4__(v230, 16);
|
|
v2 = (unsigned int)(v231 + 1);
|
|
--v229;
|
|
}
|
|
while ( v229 );
|
|
v232 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v232 < screen_buf_end )
|
|
break;
|
|
v233 = 8;
|
|
do
|
|
{
|
|
v234 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v232 = v234;
|
|
v235 = v232 + 2;
|
|
*v235 = __ROR4__(v234, 16);
|
|
v232 = v235 + 2;
|
|
--v233;
|
|
}
|
|
while ( v233 );
|
|
v2 = (unsigned int)(v232 - 800);
|
|
--v228;
|
|
}
|
|
while ( v228 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
world_4B325C = (unsigned char)a1 & 1;
|
|
v134 = 32;
|
|
LABEL_251:
|
|
v135 = 32;
|
|
while ( 1 )
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v136 = (unsigned char)*v6++;
|
|
if ( (v136 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v136) = -(char)v136;
|
|
v2 += v136;
|
|
v135 -= v136;
|
|
if ( !v135 )
|
|
{
|
|
LABEL_271:
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
v2 -= 800;
|
|
if ( !--v134 )
|
|
return;
|
|
goto LABEL_251;
|
|
}
|
|
}
|
|
v135 -= v136;
|
|
if ( v2 < screen_buf_end )
|
|
return;
|
|
if ( (v2 & 1) == world_4B325C )
|
|
{
|
|
v137 = v136 >> 1;
|
|
if ( !(v136 & 1) )
|
|
goto LABEL_258;
|
|
++v6;
|
|
++v2;
|
|
if ( v137 )
|
|
{
|
|
LABEL_265:
|
|
v23 = v137 & 1;
|
|
v145 = v137 >> 1;
|
|
if ( !v23 || (v146 = *v6, v6 += 2, *(_BYTE *)v2 = v146, v2 += 2, v145) )
|
|
{
|
|
do
|
|
{
|
|
v147 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v147;
|
|
v148 = (_BYTE *)(v2 + 2);
|
|
*v148 = __ROR4__(v147, 16);
|
|
v2 = (unsigned int)(v148 + 2);
|
|
--v145;
|
|
}
|
|
while ( v145 );
|
|
}
|
|
goto LABEL_268;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v137 = v136 >> 1;
|
|
if ( !(v136 & 1) )
|
|
goto LABEL_265;
|
|
v144 = *v6++;
|
|
*(_BYTE *)v2++ = v144;
|
|
if ( v137 )
|
|
{
|
|
LABEL_258:
|
|
v23 = v137 & 1;
|
|
v138 = v137 >> 1;
|
|
if ( !v23
|
|
|| (v139 = v6 + 1,
|
|
v140 = (_BYTE *)(v2 + 1),
|
|
v141 = *v139,
|
|
v6 = v139 + 1,
|
|
*v140 = v141,
|
|
v2 = (unsigned int)(v140 + 1),
|
|
v138) )
|
|
{
|
|
do
|
|
{
|
|
v142 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v143 = (_BYTE *)(v2 + 1);
|
|
v142 = __ROR4__(v142, 8);
|
|
*v143 = v142;
|
|
v143 += 2;
|
|
*v143 = __ROR4__(v142, 16);
|
|
v2 = (unsigned int)(v143 + 1);
|
|
--v138;
|
|
}
|
|
while ( v138 );
|
|
}
|
|
goto LABEL_268;
|
|
}
|
|
}
|
|
LABEL_268:
|
|
if ( !v135 )
|
|
goto LABEL_271;
|
|
}
|
|
}
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v9 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v10 = level_cel_block;
|
|
_LOBYTE(v10) = BYTE1(v10);
|
|
v11 = (v10 >> 4) & 7;
|
|
if ( !v11 )
|
|
{
|
|
v236 = 16;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v237 = 8;
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v237;
|
|
}
|
|
while ( v237 );
|
|
v238 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v238 < screen_buf_end )
|
|
break;
|
|
v239 = 8;
|
|
do
|
|
{
|
|
*v238 = 0;
|
|
v238[2] = 0;
|
|
v238 += 4;
|
|
--v239;
|
|
}
|
|
while ( v239 );
|
|
v2 = (unsigned int)(v238 - 800);
|
|
--v236;
|
|
}
|
|
while ( v236 );
|
|
return;
|
|
}
|
|
switch ( (_WORD)v11 )
|
|
{
|
|
case 1:
|
|
world_4B325C = (unsigned char)a1 & 1;
|
|
v240 = 32;
|
|
while ( 1 )
|
|
{
|
|
v241 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v242 = *v9++;
|
|
if ( (v242 & 0x80u) != 0 )
|
|
break;
|
|
v241 -= v242;
|
|
if ( v2 < screen_buf_end )
|
|
return;
|
|
v9 += v242;
|
|
if ( (v2 & 1) == world_4B325C )
|
|
{
|
|
v243 = v242 >> 1;
|
|
if ( !(v242 & 1) )
|
|
goto LABEL_378;
|
|
++v2;
|
|
if ( v243 )
|
|
{
|
|
LABEL_385:
|
|
v23 = v243 & 1;
|
|
v246 = v243 >> 1;
|
|
if ( !v23 || (*(_BYTE *)v2 = 0, v2 += 2, v246) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)v2 = 0;
|
|
*(_BYTE *)(v2 + 2) = 0;
|
|
v2 += 4;
|
|
--v246;
|
|
}
|
|
while ( v246 );
|
|
}
|
|
goto LABEL_388;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v243 = v242 >> 1;
|
|
if ( !(v242 & 1) )
|
|
goto LABEL_385;
|
|
*(_BYTE *)v2++ = 0;
|
|
if ( v243 )
|
|
{
|
|
LABEL_378:
|
|
v23 = v243 & 1;
|
|
v244 = v243 >> 1;
|
|
if ( !v23 || (v245 = (_BYTE *)(v2 + 1), *v245 = 0, v2 = (unsigned int)(v245 + 1), v244) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v244;
|
|
}
|
|
while ( v244 );
|
|
}
|
|
goto LABEL_388;
|
|
}
|
|
}
|
|
LABEL_388:
|
|
if ( !v241 )
|
|
goto LABEL_391;
|
|
}
|
|
_LOBYTE(v242) = -(char)v242;
|
|
v2 += v242;
|
|
v241 -= v242;
|
|
}
|
|
while ( v241 );
|
|
LABEL_391:
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
v2 -= 800;
|
|
if ( !--v240 )
|
|
return;
|
|
}
|
|
case 2:
|
|
world_4B325C = 0;
|
|
for ( ii = 30; ; ii -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
return;
|
|
v248 = (_BYTE *)(ii + v2);
|
|
v249 = 32 - ii;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v250 = v249 >> 2;
|
|
if ( !(v249 & 2) || (v251 = v248 + 1, *v251 = 0, v248 = v251 + 1, v250) )
|
|
{
|
|
do
|
|
{
|
|
v248[1] = 0;
|
|
v248[3] = 0;
|
|
v248 += 4;
|
|
--v250;
|
|
}
|
|
while ( v250 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v252 = v249 >> 2;
|
|
if ( !(v249 & 2) || (*v248 = 0, v248 += 2, v252) )
|
|
{
|
|
do
|
|
{
|
|
*v248 = 0;
|
|
v248[2] = 0;
|
|
v248 += 4;
|
|
--v252;
|
|
}
|
|
while ( v252 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v248 - 800);
|
|
if ( !ii )
|
|
break;
|
|
}
|
|
v253 = 2;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v254 = (_BYTE *)(v253 + v2);
|
|
v255 = 32 - v253;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v256 = v255 >> 2;
|
|
if ( !(v255 & 2) || (v257 = v254 + 1, *v257 = 0, v254 = v257 + 1, v256) )
|
|
{
|
|
do
|
|
{
|
|
v254[1] = 0;
|
|
v254[3] = 0;
|
|
v254 += 4;
|
|
--v256;
|
|
}
|
|
while ( v256 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v258 = v255 >> 2;
|
|
if ( !(v255 & 2) || (*v254 = 0, v254 += 2, v258) )
|
|
{
|
|
do
|
|
{
|
|
*v254 = 0;
|
|
v254[2] = 0;
|
|
v254 += 4;
|
|
--v258;
|
|
}
|
|
while ( v258 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v254 - 800);
|
|
v253 += 2;
|
|
}
|
|
while ( v253 != 32 );
|
|
break;
|
|
case 3:
|
|
world_4B325C = 0;
|
|
for ( jj = 30; ; jj -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
return;
|
|
v260 = 32 - jj;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v261 = v260 >> 2;
|
|
if ( !(v260 & 2) || (v262 = (_BYTE *)(v2 + 1), *v262 = 0, v2 = (unsigned int)(v262 + 1), v261) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v261;
|
|
}
|
|
while ( v261 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v263 = v260 >> 2;
|
|
if ( !(v260 & 2) || (*(_BYTE *)v2 = 0, v2 += 2, v263) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)v2 = 0;
|
|
*(_BYTE *)(v2 + 2) = 0;
|
|
v2 += 4;
|
|
--v263;
|
|
}
|
|
while ( v263 );
|
|
}
|
|
}
|
|
v264 = (_BYTE *)(v2 - 800);
|
|
if ( !jj )
|
|
break;
|
|
v2 = (unsigned int)&v264[jj];
|
|
}
|
|
v265 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v264 < screen_buf_end )
|
|
break;
|
|
v266 = 32 - v265;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v267 = v266 >> 2;
|
|
if ( !(v266 & 2) || (v268 = v264 + 1, *v268 = 0, v264 = v268 + 1, v267) )
|
|
{
|
|
do
|
|
{
|
|
v264[1] = 0;
|
|
v264[3] = 0;
|
|
v264 += 4;
|
|
--v267;
|
|
}
|
|
while ( v267 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v269 = v266 >> 2;
|
|
if ( !(v266 & 2) || (*v264 = 0, v264 += 2, v269) )
|
|
{
|
|
do
|
|
{
|
|
*v264 = 0;
|
|
v264[2] = 0;
|
|
v264 += 4;
|
|
--v269;
|
|
}
|
|
while ( v269 );
|
|
}
|
|
}
|
|
v264 = &v264[v265 - 800];
|
|
v265 += 2;
|
|
}
|
|
while ( v265 != 32 );
|
|
break;
|
|
case 4:
|
|
world_4B325C = 0;
|
|
for ( kk = 30; ; kk -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
return;
|
|
v271 = (_BYTE *)(kk + v2);
|
|
v272 = 32 - kk;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v273 = v272 >> 2;
|
|
if ( !(v272 & 2) || (v274 = v271 + 1, *v274 = 0, v271 = v274 + 1, v273) )
|
|
{
|
|
do
|
|
{
|
|
v271[1] = 0;
|
|
v271[3] = 0;
|
|
v271 += 4;
|
|
--v273;
|
|
}
|
|
while ( v273 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v275 = v272 >> 2;
|
|
if ( !(v272 & 2) || (*v271 = 0, v271 += 2, v275) )
|
|
{
|
|
do
|
|
{
|
|
*v271 = 0;
|
|
v271[2] = 0;
|
|
v271 += 4;
|
|
--v275;
|
|
}
|
|
while ( v275 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v271 - 800);
|
|
if ( !kk )
|
|
break;
|
|
}
|
|
v276 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
break;
|
|
v277 = 8;
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v277;
|
|
}
|
|
while ( v277 );
|
|
v278 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v278 < screen_buf_end )
|
|
break;
|
|
v279 = 8;
|
|
do
|
|
{
|
|
*v278 = 0;
|
|
v278[2] = 0;
|
|
v278 += 4;
|
|
--v279;
|
|
}
|
|
while ( v279 );
|
|
v2 = (unsigned int)(v278 - 800);
|
|
--v276;
|
|
}
|
|
while ( v276 );
|
|
break;
|
|
default:
|
|
world_4B325C = 0;
|
|
for ( ll = 30; ; ll -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
return;
|
|
v281 = 32 - ll;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v282 = v281 >> 2;
|
|
if ( !(v281 & 2) || (v283 = (_BYTE *)(v2 + 1), *v283 = 0, v2 = (unsigned int)(v283 + 1), v282) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v282;
|
|
}
|
|
while ( v282 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v284 = v281 >> 2;
|
|
if ( !(v281 & 2) || (*(_BYTE *)v2 = 0, v2 += 2, v284) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)v2 = 0;
|
|
*(_BYTE *)(v2 + 2) = 0;
|
|
v2 += 4;
|
|
--v284;
|
|
}
|
|
while ( v284 );
|
|
}
|
|
}
|
|
v285 = v2 - 800;
|
|
if ( !ll )
|
|
break;
|
|
v2 = ll + v285;
|
|
}
|
|
v286 = 8;
|
|
do
|
|
{
|
|
if ( v285 < screen_buf_end )
|
|
break;
|
|
v287 = 8;
|
|
do
|
|
{
|
|
*(_BYTE *)(v285 + 1) = 0;
|
|
*(_BYTE *)(v285 + 3) = 0;
|
|
v285 += 4;
|
|
--v287;
|
|
}
|
|
while ( v287 );
|
|
v288 = (_BYTE *)(v285 - 800);
|
|
if ( (unsigned int)v288 < screen_buf_end )
|
|
break;
|
|
v289 = 8;
|
|
do
|
|
{
|
|
*v288 = 0;
|
|
v288[2] = 0;
|
|
v288 += 4;
|
|
--v289;
|
|
}
|
|
while ( v289 );
|
|
v285 = (unsigned int)(v288 - 800);
|
|
--v286;
|
|
}
|
|
while ( v286 );
|
|
break;
|
|
}
|
|
}
|
|
// 642A14: using guessed type char lightmax;
|
|
// 69BEF8: using guessed type int light_table_index;
|
|
// 69CF0C: using guessed type int screen_buf_end;
|
|
// 69CF14: using guessed type int level_cel_block;
|
|
|
|
//----- (0046468D) --------------------------------------------------------
|
|
void __fastcall drawBottomArchesUpperScreen(void *a1, int a2)
|
|
{
|
|
char *v2; // edi
|
|
char *v3; // esi
|
|
short v5; // ax
|
|
char *v6; // esi
|
|
short v7; // ax
|
|
unsigned int v8; // eax
|
|
unsigned char *v9; // esi
|
|
unsigned int v10; // eax
|
|
int v11; // eax
|
|
int v12; // edx
|
|
int v13; // edx
|
|
signed int v14; // ecx
|
|
int v18; // ecx
|
|
signed int v19; // edx
|
|
int v20; // eax
|
|
int v21; // edx
|
|
int v22; // ecx
|
|
int v23; // edx
|
|
signed int v26; // edx
|
|
char *v27; // edi
|
|
unsigned int v28; // ecx
|
|
unsigned char v31; // of
|
|
signed int v32; // edx
|
|
char *v33; // edi
|
|
unsigned int v34; // ecx
|
|
signed int v37; // edx
|
|
unsigned int l; // ecx
|
|
signed int v41; // edx
|
|
unsigned int m; // ecx
|
|
signed int v45; // edx
|
|
char *v46; // edi
|
|
unsigned int v47; // ecx
|
|
int v50; // edx
|
|
int v51; // edx
|
|
signed int v52; // ecx
|
|
signed int v55; // edx
|
|
unsigned int n; // ecx
|
|
int v59; // edx
|
|
int v60; // edx
|
|
signed int v61; // ecx
|
|
int v64; // edx
|
|
int v65; // edx
|
|
signed int v66; // ecx
|
|
char v67; // al
|
|
int v68; // ecx
|
|
signed int v69; // edx
|
|
int v70; // eax
|
|
int v71; // edx
|
|
int v72; // edx
|
|
int v73; // ecx
|
|
char v74; // al
|
|
signed int v75; // edx
|
|
char *v76; // edi
|
|
unsigned int v77; // ecx
|
|
short v78; // ax
|
|
int v79; // eax
|
|
signed int v80; // edx
|
|
char *v81; // edi
|
|
unsigned int v82; // ecx
|
|
short v83; // ax
|
|
int v84; // eax
|
|
signed int v85; // edx
|
|
unsigned int i; // ecx
|
|
int v87; // eax
|
|
short v88; // ax
|
|
signed int v89; // edx
|
|
unsigned int j; // ecx
|
|
int v91; // eax
|
|
short v92; // ax
|
|
signed int v93; // edx
|
|
char *v94; // edi
|
|
unsigned int v95; // ecx
|
|
short v96; // ax
|
|
int v97; // eax
|
|
int v98; // edx
|
|
int v99; // edx
|
|
signed int v100; // ecx
|
|
char v101; // al
|
|
signed int v102; // edx
|
|
unsigned int k; // ecx
|
|
int v104; // eax
|
|
short v105; // ax
|
|
int v106; // edx
|
|
int v107; // edx
|
|
signed int v108; // ecx
|
|
char v109; // al
|
|
int v110; // edx
|
|
int v111; // edx
|
|
signed int v112; // ecx
|
|
int v113; // ecx
|
|
signed int v114; // edx
|
|
int v115; // eax
|
|
int v116; // edx
|
|
int v117; // edx
|
|
int v118; // ecx
|
|
signed int v119; // edx
|
|
char *v120; // edi
|
|
unsigned int v121; // ecx
|
|
signed int v122; // edx
|
|
char *v123; // edi
|
|
unsigned int v124; // ecx
|
|
signed int v125; // edx
|
|
unsigned int v126; // ecx
|
|
char *v127; // edi
|
|
signed int v128; // edx
|
|
unsigned int v129; // ecx
|
|
signed int v130; // edx
|
|
char *v131; // edi
|
|
unsigned int v132; // ecx
|
|
int v133; // edx
|
|
int v134; // edx
|
|
signed int v135; // ecx
|
|
signed int v136; // edx
|
|
unsigned int v137; // ecx
|
|
char *v138; // edi
|
|
int v139; // edx
|
|
int v140; // edx
|
|
signed int v141; // ecx
|
|
int v142; // [esp-8h] [ebp-14h]
|
|
int v143; // [esp-8h] [ebp-14h]
|
|
int v144; // [esp-8h] [ebp-14h]
|
|
int v145; // [esp-8h] [ebp-14h]
|
|
int v146; // [esp-8h] [ebp-14h]
|
|
int v147; // [esp-4h] [ebp-10h]
|
|
int v148; // [esp-4h] [ebp-10h]
|
|
int v149; // [esp-4h] [ebp-10h]
|
|
int v150; // [esp-4h] [ebp-10h]
|
|
int v151; // [esp-4h] [ebp-10h]
|
|
int v152; // [esp-4h] [ebp-10h]
|
|
int v153; // [esp-4h] [ebp-10h]
|
|
int v154; // [esp-4h] [ebp-10h]
|
|
int v155; // [esp-4h] [ebp-10h]
|
|
int v156; // [esp-4h] [ebp-10h]
|
|
int _EAX;
|
|
char *_EBX;
|
|
|
|
world_4B3265 = (int)speed_cel_frame_num_from_light_index_frame_num;
|
|
v2 = (char *)a1;
|
|
world_4B3269[0] = a2;
|
|
if ( !(_BYTE)light_table_index )
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v6 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v8 = level_cel_block;
|
|
_LOBYTE(v8) = BYTE1(v8);
|
|
v7 = ((v8 >> 4) & 7) + 8;
|
|
LABEL_12:
|
|
switch ( v7 )
|
|
{
|
|
case 8:
|
|
v64 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v150 = v64;
|
|
v65 = *(_DWORD *)world_4B3269[0];
|
|
v66 = 32;
|
|
do
|
|
{
|
|
v67 = *v6++;
|
|
v65 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
*v2 = v67;
|
|
++v2;
|
|
--v66;
|
|
}
|
|
while ( v66 );
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v64 = v150 - 1;
|
|
}
|
|
while ( v150 != 1 );
|
|
break;
|
|
case 9:
|
|
v68 = 32;
|
|
do
|
|
{
|
|
v151 = v68;
|
|
*(_DWORD *)world_4B3260 = *(_DWORD *)world_4B3269[0];
|
|
v69 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v70 = (unsigned char)*v6++;
|
|
if ( (v70 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v70) = -(char)v70;
|
|
v2 += v70;
|
|
if ( v70 & 0x1F )
|
|
*(_DWORD *)world_4B3260 <<= v70 & 0x1F;
|
|
v69 -= v70;
|
|
if ( !v69 )
|
|
goto LABEL_129;
|
|
}
|
|
v71 = v69 - v70;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
return;
|
|
v144 = v71;
|
|
v72 = *(_DWORD *)world_4B3260;
|
|
v73 = v70;
|
|
do
|
|
{
|
|
v74 = *v6++;
|
|
v72 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
*v2 = v74;
|
|
++v2;
|
|
--v73;
|
|
}
|
|
while ( v73 );
|
|
*(_DWORD *)world_4B3260 = v72;
|
|
v69 = v144;
|
|
}
|
|
while ( v144 );
|
|
LABEL_129:
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v68 = v151 - 1;
|
|
}
|
|
while ( v151 != 1 );
|
|
break;
|
|
case 10:
|
|
v75 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v76 = &v2[v75];
|
|
v77 = (unsigned int)(32 - v75) >> 2;
|
|
if ( !((32 - v75) & 2)
|
|
|| (v78 = *((_WORD *)v6 + 1), v6 += 4, *(_WORD *)v76 = v78, v76 += 2, v77) )
|
|
{
|
|
do
|
|
{
|
|
v79 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v76 = v79;
|
|
--v77;
|
|
v76 += 4;
|
|
}
|
|
while ( v77 );
|
|
}
|
|
v2 = v76 - 800;
|
|
v31 = __OFSUB__(v75, 2);
|
|
v75 -= 2;
|
|
if ( (v75 < 0) ^ v31 )
|
|
{
|
|
v80 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v81 = &v2[v80];
|
|
v82 = (unsigned int)(32 - v80) >> 2;
|
|
if ( ((32 - v80) & 2) )
|
|
{
|
|
v83 = *((_WORD *)v6 + 1);
|
|
v6 += 4;
|
|
*(_WORD *)v81 = v83;
|
|
v81 += 2;
|
|
}
|
|
if(v82) {
|
|
do
|
|
{
|
|
v84 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v81 = v84;
|
|
v81 += 4;
|
|
--v82;
|
|
}
|
|
while ( v82 );
|
|
}
|
|
v2 = v81 - 800;
|
|
v80 += 2;
|
|
}
|
|
while ( v80 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 11:
|
|
v85 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
for ( i = (unsigned int)(32 - v85) >> 2; i; --i )
|
|
{
|
|
v87 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v2 = v87;
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v85) & 2 )
|
|
{
|
|
v88 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_WORD *)v2 = v88;
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v85 - 800];
|
|
v31 = __OFSUB__(v85, 2);
|
|
v85 -= 2;
|
|
if ( (v85 < 0) ^ v31 )
|
|
{
|
|
v89 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
for ( j = (unsigned int)(32 - v89) >> 2; j; --j )
|
|
{
|
|
v91 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v2 = v91;
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v89) & 2 )
|
|
{
|
|
v92 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_WORD *)v2 = v92;
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v89 - 800];
|
|
v89 += 2;
|
|
}
|
|
while ( v89 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 12:
|
|
v93 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v94 = &v2[v93];
|
|
v95 = (unsigned int)(32 - v93) >> 2;
|
|
if ( !((32 - v93) & 2)
|
|
|| (v96 = *((_WORD *)v6 + 1), v6 += 4, *(_WORD *)v94 = v96, v94 += 2, v95) )
|
|
{
|
|
do
|
|
{
|
|
v97 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v94 = v97;
|
|
v94 += 4;
|
|
--v95;
|
|
}
|
|
while ( v95 );
|
|
}
|
|
v2 = v94 - 800;
|
|
v31 = __OFSUB__(v93, 2);
|
|
v93 -= 2;
|
|
if ( (v93 < 0) ^ v31 )
|
|
{
|
|
world_4B3269[0] -= 64;
|
|
v98 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v152 = v98;
|
|
v99 = *(_DWORD *)world_4B3269[0];
|
|
v100 = 32;
|
|
do
|
|
{
|
|
v101 = *v6++;
|
|
v99 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
*v2 = v101;
|
|
++v2;
|
|
--v100;
|
|
}
|
|
while ( v100 );
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v98 = v152 - 1;
|
|
}
|
|
while ( v152 != 1 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
v102 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
for ( k = (unsigned int)(32 - v102) >> 2; k; --k )
|
|
{
|
|
v104 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v2 = v104;
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v102) & 2 )
|
|
{
|
|
v105 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_WORD *)v2 = v105;
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v102 - 800];
|
|
v31 = __OFSUB__(v102, 2);
|
|
v102 -= 2;
|
|
if ( (v102 < 0) ^ v31 )
|
|
{
|
|
world_4B3269[0] -= 64;
|
|
v106 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v145 = v106;
|
|
v107 = *(_DWORD *)world_4B3269[0];
|
|
v108 = 32;
|
|
do
|
|
{
|
|
v109 = *v6++;
|
|
v107 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
*v2 = v109;
|
|
++v2;
|
|
--v108;
|
|
}
|
|
while ( v108 );
|
|
v6 += (unsigned char)v6 & 2;
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v106 = v145 - 1;
|
|
}
|
|
while ( v145 != 1 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
if ( (_BYTE)light_table_index != lightmax )
|
|
{
|
|
if ( !(level_cel_block & 0x8000) )
|
|
{
|
|
v3 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
_EBX = &pLightTbl[256 * light_table_index];
|
|
v5 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
if ( !(BYTE1(level_cel_block) >> 4) )
|
|
{
|
|
v12 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v147 = v12;
|
|
v13 = *(_DWORD *)world_4B3269[0];
|
|
v14 = 32;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v13 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v14;
|
|
}
|
|
while ( v14 );
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v12 = v147 - 1;
|
|
}
|
|
while ( v147 != 1 );
|
|
return;
|
|
}
|
|
if ( BYTE1(level_cel_block) >> 4 )
|
|
{
|
|
switch ( v5 )
|
|
{
|
|
case 1:
|
|
v18 = 32;
|
|
do
|
|
{
|
|
v148 = v18;
|
|
*(_DWORD *)world_4B3260 = *(_DWORD *)world_4B3269[0];
|
|
v19 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v20 = (unsigned char)*v3++;
|
|
if ( (v20 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v20) = -(char)v20;
|
|
v2 += v20;
|
|
if ( v20 & 0x1F )
|
|
*(_DWORD *)world_4B3260 <<= v20 & 0x1F;
|
|
v19 -= v20;
|
|
if ( !v19 )
|
|
goto LABEL_50;
|
|
}
|
|
v21 = v19 - v20;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
return;
|
|
v22 = v20;
|
|
v142 = v21;
|
|
v23 = *(_DWORD *)world_4B3260;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v23 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v22;
|
|
}
|
|
while ( v22 );
|
|
*(_DWORD *)world_4B3260 = v23;
|
|
v19 = v142;
|
|
}
|
|
while ( v142 );
|
|
LABEL_50:
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v18 = v148 - 1;
|
|
}
|
|
while ( v148 != 1 );
|
|
break;
|
|
case 2:
|
|
v26 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v27 = &v2[v26];
|
|
v28 = (unsigned int)(32 - v26) >> 2;
|
|
if ( !((32 - v26) & 2) )
|
|
goto LABEL_268;
|
|
_EAX = *((_WORD *)v3 + 1);
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v27 = __ROR2__(_EAX, 8);
|
|
v27 += 2;
|
|
if ( v28 )
|
|
{
|
|
LABEL_268:
|
|
do
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v27 = __ROR4__(_EAX, 8);
|
|
v27 += 4;
|
|
--v28;
|
|
}
|
|
while ( v28 );
|
|
}
|
|
v2 = v27 - 800;
|
|
v31 = __OFSUB__(v26, 2);
|
|
v26 -= 2;
|
|
if ( (v26 < 0) ^ v31 )
|
|
{
|
|
v32 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v33 = &v2[v32];
|
|
v34 = (unsigned int)(32 - v32) >> 2;
|
|
if ( !((32 - v32) & 2) )
|
|
goto LABEL_269;
|
|
_EAX = *((_WORD *)v3 + 1);
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v33 = __ROR2__(_EAX, 8);
|
|
v33 += 2;
|
|
if ( v34 )
|
|
{
|
|
LABEL_269:
|
|
do
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v33 = __ROR4__(_EAX, 8);
|
|
v33 += 4;
|
|
--v34;
|
|
}
|
|
while ( v34 );
|
|
}
|
|
v2 = v33 - 800;
|
|
v32 += 2;
|
|
}
|
|
while ( v32 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
v37 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
for ( l = (unsigned int)(32 - v37) >> 2; l; --l )
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v2 = __ROR4__(_EAX, 8);
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v37) & 2 )
|
|
{
|
|
_EAX = *(_WORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v2 = __ROR2__(_EAX, 8);
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v37 - 800];
|
|
v31 = __OFSUB__(v37, 2);
|
|
v37 -= 2;
|
|
if ( (v37 < 0) ^ v31 )
|
|
{
|
|
v41 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
for ( m = (unsigned int)(32 - v41) >> 2; m; --m )
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v2 = __ROR4__(_EAX, 8);
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v41) & 2 )
|
|
{
|
|
_EAX = *(_WORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v2 = __ROR2__(_EAX, 8);
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v41 - 800];
|
|
v41 += 2;
|
|
}
|
|
while ( v41 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
v45 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v46 = &v2[v45];
|
|
v47 = (unsigned int)(32 - v45) >> 2;
|
|
if ( !((32 - v45) & 2) )
|
|
goto LABEL_270;
|
|
_EAX = *((_WORD *)v3 + 1);
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v46 = __ROR2__(_EAX, 8);
|
|
v46 += 2;
|
|
if ( v47 )
|
|
{
|
|
LABEL_270:
|
|
do
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v46 = __ROR4__(_EAX, 8);
|
|
v46 += 4;
|
|
--v47;
|
|
}
|
|
while ( v47 );
|
|
}
|
|
v2 = v46 - 800;
|
|
v31 = __OFSUB__(v45, 2);
|
|
v45 -= 2;
|
|
if ( (v45 < 0) ^ v31 )
|
|
{
|
|
world_4B3269[0] -= 64;
|
|
v50 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v149 = v50;
|
|
v51 = *(_DWORD *)world_4B3269[0];
|
|
v52 = 32;
|
|
v3 += (unsigned char)v3 & 2;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v51 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v52;
|
|
}
|
|
while ( v52 );
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v50 = v149 - 1;
|
|
}
|
|
while ( v149 != 1 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
v55 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
for ( n = (unsigned int)(32 - v55) >> 2; n; --n )
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v2 = __ROR4__(_EAX, 8);
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v55) & 2 )
|
|
{
|
|
_EAX = *(_WORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v2 = __ROR2__(_EAX, 8);
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v55 - 800];
|
|
v31 = __OFSUB__(v55, 2);
|
|
v55 -= 2;
|
|
if ( (v55 < 0) ^ v31 )
|
|
{
|
|
world_4B3269[0] -= 64;
|
|
v59 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v143 = v59;
|
|
v60 = *(_DWORD *)world_4B3269[0];
|
|
v61 = 32;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v60 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v61;
|
|
}
|
|
while ( v61 );
|
|
v3 += (unsigned char)v3 & 2;
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v59 = v143 - 1;
|
|
}
|
|
while ( v143 != 1 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
LABEL_187:
|
|
v110 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v153 = v110;
|
|
v111 = *(_DWORD *)world_4B3269[0];
|
|
v112 = 32;
|
|
do
|
|
{
|
|
v111 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
*v2 = 0;
|
|
++v2;
|
|
--v112;
|
|
}
|
|
while ( v112 );
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v110 = v153 - 1;
|
|
}
|
|
while ( v153 != 1 );
|
|
return;
|
|
}
|
|
v6 = (char *)pSpeedCels + *(_DWORD *)(4 * (light_table_index + 16 * (level_cel_block & 0xFFF)) + world_4B3265);
|
|
v7 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
goto LABEL_12;
|
|
}
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v9 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v10 = level_cel_block;
|
|
_LOBYTE(v10) = BYTE1(v10);
|
|
v11 = (v10 >> 4) & 7;
|
|
if ( !v11 )
|
|
goto LABEL_187;
|
|
switch ( (_WORD)v11 )
|
|
{
|
|
case 1:
|
|
v113 = 32;
|
|
do
|
|
{
|
|
v154 = v113;
|
|
*(_DWORD *)world_4B3260 = *(_DWORD *)world_4B3269[0];
|
|
v114 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v115 = *v9++;
|
|
if ( (v115 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v115) = -(char)v115;
|
|
v2 += v115;
|
|
if ( v115 & 0x1F )
|
|
*(_DWORD *)world_4B3260 <<= v115 & 0x1F;
|
|
v114 -= v115;
|
|
if ( !v114 )
|
|
goto LABEL_208;
|
|
}
|
|
v116 = v114 - v115;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
return;
|
|
v146 = v116;
|
|
v117 = *(_DWORD *)world_4B3260;
|
|
v118 = v115;
|
|
v9 += v115;
|
|
do
|
|
{
|
|
v117 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
*v2 = 0;
|
|
++v2;
|
|
--v118;
|
|
}
|
|
while ( v118 );
|
|
*(_DWORD *)world_4B3260 = v117;
|
|
v114 = v146;
|
|
}
|
|
while ( v146 );
|
|
LABEL_208:
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v113 = v154 - 1;
|
|
}
|
|
while ( v154 != 1 );
|
|
break;
|
|
case 2:
|
|
v119 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v120 = &v2[v119];
|
|
v121 = (unsigned int)(32 - v119) >> 2;
|
|
if ( !((32 - v119) & 2) || (*(_WORD *)v120 = 0, v120 += 2, v121) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v120 = 0;
|
|
v120 += 4;
|
|
--v121;
|
|
}
|
|
while ( v121 );
|
|
}
|
|
v2 = v120 - 800;
|
|
if ( !v119 )
|
|
{
|
|
v122 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v123 = &v2[v122];
|
|
v124 = (unsigned int)(32 - v122) >> 2;
|
|
if ( ((32 - v122) & 2) )
|
|
{
|
|
*(_WORD *)v123 = 0;
|
|
v123 += 2;
|
|
}
|
|
if(v124) {
|
|
do
|
|
{
|
|
*(_DWORD *)v123 = 0;
|
|
v123 += 4;
|
|
--v124;
|
|
}
|
|
while ( v124 );
|
|
}
|
|
v2 = v123 - 800;
|
|
v122 += 2;
|
|
}
|
|
while ( v122 != 32 );
|
|
return;
|
|
}
|
|
v119 -= 2;
|
|
}
|
|
break;
|
|
case 3:
|
|
v125 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v126 = (unsigned int)(32 - v125) >> 2;
|
|
if ( !((32 - v125) & 2) || (*(_WORD *)v2 = 0, v2 += 2, v126) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v2 = 0;
|
|
v2 += 4;
|
|
--v126;
|
|
}
|
|
while ( v126 );
|
|
}
|
|
v127 = v2 - 800;
|
|
if ( !v125 )
|
|
{
|
|
v128 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v127 < screen_buf_end )
|
|
break;
|
|
v129 = (unsigned int)(32 - v128) >> 2;
|
|
if ( ((32 - v128) & 2) )
|
|
{
|
|
*(_WORD *)v127 = 0;
|
|
v127 += 2;
|
|
}
|
|
if(v129) {
|
|
do
|
|
{
|
|
*(_DWORD *)v127 = 0;
|
|
v127 += 4;
|
|
--v129;
|
|
}
|
|
while ( v129 );
|
|
}
|
|
v127 = &v127[v128 - 800];
|
|
v128 += 2;
|
|
}
|
|
while ( v128 != 32 );
|
|
return;
|
|
}
|
|
v2 = &v127[v125];
|
|
v125 -= 2;
|
|
}
|
|
break;
|
|
case 4:
|
|
v130 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v131 = &v2[v130];
|
|
v132 = (unsigned int)(32 - v130) >> 2;
|
|
if ( !((32 - v130) & 2) || (*(_WORD *)v131 = 0, v131 += 2, v132) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v131 = 0;
|
|
v131 += 4;
|
|
--v132;
|
|
}
|
|
while ( v132 );
|
|
}
|
|
v2 = v131 - 800;
|
|
if ( !v130 )
|
|
{
|
|
world_4B3269[0] -= 64;
|
|
v133 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
break;
|
|
v155 = v133;
|
|
v134 = *(_DWORD *)world_4B3269[0];
|
|
v135 = 32;
|
|
do
|
|
{
|
|
v134 *= 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
*v2 = 0;
|
|
++v2;
|
|
--v135;
|
|
}
|
|
while ( v135 );
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v133 = v155 - 1;
|
|
}
|
|
while ( v155 != 1 );
|
|
return;
|
|
}
|
|
v130 -= 2;
|
|
}
|
|
break;
|
|
default:
|
|
v136 = 30;
|
|
while ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v137 = (unsigned int)(32 - v136) >> 2;
|
|
if ( !((32 - v136) & 2) || (*(_WORD *)v2 = 0, v2 += 2, v137) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v2 = 0;
|
|
v2 += 4;
|
|
--v137;
|
|
}
|
|
while ( v137 );
|
|
}
|
|
v138 = v2 - 800;
|
|
if ( !v136 )
|
|
{
|
|
world_4B3269[0] -= 64;
|
|
v139 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v138 < screen_buf_end )
|
|
break;
|
|
v156 = v139;
|
|
v140 = *(_DWORD *)world_4B3269[0];
|
|
v141 = 32;
|
|
do
|
|
{
|
|
v140 *= 2;
|
|
if ( (unsigned int)v138 >= screen_buf_end )
|
|
*v138 = 0;
|
|
++v138;
|
|
--v141;
|
|
}
|
|
while ( v141 );
|
|
v138 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v139 = v156 - 1;
|
|
}
|
|
while ( v156 != 1 );
|
|
return;
|
|
}
|
|
v2 = &v138[v136];
|
|
v136 -= 2;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
// 642A14: using guessed type char lightmax;
|
|
// 69BEF8: using guessed type int light_table_index;
|
|
// 69CF0C: using guessed type int screen_buf_end;
|
|
// 69CF14: using guessed type int level_cel_block;
|
|
|
|
//----- (004652C5) --------------------------------------------------------
|
|
void __fastcall drawUpperScreen(void *a1)
|
|
{
|
|
char v1; // edx
|
|
char v2; // al
|
|
char v3; // al
|
|
char *v4; // edi
|
|
_BYTE *v5; // esi
|
|
char *v6; // ebx
|
|
short v7; // ax
|
|
char *v8; // esi
|
|
short v9; // ax
|
|
unsigned int v10; // eax
|
|
unsigned char *v11; // esi
|
|
unsigned int v12; // eax
|
|
char v13; // edx
|
|
char v14; // cl
|
|
int v15; // eax
|
|
char v16; // ch
|
|
char v17; // ch
|
|
char v18; // ch
|
|
signed int v19; // ebp
|
|
signed int v20; // edx
|
|
int v21; // eax
|
|
char v22; // edx
|
|
char v23; // cl
|
|
int v24; // eax
|
|
char v25; // ch
|
|
char v26; // ch
|
|
char v27; // ch
|
|
signed int v28; // ebp
|
|
char *v29; // edi
|
|
char v30; // cl
|
|
char v31; // edx
|
|
int v32; // eax
|
|
char v33; // ch
|
|
char v34; // ch
|
|
char v35; // ch
|
|
unsigned char v36; // of
|
|
signed int v37; // ebp
|
|
char *v38; // edi
|
|
char v39; // cl
|
|
char v40; // edx
|
|
int v41; // eax
|
|
char v42; // ch
|
|
char v43; // ch
|
|
char v44; // ch
|
|
signed int v45; // ebp
|
|
char m; // cl
|
|
int v47; // eax
|
|
char v48; // ch
|
|
char v49; // ch
|
|
char v50; // ch
|
|
signed int v51; // ebp
|
|
char n; // cl
|
|
int v53; // eax
|
|
char v54; // ch
|
|
char v55; // ch
|
|
char v56; // ch
|
|
signed int v57; // ebp
|
|
char *v58; // edi
|
|
char v59; // cl
|
|
char v60; // edx
|
|
int v61; // eax
|
|
char v62; // ch
|
|
char v63; // ch
|
|
char v64; // ch
|
|
signed int v65; // ebp
|
|
char v66; // cl
|
|
int v67; // eax
|
|
char v68; // ch
|
|
char v69; // ch
|
|
char v70; // ch
|
|
signed int v71; // ebp
|
|
char ii; // cl
|
|
int v73; // eax
|
|
char v74; // ch
|
|
char v75; // ch
|
|
char v76; // ch
|
|
signed int v77; // ebp
|
|
char v78; // cl
|
|
int v79; // eax
|
|
char v80; // ch
|
|
char v81; // ch
|
|
char v82; // ch
|
|
signed int v83; // edx
|
|
signed int v84; // ecx
|
|
int v85; // eax
|
|
signed int v86; // ebp
|
|
signed int v87; // edx
|
|
unsigned int v88; // eax
|
|
unsigned int v89; // ecx
|
|
char v90; // al
|
|
char v91; // cf
|
|
unsigned int v92; // ecx
|
|
short v93; // ax
|
|
int v94; // eax
|
|
signed int v95; // edx
|
|
char *v96; // edi
|
|
unsigned int v97; // ecx
|
|
short v98; // ax
|
|
int v99; // eax
|
|
signed int v100; // edx
|
|
char *v101; // edi
|
|
unsigned int v102; // ecx
|
|
short v103; // ax
|
|
int v104; // eax
|
|
signed int v105; // edx
|
|
unsigned int i; // ecx
|
|
int v107; // eax
|
|
short v108; // ax
|
|
signed int v109; // edx
|
|
unsigned int j; // ecx
|
|
int v111; // eax
|
|
short v112; // ax
|
|
signed int v113; // edx
|
|
char *v114; // edi
|
|
unsigned int v115; // ecx
|
|
short v116; // ax
|
|
int v117; // eax
|
|
signed int v118; // edx
|
|
signed int v119; // ecx
|
|
int v120; // eax
|
|
signed int v121; // edx
|
|
unsigned int k; // ecx
|
|
int v123; // eax
|
|
short v124; // ax
|
|
signed int v125; // edx
|
|
signed int v126; // ecx
|
|
int v127; // eax
|
|
signed int v128; // edx
|
|
signed int v129; // ecx
|
|
signed int v130; // ebp
|
|
signed int v131; // edx
|
|
unsigned int v132; // eax
|
|
unsigned int v133; // ecx
|
|
unsigned int v134; // ecx
|
|
signed int v135; // edx
|
|
char *v136; // edi
|
|
unsigned int v137; // ecx
|
|
signed int v138; // edx
|
|
char *v139; // edi
|
|
unsigned int v140; // ecx
|
|
signed int v141; // edx
|
|
unsigned int v142; // ecx
|
|
char *v143; // edi
|
|
signed int v144; // edx
|
|
unsigned int v145; // ecx
|
|
signed int v146; // edx
|
|
char *v147; // edi
|
|
unsigned int v148; // ecx
|
|
signed int v149; // edx
|
|
signed int v150; // ecx
|
|
signed int v151; // edx
|
|
unsigned int v152; // ecx
|
|
char *v153; // edi
|
|
signed int v154; // edx
|
|
signed int v155; // ecx
|
|
int l; // [esp-14h] [ebp-18h]
|
|
int v157; // [esp-10h] [ebp-14h]
|
|
|
|
v1 = cel_transparency_active;
|
|
if ( cel_transparency_active )
|
|
{
|
|
if ( !arch_draw_type )
|
|
{
|
|
drawTopArchesUpperScreen(a1);
|
|
return;
|
|
}
|
|
if ( arch_draw_type == 1 )
|
|
{
|
|
v2 = block_lvid[level_piece_id];
|
|
if ( v2 == 1 || v2 == 3 )
|
|
{
|
|
drawBottomArchesUpperScreen(a1, (int)&tile_draw_masks[1][31]);
|
|
return;
|
|
}
|
|
}
|
|
if ( arch_draw_type == 2 )
|
|
{
|
|
v3 = block_lvid[level_piece_id];
|
|
if ( v3 == 2 || v3 == 3 )
|
|
{
|
|
drawBottomArchesUpperScreen(a1, (int)&tile_draw_masks[0][31]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
world_4B3265 = (int)speed_cel_frame_num_from_light_index_frame_num;
|
|
v4 = (char *)a1;
|
|
if ( !(_BYTE)light_table_index )
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v8 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v10 = level_cel_block;
|
|
_LOBYTE(v10) = BYTE1(v10);
|
|
v9 = ((v10 >> 4) & 7) + 8;
|
|
LABEL_22:
|
|
switch ( v9 )
|
|
{
|
|
case 8:
|
|
v83 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v84 = 8;
|
|
do
|
|
{
|
|
v85 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v85;
|
|
v4 += 4;
|
|
--v84;
|
|
}
|
|
while ( v84 );
|
|
v4 -= 800;
|
|
--v83;
|
|
}
|
|
while ( v83 );
|
|
break;
|
|
case 9:
|
|
v86 = 32;
|
|
do
|
|
{
|
|
v87 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v88 = (unsigned char)*v8++;
|
|
if ( (v88 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v88) = -(char)v88;
|
|
v4 += v88;
|
|
v87 -= v88;
|
|
if ( !v87 )
|
|
goto LABEL_133;
|
|
}
|
|
v87 -= v88;
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
return;
|
|
v89 = v88 >> 1;
|
|
if ( v88 & 1 )
|
|
{
|
|
v90 = *v8++;
|
|
*v4++ = v90;
|
|
if ( !v89 )
|
|
continue;
|
|
}
|
|
v91 = v89 & 1;
|
|
v92 = v89 >> 1;
|
|
if ( v91 )
|
|
{
|
|
v93 = *(_WORD *)v8;
|
|
v8 += 2;
|
|
*(_WORD *)v4 = v93;
|
|
v4 += 2;
|
|
if ( !v92 )
|
|
continue;
|
|
}
|
|
do
|
|
{
|
|
v94 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v94;
|
|
v4 += 4;
|
|
--v92;
|
|
}
|
|
while ( v92 );
|
|
}
|
|
while ( v87 );
|
|
LABEL_133:
|
|
v4 -= 800;
|
|
--v86;
|
|
}
|
|
while ( v86 );
|
|
break;
|
|
case 10:
|
|
v95 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v96 = &v4[v95];
|
|
v97 = (unsigned int)(32 - v95) >> 2;
|
|
if ( !((32 - v95) & 2)
|
|
|| (v98 = *((_WORD *)v8 + 1), v8 += 4, *(_WORD *)v96 = v98, v96 += 2, v97) )
|
|
{
|
|
do
|
|
{
|
|
v99 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v96 = v99;
|
|
v96 += 4;
|
|
--v97;
|
|
}
|
|
while ( v97 );
|
|
}
|
|
v4 = v96 - 800;
|
|
v36 = __OFSUB__(v95, 2);
|
|
v95 -= 2;
|
|
if ( (v95 < 0) ^ v36 )
|
|
{
|
|
v100 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v101 = &v4[v100];
|
|
v102 = (unsigned int)(32 - v100) >> 2;
|
|
if ( ((32 - v100) & 2) )
|
|
{
|
|
v103 = *((_WORD *)v8 + 1);
|
|
v8 += 4;
|
|
*(_WORD *)v101 = v103;
|
|
v101 += 2;
|
|
}
|
|
if(v102) {
|
|
do
|
|
{
|
|
v104 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v101 = v104;
|
|
v101 += 4;
|
|
--v102;
|
|
}
|
|
while ( v102 );
|
|
}
|
|
v4 = v101 - 800;
|
|
v100 += 2;
|
|
}
|
|
while ( v100 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 11:
|
|
v105 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
for ( i = (unsigned int)(32 - v105) >> 2; i; --i )
|
|
{
|
|
v107 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v107;
|
|
v4 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v105) & 2 )
|
|
{
|
|
v108 = *(_WORD *)v8;
|
|
v8 += 4;
|
|
*(_WORD *)v4 = v108;
|
|
v4 += 2;
|
|
}
|
|
v4 = &v4[v105 - 800];
|
|
v36 = __OFSUB__(v105, 2);
|
|
v105 -= 2;
|
|
if ( (v105 < 0) ^ v36 )
|
|
{
|
|
v109 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
for ( j = (unsigned int)(32 - v109) >> 2; j; --j )
|
|
{
|
|
v111 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v111;
|
|
v4 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v109) & 2 )
|
|
{
|
|
v112 = *(_WORD *)v8;
|
|
v8 += 4;
|
|
*(_WORD *)v4 = v112;
|
|
v4 += 2;
|
|
}
|
|
v4 = &v4[v109 - 800];
|
|
v109 += 2;
|
|
}
|
|
while ( v109 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 12:
|
|
v113 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v114 = &v4[v113];
|
|
v115 = (unsigned int)(32 - v113) >> 2;
|
|
if ( !((32 - v113) & 2)
|
|
|| (v116 = *((_WORD *)v8 + 1), v8 += 4, *(_WORD *)v114 = v116, v114 += 2, v115) )
|
|
{
|
|
do
|
|
{
|
|
v117 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v114 = v117;
|
|
v114 += 4;
|
|
--v115;
|
|
}
|
|
while ( v115 );
|
|
}
|
|
v4 = v114 - 800;
|
|
v36 = __OFSUB__(v113, 2);
|
|
v113 -= 2;
|
|
if ( (v113 < 0) ^ v36 )
|
|
{
|
|
v118 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v119 = 8;
|
|
do
|
|
{
|
|
v120 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v120;
|
|
v4 += 4;
|
|
--v119;
|
|
}
|
|
while ( v119 );
|
|
v4 -= 800;
|
|
--v118;
|
|
}
|
|
while ( v118 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
v121 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
for ( k = (unsigned int)(32 - v121) >> 2; k; --k )
|
|
{
|
|
v123 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v123;
|
|
v4 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v121) & 2 )
|
|
{
|
|
v124 = *(_WORD *)v8;
|
|
v8 += 4;
|
|
*(_WORD *)v4 = v124;
|
|
v4 += 2;
|
|
}
|
|
v4 = &v4[v121 - 800];
|
|
v36 = __OFSUB__(v121, 2);
|
|
v121 -= 2;
|
|
if ( (v121 < 0) ^ v36 )
|
|
{
|
|
v125 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v126 = 8;
|
|
do
|
|
{
|
|
v127 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v127;
|
|
v4 += 4;
|
|
--v126;
|
|
}
|
|
while ( v126 );
|
|
v4 -= 800;
|
|
--v125;
|
|
}
|
|
while ( v125 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
if ( (_BYTE)light_table_index != lightmax )
|
|
{
|
|
if ( !(level_cel_block & 0x8000) )
|
|
{
|
|
v5 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v6 = &pLightTbl[256 * light_table_index];
|
|
v7 = (unsigned short)level_cel_block >> 12;
|
|
if ( (unsigned short)level_cel_block >> 12 )
|
|
{
|
|
switch ( v7 )
|
|
{
|
|
case 1:
|
|
v19 = 32;
|
|
do
|
|
{
|
|
v20 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v21 = (unsigned char)*v5++;
|
|
if ( (v21 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v21) = -(char)v21;
|
|
v4 += v21;
|
|
v20 -= v21;
|
|
if ( !v20 )
|
|
goto LABEL_58;
|
|
}
|
|
v22 = v20 - v21;
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
return;
|
|
v23 = v21;
|
|
for ( l = v22; v23 >= 4; v23 -= 4 )
|
|
{
|
|
v24 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v22) = v24;
|
|
v25 = v6[v22];
|
|
_LOBYTE(v22) = BYTE1(v24);
|
|
v24 = __ROR4__(v24, 16);
|
|
*v4 = v25;
|
|
v26 = v6[v22];
|
|
_LOBYTE(v22) = v24;
|
|
v4[1] = v26;
|
|
v27 = v6[v22];
|
|
_LOBYTE(v22) = BYTE1(v24);
|
|
v4[2] = v27;
|
|
v4[3] = v6[v22];
|
|
v4 += 4;
|
|
}
|
|
if ( v23 >= 2 )
|
|
{
|
|
_LOBYTE(v22) = *v5;
|
|
*v4 = v6[v22];
|
|
_LOBYTE(v22) = v5[1];
|
|
v4[1] = v6[v22];
|
|
v5 += 2;
|
|
v4 += 2;
|
|
}
|
|
if ( v23 & 1 )
|
|
{
|
|
_LOBYTE(v22) = *v5++;
|
|
*v4++ = v6[v22];
|
|
}
|
|
v20 = l;
|
|
}
|
|
while ( l );
|
|
LABEL_58:
|
|
v4 -= 800;
|
|
--v19;
|
|
}
|
|
while ( v19 );
|
|
break;
|
|
case 2:
|
|
v28 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v29 = &v4[v28];
|
|
v30 = 32 - v28;
|
|
v31 = (32 - (_BYTE)v28) & 2;
|
|
v5 += v31;
|
|
if ( (char)(32 - v28) >= 4 )
|
|
{
|
|
do
|
|
{
|
|
v32 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v31) = v32;
|
|
v33 = v6[v31];
|
|
_LOBYTE(v31) = BYTE1(v32);
|
|
v32 = __ROR4__(v32, 16);
|
|
*v29 = v33;
|
|
v34 = v6[v31];
|
|
_LOBYTE(v31) = v32;
|
|
v29[1] = v34;
|
|
v35 = v6[v31];
|
|
_LOBYTE(v31) = BYTE1(v32);
|
|
v29[2] = v35;
|
|
v29[3] = v6[v31];
|
|
v29 += 4;
|
|
v30 -= 4;
|
|
}
|
|
while ( v30 >= 4 );
|
|
}
|
|
if ( v30 >= 2 )
|
|
{
|
|
_LOBYTE(v31) = *v5;
|
|
*v29 = v6[v31];
|
|
_LOBYTE(v31) = v5[1];
|
|
v29[1] = v6[v31];
|
|
v5 += 2;
|
|
v29 += 2;
|
|
}
|
|
v4 = v29 - 800;
|
|
v36 = __OFSUB__(v28, 2);
|
|
v28 -= 2;
|
|
if ( (v28 < 0) ^ v36 )
|
|
{
|
|
v37 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v38 = &v4[v37];
|
|
v39 = 32 - v37;
|
|
v40 = (32 - (_BYTE)v37) & 2;
|
|
v5 += v40;
|
|
if ( (char)(32 - v37) >= 4 )
|
|
{
|
|
do
|
|
{
|
|
v41 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v40) = v41;
|
|
v42 = v6[v40];
|
|
_LOBYTE(v40) = BYTE1(v41);
|
|
v41 = __ROR4__(v41, 16);
|
|
*v38 = v42;
|
|
v43 = v6[v40];
|
|
_LOBYTE(v40) = v41;
|
|
v38[1] = v43;
|
|
v44 = v6[v40];
|
|
_LOBYTE(v40) = BYTE1(v41);
|
|
v38[2] = v44;
|
|
v38[3] = v6[v40];
|
|
v38 += 4;
|
|
v39 -= 4;
|
|
}
|
|
while ( v39 >= 4 );
|
|
}
|
|
if ( v39 >= 2 )
|
|
{
|
|
_LOBYTE(v40) = *v5;
|
|
*v38 = v6[v40];
|
|
_LOBYTE(v40) = v5[1];
|
|
v38[1] = v6[v40];
|
|
v5 += 2;
|
|
v38 += 2;
|
|
}
|
|
v4 = v38 - 800;
|
|
v37 += 2;
|
|
}
|
|
while ( v37 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 3:
|
|
v45 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
for ( m = 32 - v45; m >= 4; m -= 4 )
|
|
{
|
|
v47 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v47;
|
|
v48 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v47);
|
|
v47 = __ROR4__(v47, 16);
|
|
*v4 = v48;
|
|
v49 = v6[v1];
|
|
_LOBYTE(v1) = v47;
|
|
v4[1] = v49;
|
|
v50 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v47);
|
|
v4[2] = v50;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
}
|
|
if ( m >= 2 )
|
|
{
|
|
_LOBYTE(v1) = *v5;
|
|
*v4 = v6[v1];
|
|
_LOBYTE(v1) = v5[1];
|
|
v4[1] = v6[v1];
|
|
v5 += 2;
|
|
v4 += 2;
|
|
}
|
|
v1 = (unsigned char)v5 & 2;
|
|
v5 += v1;
|
|
v4 = &v4[v45 - 800];
|
|
v36 = __OFSUB__(v45, 2);
|
|
v45 -= 2;
|
|
if ( (v45 < 0) ^ v36 )
|
|
{
|
|
v51 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
for ( n = 32 - v51; n >= 4; n -= 4 )
|
|
{
|
|
v53 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v53;
|
|
v54 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v53);
|
|
v53 = __ROR4__(v53, 16);
|
|
*v4 = v54;
|
|
v55 = v6[v1];
|
|
_LOBYTE(v1) = v53;
|
|
v4[1] = v55;
|
|
v56 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v53);
|
|
v4[2] = v56;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
}
|
|
if ( n >= 2 )
|
|
{
|
|
_LOBYTE(v1) = *v5;
|
|
*v4 = v6[v1];
|
|
_LOBYTE(v1) = v5[1];
|
|
v4[1] = v6[v1];
|
|
v5 += 2;
|
|
v4 += 2;
|
|
}
|
|
v1 = (unsigned char)v5 & 2;
|
|
v5 += v1;
|
|
v4 = &v4[v51 - 800];
|
|
v51 += 2;
|
|
}
|
|
while ( v51 != 32 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
v57 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v58 = &v4[v57];
|
|
v59 = 32 - v57;
|
|
v60 = (32 - (_BYTE)v57) & 2;
|
|
v5 += v60;
|
|
if ( (char)(32 - v57) >= 4 )
|
|
{
|
|
do
|
|
{
|
|
v61 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v60) = v61;
|
|
v62 = v6[v60];
|
|
_LOBYTE(v60) = BYTE1(v61);
|
|
v61 = __ROR4__(v61, 16);
|
|
*v58 = v62;
|
|
v63 = v6[v60];
|
|
_LOBYTE(v60) = v61;
|
|
v58[1] = v63;
|
|
v64 = v6[v60];
|
|
_LOBYTE(v60) = BYTE1(v61);
|
|
v58[2] = v64;
|
|
v58[3] = v6[v60];
|
|
v58 += 4;
|
|
v59 -= 4;
|
|
}
|
|
while ( v59 >= 4 );
|
|
}
|
|
if ( v59 >= 2 )
|
|
{
|
|
_LOBYTE(v60) = *v5;
|
|
*v58 = v6[v60];
|
|
_LOBYTE(v60) = v5[1];
|
|
v58[1] = v6[v60];
|
|
v5 += 2;
|
|
v58 += 2;
|
|
}
|
|
v4 = v58 - 800;
|
|
v36 = __OFSUB__(v57, 2);
|
|
v57 -= 2;
|
|
if ( (v57 < 0) ^ v36 )
|
|
{
|
|
v65 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v66 = 32;
|
|
do
|
|
{
|
|
v67 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v60) = v67;
|
|
v68 = v6[v60];
|
|
_LOBYTE(v60) = BYTE1(v67);
|
|
v67 = __ROR4__(v67, 16);
|
|
*v4 = v68;
|
|
v69 = v6[v60];
|
|
_LOBYTE(v60) = v67;
|
|
v4[1] = v69;
|
|
v70 = v6[v60];
|
|
_LOBYTE(v60) = BYTE1(v67);
|
|
v4[2] = v70;
|
|
v4[3] = v6[v60];
|
|
v4 += 4;
|
|
v66 -= 4;
|
|
}
|
|
while ( v66 >= 4 );
|
|
v4 -= 800;
|
|
--v65;
|
|
}
|
|
while ( v65 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
v71 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
for ( ii = 32 - v71; ii >= 4; ii -= 4 )
|
|
{
|
|
v73 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v73;
|
|
v74 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v73);
|
|
v73 = __ROR4__(v73, 16);
|
|
*v4 = v74;
|
|
v75 = v6[v1];
|
|
_LOBYTE(v1) = v73;
|
|
v4[1] = v75;
|
|
v76 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v73);
|
|
v4[2] = v76;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
}
|
|
if ( ii >= 2 )
|
|
{
|
|
_LOBYTE(v1) = *v5;
|
|
*v4 = v6[v1];
|
|
_LOBYTE(v1) = v5[1];
|
|
v4[1] = v6[v1];
|
|
v5 += 2;
|
|
v4 += 2;
|
|
}
|
|
v1 = (unsigned char)v5 & 2;
|
|
v5 += v1;
|
|
v4 = &v4[v71 - 800];
|
|
v36 = __OFSUB__(v71, 2);
|
|
v71 -= 2;
|
|
if ( (v71 < 0) ^ v36 )
|
|
{
|
|
v77 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v78 = 32;
|
|
do
|
|
{
|
|
v79 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v79;
|
|
v80 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v79);
|
|
v79 = __ROR4__(v79, 16);
|
|
*v4 = v80;
|
|
v81 = v6[v1];
|
|
_LOBYTE(v1) = v79;
|
|
v4[1] = v81;
|
|
v82 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v79);
|
|
v4[2] = v82;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
v78 -= 4;
|
|
}
|
|
while ( v78 >= 4 );
|
|
v4 -= 800;
|
|
--v77;
|
|
}
|
|
while ( v77 );
|
|
return;
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v13 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v14 = 32;
|
|
v157 = v13;
|
|
do
|
|
{
|
|
v15 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v13) = v15;
|
|
v16 = v6[v13];
|
|
_LOBYTE(v13) = BYTE1(v15);
|
|
v15 = __ROR4__(v15, 16);
|
|
*v4 = v16;
|
|
v17 = v6[v13];
|
|
_LOBYTE(v13) = v15;
|
|
v4[1] = v17;
|
|
v18 = v6[v13];
|
|
_LOBYTE(v13) = BYTE1(v15);
|
|
v4[2] = v18;
|
|
v4[3] = v6[v13];
|
|
v4 += 4;
|
|
v14 -= 4;
|
|
}
|
|
while ( v14 >= 4 );
|
|
v4 -= 800;
|
|
v13 = v157 - 1;
|
|
}
|
|
while ( v157 != 1 );
|
|
}
|
|
return;
|
|
}
|
|
v8 = (char *)pSpeedCels + *(_DWORD *)(4 * (light_table_index + 16 * (level_cel_block & 0xFFF)) + world_4B3265);
|
|
v9 = (unsigned short)level_cel_block >> 12;
|
|
goto LABEL_22;
|
|
}
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v11 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v12 = ((unsigned int)level_cel_block >> 12) & 7;
|
|
if ( v12 )
|
|
{
|
|
switch ( (_WORD)v12 )
|
|
{
|
|
case 1:
|
|
v130 = 32;
|
|
do
|
|
{
|
|
v131 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v132 = *v11++;
|
|
if ( (v132 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v132) = -(char)v132;
|
|
v4 += v132;
|
|
v131 -= v132;
|
|
if ( !v131 )
|
|
goto LABEL_205;
|
|
}
|
|
v131 -= v132;
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
return;
|
|
v11 += v132;
|
|
v133 = v132 >> 1;
|
|
if ( v132 & 1 )
|
|
{
|
|
*v4++ = 0;
|
|
if ( !v133 )
|
|
continue;
|
|
}
|
|
v91 = v133 & 1;
|
|
v134 = v132 >> 2;
|
|
if ( v91 )
|
|
{
|
|
*(_WORD *)v4 = 0;
|
|
v4 += 2;
|
|
if ( !v134 )
|
|
continue;
|
|
}
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v134;
|
|
}
|
|
while ( v134 );
|
|
}
|
|
while ( v131 );
|
|
LABEL_205:
|
|
v4 -= 800;
|
|
--v130;
|
|
}
|
|
while ( v130 );
|
|
break;
|
|
case 2:
|
|
v135 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v136 = &v4[v135];
|
|
v137 = (unsigned int)(32 - v135) >> 2;
|
|
if ( !((32 - v135) & 2) || (*(_WORD *)v136 = 0, v136 += 2, v137) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v136 = 0;
|
|
v136 += 4;
|
|
--v137;
|
|
}
|
|
while ( v137 );
|
|
}
|
|
v4 = v136 - 800;
|
|
if ( !v135 )
|
|
{
|
|
v138 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v139 = &v4[v138];
|
|
v140 = (unsigned int)(32 - v138) >> 2;
|
|
if ( ((32 - v138) & 2) )
|
|
{
|
|
*(_WORD *)v139 = 0;
|
|
v139 += 2;
|
|
}
|
|
if(v140) {
|
|
do
|
|
{
|
|
*(_DWORD *)v139 = 0;
|
|
v139 += 4;
|
|
--v140;
|
|
}
|
|
while ( v140 );
|
|
}
|
|
v4 = v139 - 800;
|
|
v138 += 2;
|
|
}
|
|
while ( v138 != 32 );
|
|
return;
|
|
}
|
|
v135 -= 2;
|
|
}
|
|
break;
|
|
case 3:
|
|
v141 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v142 = (unsigned int)(32 - v141) >> 2;
|
|
if ( !((32 - v141) & 2) || (*(_WORD *)v4 = 0, v4 += 2, v142) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v142;
|
|
}
|
|
while ( v142 );
|
|
}
|
|
v143 = v4 - 800;
|
|
if ( !v141 )
|
|
{
|
|
v144 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v143 < screen_buf_end )
|
|
break;
|
|
v145 = (unsigned int)(32 - v144) >> 2;
|
|
if ( ((32 - v144) & 2) )
|
|
{
|
|
*(_WORD *)v143 = 0;
|
|
v143 += 2;
|
|
}
|
|
if(v145) {
|
|
do
|
|
{
|
|
*(_DWORD *)v143 = 0;
|
|
v143 += 4;
|
|
--v145;
|
|
}
|
|
while ( v145 );
|
|
}
|
|
v143 = &v143[v144 - 800];
|
|
v144 += 2;
|
|
}
|
|
while ( v144 != 32 );
|
|
return;
|
|
}
|
|
v4 = &v143[v141];
|
|
v141 -= 2;
|
|
}
|
|
break;
|
|
case 4:
|
|
v146 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v147 = &v4[v146];
|
|
v148 = (unsigned int)(32 - v146) >> 2;
|
|
if ( !((32 - v146) & 2) || (*(_WORD *)v147 = 0, v147 += 2, v148) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v147 = 0;
|
|
v147 += 4;
|
|
--v148;
|
|
}
|
|
while ( v148 );
|
|
}
|
|
v4 = v147 - 800;
|
|
if ( !v146 )
|
|
{
|
|
v149 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v150 = 8;
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v150;
|
|
}
|
|
while ( v150 );
|
|
v4 -= 800;
|
|
--v149;
|
|
}
|
|
while ( v149 );
|
|
return;
|
|
}
|
|
v146 -= 2;
|
|
}
|
|
break;
|
|
default:
|
|
v151 = 30;
|
|
while ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v152 = (unsigned int)(32 - v151) >> 2;
|
|
if ( !((32 - v151) & 2) || (*(_WORD *)v4 = 0, v4 += 2, v152) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v152;
|
|
}
|
|
while ( v152 );
|
|
}
|
|
v153 = v4 - 800;
|
|
if ( !v151 )
|
|
{
|
|
v154 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v153 < screen_buf_end )
|
|
break;
|
|
v155 = 8;
|
|
do
|
|
{
|
|
*(_DWORD *)v153 = 0;
|
|
v153 += 4;
|
|
--v155;
|
|
}
|
|
while ( v155 );
|
|
v153 -= 800;
|
|
--v154;
|
|
}
|
|
while ( v154 );
|
|
return;
|
|
}
|
|
v4 = &v153[v151];
|
|
v151 -= 2;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v128 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
break;
|
|
v129 = 8;
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v129;
|
|
}
|
|
while ( v129 );
|
|
v4 -= 800;
|
|
--v128;
|
|
}
|
|
while ( v128 );
|
|
}
|
|
}
|
|
// 642A14: using guessed type char lightmax;
|
|
// 69BEF8: using guessed type int light_table_index;
|
|
// 69CF0C: using guessed type int screen_buf_end;
|
|
// 69CF14: using guessed type int level_cel_block;
|
|
// 69CF20: using guessed type char arch_draw_type;
|
|
// 69CF94: using guessed type int cel_transparency_active;
|
|
// 69CF98: using guessed type int level_piece_id;
|
|
|
|
//----- (00465F38) --------------------------------------------------------
|
|
void __fastcall drawTopArchesLowerScreen(void *a1)
|
|
{
|
|
char v1; // edx
|
|
unsigned int v2; // edi
|
|
_BYTE *v3; // esi
|
|
char *v4; // ebx
|
|
short v5; // ax
|
|
char *v6; // esi
|
|
short v7; // ax
|
|
unsigned int v8; // eax
|
|
char *v9; // esi
|
|
unsigned int v10; // eax
|
|
int v11; // eax
|
|
signed int v12; // ebp
|
|
signed int v13; // ecx
|
|
unsigned int v14; // eax
|
|
_BYTE *v15; // edi
|
|
signed int v16; // ecx
|
|
int v17; // eax
|
|
int v18; // ecx
|
|
signed int v19; // ebp
|
|
unsigned int v20; // eax
|
|
unsigned int v21; // ecx
|
|
unsigned char v22; // cf
|
|
unsigned int v23; // ecx
|
|
unsigned int v24; // eax
|
|
unsigned int v25; // ecx
|
|
int v26; // eax
|
|
unsigned int v27; // ecx
|
|
unsigned int v28; // ecx
|
|
int v29; // eax
|
|
unsigned int v30; // ecx
|
|
unsigned int v31; // eax
|
|
int v32; // ebp
|
|
signed int v33; // eax
|
|
unsigned int v34; // ecx
|
|
int v35; // eax
|
|
_BYTE *v36; // edi
|
|
unsigned int v37; // ecx
|
|
char v38; // edx
|
|
unsigned int v39; // ecx
|
|
unsigned int v40; // ecx
|
|
unsigned int v41; // eax
|
|
unsigned int v42; // ecx
|
|
int v43; // eax
|
|
char v44; // edx
|
|
unsigned int v45; // ecx
|
|
unsigned int v46; // ecx
|
|
int v47; // eax
|
|
unsigned int v48; // ecx
|
|
unsigned int v49; // eax
|
|
unsigned char v50; // of
|
|
int v51; // ebp
|
|
signed int v52; // eax
|
|
unsigned int v53; // ecx
|
|
int v54; // eax
|
|
_BYTE *v55; // edi
|
|
unsigned int v56; // ecx
|
|
char v57; // edx
|
|
unsigned int v58; // ecx
|
|
unsigned int v59; // ecx
|
|
unsigned int v60; // eax
|
|
unsigned int v61; // ecx
|
|
int v62; // eax
|
|
char v63; // edx
|
|
unsigned int v64; // ecx
|
|
unsigned int v65; // ecx
|
|
int v66; // eax
|
|
unsigned int v67; // ecx
|
|
unsigned int v68; // eax
|
|
int v69; // ebp
|
|
signed int v70; // eax
|
|
unsigned int v71; // ecx
|
|
int v72; // eax
|
|
unsigned int v73; // ecx
|
|
unsigned int v74; // ecx
|
|
unsigned int v75; // ecx
|
|
unsigned int v76; // eax
|
|
unsigned int v77; // ecx
|
|
int v78; // eax
|
|
unsigned int v79; // ecx
|
|
unsigned int v80; // ecx
|
|
int v81; // eax
|
|
unsigned int v82; // ecx
|
|
unsigned int v83; // eax
|
|
int v84; // ebp
|
|
signed int v85; // eax
|
|
unsigned int v86; // ecx
|
|
int v87; // eax
|
|
unsigned int v88; // ecx
|
|
unsigned int v89; // ecx
|
|
unsigned int v90; // ecx
|
|
unsigned int v91; // eax
|
|
unsigned int v92; // ecx
|
|
int v93; // eax
|
|
unsigned int v94; // ecx
|
|
unsigned int v95; // ecx
|
|
int v96; // eax
|
|
unsigned int v97; // ecx
|
|
unsigned int v98; // eax
|
|
int v99; // ebp
|
|
signed int v100; // eax
|
|
unsigned int v101; // ecx
|
|
int v102; // eax
|
|
_BYTE *v103; // edi
|
|
unsigned int v104; // ecx
|
|
unsigned int v105; // ecx
|
|
unsigned int v106; // ecx
|
|
unsigned int v107; // eax
|
|
unsigned int v108; // ecx
|
|
int v109; // eax
|
|
unsigned int v110; // ecx
|
|
unsigned int v111; // ecx
|
|
int v112; // eax
|
|
unsigned int v113; // ecx
|
|
unsigned int v114; // eax
|
|
signed int v115; // ebp
|
|
signed int v116; // ecx
|
|
unsigned int v117; // eax
|
|
_BYTE *v118; // edi
|
|
signed int v119; // ecx
|
|
int v120; // eax
|
|
int v121; // ebp
|
|
signed int v122; // eax
|
|
unsigned int v123; // ecx
|
|
int v124; // eax
|
|
unsigned int v125; // ecx
|
|
unsigned int v126; // ecx
|
|
unsigned int v127; // ecx
|
|
unsigned int v128; // eax
|
|
unsigned int v129; // ecx
|
|
int v130; // eax
|
|
unsigned int v131; // ecx
|
|
unsigned int v132; // ecx
|
|
int v133; // eax
|
|
unsigned int v134; // ecx
|
|
unsigned int v135; // eax
|
|
signed int v136; // ebp
|
|
signed int v137; // ecx
|
|
unsigned int v138; // eax
|
|
_BYTE *v139; // edi
|
|
signed int v140; // ecx
|
|
int v141; // eax
|
|
signed int v142; // edx
|
|
signed int v143; // ecx
|
|
int v144; // eax
|
|
_BYTE *v145; // edi
|
|
_BYTE *v146; // edi
|
|
signed int v147; // ecx
|
|
int v148; // eax
|
|
_BYTE *v149; // edi
|
|
int v150; // ecx
|
|
signed int v151; // edx
|
|
unsigned int v152; // eax
|
|
unsigned int v153; // ecx
|
|
unsigned int v154; // ecx
|
|
char *v155; // esi
|
|
_BYTE *v156; // edi
|
|
char v157; // al
|
|
int v158; // eax
|
|
_BYTE *v159; // edi
|
|
char v160; // al
|
|
unsigned int v161; // ecx
|
|
char v162; // al
|
|
int v163; // eax
|
|
_BYTE *v164; // edi
|
|
int v165; // edx
|
|
signed int v166; // eax
|
|
unsigned int v167; // ecx
|
|
int v168; // eax
|
|
_BYTE *v169; // edi
|
|
unsigned int v170; // ecx
|
|
int v171; // eax
|
|
unsigned int v172; // ecx
|
|
_BYTE *v173; // edi
|
|
int v174; // eax
|
|
_BYTE *v175; // edi
|
|
unsigned int v176; // ecx
|
|
short v177; // ax
|
|
int v178; // eax
|
|
_BYTE *v179; // edi
|
|
int v180; // edx
|
|
signed int v181; // eax
|
|
unsigned int v182; // ecx
|
|
int v183; // eax
|
|
_BYTE *v184; // edi
|
|
unsigned int v185; // ecx
|
|
int v186; // eax
|
|
unsigned int v187; // ecx
|
|
_BYTE *v188; // edi
|
|
int v189; // eax
|
|
_BYTE *v190; // edi
|
|
unsigned int v191; // ecx
|
|
short v192; // ax
|
|
int v193; // eax
|
|
_BYTE *v194; // edi
|
|
int v195; // edx
|
|
signed int v196; // eax
|
|
unsigned int v197; // ecx
|
|
int v198; // eax
|
|
unsigned int v199; // ecx
|
|
int v200; // eax
|
|
unsigned int ii; // ecx
|
|
int v202; // eax
|
|
_BYTE *v203; // edi
|
|
_BYTE *v204; // edi
|
|
unsigned int jj; // ecx
|
|
int v206; // eax
|
|
_BYTE *v207; // edi
|
|
short v208; // ax
|
|
int v209; // edx
|
|
signed int v210; // eax
|
|
unsigned int v211; // ecx
|
|
int v212; // eax
|
|
unsigned int v213; // ecx
|
|
int v214; // eax
|
|
unsigned int kk; // ecx
|
|
int v216; // eax
|
|
_BYTE *v217; // edi
|
|
_BYTE *v218; // edi
|
|
unsigned int ll; // ecx
|
|
int v220; // eax
|
|
_BYTE *v221; // edi
|
|
short v222; // ax
|
|
int v223; // edx
|
|
signed int v224; // eax
|
|
unsigned int v225; // ecx
|
|
int v226; // eax
|
|
_BYTE *v227; // edi
|
|
unsigned int v228; // ecx
|
|
int v229; // eax
|
|
unsigned int v230; // ecx
|
|
_BYTE *v231; // edi
|
|
int v232; // eax
|
|
_BYTE *v233; // edi
|
|
unsigned int v234; // ecx
|
|
short v235; // ax
|
|
int v236; // eax
|
|
_BYTE *v237; // edi
|
|
signed int v238; // edx
|
|
signed int v239; // ecx
|
|
int v240; // eax
|
|
_BYTE *v241; // edi
|
|
_BYTE *v242; // edi
|
|
signed int v243; // ecx
|
|
int v244; // eax
|
|
_BYTE *v245; // edi
|
|
int v246; // edx
|
|
signed int v247; // eax
|
|
unsigned int v248; // ecx
|
|
int v249; // eax
|
|
unsigned int v250; // ecx
|
|
int v251; // eax
|
|
unsigned int m; // ecx
|
|
int v253; // eax
|
|
_BYTE *v254; // edi
|
|
_BYTE *v255; // edi
|
|
unsigned int n; // ecx
|
|
int v257; // eax
|
|
_BYTE *v258; // edi
|
|
short v259; // ax
|
|
signed int v260; // edx
|
|
signed int v261; // ecx
|
|
int v262; // eax
|
|
_BYTE *v263; // edi
|
|
_BYTE *v264; // edi
|
|
signed int v265; // ecx
|
|
int v266; // eax
|
|
_BYTE *v267; // edi
|
|
signed int v268; // edx
|
|
signed int v269; // ecx
|
|
_BYTE *v270; // edi
|
|
signed int v271; // ecx
|
|
int v272; // ecx
|
|
signed int v273; // edx
|
|
unsigned int v274; // eax
|
|
unsigned int v275; // ecx
|
|
unsigned int v276; // ecx
|
|
_BYTE *v277; // edi
|
|
unsigned int v278; // ecx
|
|
signed int i; // edx
|
|
_BYTE *v280; // edi
|
|
unsigned int v281; // ecx
|
|
unsigned int v282; // ecx
|
|
_BYTE *v283; // edi
|
|
unsigned int v284; // ecx
|
|
signed int v285; // edx
|
|
_BYTE *v286; // edi
|
|
unsigned int v287; // ecx
|
|
unsigned int v288; // ecx
|
|
_BYTE *v289; // edi
|
|
unsigned int v290; // ecx
|
|
signed int j; // edx
|
|
unsigned int v292; // ecx
|
|
unsigned int v293; // ecx
|
|
_BYTE *v294; // edi
|
|
unsigned int v295; // ecx
|
|
_BYTE *v296; // edi
|
|
signed int v297; // edx
|
|
unsigned int v298; // ecx
|
|
unsigned int v299; // ecx
|
|
_BYTE *v300; // edi
|
|
unsigned int v301; // ecx
|
|
signed int k; // edx
|
|
_BYTE *v303; // edi
|
|
unsigned int v304; // ecx
|
|
unsigned int v305; // ecx
|
|
_BYTE *v306; // edi
|
|
unsigned int v307; // ecx
|
|
signed int v308; // edx
|
|
signed int v309; // ecx
|
|
_BYTE *v310; // edi
|
|
signed int v311; // ecx
|
|
signed int l; // edx
|
|
unsigned int v313; // ecx
|
|
unsigned int v314; // ecx
|
|
_BYTE *v315; // edi
|
|
unsigned int v316; // ecx
|
|
unsigned int v317; // edi
|
|
signed int v318; // edx
|
|
signed int v319; // ecx
|
|
_BYTE *v320; // edi
|
|
signed int v321; // ecx
|
|
int v322; // [esp-14h] [ebp-18h]
|
|
int v323; // [esp-10h] [ebp-14h]
|
|
int v324; // [esp-10h] [ebp-14h]
|
|
|
|
world_4B3265 = (int)speed_cel_frame_num_from_light_index_frame_num;
|
|
v2 = (unsigned int)a1;
|
|
if ( !(_BYTE)light_table_index )
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v6 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v8 = level_cel_block;
|
|
_LOBYTE(v8) = BYTE1(v8);
|
|
v7 = ((v8 >> 4) & 7) + 8;
|
|
goto LABEL_11;
|
|
}
|
|
if ( (_BYTE)light_table_index == lightmax )
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v9 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v10 = level_cel_block;
|
|
_LOBYTE(v10) = BYTE1(v10);
|
|
v11 = (v10 >> 4) & 7;
|
|
if ( !v11 )
|
|
{
|
|
v268 = 16;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v269 = 8;
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v269;
|
|
}
|
|
while ( v269 );
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v2 += 32;
|
|
}
|
|
v270 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v270 < screen_buf_end )
|
|
{
|
|
v271 = 8;
|
|
do
|
|
{
|
|
*v270 = 0;
|
|
v270[2] = 0;
|
|
v270 += 4;
|
|
--v271;
|
|
}
|
|
while ( v271 );
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v270 += 32;
|
|
}
|
|
v2 = (unsigned int)(v270 - 800);
|
|
--v268;
|
|
}
|
|
while ( v268 );
|
|
return;
|
|
}
|
|
if ( (_WORD)v11 != 1 )
|
|
{
|
|
switch ( (_WORD)v11 )
|
|
{
|
|
case 2:
|
|
world_4B325C = 0;
|
|
for ( i = 30; ; i -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v280 = (_BYTE *)(i + v2);
|
|
v281 = 32 - i;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v282 = v281 >> 2;
|
|
if ( !(v281 & 2) || (v283 = v280 + 1, *v283 = 0, v280 = v283 + 1, v282) )
|
|
{
|
|
do
|
|
{
|
|
v280[1] = 0;
|
|
v280[3] = 0;
|
|
v280 += 4;
|
|
--v282;
|
|
}
|
|
while ( v282 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v284 = v281 >> 2;
|
|
if ( !(v281 & 2) || (*v280 = 0, v280 += 2, v284) )
|
|
{
|
|
do
|
|
{
|
|
*v280 = 0;
|
|
v280[2] = 0;
|
|
v280 += 4;
|
|
--v284;
|
|
}
|
|
while ( v284 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-i + 32];
|
|
v280 = (_BYTE *)(v2 + 32);
|
|
}
|
|
v2 = (unsigned int)(v280 - 800);
|
|
if ( !i )
|
|
break;
|
|
}
|
|
v285 = 2;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v286 = (_BYTE *)(v285 + v2);
|
|
v287 = 32 - v285;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v288 = v287 >> 2;
|
|
if ( !(v287 & 2) || (v289 = v286 + 1, *v289 = 0, v286 = v289 + 1, v288) )
|
|
{
|
|
do
|
|
{
|
|
v286[1] = 0;
|
|
v286[3] = 0;
|
|
v286 += 4;
|
|
--v288;
|
|
}
|
|
while ( v288 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v290 = v287 >> 2;
|
|
if ( !(v287 & 2) || (*v286 = 0, v286 += 2, v290) )
|
|
{
|
|
do
|
|
{
|
|
*v286 = 0;
|
|
v286[2] = 0;
|
|
v286 += 4;
|
|
--v290;
|
|
}
|
|
while ( v290 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-v285 + 32];
|
|
v286 = (_BYTE *)(v2 + 32);
|
|
}
|
|
v2 = (unsigned int)(v286 - 800);
|
|
v285 += 2;
|
|
}
|
|
while ( v285 != 32 );
|
|
break;
|
|
case 3:
|
|
world_4B325C = 0;
|
|
for ( j = 30; ; j -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v292 = 32 - j;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v293 = v292 >> 2;
|
|
if ( !(v292 & 2) || (v294 = (_BYTE *)(v2 + 1), *v294 = 0, v2 = (unsigned int)(v294 + 1), v293) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v293;
|
|
}
|
|
while ( v293 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v295 = v292 >> 2;
|
|
if ( !(v292 & 2) || (*(_BYTE *)v2 = 0, v2 += 2, v295) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)v2 = 0;
|
|
*(_BYTE *)(v2 + 2) = 0;
|
|
v2 += 4;
|
|
--v295;
|
|
}
|
|
while ( v295 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-j + 32];
|
|
v2 = v2 + 32 - j;
|
|
}
|
|
v296 = (_BYTE *)(v2 - 800);
|
|
if ( !j )
|
|
break;
|
|
v2 = (unsigned int)&v296[j];
|
|
}
|
|
v297 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v296 < screen_buf_end )
|
|
{
|
|
v298 = 32 - v297;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v299 = v298 >> 2;
|
|
if ( !(v298 & 2) || (v300 = v296 + 1, *v300 = 0, v296 = v300 + 1, v299) )
|
|
{
|
|
do
|
|
{
|
|
v296[1] = 0;
|
|
v296[3] = 0;
|
|
v296 += 4;
|
|
--v299;
|
|
}
|
|
while ( v299 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v301 = v298 >> 2;
|
|
if ( !(v298 & 2) || (*v296 = 0, v296 += 2, v301) )
|
|
{
|
|
do
|
|
{
|
|
*v296 = 0;
|
|
v296[2] = 0;
|
|
v296 += 4;
|
|
--v301;
|
|
}
|
|
while ( v301 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-v297 + 32];
|
|
v296 = &v296[-v297 + 32];
|
|
}
|
|
v296 = &v296[v297 - 800];
|
|
v297 += 2;
|
|
}
|
|
while ( v297 != 32 );
|
|
break;
|
|
case 4:
|
|
world_4B325C = 0;
|
|
for ( k = 30; ; k -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v303 = (_BYTE *)(k + v2);
|
|
v304 = 32 - k;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v305 = v304 >> 2;
|
|
if ( !(v304 & 2) || (v306 = v303 + 1, *v306 = 0, v303 = v306 + 1, v305) )
|
|
{
|
|
do
|
|
{
|
|
v303[1] = 0;
|
|
v303[3] = 0;
|
|
v303 += 4;
|
|
--v305;
|
|
}
|
|
while ( v305 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v307 = v304 >> 2;
|
|
if ( !(v304 & 2) || (*v303 = 0, v303 += 2, v307) )
|
|
{
|
|
do
|
|
{
|
|
*v303 = 0;
|
|
v303[2] = 0;
|
|
v303 += 4;
|
|
--v307;
|
|
}
|
|
while ( v307 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-k + 32];
|
|
v303 = (_BYTE *)(v2 + 32);
|
|
}
|
|
v2 = (unsigned int)(v303 - 800);
|
|
if ( !k )
|
|
break;
|
|
}
|
|
v308 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v309 = 8;
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v309;
|
|
}
|
|
while ( v309 );
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v2 += 32;
|
|
}
|
|
v310 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v310 < screen_buf_end )
|
|
{
|
|
v311 = 8;
|
|
do
|
|
{
|
|
*v310 = 0;
|
|
v310[2] = 0;
|
|
v310 += 4;
|
|
--v311;
|
|
}
|
|
while ( v311 );
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v310 += 32;
|
|
}
|
|
v2 = (unsigned int)(v310 - 800);
|
|
--v308;
|
|
}
|
|
while ( v308 );
|
|
break;
|
|
default:
|
|
world_4B325C = 0;
|
|
for ( l = 30; ; l -= 2 )
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v313 = 32 - l;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v314 = v313 >> 2;
|
|
if ( !(v313 & 2) || (v315 = (_BYTE *)(v2 + 1), *v315 = 0, v2 = (unsigned int)(v315 + 1), v314) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v314;
|
|
}
|
|
while ( v314 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v316 = v313 >> 2;
|
|
if ( !(v313 & 2) || (*(_BYTE *)v2 = 0, v2 += 2, v316) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)v2 = 0;
|
|
*(_BYTE *)(v2 + 2) = 0;
|
|
v2 += 4;
|
|
--v316;
|
|
}
|
|
while ( v316 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-l + 32];
|
|
v2 = v2 + 32 - l;
|
|
}
|
|
v317 = v2 - 800;
|
|
if ( !l )
|
|
break;
|
|
v2 = l + v317;
|
|
}
|
|
v318 = 8;
|
|
do
|
|
{
|
|
if ( v317 < screen_buf_end )
|
|
{
|
|
v319 = 8;
|
|
do
|
|
{
|
|
*(_BYTE *)(v317 + 1) = 0;
|
|
*(_BYTE *)(v317 + 3) = 0;
|
|
v317 += 4;
|
|
--v319;
|
|
}
|
|
while ( v319 );
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v317 += 32;
|
|
}
|
|
v320 = (_BYTE *)(v317 - 800);
|
|
if ( (unsigned int)v320 < screen_buf_end )
|
|
{
|
|
v321 = 8;
|
|
do
|
|
{
|
|
*v320 = 0;
|
|
v320[2] = 0;
|
|
v320 += 4;
|
|
--v321;
|
|
}
|
|
while ( v321 );
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v320 += 32;
|
|
}
|
|
v317 = (unsigned int)(v320 - 800);
|
|
--v318;
|
|
}
|
|
while ( v318 );
|
|
break;
|
|
}
|
|
return;
|
|
}
|
|
world_4B325C = (unsigned char)a1 & 1;
|
|
v272 = 32;
|
|
LABEL_412:
|
|
v324 = v272;
|
|
v273 = 32;
|
|
while ( 1 )
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v274 = (unsigned char)*v9++;
|
|
if ( (v274 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v274) = -(char)v274;
|
|
v2 += v274;
|
|
v273 -= v274;
|
|
if ( !v273 )
|
|
{
|
|
LABEL_433:
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
v2 -= 800;
|
|
v272 = v324 - 1;
|
|
if ( v324 == 1 )
|
|
return;
|
|
goto LABEL_412;
|
|
}
|
|
}
|
|
v273 -= v274;
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v9 += v274;
|
|
if ( (v2 & 1) == world_4B325C )
|
|
{
|
|
v275 = v274 >> 1;
|
|
if ( !(v274 & 1) )
|
|
goto LABEL_420;
|
|
++v2;
|
|
if ( v275 )
|
|
{
|
|
LABEL_427:
|
|
v22 = v275 & 1;
|
|
v278 = v275 >> 1;
|
|
if ( !v22 || (*(_BYTE *)v2 = 0, v2 += 2, v278) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)v2 = 0;
|
|
*(_BYTE *)(v2 + 2) = 0;
|
|
v2 += 4;
|
|
--v278;
|
|
}
|
|
while ( v278 );
|
|
}
|
|
goto LABEL_430;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v275 = v274 >> 1;
|
|
if ( !(v274 & 1) )
|
|
goto LABEL_427;
|
|
*(_BYTE *)v2++ = 0;
|
|
if ( v275 )
|
|
{
|
|
LABEL_420:
|
|
v22 = v275 & 1;
|
|
v276 = v275 >> 1;
|
|
if ( !v22 || (v277 = (_BYTE *)(v2 + 1), *v277 = 0, v2 = (unsigned int)(v277 + 1), v276) )
|
|
{
|
|
do
|
|
{
|
|
*(_BYTE *)(v2 + 1) = 0;
|
|
*(_BYTE *)(v2 + 3) = 0;
|
|
v2 += 4;
|
|
--v276;
|
|
}
|
|
while ( v276 );
|
|
}
|
|
goto LABEL_430;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 += v274;
|
|
v2 += v274;
|
|
}
|
|
LABEL_430:
|
|
if ( !v273 )
|
|
goto LABEL_433;
|
|
}
|
|
}
|
|
if ( !(level_cel_block & 0x8000) )
|
|
{
|
|
v3 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v4 = &pLightTbl[256 * light_table_index];
|
|
v5 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
if ( !(BYTE1(level_cel_block) >> 4) )
|
|
{
|
|
v12 = 16;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v13 = 8;
|
|
do
|
|
{
|
|
v14 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v14);
|
|
v14 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v14);
|
|
v2 += 4;
|
|
--v13;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v13 );
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v2 += 32;
|
|
}
|
|
v15 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v15 < screen_buf_end )
|
|
{
|
|
v16 = 8;
|
|
do
|
|
{
|
|
v17 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v17;
|
|
*v15 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v17);
|
|
v15 += 4;
|
|
--v16;
|
|
*(v15 - 2) = v4[v1];
|
|
}
|
|
while ( v16 );
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v15 += 32;
|
|
}
|
|
v2 = (unsigned int)(v15 - 800);
|
|
--v12;
|
|
}
|
|
while ( v12 );
|
|
return;
|
|
}
|
|
if ( v5 == 1 )
|
|
{
|
|
world_4B325C = (unsigned char)a1 & 1;
|
|
v18 = 32;
|
|
do
|
|
{
|
|
v322 = v18;
|
|
v19 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v20 = (unsigned char)*v3++;
|
|
if ( (v20 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v20) = -(char)v20;
|
|
v2 += v20;
|
|
v19 -= v20;
|
|
if ( !v19 )
|
|
goto LABEL_69;
|
|
}
|
|
v19 -= v20;
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
if ( (v2 & 1) == world_4B325C )
|
|
{
|
|
v21 = v20 >> 1;
|
|
if ( v20 & 1 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v22 = v21 & 1;
|
|
v25 = v20 >> 2;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v25 )
|
|
{
|
|
do
|
|
{
|
|
v26 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v26;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v26);
|
|
v2 += 4;
|
|
--v25;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v25 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v21 & 1;
|
|
v23 = v20 >> 2;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v23 )
|
|
{
|
|
do
|
|
{
|
|
v24 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v24);
|
|
v24 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v24);
|
|
v2 += 4;
|
|
--v23;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v23 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v27 = v20 >> 1;
|
|
if ( v20 & 1 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v1];
|
|
v22 = v27 & 1;
|
|
v30 = v20 >> 2;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v30 )
|
|
{
|
|
do
|
|
{
|
|
v31 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v31);
|
|
v31 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v31);
|
|
v2 += 4;
|
|
--v30;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v30 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v27 & 1;
|
|
v28 = v20 >> 2;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v28 )
|
|
{
|
|
do
|
|
{
|
|
v29 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v29;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v29);
|
|
v2 += 4;
|
|
--v28;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v28 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v3 += v20;
|
|
v2 += v20;
|
|
}
|
|
}
|
|
while ( v19 );
|
|
LABEL_69:
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
v2 -= 800;
|
|
v18 = v322 - 1;
|
|
}
|
|
while ( v322 != 1 );
|
|
return;
|
|
}
|
|
if ( v5 != 2 )
|
|
{
|
|
if ( v5 != 3 )
|
|
{
|
|
if ( v5 != 4 )
|
|
{
|
|
world_4B325C = 0;
|
|
v121 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v122 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v122 > 45 )
|
|
{
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_249:
|
|
v136 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v137 = 8;
|
|
do
|
|
{
|
|
v138 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v138);
|
|
v138 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v138);
|
|
v2 += 4;
|
|
--v137;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v137 );
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v2 += 32;
|
|
}
|
|
v139 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v139 < screen_buf_end )
|
|
{
|
|
v140 = 8;
|
|
do
|
|
{
|
|
v141 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v141;
|
|
*v139 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v141);
|
|
v139 += 4;
|
|
--v140;
|
|
*(v139 - 2) = v4[v1];
|
|
}
|
|
while ( v140 );
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v139 += 32;
|
|
}
|
|
v2 = (unsigned int)(v139 - 800);
|
|
--v136;
|
|
}
|
|
while ( v136 );
|
|
return;
|
|
}
|
|
v123 = world_4B33FD[v122];
|
|
v3 += *(int *)((char *)world_4B34BD + v123);
|
|
v124 = 192 * v123;
|
|
v123 >>= 1;
|
|
v2 -= v124;
|
|
v121 = 30 - v123;
|
|
world_4B325C += v123 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v125 = 32 - v121;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v22 = v125 & 1;
|
|
v126 = v125 >> 1;
|
|
if ( v22 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v22 = v126 & 1;
|
|
v129 = v126 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v129 )
|
|
{
|
|
do
|
|
{
|
|
v130 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v130;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v130);
|
|
v2 += 4;
|
|
--v129;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v129 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v126 & 1;
|
|
v127 = v126 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v127 )
|
|
{
|
|
do
|
|
{
|
|
v128 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v128);
|
|
v128 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v128);
|
|
v2 += 4;
|
|
--v127;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v127 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
else
|
|
{
|
|
v22 = v125 & 1;
|
|
v131 = v125 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v1];
|
|
v22 = v131 & 1;
|
|
v134 = v131 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v134 )
|
|
{
|
|
do
|
|
{
|
|
v135 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v135);
|
|
v135 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v135);
|
|
v2 += 4;
|
|
--v134;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v134 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v131 & 1;
|
|
v132 = v131 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v132 )
|
|
{
|
|
do
|
|
{
|
|
v133 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v133;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v133);
|
|
v2 += 4;
|
|
--v132;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v132 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
v2 = v121 + v2 - 800;
|
|
v50 = __OFSUB__(v121, 2);
|
|
v121 -= 2;
|
|
}
|
|
while ( !((v121 < 0) ^ v50) );
|
|
goto LABEL_249;
|
|
}
|
|
world_4B325C = 0;
|
|
v99 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v100 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v100 > 45 )
|
|
{
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_210:
|
|
v115 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v116 = 8;
|
|
do
|
|
{
|
|
v117 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v117);
|
|
v117 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v117);
|
|
v2 += 4;
|
|
--v116;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v116 );
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v2 += 32;
|
|
}
|
|
v118 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v118 < screen_buf_end )
|
|
{
|
|
v119 = 8;
|
|
do
|
|
{
|
|
v120 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v120;
|
|
*v118 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v120);
|
|
v118 += 4;
|
|
--v119;
|
|
*(v118 - 2) = v4[v1];
|
|
}
|
|
while ( v119 );
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v118 += 32;
|
|
}
|
|
v2 = (unsigned int)(v118 - 800);
|
|
--v115;
|
|
}
|
|
while ( v115 );
|
|
return;
|
|
}
|
|
v101 = world_4B33FD[v100];
|
|
v3 += *(int *)((char *)world_4B34BD + v101);
|
|
v102 = 192 * v101;
|
|
v101 >>= 1;
|
|
v2 -= v102;
|
|
v99 = 30 - v101;
|
|
world_4B325C += v101 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v103 = (_BYTE *)(v99 + v2);
|
|
v104 = 32 - v99;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v1 = v104 & 2;
|
|
v3 += v1;
|
|
v22 = v104 & 1;
|
|
v105 = v104 >> 1;
|
|
if ( v22 )
|
|
{
|
|
++v3;
|
|
++v103;
|
|
v22 = v105 & 1;
|
|
v108 = v105 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*v103 = v4[v1];
|
|
v103 += 2;
|
|
}
|
|
if ( (_BYTE)v108 )
|
|
{
|
|
do
|
|
{
|
|
v109 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v109;
|
|
*v103 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v109);
|
|
v103 += 4;
|
|
--v108;
|
|
*(v103 - 2) = v4[v1];
|
|
}
|
|
while ( v108 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v105 & 1;
|
|
v106 = v105 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
v103[1] = v4[v1];
|
|
v103 += 2;
|
|
}
|
|
if ( (_BYTE)v106 )
|
|
{
|
|
do
|
|
{
|
|
v107 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v107);
|
|
v107 >>= 16;
|
|
v103[1] = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v107);
|
|
v103 += 4;
|
|
--v106;
|
|
*(v103 - 1) = v4[v1];
|
|
}
|
|
while ( v106 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v1 = v104 & 2;
|
|
v3 += v1;
|
|
v22 = v104 & 1;
|
|
v110 = v104 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*v103++ = v4[v1];
|
|
v22 = v110 & 1;
|
|
v113 = v110 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
v103[1] = v4[v1];
|
|
v103 += 2;
|
|
}
|
|
if ( (_BYTE)v113 )
|
|
{
|
|
do
|
|
{
|
|
v114 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v114);
|
|
v114 >>= 16;
|
|
v103[1] = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v114);
|
|
v103 += 4;
|
|
--v113;
|
|
*(v103 - 1) = v4[v1];
|
|
}
|
|
while ( v113 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v110 & 1;
|
|
v111 = v110 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*v103 = v4[v1];
|
|
v103 += 2;
|
|
}
|
|
if ( (_BYTE)v111 )
|
|
{
|
|
do
|
|
{
|
|
v112 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v112;
|
|
*v103 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v112);
|
|
v103 += 4;
|
|
--v111;
|
|
*(v103 - 2) = v4[v1];
|
|
}
|
|
while ( v111 );
|
|
}
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v103 - 800);
|
|
v50 = __OFSUB__(v99, 2);
|
|
v99 -= 2;
|
|
}
|
|
while ( !((v99 < 0) ^ v50) );
|
|
goto LABEL_210;
|
|
}
|
|
world_4B325C = 0;
|
|
v69 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v70 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v70 > 45 )
|
|
{
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_154:
|
|
v84 = 2;
|
|
if ( v2 >= screen_buf_end )
|
|
{
|
|
v85 = (v2 - screen_buf_end + 1023) >> 8;
|
|
if ( v85 > 42 )
|
|
return;
|
|
v86 = world_4B33FD[v85];
|
|
v3 += *(int *)((char *)world_4B3501 + v86);
|
|
v87 = 192 * v86;
|
|
v86 >>= 1;
|
|
v2 -= v87;
|
|
v84 = v86 + 2;
|
|
world_4B325C += v86 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v88 = 32 - v84;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v22 = v88 & 1;
|
|
v89 = v88 >> 1;
|
|
if ( v22 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v22 = v89 & 1;
|
|
v92 = v89 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v92 )
|
|
{
|
|
do
|
|
{
|
|
v93 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v93;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v93);
|
|
v2 += 4;
|
|
--v92;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v92 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v89 & 1;
|
|
v90 = v89 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v90 )
|
|
{
|
|
do
|
|
{
|
|
v91 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v91);
|
|
v91 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v91);
|
|
v2 += 4;
|
|
--v90;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v90 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
else
|
|
{
|
|
v22 = v88 & 1;
|
|
v94 = v88 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v1];
|
|
v22 = v94 & 1;
|
|
v97 = v94 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v97 )
|
|
{
|
|
do
|
|
{
|
|
v98 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v98);
|
|
v98 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v98);
|
|
v2 += 4;
|
|
--v97;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v97 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v94 & 1;
|
|
v95 = v94 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v95 )
|
|
{
|
|
do
|
|
{
|
|
v96 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v96;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v96);
|
|
v2 += 4;
|
|
--v95;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v95 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
v2 = v84 + v2 - 800;
|
|
v84 += 2;
|
|
}
|
|
while ( v84 != 32 );
|
|
return;
|
|
}
|
|
v71 = world_4B33FD[v70];
|
|
v3 += *(int *)((char *)world_4B34BD + v71);
|
|
v72 = 192 * v71;
|
|
v71 >>= 1;
|
|
v2 -= v72;
|
|
v69 = 30 - v71;
|
|
world_4B325C += v71 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v73 = 32 - v69;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v22 = v73 & 1;
|
|
v74 = v73 >> 1;
|
|
if ( v22 )
|
|
{
|
|
++v3;
|
|
++v2;
|
|
v22 = v74 & 1;
|
|
v77 = v74 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v77 )
|
|
{
|
|
do
|
|
{
|
|
v78 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v78;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v78);
|
|
v2 += 4;
|
|
--v77;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v77 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v74 & 1;
|
|
v75 = v74 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v75 )
|
|
{
|
|
do
|
|
{
|
|
v76 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v76);
|
|
v76 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v76);
|
|
v2 += 4;
|
|
--v75;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v75 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
else
|
|
{
|
|
v22 = v73 & 1;
|
|
v79 = v73 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3++;
|
|
*(_BYTE *)v2++ = v4[v1];
|
|
v22 = v79 & 1;
|
|
v82 = v79 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = v3[1];
|
|
v3 += 2;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v82 )
|
|
{
|
|
do
|
|
{
|
|
v83 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = BYTE1(v83);
|
|
v83 >>= 16;
|
|
*(_BYTE *)(v2 + 1) = v4[v1];
|
|
_LOBYTE(v1) = BYTE1(v83);
|
|
v2 += 4;
|
|
--v82;
|
|
*(_BYTE *)(v2 - 1) = v4[v1];
|
|
}
|
|
while ( v82 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v79 & 1;
|
|
v80 = v79 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v1) = *v3;
|
|
v3 += 2;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
v2 += 2;
|
|
}
|
|
if ( (_BYTE)v80 )
|
|
{
|
|
do
|
|
{
|
|
v81 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v1) = v81;
|
|
*(_BYTE *)v2 = v4[v1];
|
|
_LOBYTE(v1) = BYTE2(v81);
|
|
v2 += 4;
|
|
--v80;
|
|
*(_BYTE *)(v2 - 2) = v4[v1];
|
|
}
|
|
while ( v80 );
|
|
}
|
|
}
|
|
v1 = (unsigned char)v3 & 2;
|
|
v3 += v1;
|
|
}
|
|
v2 = v69 + v2 - 800;
|
|
v50 = __OFSUB__(v69, 2);
|
|
v69 -= 2;
|
|
}
|
|
while ( !((v69 < 0) ^ v50) );
|
|
goto LABEL_154;
|
|
}
|
|
world_4B325C = 0;
|
|
v32 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v33 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v33 > 45 )
|
|
{
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_98:
|
|
v51 = 2;
|
|
if ( v2 >= screen_buf_end )
|
|
{
|
|
v52 = (v2 - screen_buf_end + 1023) >> 8;
|
|
if ( v52 > 42 )
|
|
return;
|
|
v53 = world_4B33FD[v52];
|
|
v3 += *(int *)((char *)world_4B3501 + v53);
|
|
v54 = 192 * v53;
|
|
v53 >>= 1;
|
|
v2 -= v54;
|
|
v51 = v53 + 2;
|
|
world_4B325C += v53 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v55 = (_BYTE *)(v51 + v2);
|
|
v56 = 32 - v51;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v57 = v56 & 2;
|
|
v3 += v57;
|
|
v22 = v56 & 1;
|
|
v58 = v56 >> 1;
|
|
if ( v22 )
|
|
{
|
|
++v3;
|
|
++v55;
|
|
v22 = v58 & 1;
|
|
v61 = v58 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v57) = *v3;
|
|
v3 += 2;
|
|
*v55 = v4[v57];
|
|
v55 += 2;
|
|
}
|
|
if ( (_BYTE)v61 )
|
|
{
|
|
do
|
|
{
|
|
v62 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v57) = v62;
|
|
*v55 = v4[v57];
|
|
_LOBYTE(v57) = BYTE2(v62);
|
|
v55 += 4;
|
|
--v61;
|
|
*(v55 - 2) = v4[v57];
|
|
}
|
|
while ( v61 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v58 & 1;
|
|
v59 = v58 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v57) = v3[1];
|
|
v3 += 2;
|
|
v55[1] = v4[v57];
|
|
v55 += 2;
|
|
}
|
|
if ( (_BYTE)v59 )
|
|
{
|
|
do
|
|
{
|
|
v60 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v57) = BYTE1(v60);
|
|
v60 >>= 16;
|
|
v55[1] = v4[v57];
|
|
_LOBYTE(v57) = BYTE1(v60);
|
|
v55 += 4;
|
|
--v59;
|
|
*(v55 - 1) = v4[v57];
|
|
}
|
|
while ( v59 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v63 = v56 & 2;
|
|
v3 += v63;
|
|
v22 = v56 & 1;
|
|
v64 = v56 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v63) = *v3++;
|
|
*v55++ = v4[v63];
|
|
v22 = v64 & 1;
|
|
v67 = v64 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v63) = v3[1];
|
|
v3 += 2;
|
|
v55[1] = v4[v63];
|
|
v55 += 2;
|
|
}
|
|
if ( (_BYTE)v67 )
|
|
{
|
|
do
|
|
{
|
|
v68 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v63) = BYTE1(v68);
|
|
v68 >>= 16;
|
|
v55[1] = v4[v63];
|
|
_LOBYTE(v63) = BYTE1(v68);
|
|
v55 += 4;
|
|
--v67;
|
|
*(v55 - 1) = v4[v63];
|
|
}
|
|
while ( v67 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v64 & 1;
|
|
v65 = v64 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v63) = *v3;
|
|
v3 += 2;
|
|
*v55 = v4[v63];
|
|
v55 += 2;
|
|
}
|
|
if ( (_BYTE)v65 )
|
|
{
|
|
do
|
|
{
|
|
v66 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v63) = v66;
|
|
*v55 = v4[v63];
|
|
_LOBYTE(v63) = BYTE2(v66);
|
|
v55 += 4;
|
|
--v65;
|
|
*(v55 - 2) = v4[v63];
|
|
}
|
|
while ( v65 );
|
|
}
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v55 - 800);
|
|
v51 += 2;
|
|
}
|
|
while ( v51 != 32 );
|
|
return;
|
|
}
|
|
v34 = world_4B33FD[v33];
|
|
v3 += *(int *)((char *)world_4B34BD + v34);
|
|
v35 = 192 * v34;
|
|
v34 >>= 1;
|
|
v2 -= v35;
|
|
v32 = 30 - v34;
|
|
world_4B325C += v34 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v36 = (_BYTE *)(v32 + v2);
|
|
v37 = 32 - v32;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v38 = v37 & 2;
|
|
v3 += v38;
|
|
v22 = v37 & 1;
|
|
v39 = v37 >> 1;
|
|
if ( v22 )
|
|
{
|
|
++v3;
|
|
++v36;
|
|
v22 = v39 & 1;
|
|
v42 = v39 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v38) = *v3;
|
|
v3 += 2;
|
|
*v36 = v4[v38];
|
|
v36 += 2;
|
|
}
|
|
if ( (_BYTE)v42 )
|
|
{
|
|
do
|
|
{
|
|
v43 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v38) = v43;
|
|
*v36 = v4[v38];
|
|
_LOBYTE(v38) = BYTE2(v43);
|
|
v36 += 4;
|
|
--v42;
|
|
*(v36 - 2) = v4[v38];
|
|
}
|
|
while ( v42 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v39 & 1;
|
|
v40 = v39 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v38) = v3[1];
|
|
v3 += 2;
|
|
v36[1] = v4[v38];
|
|
v36 += 2;
|
|
}
|
|
if ( (_BYTE)v40 )
|
|
{
|
|
do
|
|
{
|
|
v41 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v38) = BYTE1(v41);
|
|
v41 >>= 16;
|
|
v36[1] = v4[v38];
|
|
_LOBYTE(v38) = BYTE1(v41);
|
|
v36 += 4;
|
|
--v40;
|
|
*(v36 - 1) = v4[v38];
|
|
}
|
|
while ( v40 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v44 = v37 & 2;
|
|
v3 += v44;
|
|
v22 = v37 & 1;
|
|
v45 = v37 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v44) = *v3++;
|
|
*v36++ = v4[v44];
|
|
v22 = v45 & 1;
|
|
v48 = v45 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v44) = v3[1];
|
|
v3 += 2;
|
|
v36[1] = v4[v44];
|
|
v36 += 2;
|
|
}
|
|
if ( (_BYTE)v48 )
|
|
{
|
|
do
|
|
{
|
|
v49 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v44) = BYTE1(v49);
|
|
v49 >>= 16;
|
|
v36[1] = v4[v44];
|
|
_LOBYTE(v44) = BYTE1(v49);
|
|
v36 += 4;
|
|
--v48;
|
|
*(v36 - 1) = v4[v44];
|
|
}
|
|
while ( v48 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v22 = v45 & 1;
|
|
v46 = v45 >> 1;
|
|
if ( v22 )
|
|
{
|
|
_LOBYTE(v44) = *v3;
|
|
v3 += 2;
|
|
*v36 = v4[v44];
|
|
v36 += 2;
|
|
}
|
|
if ( (_BYTE)v46 )
|
|
{
|
|
do
|
|
{
|
|
v47 = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
_LOBYTE(v44) = v47;
|
|
*v36 = v4[v44];
|
|
_LOBYTE(v44) = BYTE2(v47);
|
|
v36 += 4;
|
|
--v46;
|
|
*(v36 - 2) = v4[v44];
|
|
}
|
|
while ( v46 );
|
|
}
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v36 - 800);
|
|
v50 = __OFSUB__(v32, 2);
|
|
v32 -= 2;
|
|
}
|
|
while ( !((v32 < 0) ^ v50) );
|
|
goto LABEL_98;
|
|
}
|
|
v6 = (char *)pSpeedCels + *(_DWORD *)(4 * (light_table_index + 16 * (level_cel_block & 0xFFF)) + world_4B3265);
|
|
v7 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
LABEL_11:
|
|
switch ( v7 )
|
|
{
|
|
case 8:
|
|
v142 = 16;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v143 = 8;
|
|
do
|
|
{
|
|
v144 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v145 = (_BYTE *)(v2 + 1);
|
|
v144 = __ROR4__(v144, 8);
|
|
*v145 = v144;
|
|
v145 += 2;
|
|
*v145 = __ROR4__(v144, 16);
|
|
v2 = (unsigned int)(v145 + 1);
|
|
--v143;
|
|
}
|
|
while ( v143 );
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v2 += 32;
|
|
}
|
|
v146 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v146 < screen_buf_end )
|
|
{
|
|
v147 = 8;
|
|
do
|
|
{
|
|
v148 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v146 = v148;
|
|
v149 = v146 + 2;
|
|
*v149 = __ROR4__(v148, 16);
|
|
v146 = v149 + 2;
|
|
--v147;
|
|
}
|
|
while ( v147 );
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v146 += 32;
|
|
}
|
|
v2 = (unsigned int)(v146 - 800);
|
|
--v142;
|
|
}
|
|
while ( v142 );
|
|
return;
|
|
case 9:
|
|
world_4B325C = (unsigned char)a1 & 1;
|
|
v150 = 32;
|
|
while ( 1 )
|
|
{
|
|
v323 = v150;
|
|
v151 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v152 = (unsigned char)*v6++;
|
|
if ( (v152 & 0x80u) != 0 )
|
|
break;
|
|
v151 -= v152;
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
if ( (v2 & 1) == world_4B325C )
|
|
{
|
|
v153 = v152 >> 1;
|
|
if ( !(v152 & 1) )
|
|
goto LABEL_280;
|
|
++v6;
|
|
++v2;
|
|
if ( v153 )
|
|
{
|
|
LABEL_287:
|
|
v22 = v153 & 1;
|
|
v161 = v153 >> 1;
|
|
if ( !v22 || (v162 = *v6, v6 += 2, *(_BYTE *)v2 = v162, v2 += 2, v161) )
|
|
{
|
|
do
|
|
{
|
|
v163 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v163;
|
|
v164 = (_BYTE *)(v2 + 2);
|
|
*v164 = __ROR4__(v163, 16);
|
|
v2 = (unsigned int)(v164 + 2);
|
|
--v161;
|
|
}
|
|
while ( v161 );
|
|
}
|
|
goto LABEL_290;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v153 = v152 >> 1;
|
|
if ( !(v152 & 1) )
|
|
goto LABEL_287;
|
|
v160 = *v6++;
|
|
*(_BYTE *)v2++ = v160;
|
|
if ( v153 )
|
|
{
|
|
LABEL_280:
|
|
v22 = v153 & 1;
|
|
v154 = v153 >> 1;
|
|
if ( !v22
|
|
|| (v155 = v6 + 1,
|
|
v156 = (_BYTE *)(v2 + 1),
|
|
v157 = *v155,
|
|
v6 = v155 + 1,
|
|
*v156 = v157,
|
|
v2 = (unsigned int)(v156 + 1),
|
|
v154) )
|
|
{
|
|
do
|
|
{
|
|
v158 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v159 = (_BYTE *)(v2 + 1);
|
|
v158 = __ROR4__(v158, 8);
|
|
*v159 = v158;
|
|
v159 += 2;
|
|
*v159 = __ROR4__(v158, 16);
|
|
v2 = (unsigned int)(v159 + 1);
|
|
--v154;
|
|
}
|
|
while ( v154 );
|
|
}
|
|
goto LABEL_290;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v6 += v152;
|
|
v2 += v152;
|
|
}
|
|
LABEL_290:
|
|
if ( !v151 )
|
|
goto LABEL_293;
|
|
}
|
|
_LOBYTE(v152) = -(char)v152;
|
|
v2 += v152;
|
|
v151 -= v152;
|
|
}
|
|
while ( v151 );
|
|
LABEL_293:
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
v2 -= 800;
|
|
v150 = v323 - 1;
|
|
if ( v323 == 1 )
|
|
return;
|
|
}
|
|
case 10:
|
|
world_4B325C = 0;
|
|
v165 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v166 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v166 > 45 )
|
|
{
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_308:
|
|
v180 = 2;
|
|
if ( v2 >= screen_buf_end )
|
|
{
|
|
v181 = (v2 - screen_buf_end + 1023) >> 8;
|
|
if ( v181 > 42 )
|
|
return;
|
|
v182 = world_4B33FD[v181];
|
|
v6 += *(int *)((char *)world_4B3501 + v182);
|
|
v183 = 192 * v182;
|
|
v182 >>= 1;
|
|
v2 -= v183;
|
|
v180 = v182 + 2;
|
|
world_4B325C += v182 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v184 = (_BYTE *)(v180 + v2);
|
|
v185 = 32 - v180;
|
|
v186 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v187 = v185 >> 2;
|
|
if ( !(v185 & 2)
|
|
|| (_LOWORD(v186) = *((_WORD *)v6 + 1),
|
|
v6 += 4,
|
|
v188 = v184 + 1,
|
|
*v188 = __ROR4__(v186, 8),
|
|
v184 = v188 + 1,
|
|
v187) )
|
|
{
|
|
do
|
|
{
|
|
v189 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v190 = v184 + 1;
|
|
v189 = __ROR4__(v189, 8);
|
|
*v190 = v189;
|
|
v190 += 2;
|
|
*v190 = __ROR4__(v189, 16);
|
|
v184 = v190 + 1;
|
|
--v187;
|
|
}
|
|
while ( v187 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v191 = v185 >> 2;
|
|
if ( !(v185 & 2) || (v192 = *((_WORD *)v6 + 1), v6 += 4, *v184 = v192, v184 += 2, --v191, v191) )
|
|
{
|
|
do
|
|
{
|
|
v193 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v184 = v193;
|
|
v194 = v184 + 2;
|
|
*v194 = __ROR4__(v193, 16);
|
|
v184 = v194 + 2;
|
|
--v191;
|
|
}
|
|
while ( v191 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v184 - 800);
|
|
v180 += 2;
|
|
}
|
|
while ( v180 != 32 );
|
|
return;
|
|
}
|
|
v167 = world_4B33FD[v166];
|
|
v6 += *(int *)((char *)world_4B34BD + v167);
|
|
v168 = 192 * v167;
|
|
v167 >>= 1;
|
|
v2 -= v168;
|
|
v165 = 30 - v167;
|
|
world_4B325C += v167 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v169 = (_BYTE *)(v165 + v2);
|
|
v170 = 32 - v165;
|
|
v171 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v172 = v170 >> 2;
|
|
if ( !(v170 & 2)
|
|
|| (_LOWORD(v171) = *((_WORD *)v6 + 1),
|
|
v6 += 4,
|
|
v173 = v169 + 1,
|
|
*v173 = __ROR4__(v171, 8),
|
|
v169 = v173 + 1,
|
|
v172) )
|
|
{
|
|
do
|
|
{
|
|
v174 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v175 = v169 + 1;
|
|
v174 = __ROR4__(v174, 8);
|
|
*v175 = v174;
|
|
v175 += 2;
|
|
*v175 = __ROR4__(v174, 16);
|
|
v169 = v175 + 1;
|
|
--v172;
|
|
}
|
|
while ( v172 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v176 = v170 >> 2;
|
|
if ( !(v170 & 2) || (v177 = *((_WORD *)v6 + 1), v6 += 4, *v169 = v177, v169 += 2, v176) )
|
|
{
|
|
do
|
|
{
|
|
v178 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v169 = v178;
|
|
v179 = v169 + 2;
|
|
*v179 = __ROR4__(v178, 16);
|
|
v169 = v179 + 2;
|
|
--v176;
|
|
}
|
|
while ( v176 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v169 - 800);
|
|
v50 = __OFSUB__(v165, 2);
|
|
v165 -= 2;
|
|
}
|
|
while ( !((v165 < 0) ^ v50) );
|
|
goto LABEL_308;
|
|
}
|
|
if ( v7 != 11 )
|
|
{
|
|
if ( v7 != 12 )
|
|
{
|
|
world_4B325C = 0;
|
|
v246 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v247 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v247 > 45 )
|
|
{
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_389:
|
|
v260 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v261 = 8;
|
|
do
|
|
{
|
|
v262 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v263 = (_BYTE *)(v2 + 1);
|
|
v262 = __ROR4__(v262, 8);
|
|
*v263 = v262;
|
|
v263 += 2;
|
|
*v263 = __ROR4__(v262, 16);
|
|
v2 = (unsigned int)(v263 + 1);
|
|
--v261;
|
|
}
|
|
while ( v261 );
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v2 += 32;
|
|
}
|
|
v264 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v264 < screen_buf_end )
|
|
{
|
|
v265 = 8;
|
|
do
|
|
{
|
|
v266 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v264 = v266;
|
|
v267 = v264 + 2;
|
|
*v267 = __ROR4__(v266, 16);
|
|
v264 = v267 + 2;
|
|
--v265;
|
|
}
|
|
while ( v265 );
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v264 += 32;
|
|
}
|
|
v2 = (unsigned int)(v264 - 800);
|
|
--v260;
|
|
}
|
|
while ( v260 );
|
|
return;
|
|
}
|
|
v248 = world_4B33FD[v247];
|
|
v6 += *(int *)((char *)world_4B34BD + v248);
|
|
v249 = 192 * v248;
|
|
v248 >>= 1;
|
|
v2 -= v249;
|
|
v246 = 30 - v248;
|
|
world_4B325C += v248 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v250 = 32 - v246;
|
|
v251 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
for ( m = v250 >> 2; m; --m )
|
|
{
|
|
v253 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v254 = (_BYTE *)(v2 + 1);
|
|
v253 = __ROR4__(v253, 8);
|
|
*v254 = v253;
|
|
v254 += 2;
|
|
v251 = __ROR4__(v253, 16);
|
|
*v254 = v251;
|
|
v2 = (unsigned int)(v254 + 1);
|
|
}
|
|
if ( (32 - (_BYTE)v246) & 2 )
|
|
{
|
|
_LOWORD(v251) = *(_WORD *)v6;
|
|
v6 += 4;
|
|
v255 = (_BYTE *)(v2 + 1);
|
|
*v255 = __ROR4__(v251, 8);
|
|
v2 = (unsigned int)(v255 + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( n = v250 >> 2; n; --n )
|
|
{
|
|
v257 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v257;
|
|
v258 = (_BYTE *)(v2 + 2);
|
|
*v258 = __ROR4__(v257, 16);
|
|
v2 = (unsigned int)(v258 + 2);
|
|
}
|
|
if ( (32 - (_BYTE)v246) & 2 )
|
|
{
|
|
v259 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v259;
|
|
v2 += 2;
|
|
}
|
|
}
|
|
v2 = v246 + v2 - 800;
|
|
v50 = __OFSUB__(v246, 2);
|
|
v246 -= 2;
|
|
}
|
|
while ( !((v246 < 0) ^ v50) );
|
|
goto LABEL_389;
|
|
}
|
|
world_4B325C = 0;
|
|
v223 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v224 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v224 > 45 )
|
|
{
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_364:
|
|
v238 = 8;
|
|
do
|
|
{
|
|
if ( v2 < screen_buf_end )
|
|
{
|
|
v239 = 8;
|
|
do
|
|
{
|
|
v240 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v241 = (_BYTE *)(v2 + 1);
|
|
v240 = __ROR4__(v240, 8);
|
|
*v241 = v240;
|
|
v241 += 2;
|
|
*v241 = __ROR4__(v240, 16);
|
|
v2 = (unsigned int)(v241 + 1);
|
|
--v239;
|
|
}
|
|
while ( v239 );
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v2 += 32;
|
|
}
|
|
v242 = (_BYTE *)(v2 - 800);
|
|
if ( (unsigned int)v242 < screen_buf_end )
|
|
{
|
|
v243 = 8;
|
|
do
|
|
{
|
|
v244 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v242 = v244;
|
|
v245 = v242 + 2;
|
|
*v245 = __ROR4__(v244, 16);
|
|
v242 = v245 + 2;
|
|
--v243;
|
|
}
|
|
while ( v243 );
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v242 += 32;
|
|
}
|
|
v2 = (unsigned int)(v242 - 800);
|
|
--v238;
|
|
}
|
|
while ( v238 );
|
|
return;
|
|
}
|
|
v225 = world_4B33FD[v224];
|
|
v6 += *(int *)((char *)world_4B34BD + v225);
|
|
v226 = 192 * v225;
|
|
v225 >>= 1;
|
|
v2 -= v226;
|
|
v223 = 30 - v225;
|
|
world_4B325C += v225 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v227 = (_BYTE *)(v223 + v2);
|
|
v228 = 32 - v223;
|
|
v229 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
v230 = v228 >> 2;
|
|
if ( !(v228 & 2)
|
|
|| (_LOWORD(v229) = *((_WORD *)v6 + 1),
|
|
v6 += 4,
|
|
v231 = v227 + 1,
|
|
*v231 = __ROR4__(v229, 8),
|
|
v227 = v231 + 1,
|
|
v230) )
|
|
{
|
|
do
|
|
{
|
|
v232 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v233 = v227 + 1;
|
|
v232 = __ROR4__(v232, 8);
|
|
*v233 = v232;
|
|
v233 += 2;
|
|
*v233 = __ROR4__(v232, 16);
|
|
v227 = v233 + 1;
|
|
--v230;
|
|
}
|
|
while ( v230 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v234 = v228 >> 2;
|
|
if ( !(v228 & 2) || (v235 = *((_WORD *)v6 + 1), v6 += 4, *v227 = v235, v227 += 2, v234) )
|
|
{
|
|
do
|
|
{
|
|
v236 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*v227 = v236;
|
|
v237 = v227 + 2;
|
|
*v237 = __ROR4__(v236, 16);
|
|
--v234;
|
|
v227 = v237 + 2;
|
|
}
|
|
while ( v234 );
|
|
}
|
|
}
|
|
v2 = (unsigned int)(v227 - 800);
|
|
v50 = __OFSUB__(v223, 2);
|
|
v223 -= 2;
|
|
}
|
|
while ( !((v223 < 0) ^ v50) );
|
|
goto LABEL_364;
|
|
}
|
|
world_4B325C = 0;
|
|
v195 = 30;
|
|
if ( (unsigned int)a1 < screen_buf_end )
|
|
goto LABEL_326;
|
|
v196 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v196 <= 45 )
|
|
{
|
|
v197 = world_4B33FD[v196];
|
|
v6 += *(int *)((char *)world_4B34BD + v197);
|
|
v198 = 192 * v197;
|
|
v197 >>= 1;
|
|
v2 -= v198;
|
|
v195 = 30 - v197;
|
|
world_4B325C += v197 >> 1;
|
|
do
|
|
{
|
|
LABEL_326:
|
|
v199 = 32 - v195;
|
|
v200 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
for ( ii = v199 >> 2; ii; --ii )
|
|
{
|
|
v202 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v203 = (_BYTE *)(v2 + 1);
|
|
v202 = __ROR4__(v202, 8);
|
|
*v203 = v202;
|
|
v203 += 2;
|
|
v200 = __ROR4__(v202, 16);
|
|
*v203 = v200;
|
|
v2 = (unsigned int)(v203 + 1);
|
|
}
|
|
if ( (32 - (_BYTE)v195) & 2 )
|
|
{
|
|
_LOWORD(v200) = *(_WORD *)v6;
|
|
v6 += 4;
|
|
v204 = (_BYTE *)(v2 + 1);
|
|
*v204 = __ROR4__(v200, 8);
|
|
v2 = (unsigned int)(v204 + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( jj = v199 >> 2; jj; --jj )
|
|
{
|
|
v206 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v206;
|
|
v207 = (_BYTE *)(v2 + 2);
|
|
*v207 = __ROR4__(v206, 16);
|
|
v2 = (unsigned int)(v207 + 2);
|
|
}
|
|
if ( (32 - (_BYTE)v195) & 2 )
|
|
{
|
|
v208 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v208;
|
|
v2 += 2;
|
|
}
|
|
}
|
|
v2 = v195 + v2 - 800;
|
|
v50 = __OFSUB__(v195, 2);
|
|
v195 -= 2;
|
|
}
|
|
while ( !((v195 < 0) ^ v50) );
|
|
goto LABEL_336;
|
|
}
|
|
v2 = (unsigned int)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_336:
|
|
v209 = 2;
|
|
if ( v2 >= screen_buf_end )
|
|
{
|
|
v210 = (v2 - screen_buf_end + 1023) >> 8;
|
|
if ( v210 > 42 )
|
|
return;
|
|
v211 = world_4B33FD[v210];
|
|
v6 += *(int *)((char *)world_4B3501 + v211);
|
|
v212 = 192 * v211;
|
|
v211 >>= 1;
|
|
v2 -= v212;
|
|
v209 = v211 + 2;
|
|
world_4B325C += v211 >> 1;
|
|
}
|
|
do
|
|
{
|
|
v213 = 32 - v209;
|
|
v214 = ((_BYTE)world_4B325C + 1) & 1;
|
|
world_4B325C = ((_BYTE)world_4B325C + 1) & 1;
|
|
if ( world_4B325C )
|
|
{
|
|
for ( kk = v213 >> 2; kk; --kk )
|
|
{
|
|
v216 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
v217 = (_BYTE *)(v2 + 1);
|
|
v216 = __ROR4__(v216, 8);
|
|
*v217 = v216;
|
|
v217 += 2;
|
|
v214 = __ROR4__(v216, 16);
|
|
*v217 = v214;
|
|
v2 = (unsigned int)(v217 + 1);
|
|
}
|
|
if ( (32 - (_BYTE)v209) & 2 )
|
|
{
|
|
_LOWORD(v214) = *(_WORD *)v6;
|
|
v6 += 4;
|
|
v218 = (_BYTE *)(v2 + 1);
|
|
*v218 = __ROR4__(v214, 8);
|
|
v2 = (unsigned int)(v218 + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
for ( ll = v213 >> 2; ll; --ll )
|
|
{
|
|
v220 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v220;
|
|
v221 = (_BYTE *)(v2 + 2);
|
|
*v221 = __ROR4__(v220, 16);
|
|
v2 = (unsigned int)(v221 + 2);
|
|
}
|
|
if ( (32 - (_BYTE)v209) & 2 )
|
|
{
|
|
v222 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_BYTE *)v2 = v222;
|
|
v2 += 2;
|
|
}
|
|
}
|
|
v2 = v209 + v2 - 800;
|
|
v209 += 2;
|
|
}
|
|
while ( v209 != 32 );
|
|
}
|
|
// 642A14: using guessed type char lightmax;
|
|
// 69BEF8: using guessed type int light_table_index;
|
|
// 69CF0C: using guessed type int screen_buf_end;
|
|
// 69CF14: using guessed type int level_cel_block;
|
|
|
|
//----- (00467949) --------------------------------------------------------
|
|
void __fastcall drawBottomArchesLowerScreen(void *a1, int a2)
|
|
{
|
|
char *v2; // edi
|
|
char *v3; // esi
|
|
short v5; // ax
|
|
char *v6; // esi
|
|
short v7; // ax
|
|
unsigned int v8; // eax
|
|
char *v9; // esi
|
|
unsigned int v10; // eax
|
|
int v11; // eax
|
|
signed int v12; // ebp
|
|
int v13; // edx
|
|
signed int v14; // ecx
|
|
int v18; // ecx
|
|
signed int v19; // edx
|
|
int v20; // eax
|
|
int v21; // ecx
|
|
int v22; // edx
|
|
int v25; // edx
|
|
signed int v26; // eax
|
|
unsigned int v27; // ecx
|
|
char *v28; // edi
|
|
unsigned int v29; // ecx
|
|
unsigned char v32; // of
|
|
int v33; // edx
|
|
signed int v34; // eax
|
|
unsigned int v35; // ecx
|
|
char *v36; // edi
|
|
unsigned int v37; // ecx
|
|
int v40; // edx
|
|
signed int v41; // eax
|
|
unsigned int v42; // ecx
|
|
unsigned int ii; // ecx
|
|
int v46; // edx
|
|
signed int v47; // eax
|
|
unsigned int v48; // ecx
|
|
unsigned int n; // ecx
|
|
int v52; // edx
|
|
signed int v53; // eax
|
|
unsigned int v54; // ecx
|
|
char *v55; // edi
|
|
unsigned int v56; // ecx
|
|
signed int v59; // edx
|
|
int v60; // edx
|
|
signed int v61; // ecx
|
|
int v64; // edx
|
|
signed int v65; // eax
|
|
unsigned int v66; // ecx
|
|
unsigned int m; // ecx
|
|
signed int v70; // edx
|
|
int v71; // edx
|
|
signed int v72; // ecx
|
|
signed int v75; // edx
|
|
int v76; // edx
|
|
signed int v77; // ecx
|
|
char v78; // al
|
|
int v79; // ecx
|
|
signed int v80; // edx
|
|
int v81; // eax
|
|
int v82; // ecx
|
|
int v83; // edx
|
|
char v84; // al
|
|
int v85; // edx
|
|
signed int v86; // eax
|
|
unsigned int v87; // ecx
|
|
char *v88; // edi
|
|
unsigned int v89; // ecx
|
|
short v90; // ax
|
|
int v91; // eax
|
|
int v92; // edx
|
|
signed int v93; // eax
|
|
unsigned int v94; // ecx
|
|
char *v95; // edi
|
|
unsigned int v96; // ecx
|
|
short v97; // ax
|
|
int v98; // eax
|
|
int v99; // edx
|
|
signed int v100; // eax
|
|
unsigned int v101; // ecx
|
|
unsigned int kk; // ecx
|
|
int v103; // eax
|
|
short v104; // ax
|
|
int v105; // edx
|
|
signed int v106; // eax
|
|
unsigned int v107; // ecx
|
|
unsigned int ll; // ecx
|
|
int v109; // eax
|
|
short v110; // ax
|
|
int v111; // edx
|
|
signed int v112; // eax
|
|
unsigned int v113; // ecx
|
|
char *v114; // edi
|
|
unsigned int v115; // ecx
|
|
short v116; // ax
|
|
int v117; // eax
|
|
signed int v118; // edx
|
|
int v119; // edx
|
|
signed int v120; // ecx
|
|
char v121; // al
|
|
int v122; // edx
|
|
signed int v123; // eax
|
|
unsigned int v124; // ecx
|
|
unsigned int jj; // ecx
|
|
int v126; // eax
|
|
short v127; // ax
|
|
signed int v128; // edx
|
|
int v129; // edx
|
|
signed int v130; // ecx
|
|
char v131; // al
|
|
signed int v132; // edx
|
|
int v133; // edx
|
|
signed int v134; // ecx
|
|
int v135; // ecx
|
|
signed int v136; // edx
|
|
int v137; // eax
|
|
int v138; // ecx
|
|
int v139; // edx
|
|
signed int i; // edx
|
|
char *v141; // edi
|
|
unsigned int v142; // ecx
|
|
signed int v143; // edx
|
|
char *v144; // edi
|
|
unsigned int v145; // ecx
|
|
signed int j; // edx
|
|
unsigned int v147; // ecx
|
|
char *v148; // edi
|
|
signed int v149; // edx
|
|
unsigned int v150; // ecx
|
|
signed int k; // edx
|
|
char *v152; // edi
|
|
unsigned int v153; // ecx
|
|
signed int v154; // edx
|
|
int v155; // edx
|
|
signed int v156; // ecx
|
|
signed int l; // edx
|
|
unsigned int v158; // ecx
|
|
char *v159; // edi
|
|
signed int v160; // edx
|
|
int v161; // edx
|
|
signed int v162; // ecx
|
|
signed int v163; // [esp-8h] [ebp-14h]
|
|
signed int v164; // [esp-8h] [ebp-14h]
|
|
signed int v165; // [esp-8h] [ebp-14h]
|
|
signed int v166; // [esp-8h] [ebp-14h]
|
|
signed int v167; // [esp-8h] [ebp-14h]
|
|
int v168; // [esp-4h] [ebp-10h]
|
|
signed int v169; // [esp-4h] [ebp-10h]
|
|
signed int v170; // [esp-4h] [ebp-10h]
|
|
int v171; // [esp-4h] [ebp-10h]
|
|
signed int v172; // [esp-4h] [ebp-10h]
|
|
signed int v173; // [esp-4h] [ebp-10h]
|
|
int v174; // [esp-4h] [ebp-10h]
|
|
signed int v175; // [esp-4h] [ebp-10h]
|
|
signed int v176; // [esp-4h] [ebp-10h]
|
|
int _EAX;
|
|
char *_EBX;
|
|
|
|
world_4B3265 = (int)speed_cel_frame_num_from_light_index_frame_num;
|
|
v2 = (char *)a1;
|
|
world_4B3269[0] = a2;
|
|
if ( (_BYTE)light_table_index )
|
|
{
|
|
if ( (_BYTE)light_table_index == lightmax )
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v9 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v10 = level_cel_block;
|
|
_LOBYTE(v10) = BYTE1(v10);
|
|
v11 = (v10 >> 4) & 7;
|
|
if ( v11 )
|
|
{
|
|
switch ( (_WORD)v11 )
|
|
{
|
|
case 1:
|
|
v135 = 32;
|
|
do
|
|
{
|
|
v174 = v135;
|
|
*(_DWORD *)world_4B3260 = *(_DWORD *)world_4B3269[0];
|
|
v136 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v137 = (unsigned char)*v9++;
|
|
if ( (v137 & 0x80u) != 0 )
|
|
break;
|
|
v136 -= v137;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v138 = v137;
|
|
v9 += v137;
|
|
v167 = v136;
|
|
v139 = *(_DWORD *)world_4B3260;
|
|
do
|
|
{
|
|
v139 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
*v2 = 0;
|
|
++v2;
|
|
--v138;
|
|
}
|
|
while ( v138 );
|
|
*(_DWORD *)world_4B3260 = v139;
|
|
v136 = v167;
|
|
}
|
|
else
|
|
{
|
|
v9 += v137;
|
|
v2 += v137;
|
|
}
|
|
if ( !v136 )
|
|
goto LABEL_252;
|
|
}
|
|
_LOBYTE(v137) = -(char)v137;
|
|
v2 += v137;
|
|
if ( v137 & 0x1F )
|
|
*(_DWORD *)world_4B3260 <<= v137 & 0x1F;
|
|
v136 -= v137;
|
|
}
|
|
while ( v136 );
|
|
LABEL_252:
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v135 = v174 - 1;
|
|
}
|
|
while ( v174 != 1 );
|
|
break;
|
|
case 2:
|
|
for ( i = 30; ; i -= 2 )
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v141 = &v2[i];
|
|
v142 = (unsigned int)(32 - i) >> 2;
|
|
if ( !((32 - i) & 2) || (*(_WORD *)v141 = 0, v141 += 2, v142) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v141 = 0;
|
|
v141 += 4;
|
|
--v142;
|
|
}
|
|
while ( v142 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-i + 32];
|
|
v141 = v2 + 32;
|
|
}
|
|
v2 = v141 - 800;
|
|
if ( !i )
|
|
break;
|
|
}
|
|
v143 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v144 = &v2[v143];
|
|
v145 = (unsigned int)(32 - v143) >> 2;
|
|
if ( !((32 - v143) & 2) || (*(_WORD *)v144 = 0, v144 += 2, v145) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v144 = 0;
|
|
v144 += 4;
|
|
--v145;
|
|
}
|
|
while ( v145 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-v143 + 32];
|
|
v144 = v2 + 32;
|
|
}
|
|
v2 = v144 - 800;
|
|
v143 += 2;
|
|
}
|
|
while ( v143 != 32 );
|
|
break;
|
|
case 3:
|
|
for ( j = 30; ; j -= 2 )
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v147 = (unsigned int)(32 - j) >> 2;
|
|
if ( !((32 - j) & 2) || (*(_WORD *)v2 = 0, v2 += 2, v147) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v2 = 0;
|
|
v2 += 4;
|
|
--v147;
|
|
}
|
|
while ( v147 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-j + 32];
|
|
v2 = &v2[-j + 32];
|
|
}
|
|
v148 = v2 - 800;
|
|
if ( !j )
|
|
break;
|
|
v2 = &v148[j];
|
|
}
|
|
v149 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v148 < screen_buf_end )
|
|
{
|
|
v150 = (unsigned int)(32 - v149) >> 2;
|
|
if ( !((32 - v149) & 2) || (*(_WORD *)v148 = 0, v148 += 2, v150) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v148 = 0;
|
|
v148 += 4;
|
|
--v150;
|
|
}
|
|
while ( v150 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-v149 + 32];
|
|
v148 = &v148[-v149 + 32];
|
|
}
|
|
v148 = &v148[v149 - 800];
|
|
v149 += 2;
|
|
}
|
|
while ( v149 != 32 );
|
|
break;
|
|
case 4:
|
|
for ( k = 30; ; k -= 2 )
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v152 = &v2[k];
|
|
v153 = (unsigned int)(32 - k) >> 2;
|
|
if ( !((32 - k) & 2) || (*(_WORD *)v152 = 0, v152 += 2, v153) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v152 = 0;
|
|
v152 += 4;
|
|
--v153;
|
|
}
|
|
while ( v153 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-k + 32];
|
|
v152 = v2 + 32;
|
|
}
|
|
v2 = v152 - 800;
|
|
if ( !k )
|
|
break;
|
|
}
|
|
world_4B3269[0] -= 64;
|
|
v154 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v175 = v154;
|
|
v155 = *(_DWORD *)world_4B3269[0];
|
|
v156 = 32;
|
|
do
|
|
{
|
|
v155 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
*v2 = 0;
|
|
++v2;
|
|
--v156;
|
|
}
|
|
while ( v156 );
|
|
v154 = v175;
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v154;
|
|
}
|
|
while ( v154 );
|
|
break;
|
|
default:
|
|
for ( l = 30; ; l -= 2 )
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v158 = (unsigned int)(32 - l) >> 2;
|
|
if ( !((32 - l) & 2) || (*(_WORD *)v2 = 0, v2 += 2, v158) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v2 = 0;
|
|
v2 += 4;
|
|
--v158;
|
|
}
|
|
while ( v158 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v9 = &v9[-l + 32];
|
|
v2 = &v2[-l + 32];
|
|
}
|
|
v159 = v2 - 800;
|
|
if ( !l )
|
|
break;
|
|
v2 = &v159[l];
|
|
}
|
|
world_4B3269[0] -= 64;
|
|
v160 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v159 < screen_buf_end )
|
|
{
|
|
v176 = v160;
|
|
v161 = *(_DWORD *)world_4B3269[0];
|
|
v162 = 32;
|
|
do
|
|
{
|
|
v161 *= 2;
|
|
if ( (unsigned int)v159 < screen_buf_end )
|
|
*v159 = 0;
|
|
++v159;
|
|
--v162;
|
|
}
|
|
while ( v162 );
|
|
v160 = v176;
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v159 += 32;
|
|
}
|
|
v159 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v160;
|
|
}
|
|
while ( v160 );
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v132 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v173 = v132;
|
|
v133 = *(_DWORD *)world_4B3269[0];
|
|
v134 = 32;
|
|
do
|
|
{
|
|
v133 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
*v2 = 0;
|
|
++v2;
|
|
--v134;
|
|
}
|
|
while ( v134 );
|
|
v132 = v173;
|
|
}
|
|
else
|
|
{
|
|
v9 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v132;
|
|
}
|
|
while ( v132 );
|
|
}
|
|
return;
|
|
}
|
|
if ( !(level_cel_block & 0x8000) )
|
|
{
|
|
v3 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
_EBX = &pLightTbl[256 * light_table_index];
|
|
v5 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
if ( !(BYTE1(level_cel_block) >> 4) )
|
|
{
|
|
v12 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v13 = *(_DWORD *)world_4B3269[0];
|
|
v14 = 32;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v13 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v14;
|
|
}
|
|
while ( v14 );
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v12;
|
|
}
|
|
while ( v12 );
|
|
return;
|
|
}
|
|
if ( v5 == 1 )
|
|
{
|
|
v18 = 32;
|
|
do
|
|
{
|
|
v168 = v18;
|
|
*(_DWORD *)world_4B3260 = *(_DWORD *)world_4B3269[0];
|
|
v19 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v20 = (unsigned char)*v3++;
|
|
if ( (v20 & 0x80u) != 0 )
|
|
break;
|
|
v19 -= v20;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v21 = v20;
|
|
v163 = v19;
|
|
v22 = *(_DWORD *)world_4B3260;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v22 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v21;
|
|
}
|
|
while ( v21 );
|
|
*(_DWORD *)world_4B3260 = v22;
|
|
v19 = v163;
|
|
}
|
|
else
|
|
{
|
|
v3 += v20;
|
|
v2 += v20;
|
|
}
|
|
if ( !v19 )
|
|
goto LABEL_52;
|
|
}
|
|
_LOBYTE(v20) = -(char)v20;
|
|
v2 += v20;
|
|
if ( v20 & 0x1F )
|
|
*(_DWORD *)world_4B3260 <<= v20 & 0x1F;
|
|
v19 -= v20;
|
|
}
|
|
while ( v19 );
|
|
LABEL_52:
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v18 = v168 - 1;
|
|
}
|
|
while ( v168 != 1 );
|
|
return;
|
|
}
|
|
if ( v5 != 2 )
|
|
{
|
|
if ( v5 != 3 )
|
|
{
|
|
if ( v5 != 4 )
|
|
{
|
|
v64 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v65 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v65 > 45 )
|
|
{
|
|
v2 = (char *)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_117:
|
|
world_4B3269[0] -= 64;
|
|
v70 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v164 = v70;
|
|
v71 = *(_DWORD *)world_4B3269[0];
|
|
v72 = 32;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v71 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v72;
|
|
}
|
|
while ( v72 );
|
|
v3 += (unsigned char)v3 & 2;
|
|
v70 = v164;
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v70;
|
|
}
|
|
while ( v70 );
|
|
return;
|
|
}
|
|
v66 = world_4B33FD[v65];
|
|
v3 += *(int *)((char *)world_4B34BD + v66);
|
|
v2 -= 192 * v66;
|
|
v64 = 30 - (v66 >> 1);
|
|
}
|
|
do
|
|
{
|
|
for ( m = (unsigned int)(32 - v64) >> 2; m; --m )
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v2 = __ROR4__(_EAX, 8);
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v64) & 2 )
|
|
{
|
|
_EAX = *(_WORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v2 = __ROR2__(_EAX, 8);
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v64 - 800];
|
|
v32 = __OFSUB__(v64, 2);
|
|
v64 -= 2;
|
|
}
|
|
while ( !((v64 < 0) ^ v32) );
|
|
goto LABEL_117;
|
|
}
|
|
v52 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v53 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v53 > 45 )
|
|
{
|
|
v2 = (char *)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_98:
|
|
world_4B3269[0] -= 64;
|
|
v59 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v169 = v59;
|
|
v60 = *(_DWORD *)world_4B3269[0];
|
|
v61 = 32;
|
|
do
|
|
{
|
|
_EAX = *v3++;
|
|
v60 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*v2 = _EAX;
|
|
}
|
|
++v2;
|
|
--v61;
|
|
}
|
|
while ( v61 );
|
|
v59 = v169;
|
|
}
|
|
else
|
|
{
|
|
v3 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v59;
|
|
}
|
|
while ( v59 );
|
|
return;
|
|
}
|
|
v54 = world_4B33FD[v53];
|
|
v3 += *(int *)((char *)world_4B34BD + v54);
|
|
v2 -= 192 * v54;
|
|
v52 = 30 - (v54 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v55 = &v2[v52];
|
|
v56 = (unsigned int)(32 - v52) >> 2;
|
|
if ( !((32 - v52) & 2) )
|
|
goto LABEL_322;
|
|
_EAX = *((_WORD *)v3 + 1);
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v55 = __ROR2__(_EAX, 8);
|
|
v55 += 2;
|
|
if ( v56 )
|
|
{
|
|
LABEL_322:
|
|
do
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v55 = __ROR4__(_EAX, 8);
|
|
v55 += 4;
|
|
--v56;
|
|
}
|
|
while ( v56 );
|
|
}
|
|
v2 = v55 - 800;
|
|
v32 = __OFSUB__(v52, 2);
|
|
v52 -= 2;
|
|
}
|
|
while ( !((v52 < 0) ^ v32) );
|
|
goto LABEL_98;
|
|
}
|
|
v40 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v41 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v41 > 45 )
|
|
{
|
|
v2 = (char *)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_80:
|
|
v46 = 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v47 = (unsigned int)&v2[-screen_buf_end + 1023] >> 8;
|
|
if ( v47 > 42 )
|
|
return;
|
|
v48 = world_4B33FD[v47];
|
|
v3 += *(int *)((char *)world_4B3501 + v48);
|
|
v2 -= 192 * v48;
|
|
v46 = (v48 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
for ( n = (unsigned int)(32 - v46) >> 2; n; --n )
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v2 = __ROR4__(_EAX, 8);
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v46) & 2 )
|
|
{
|
|
_EAX = *(_WORD *)v3;
|
|
v3 += 2;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v2 = __ROR2__(_EAX, 8);
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v46 - 800];
|
|
v46 += 2;
|
|
}
|
|
while ( v46 != 32 );
|
|
return;
|
|
}
|
|
v42 = world_4B33FD[v41];
|
|
v3 += *(int *)((char *)world_4B34BD + v42);
|
|
v2 -= 192 * v42;
|
|
v40 = 30 - (v42 >> 1);
|
|
}
|
|
do
|
|
{
|
|
for ( ii = (unsigned int)(32 - v40) >> 2; ii; --ii )
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v2 = __ROR4__(_EAX, 8);
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v40) & 2 )
|
|
{
|
|
_EAX = *(_WORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v2 = __ROR2__(_EAX, 8);
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v40 - 800];
|
|
v32 = __OFSUB__(v40, 2);
|
|
v40 -= 2;
|
|
}
|
|
while ( !((v40 < 0) ^ v32) );
|
|
goto LABEL_80;
|
|
}
|
|
v25 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v26 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v26 > 45 )
|
|
{
|
|
v2 = (char *)a1 - 12288;
|
|
v3 += 288;
|
|
LABEL_62:
|
|
v33 = 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v34 = (unsigned int)&v2[-screen_buf_end + 1023] >> 8;
|
|
if ( v34 > 42 )
|
|
return;
|
|
v35 = world_4B33FD[v34];
|
|
v3 += *(int *)((char *)world_4B3501 + v35);
|
|
v2 -= 192 * v35;
|
|
v33 = (v35 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
v36 = &v2[v33];
|
|
v37 = (unsigned int)(32 - v33) >> 2;
|
|
if ( !((32 - v33) & 2) )
|
|
goto LABEL_323;
|
|
_EAX = *((_WORD *)v3 + 1);
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v36 = __ROR2__(_EAX, 8);
|
|
v36 += 2;
|
|
if ( v37 )
|
|
{
|
|
LABEL_323:
|
|
do
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v36 = __ROR4__(_EAX, 8);
|
|
v36 += 4;
|
|
--v37;
|
|
}
|
|
while ( v37 );
|
|
}
|
|
v2 = v36 - 800;
|
|
v33 += 2;
|
|
}
|
|
while ( v33 != 32 );
|
|
return;
|
|
}
|
|
v27 = world_4B33FD[v26];
|
|
v3 += *(int *)((char *)world_4B34BD + v27);
|
|
v2 -= 192 * v27;
|
|
v25 = 30 - (v27 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v28 = &v2[v25];
|
|
v29 = (unsigned int)(32 - v25) >> 2;
|
|
if ( !((32 - v25) & 2) )
|
|
goto LABEL_324;
|
|
_EAX = *((_WORD *)v3 + 1);
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR2__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_WORD *)v28 = __ROR2__(_EAX, 8);
|
|
v28 += 2;
|
|
if ( v29 )
|
|
{
|
|
LABEL_324:
|
|
do
|
|
{
|
|
_EAX = *(_DWORD *)v3;
|
|
v3 += 4;
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
_EAX = __ROR4__(_EAX, 8);
|
|
ASM_XLAT(_EAX,_EBX);
|
|
*(_DWORD *)v28 = __ROR4__(_EAX, 8);
|
|
v28 += 4;
|
|
--v29;
|
|
}
|
|
while ( v29 );
|
|
}
|
|
v2 = v28 - 800;
|
|
v32 = __OFSUB__(v25, 2);
|
|
v25 -= 2;
|
|
}
|
|
while ( !((v25 < 0) ^ v32) );
|
|
goto LABEL_62;
|
|
}
|
|
v6 = (char *)pSpeedCels + *(_DWORD *)(4 * (light_table_index + 16 * (level_cel_block & 0xFFF)) + world_4B3265);
|
|
v7 = (unsigned char)(BYTE1(level_cel_block) >> 4);
|
|
}
|
|
else
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v6 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v8 = level_cel_block;
|
|
_LOBYTE(v8) = BYTE1(v8);
|
|
v7 = ((v8 >> 4) & 7) + 8;
|
|
}
|
|
switch ( v7 )
|
|
{
|
|
case 8:
|
|
v75 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v170 = v75;
|
|
v76 = *(_DWORD *)world_4B3269[0];
|
|
v77 = 32;
|
|
do
|
|
{
|
|
v78 = *v6++;
|
|
v76 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
*v2 = v78;
|
|
++v2;
|
|
--v77;
|
|
}
|
|
while ( v77 );
|
|
v75 = v170;
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v75;
|
|
}
|
|
while ( v75 );
|
|
return;
|
|
case 9:
|
|
v79 = 32;
|
|
do
|
|
{
|
|
v171 = v79;
|
|
*(_DWORD *)world_4B3260 = *(_DWORD *)world_4B3269[0];
|
|
v80 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v81 = (unsigned char)*v6++;
|
|
if ( (v81 & 0x80u) != 0 )
|
|
break;
|
|
v80 -= v81;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v82 = v81;
|
|
v165 = v80;
|
|
v83 = *(_DWORD *)world_4B3260;
|
|
do
|
|
{
|
|
v84 = *v6++;
|
|
v83 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
*v2 = v84;
|
|
++v2;
|
|
--v82;
|
|
}
|
|
while ( v82 );
|
|
*(_DWORD *)world_4B3260 = v83;
|
|
v80 = v165;
|
|
}
|
|
else
|
|
{
|
|
v6 += v81;
|
|
v2 += v81;
|
|
}
|
|
if ( !v80 )
|
|
goto LABEL_152;
|
|
}
|
|
_LOBYTE(v81) = -(char)v81;
|
|
v2 += v81;
|
|
if ( v81 & 0x1F )
|
|
*(_DWORD *)world_4B3260 <<= v81 & 0x1F;
|
|
v80 -= v81;
|
|
}
|
|
while ( v80 );
|
|
LABEL_152:
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
v79 = v171 - 1;
|
|
}
|
|
while ( v171 != 1 );
|
|
return;
|
|
case 10:
|
|
v85 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v86 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v86 > 45 )
|
|
{
|
|
v2 = (char *)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_162:
|
|
v92 = 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v93 = (unsigned int)&v2[-screen_buf_end + 1023] >> 8;
|
|
if ( v93 > 42 )
|
|
return;
|
|
v94 = world_4B33FD[v93];
|
|
v6 += *(int *)((char *)world_4B3501 + v94);
|
|
v2 -= 192 * v94;
|
|
v92 = (v94 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
v95 = &v2[v92];
|
|
v96 = (unsigned int)(32 - v92) >> 2;
|
|
if ( !((32 - v92) & 2)
|
|
|| (v97 = *((_WORD *)v6 + 1), v6 += 4, *(_WORD *)v95 = v97, v95 += 2, v96) )
|
|
{
|
|
do
|
|
{
|
|
v98 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v95 = v98;
|
|
v95 += 4;
|
|
--v96;
|
|
}
|
|
while ( v96 );
|
|
}
|
|
v2 = v95 - 800;
|
|
v92 += 2;
|
|
}
|
|
while ( v92 != 32 );
|
|
return;
|
|
}
|
|
v87 = world_4B33FD[v86];
|
|
v6 += *(int *)((char *)world_4B34BD + v87);
|
|
v2 -= 192 * v87;
|
|
v85 = 30 - (v87 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v88 = &v2[v85];
|
|
v89 = (unsigned int)(32 - v85) >> 2;
|
|
if ( !((32 - v85) & 2) || (v90 = *((_WORD *)v6 + 1), v6 += 4, *(_WORD *)v88 = v90, v88 += 2, v89) )
|
|
{
|
|
do
|
|
{
|
|
v91 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v88 = v91;
|
|
v88 += 4;
|
|
--v89;
|
|
}
|
|
while ( v89 );
|
|
}
|
|
v2 = v88 - 800;
|
|
v32 = __OFSUB__(v85, 2);
|
|
v85 -= 2;
|
|
}
|
|
while ( !((v85 < 0) ^ v32) );
|
|
goto LABEL_162;
|
|
}
|
|
if ( v7 != 11 )
|
|
{
|
|
if ( v7 != 12 )
|
|
{
|
|
v122 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v123 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v123 > 45 )
|
|
{
|
|
v2 = (char *)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_217:
|
|
world_4B3269[0] -= 64;
|
|
v128 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v166 = v128;
|
|
v129 = *(_DWORD *)world_4B3269[0];
|
|
v130 = 32;
|
|
do
|
|
{
|
|
v131 = *v6++;
|
|
v129 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
*v2 = v131;
|
|
++v2;
|
|
--v130;
|
|
}
|
|
while ( v130 );
|
|
v6 += (unsigned char)v6 & 2;
|
|
v128 = v166;
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v128;
|
|
}
|
|
while ( v128 );
|
|
return;
|
|
}
|
|
v124 = world_4B33FD[v123];
|
|
v6 += *(int *)((char *)world_4B34BD + v124);
|
|
v2 -= 192 * v124;
|
|
v122 = 30 - (v124 >> 1);
|
|
}
|
|
do
|
|
{
|
|
for ( jj = (unsigned int)(32 - v122) >> 2; jj; --jj )
|
|
{
|
|
v126 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v2 = v126;
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v122) & 2 )
|
|
{
|
|
v127 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_WORD *)v2 = v127;
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v122 - 800];
|
|
v32 = __OFSUB__(v122, 2);
|
|
v122 -= 2;
|
|
}
|
|
while ( !((v122 < 0) ^ v32) );
|
|
goto LABEL_217;
|
|
}
|
|
v111 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v112 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v112 > 45 )
|
|
{
|
|
v2 = (char *)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_198:
|
|
world_4B3269[0] -= 64;
|
|
v118 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
{
|
|
v172 = v118;
|
|
v119 = *(_DWORD *)world_4B3269[0];
|
|
v120 = 32;
|
|
do
|
|
{
|
|
v121 = *v6++;
|
|
v119 *= 2;
|
|
if ( (unsigned int)v2 < screen_buf_end )
|
|
*v2 = v121;
|
|
++v2;
|
|
--v120;
|
|
}
|
|
while ( v120 );
|
|
v118 = v172;
|
|
}
|
|
else
|
|
{
|
|
v6 += 32;
|
|
v2 += 32;
|
|
}
|
|
v2 -= 800;
|
|
world_4B3269[0] -= 4;
|
|
--v118;
|
|
}
|
|
while ( v118 );
|
|
return;
|
|
}
|
|
v113 = world_4B33FD[v112];
|
|
v6 += *(int *)((char *)world_4B34BD + v113);
|
|
v2 -= 192 * v113;
|
|
v111 = 30 - (v113 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v114 = &v2[v111];
|
|
v115 = (unsigned int)(32 - v111) >> 2;
|
|
if ( !((32 - v111) & 2)
|
|
|| (v116 = *((_WORD *)v6 + 1), v6 += 4, *(_WORD *)v114 = v116, v114 += 2, v115) )
|
|
{
|
|
do
|
|
{
|
|
v117 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v114 = v117;
|
|
v114 += 4;
|
|
--v115;
|
|
}
|
|
while ( v115 );
|
|
}
|
|
v2 = v114 - 800;
|
|
v32 = __OFSUB__(v111, 2);
|
|
v111 -= 2;
|
|
}
|
|
while ( !((v111 < 0) ^ v32) );
|
|
goto LABEL_198;
|
|
}
|
|
v99 = 30;
|
|
if ( (unsigned int)a1 < screen_buf_end )
|
|
goto LABEL_175;
|
|
v100 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v100 <= 45 )
|
|
{
|
|
v101 = world_4B33FD[v100];
|
|
v6 += *(int *)((char *)world_4B34BD + v101);
|
|
v2 -= 192 * v101;
|
|
v99 = 30 - (v101 >> 1);
|
|
do
|
|
{
|
|
LABEL_175:
|
|
for ( kk = (unsigned int)(32 - v99) >> 2; kk; --kk )
|
|
{
|
|
v103 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v2 = v103;
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v99) & 2 )
|
|
{
|
|
v104 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_WORD *)v2 = v104;
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v99 - 800];
|
|
v32 = __OFSUB__(v99, 2);
|
|
v99 -= 2;
|
|
}
|
|
while ( !((v99 < 0) ^ v32) );
|
|
goto LABEL_180;
|
|
}
|
|
v2 = (char *)a1 - 12288;
|
|
v6 += 288;
|
|
LABEL_180:
|
|
v105 = 2;
|
|
if ( (unsigned int)v2 >= screen_buf_end )
|
|
{
|
|
v106 = (unsigned int)&v2[-screen_buf_end + 1023] >> 8;
|
|
if ( v106 > 42 )
|
|
return;
|
|
v107 = world_4B33FD[v106];
|
|
v6 += *(int *)((char *)world_4B3501 + v107);
|
|
v2 -= 192 * v107;
|
|
v105 = (v107 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
for ( ll = (unsigned int)(32 - v105) >> 2; ll; --ll )
|
|
{
|
|
v109 = *(_DWORD *)v6;
|
|
v6 += 4;
|
|
*(_DWORD *)v2 = v109;
|
|
v2 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v105) & 2 )
|
|
{
|
|
v110 = *(_WORD *)v6;
|
|
v6 += 4;
|
|
*(_WORD *)v2 = v110;
|
|
v2 += 2;
|
|
}
|
|
v2 = &v2[v105 - 800];
|
|
v105 += 2;
|
|
}
|
|
while ( v105 != 32 );
|
|
}
|
|
// 642A14: using guessed type char lightmax;
|
|
// 69BEF8: using guessed type int light_table_index;
|
|
// 69CF0C: using guessed type int screen_buf_end;
|
|
// 69CF14: using guessed type int level_cel_block;
|
|
|
|
//----- (0046886B) --------------------------------------------------------
|
|
void __fastcall drawLowerScreen(void *a1)
|
|
{
|
|
char v1; // edx
|
|
char v2; // al
|
|
char v3; // al
|
|
char *v4; // edi
|
|
_BYTE *v5; // esi
|
|
char *v6; // ebx
|
|
short v7; // ax
|
|
unsigned char *v8; // esi
|
|
short v9; // ax
|
|
char *v10; // esi
|
|
unsigned int v11; // eax
|
|
int v12; // eax
|
|
int v13; // edx
|
|
char v14; // edx
|
|
signed int v15; // ebp
|
|
int v16; // eax
|
|
int v17; // ecx
|
|
signed int v18; // ebp
|
|
int v19; // eax
|
|
char m; // cl
|
|
int v21; // eax
|
|
char v22; // ch
|
|
char v23; // ch
|
|
char v24; // ch
|
|
int v25; // ebp
|
|
signed int v26; // eax
|
|
unsigned int v27; // ecx
|
|
char *v28; // edi
|
|
int v29; // ecx
|
|
char v30; // edx
|
|
unsigned char v31; // of
|
|
int v32; // ebp
|
|
signed int v33; // eax
|
|
unsigned int v34; // ecx
|
|
char *v35; // edi
|
|
int v36; // ecx
|
|
char v37; // edx
|
|
int v38; // ebp
|
|
signed int v39; // eax
|
|
unsigned int v40; // ecx
|
|
int v41; // ecx
|
|
int v42; // ebp
|
|
signed int v43; // eax
|
|
unsigned int v44; // ecx
|
|
int v45; // ecx
|
|
int v46; // ebp
|
|
signed int v47; // eax
|
|
unsigned int v48; // ecx
|
|
char *v49; // edi
|
|
char v50; // cl
|
|
int v51; // eax
|
|
char v52; // ch
|
|
char v53; // ch
|
|
char v54; // ch
|
|
signed int v55; // ebp
|
|
char v56; // cl
|
|
int v57; // eax
|
|
char v58; // ch
|
|
char v59; // ch
|
|
char v60; // ch
|
|
int v61; // ebp
|
|
signed int v62; // eax
|
|
unsigned int v63; // ecx
|
|
char n; // cl
|
|
int v65; // eax
|
|
char v66; // ch
|
|
char v67; // ch
|
|
char v68; // ch
|
|
signed int v69; // ebp
|
|
char v70; // cl
|
|
int v71; // eax
|
|
char v72; // ch
|
|
char v73; // ch
|
|
char v74; // ch
|
|
signed int v75; // edx
|
|
signed int v76; // ecx
|
|
int v77; // eax
|
|
int v78; // ecx
|
|
signed int v79; // edx
|
|
unsigned int v80; // eax
|
|
unsigned int v81; // ecx
|
|
unsigned char v82; // al
|
|
char v83; // cf
|
|
unsigned int v84; // ecx
|
|
short v85; // ax
|
|
int v86; // eax
|
|
int v87; // edx
|
|
signed int v88; // eax
|
|
unsigned int v89; // ecx
|
|
char *v90; // edi
|
|
unsigned int v91; // ecx
|
|
short v92; // ax
|
|
int v93; // eax
|
|
int v94; // edx
|
|
signed int v95; // eax
|
|
unsigned int v96; // ecx
|
|
char *v97; // edi
|
|
unsigned int v98; // ecx
|
|
short v99; // ax
|
|
int v100; // eax
|
|
int v101; // edx
|
|
signed int v102; // eax
|
|
unsigned int v103; // ecx
|
|
unsigned int jj; // ecx
|
|
int v105; // eax
|
|
short v106; // ax
|
|
int v107; // edx
|
|
signed int v108; // eax
|
|
unsigned int v109; // ecx
|
|
unsigned int kk; // ecx
|
|
int v111; // eax
|
|
short v112; // ax
|
|
int v113; // edi
|
|
int v114; // edx
|
|
signed int v115; // eax
|
|
unsigned int v116; // ecx
|
|
char *v117; // edi
|
|
unsigned int v118; // ecx
|
|
short v119; // ax
|
|
int v120; // eax
|
|
signed int v121; // edx
|
|
signed int v122; // ecx
|
|
int v123; // eax
|
|
int v124; // edx
|
|
signed int v125; // eax
|
|
unsigned int v126; // ecx
|
|
unsigned int ii; // ecx
|
|
int v128; // eax
|
|
short v129; // ax
|
|
signed int v130; // edx
|
|
signed int v131; // ecx
|
|
int v132; // eax
|
|
signed int v133; // edx
|
|
signed int v134; // ecx
|
|
int v135; // ecx
|
|
signed int v136; // edx
|
|
unsigned int v137; // eax
|
|
unsigned int v138; // ecx
|
|
unsigned int v139; // ecx
|
|
signed int i; // edx
|
|
char *v141; // edi
|
|
unsigned int v142; // ecx
|
|
signed int v143; // edx
|
|
char *v144; // edi
|
|
unsigned int v145; // ecx
|
|
signed int j; // edx
|
|
unsigned int v147; // ecx
|
|
char *v148; // edi
|
|
signed int v149; // edx
|
|
unsigned int v150; // ecx
|
|
signed int k; // edx
|
|
char *v152; // edi
|
|
unsigned int v153; // ecx
|
|
signed int v154; // edx
|
|
signed int v155; // ecx
|
|
signed int l; // edx
|
|
unsigned int v157; // ecx
|
|
char *v158; // edi
|
|
signed int v159; // edx
|
|
signed int v160; // ecx
|
|
int v161; // [esp-14h] [ebp-18h]
|
|
int v162; // [esp-14h] [ebp-18h]
|
|
int v163; // [esp-10h] [ebp-14h]
|
|
int v164; // [esp-10h] [ebp-14h]
|
|
|
|
v1 = cel_transparency_active;
|
|
if ( cel_transparency_active )
|
|
{
|
|
if ( !arch_draw_type )
|
|
{
|
|
drawTopArchesLowerScreen(a1);
|
|
return;
|
|
}
|
|
if ( arch_draw_type == 1 )
|
|
{
|
|
v2 = block_lvid[level_piece_id];
|
|
if ( v2 == 1 || v2 == 3 )
|
|
{
|
|
drawBottomArchesLowerScreen(a1, (int)&tile_draw_masks[1][31]);
|
|
return;
|
|
}
|
|
}
|
|
if ( arch_draw_type == 2 )
|
|
{
|
|
v3 = block_lvid[level_piece_id];
|
|
if ( v3 == 2 || v3 == 3 )
|
|
{
|
|
drawBottomArchesLowerScreen(a1, (int)&tile_draw_masks[0][31]);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
world_4B3265 = (int)speed_cel_frame_num_from_light_index_frame_num;
|
|
v4 = (char *)a1;
|
|
if ( (_BYTE)light_table_index )
|
|
{
|
|
if ( (_BYTE)light_table_index == lightmax )
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v10 = (char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v11 = level_cel_block;
|
|
_LOBYTE(v11) = BYTE1(v11);
|
|
v12 = (v11 >> 4) & 7;
|
|
if ( v12 )
|
|
{
|
|
switch ( (_WORD)v12 )
|
|
{
|
|
case 1:
|
|
v135 = 32;
|
|
do
|
|
{
|
|
v164 = v135;
|
|
v136 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v137 = (unsigned char)*v10++;
|
|
if ( (v137 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v137) = -(char)v137;
|
|
v4 += v137;
|
|
v136 -= v137;
|
|
if ( !v136 )
|
|
goto LABEL_232;
|
|
}
|
|
v136 -= v137;
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v10 += v137;
|
|
v138 = v137 >> 1;
|
|
if ( !(v137 & 1) || (*v4 = 0, ++v4, v138) )
|
|
{
|
|
v83 = v138 & 1;
|
|
v139 = v137 >> 2;
|
|
if ( !v83 || (*(_WORD *)v4 = 0, v4 += 2, v139) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v139;
|
|
}
|
|
while ( v139 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v10 += v137;
|
|
v4 += v137;
|
|
}
|
|
}
|
|
while ( v136 );
|
|
LABEL_232:
|
|
v4 -= 800;
|
|
v135 = v164 - 1;
|
|
}
|
|
while ( v164 != 1 );
|
|
break;
|
|
case 2:
|
|
for ( i = 30; ; i -= 2 )
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v141 = &v4[i];
|
|
v142 = (unsigned int)(32 - i) >> 2;
|
|
if ( !((32 - i) & 2) || (*(_WORD *)v141 = 0, v141 += 2, v142) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v141 = 0;
|
|
v141 += 4;
|
|
--v142;
|
|
}
|
|
while ( v142 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v10 = &v10[-i + 32];
|
|
v141 = v4 + 32;
|
|
}
|
|
v4 = v141 - 800;
|
|
if ( !i )
|
|
break;
|
|
}
|
|
v143 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v144 = &v4[v143];
|
|
v145 = (unsigned int)(32 - v143) >> 2;
|
|
if ( !((32 - v143) & 2) || (*(_WORD *)v144 = 0, v144 += 2, v145) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v144 = 0;
|
|
v144 += 4;
|
|
--v145;
|
|
}
|
|
while ( v145 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v10 = &v10[-v143 + 32];
|
|
v144 = v4 + 32;
|
|
}
|
|
v4 = v144 - 800;
|
|
v143 += 2;
|
|
}
|
|
while ( v143 != 32 );
|
|
break;
|
|
case 3:
|
|
for ( j = 30; ; j -= 2 )
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v147 = (unsigned int)(32 - j) >> 2;
|
|
if ( !((32 - j) & 2) || (*(_WORD *)v4 = 0, v4 += 2, v147) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v147;
|
|
}
|
|
while ( v147 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v10 = &v10[-j + 32];
|
|
v4 = &v4[-j + 32];
|
|
}
|
|
v148 = v4 - 800;
|
|
if ( !j )
|
|
break;
|
|
v4 = &v148[j];
|
|
}
|
|
v149 = 2;
|
|
do
|
|
{
|
|
if ( (unsigned int)v148 < screen_buf_end )
|
|
{
|
|
v150 = (unsigned int)(32 - v149) >> 2;
|
|
if ( !((32 - v149) & 2) || (*(_WORD *)v148 = 0, v148 += 2, v150) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v148 = 0;
|
|
v148 += 4;
|
|
--v150;
|
|
}
|
|
while ( v150 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v10 = &v10[-v149 + 32];
|
|
v148 = &v148[-v149 + 32];
|
|
}
|
|
v148 = &v148[v149 - 800];
|
|
v149 += 2;
|
|
}
|
|
while ( v149 != 32 );
|
|
break;
|
|
case 4:
|
|
for ( k = 30; ; k -= 2 )
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v152 = &v4[k];
|
|
v153 = (unsigned int)(32 - k) >> 2;
|
|
if ( !((32 - k) & 2) || (*(_WORD *)v152 = 0, v152 += 2, v153) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v152 = 0;
|
|
v152 += 4;
|
|
--v153;
|
|
}
|
|
while ( v153 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v10 = &v10[-k + 32];
|
|
v152 = v4 + 32;
|
|
}
|
|
v4 = v152 - 800;
|
|
if ( !k )
|
|
break;
|
|
}
|
|
v154 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v155 = 8;
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v155;
|
|
}
|
|
while ( v155 );
|
|
}
|
|
else
|
|
{
|
|
v10 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
--v154;
|
|
}
|
|
while ( v154 );
|
|
break;
|
|
default:
|
|
for ( l = 30; ; l -= 2 )
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v157 = (unsigned int)(32 - l) >> 2;
|
|
if ( !((32 - l) & 2) || (*(_WORD *)v4 = 0, v4 += 2, v157) )
|
|
{
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v157;
|
|
}
|
|
while ( v157 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v10 = &v10[-l + 32];
|
|
v4 = &v4[-l + 32];
|
|
}
|
|
v158 = v4 - 800;
|
|
if ( !l )
|
|
break;
|
|
v4 = &v158[l];
|
|
}
|
|
v159 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v158 < screen_buf_end )
|
|
{
|
|
v160 = 8;
|
|
do
|
|
{
|
|
*(_DWORD *)v158 = 0;
|
|
v158 += 4;
|
|
--v160;
|
|
}
|
|
while ( v160 );
|
|
}
|
|
else
|
|
{
|
|
v10 += 32;
|
|
v158 += 32;
|
|
}
|
|
v158 -= 800;
|
|
--v159;
|
|
}
|
|
while ( v159 );
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v133 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v134 = 8;
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v134;
|
|
}
|
|
while ( v134 );
|
|
}
|
|
else
|
|
{
|
|
v10 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
--v133;
|
|
}
|
|
while ( v133 );
|
|
}
|
|
return;
|
|
}
|
|
if ( !(level_cel_block & 0x8000) )
|
|
{
|
|
v5 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v6 = &pLightTbl[256 * light_table_index];
|
|
v7 = (unsigned short)level_cel_block >> 12;
|
|
if ( !((unsigned short)level_cel_block >> 12) )
|
|
{
|
|
v13 = 32;
|
|
do
|
|
{
|
|
v161 = v13;
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v14 = 0;
|
|
v15 = 8;
|
|
do
|
|
{
|
|
v16 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
v16 = __ROR4__(v16, 16);
|
|
_LOBYTE(v14) = v16;
|
|
_LOBYTE(a1) = v6[v14];
|
|
_LOBYTE(v14) = BYTE1(v16);
|
|
BYTE1(a1) = v6[v14];
|
|
v16 = __ROR4__(v16, 16);
|
|
a1 = (void *)((_DWORD)a1 << 16);
|
|
_LOBYTE(v14) = v16;
|
|
_LOBYTE(a1) = v6[v14];
|
|
_LOBYTE(v14) = BYTE1(v16);
|
|
BYTE1(a1) = v6[v14];
|
|
*(_DWORD *)v4 = (unsigned int)a1;
|
|
v4 += 4;
|
|
--v15;
|
|
}
|
|
while ( v15 );
|
|
}
|
|
else
|
|
{
|
|
v5 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
v13 = v161 - 1;
|
|
}
|
|
while ( v161 != 1 );
|
|
return;
|
|
}
|
|
if ( v7 == 1 )
|
|
{
|
|
v17 = 32;
|
|
do
|
|
{
|
|
v162 = v17;
|
|
v18 = 32;
|
|
do
|
|
{
|
|
v19 = (unsigned char)*v5++;
|
|
if ( (v19 & 0x80u) == 0 )
|
|
{
|
|
v18 -= v19;
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
for ( m = v19; m >= 4; m -= 4 )
|
|
{
|
|
v21 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v21;
|
|
v22 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v21);
|
|
v21 = __ROR4__(v21, 16);
|
|
*v4 = v22;
|
|
v23 = v6[v1];
|
|
_LOBYTE(v1) = v21;
|
|
v4[1] = v23;
|
|
v24 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v21);
|
|
v4[2] = v24;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
}
|
|
if ( m >= 2 )
|
|
{
|
|
_LOBYTE(v1) = *v5;
|
|
*v4 = v6[v1];
|
|
_LOBYTE(v1) = v5[1];
|
|
v4[1] = v6[v1];
|
|
v5 += 2;
|
|
v4 += 2;
|
|
}
|
|
if ( m & 1 )
|
|
{
|
|
_LOBYTE(v1) = *v5++;
|
|
*v4++ = v6[v1];
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v5 += v19;
|
|
v4 += v19;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_LOBYTE(v19) = -(char)v19;
|
|
v4 += v19;
|
|
v18 -= v19;
|
|
}
|
|
}
|
|
while ( v18 );
|
|
v4 -= 800;
|
|
v17 = v162 - 1;
|
|
}
|
|
while ( v162 != 1 );
|
|
return;
|
|
}
|
|
if ( v7 != 2 )
|
|
{
|
|
if ( v7 != 3 )
|
|
{
|
|
if ( v7 != 4 )
|
|
{
|
|
v61 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v62 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v62 > 45 )
|
|
{
|
|
v4 = (char *)a1 - 12288;
|
|
v5 += 288;
|
|
LABEL_116:
|
|
v69 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v70 = 32;
|
|
do
|
|
{
|
|
v71 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v71;
|
|
v72 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v71);
|
|
v71 = __ROR4__(v71, 16);
|
|
*v4 = v72;
|
|
v73 = v6[v1];
|
|
_LOBYTE(v1) = v71;
|
|
v4[1] = v73;
|
|
v74 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v71);
|
|
v4[2] = v74;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
v70 -= 4;
|
|
}
|
|
while ( v70 >= 4 );
|
|
}
|
|
else
|
|
{
|
|
v5 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
--v69;
|
|
}
|
|
while ( v69 );
|
|
return;
|
|
}
|
|
v63 = world_4B33FD[v62];
|
|
v5 += *(int *)((char *)world_4B34BD + v63);
|
|
v4 -= 192 * v63;
|
|
v61 = 30 - (v63 >> 1);
|
|
}
|
|
do
|
|
{
|
|
for ( n = 32 - v61; n >= 4; n -= 4 )
|
|
{
|
|
v65 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v65;
|
|
v66 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v65);
|
|
v65 = __ROR4__(v65, 16);
|
|
*v4 = v66;
|
|
v67 = v6[v1];
|
|
_LOBYTE(v1) = v65;
|
|
v4[1] = v67;
|
|
v68 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v65);
|
|
v4[2] = v68;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
}
|
|
if ( n >= 2 )
|
|
{
|
|
_LOBYTE(v1) = *v5;
|
|
*v4 = v6[v1];
|
|
_LOBYTE(v1) = v5[1];
|
|
v4[1] = v6[v1];
|
|
v5 += 2;
|
|
v4 += 2;
|
|
}
|
|
v1 = (unsigned char)v5 & 2;
|
|
v5 += v1;
|
|
v4 = &v4[v61 - 800];
|
|
v31 = __OFSUB__(v61, 2);
|
|
v61 -= 2;
|
|
}
|
|
while ( !((v61 < 0) ^ v31) );
|
|
goto LABEL_116;
|
|
}
|
|
v46 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v47 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v47 > 45 )
|
|
{
|
|
v4 = (char *)a1 - 12288;
|
|
v5 += 288;
|
|
LABEL_100:
|
|
v55 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v56 = 32;
|
|
do
|
|
{
|
|
v57 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v57;
|
|
v58 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v57);
|
|
v57 = __ROR4__(v57, 16);
|
|
*v4 = v58;
|
|
v59 = v6[v1];
|
|
_LOBYTE(v1) = v57;
|
|
v4[1] = v59;
|
|
v60 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v57);
|
|
v4[2] = v60;
|
|
v4[3] = v6[v1];
|
|
v4 += 4;
|
|
v56 -= 4;
|
|
}
|
|
while ( v56 >= 4 );
|
|
}
|
|
else
|
|
{
|
|
v5 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
--v55;
|
|
}
|
|
while ( v55 );
|
|
return;
|
|
}
|
|
v48 = world_4B33FD[v47];
|
|
v5 += *(int *)((char *)world_4B34BD + v48);
|
|
v4 -= 192 * v48;
|
|
v46 = 30 - (v48 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v49 = &v4[v46];
|
|
v50 = 32 - v46;
|
|
v1 = (32 - (_BYTE)v46) & 2;
|
|
v5 += v1;
|
|
if ( (char)(32 - v46) >= 4 )
|
|
{
|
|
do
|
|
{
|
|
v51 = *(_DWORD *)v5;
|
|
v5 += 4;
|
|
_LOBYTE(v1) = v51;
|
|
v52 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v51);
|
|
v51 = __ROR4__(v51, 16);
|
|
*v49 = v52;
|
|
v53 = v6[v1];
|
|
_LOBYTE(v1) = v51;
|
|
v49[1] = v53;
|
|
v54 = v6[v1];
|
|
_LOBYTE(v1) = BYTE1(v51);
|
|
v49[2] = v54;
|
|
v49[3] = v6[v1];
|
|
v49 += 4;
|
|
v50 -= 4;
|
|
}
|
|
while ( v50 >= 4 );
|
|
}
|
|
if ( v50 >= 2 )
|
|
{
|
|
_LOBYTE(v1) = *v5;
|
|
*v49 = v6[v1];
|
|
_LOBYTE(v1) = v5[1];
|
|
v49[1] = v6[v1];
|
|
v5 += 2;
|
|
v49 += 2;
|
|
}
|
|
v4 = v49 - 800;
|
|
v31 = __OFSUB__(v46, 2);
|
|
v46 -= 2;
|
|
}
|
|
while ( !((v46 < 0) ^ v31) );
|
|
goto LABEL_100;
|
|
}
|
|
v38 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v39 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v39 > 45 )
|
|
{
|
|
v4 = (char *)a1 - 12288;
|
|
v5 += 288;
|
|
LABEL_83:
|
|
v42 = 2;
|
|
if ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v43 = (unsigned int)&v4[-screen_buf_end + 1023] >> 8;
|
|
if ( v43 > 42 )
|
|
return;
|
|
v44 = world_4B33FD[v43];
|
|
v5 += *(int *)((char *)world_4B3501 + v44);
|
|
v4 -= 192 * v44;
|
|
v42 = (v44 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
v45 = 32 - v42;
|
|
do
|
|
{
|
|
_LOBYTE(v1) = *v5++;
|
|
*v4++ = v6[v1];
|
|
--v45;
|
|
}
|
|
while ( v45 );
|
|
v1 = (unsigned char)v5 & 2;
|
|
v5 += v1;
|
|
v4 = &v4[v42 - 800];
|
|
v42 += 2;
|
|
}
|
|
while ( v42 != 32 );
|
|
return;
|
|
}
|
|
v40 = world_4B33FD[v39];
|
|
v5 += *(int *)((char *)world_4B34BD + v40);
|
|
v4 -= 192 * v40;
|
|
v38 = 30 - (v40 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v41 = 32 - v38;
|
|
do
|
|
{
|
|
_LOBYTE(v1) = *v5++;
|
|
*v4++ = v6[v1];
|
|
--v41;
|
|
}
|
|
while ( v41 );
|
|
v1 = (unsigned char)v5 & 2;
|
|
v5 += v1;
|
|
v4 = &v4[v38 - 800];
|
|
v31 = __OFSUB__(v38, 2);
|
|
v38 -= 2;
|
|
}
|
|
while ( !((v38 < 0) ^ v31) );
|
|
goto LABEL_83;
|
|
}
|
|
v25 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v26 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v26 > 45 )
|
|
{
|
|
v4 = (char *)a1 - 12288;
|
|
v5 += 288;
|
|
LABEL_68:
|
|
v32 = 2;
|
|
if ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v33 = (unsigned int)&v4[-screen_buf_end + 1023] >> 8;
|
|
if ( v33 > 42 )
|
|
return;
|
|
v34 = world_4B33FD[v33];
|
|
v5 += *(int *)((char *)world_4B3501 + v34);
|
|
v4 -= 192 * v34;
|
|
v32 = (v34 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
v35 = &v4[v32];
|
|
v36 = 32 - v32;
|
|
v37 = (32 - (_BYTE)v32) & 2;
|
|
v5 += v37;
|
|
do
|
|
{
|
|
_LOBYTE(v37) = *v5++;
|
|
*v35++ = v6[v37];
|
|
--v36;
|
|
}
|
|
while ( v36 );
|
|
v32 += 2;
|
|
v4 = v35 - 800;
|
|
}
|
|
while ( v32 != 32 );
|
|
return;
|
|
}
|
|
v27 = world_4B33FD[v26];
|
|
v5 += *(int *)((char *)world_4B34BD + v27);
|
|
v4 -= 192 * v27;
|
|
v25 = 30 - (v27 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v28 = &v4[v25];
|
|
v29 = 32 - v25;
|
|
v30 = (32 - (_BYTE)v25) & 2;
|
|
v5 += v30;
|
|
do
|
|
{
|
|
_LOBYTE(v30) = *v5++;
|
|
*v28++ = v6[v30];
|
|
--v29;
|
|
}
|
|
while ( v29 );
|
|
v4 = v28 - 800;
|
|
v31 = __OFSUB__(v25, 2);
|
|
v25 -= 2;
|
|
}
|
|
while ( !((v25 < 0) ^ v31) );
|
|
goto LABEL_68;
|
|
}
|
|
v8 = (unsigned char *)pSpeedCels
|
|
+ *(_DWORD *)(4 * (light_table_index + 16 * (level_cel_block & 0xFFF)) + world_4B3265);
|
|
v9 = (unsigned short)level_cel_block >> 12;
|
|
}
|
|
else
|
|
{
|
|
if ( level_cel_block & 0x8000 )
|
|
level_cel_block = *(_DWORD *)(((level_cel_block & 0xFFF) << 6) + world_4B3265)
|
|
+ (unsigned short)(level_cel_block & 0xF000);
|
|
v8 = (unsigned char *)pDungeonCels + *((_DWORD *)pDungeonCels + (level_cel_block & 0xFFF));
|
|
v9 = (((unsigned int)level_cel_block >> 12) & 7) + 8;
|
|
}
|
|
switch ( v9 )
|
|
{
|
|
case 8:
|
|
v75 = 32;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v76 = 8;
|
|
do
|
|
{
|
|
v77 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v77;
|
|
v4 += 4;
|
|
--v76;
|
|
}
|
|
while ( v76 );
|
|
}
|
|
else
|
|
{
|
|
v8 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
--v75;
|
|
}
|
|
while ( v75 );
|
|
return;
|
|
case 9:
|
|
v78 = 32;
|
|
do
|
|
{
|
|
v163 = v78;
|
|
v79 = 32;
|
|
do
|
|
{
|
|
while ( 1 )
|
|
{
|
|
v80 = *v8++;
|
|
if ( (v80 & 0x80u) == 0 )
|
|
break;
|
|
_LOBYTE(v80) = -(char)v80;
|
|
v4 += v80;
|
|
v79 -= v80;
|
|
if ( !v79 )
|
|
goto LABEL_143;
|
|
}
|
|
v79 -= v80;
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v81 = v80 >> 1;
|
|
if ( !(v80 & 1) || (v82 = *v8, ++v8, *v4 = v82, ++v4, v81) )
|
|
{
|
|
v83 = v81 & 1;
|
|
v84 = v81 >> 1;
|
|
if ( !v83 || (v85 = *(_WORD *)v8, v8 += 2, *(_WORD *)v4 = v85, v4 += 2, v84) )
|
|
{
|
|
do
|
|
{
|
|
v86 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v86;
|
|
v4 += 4;
|
|
--v84;
|
|
}
|
|
while ( v84 );
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
v8 += v80;
|
|
v4 += v80;
|
|
}
|
|
}
|
|
while ( v79 );
|
|
LABEL_143:
|
|
v4 -= 800;
|
|
v78 = v163 - 1;
|
|
}
|
|
while ( v163 != 1 );
|
|
return;
|
|
case 10:
|
|
v87 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v88 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v88 > 45 )
|
|
{
|
|
v4 = (char *)a1 - 12288;
|
|
v8 += 288;
|
|
LABEL_153:
|
|
v94 = 2;
|
|
if ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v95 = (unsigned int)&v4[-screen_buf_end + 1023] >> 8;
|
|
if ( v95 > 42 )
|
|
return;
|
|
v96 = world_4B33FD[v95];
|
|
v8 += *(int *)((char *)world_4B3501 + v96);
|
|
v4 -= 192 * v96;
|
|
v94 = (v96 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
v97 = &v4[v94];
|
|
v98 = (unsigned int)(32 - v94) >> 2;
|
|
if ( !((32 - v94) & 2)
|
|
|| (v99 = *((_WORD *)v8 + 1), v8 += 4, *(_WORD *)v97 = v99, v97 += 2, v98) )
|
|
{
|
|
do
|
|
{
|
|
v100 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v97 = v100;
|
|
v97 += 4;
|
|
--v98;
|
|
}
|
|
while ( v98 );
|
|
}
|
|
v94 += 2;
|
|
v4 = v97 - 800;
|
|
}
|
|
while ( v94 < 32 );
|
|
return;
|
|
}
|
|
v89 = world_4B33FD[v88];
|
|
v8 += *(int *)((char *)world_4B34BD + v89);
|
|
v4 -= 192 * v89;
|
|
v87 = 30 - (v89 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v90 = &v4[v87];
|
|
v91 = (unsigned int)(32 - v87) >> 2;
|
|
if ( !((32 - v87) & 2) || (v92 = *((_WORD *)v8 + 1), v8 += 4, *(_WORD *)v90 = v92, v90 += 2, v91) )
|
|
{
|
|
do
|
|
{
|
|
v93 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v90 = v93;
|
|
v90 += 4;
|
|
--v91;
|
|
}
|
|
while ( v91 );
|
|
}
|
|
v4 = v90 - 800;
|
|
v31 = __OFSUB__(v87, 2);
|
|
v87 -= 2;
|
|
}
|
|
while ( !((v87 < 0) ^ v31) );
|
|
goto LABEL_153;
|
|
}
|
|
if ( v9 != 11 )
|
|
{
|
|
if ( v9 != 12 )
|
|
{
|
|
v124 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v125 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v125 > 45 )
|
|
{
|
|
v4 = (char *)a1 - 12288;
|
|
v8 += 288;
|
|
LABEL_205:
|
|
v130 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v131 = 8;
|
|
do
|
|
{
|
|
v132 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v132;
|
|
v4 += 4;
|
|
--v131;
|
|
}
|
|
while ( v131 );
|
|
}
|
|
else
|
|
{
|
|
v8 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
--v130;
|
|
}
|
|
while ( v130 );
|
|
return;
|
|
}
|
|
v126 = world_4B33FD[v125];
|
|
v8 += *(int *)((char *)world_4B34BD + v126);
|
|
v4 -= 192 * v126;
|
|
v124 = 30 - (v126 >> 1);
|
|
}
|
|
do
|
|
{
|
|
for ( ii = (unsigned int)(32 - v124) >> 2; ii; --ii )
|
|
{
|
|
v128 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v128;
|
|
v4 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v124) & 2 )
|
|
{
|
|
v129 = *(_WORD *)v8;
|
|
v8 += 4;
|
|
*(_WORD *)v4 = v129;
|
|
v4 += 2;
|
|
}
|
|
v4 = &v4[v124 - 800];
|
|
v31 = __OFSUB__(v124, 2);
|
|
v124 -= 2;
|
|
}
|
|
while ( !((v124 < 0) ^ v31) );
|
|
goto LABEL_205;
|
|
}
|
|
v114 = 30;
|
|
if ( (unsigned int)a1 >= screen_buf_end )
|
|
{
|
|
v115 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v115 > 45 )
|
|
{
|
|
v4 = (char *)a1 - 12288;
|
|
v8 += 288;
|
|
LABEL_189:
|
|
v121 = 16;
|
|
do
|
|
{
|
|
if ( (unsigned int)v4 < screen_buf_end )
|
|
{
|
|
v122 = 8;
|
|
do
|
|
{
|
|
v123 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v123;
|
|
v4 += 4;
|
|
--v122;
|
|
}
|
|
while ( v122 );
|
|
}
|
|
else
|
|
{
|
|
v8 += 32;
|
|
v4 += 32;
|
|
}
|
|
v4 -= 800;
|
|
--v121;
|
|
}
|
|
while ( v121 );
|
|
return;
|
|
}
|
|
v116 = world_4B33FD[v115];
|
|
v8 += *(int *)((char *)world_4B34BD + v116);
|
|
v4 -= 192 * v116;
|
|
v114 = 30 - (v116 >> 1);
|
|
}
|
|
do
|
|
{
|
|
v117 = &v4[v114];
|
|
v118 = (unsigned int)(32 - v114) >> 2;
|
|
if ( !((32 - v114) & 2)
|
|
|| (v119 = *((_WORD *)v8 + 1), v8 += 4, *(_WORD *)v117 = v119, v117 += 2, v118) )
|
|
{
|
|
do
|
|
{
|
|
v120 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v117 = v120;
|
|
v117 += 4;
|
|
--v118;
|
|
}
|
|
while ( v118 );
|
|
}
|
|
v4 = v117 - 800;
|
|
v31 = __OFSUB__(v114, 2);
|
|
v114 -= 2;
|
|
}
|
|
while ( !((v114 < 0) ^ v31) );
|
|
goto LABEL_189;
|
|
}
|
|
v101 = 30;
|
|
if ( (unsigned int)a1 < screen_buf_end )
|
|
goto LABEL_166;
|
|
v102 = (unsigned int)((char *)a1 - screen_buf_end + 1023) >> 8;
|
|
if ( v102 <= 45 )
|
|
{
|
|
v103 = world_4B33FD[v102];
|
|
v8 += *(int *)((char *)world_4B34BD + v103);
|
|
v4 -= 192 * v103;
|
|
v101 = 30 - (v103 >> 1);
|
|
do
|
|
{
|
|
LABEL_166:
|
|
for ( jj = (unsigned int)(32 - v101) >> 2; jj; --jj )
|
|
{
|
|
v105 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v105;
|
|
v4 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v101) & 2 )
|
|
{
|
|
v106 = *(_WORD *)v8;
|
|
v8 += 4;
|
|
*(_WORD *)v4 = v106;
|
|
v4 += 2;
|
|
}
|
|
v4 = &v4[v101 - 800];
|
|
v31 = __OFSUB__(v101, 2);
|
|
v101 -= 2;
|
|
}
|
|
while ( !((v101 < 0) ^ v31) );
|
|
goto LABEL_171;
|
|
}
|
|
v4 = (char *)a1 - 12288;
|
|
v8 += 288;
|
|
LABEL_171:
|
|
v107 = 2;
|
|
if ( (unsigned int)v4 >= screen_buf_end )
|
|
{
|
|
v108 = (unsigned int)&v4[-screen_buf_end + 1023] >> 8;
|
|
if ( v108 > 42 )
|
|
return;
|
|
v109 = world_4B33FD[v108];
|
|
v8 += *(int *)((char *)world_4B3501 + v109);
|
|
v4 -= 192 * v109;
|
|
v107 = (v109 >> 1) + 2;
|
|
}
|
|
do
|
|
{
|
|
for ( kk = (unsigned int)(32 - v107) >> 2; kk; --kk )
|
|
{
|
|
v111 = *(_DWORD *)v8;
|
|
v8 += 4;
|
|
*(_DWORD *)v4 = v111;
|
|
v4 += 4;
|
|
}
|
|
if ( (32 - (_BYTE)v107) & 2 )
|
|
{
|
|
v112 = *(_WORD *)v8;
|
|
v8 += 4;
|
|
*(_WORD *)v4 = v112;
|
|
v4 += 2;
|
|
}
|
|
v113 = (int)&v4[v107];
|
|
v107 += 2;
|
|
v4 = (char *)(v113 - 800);
|
|
}
|
|
while ( v107 < 32 );
|
|
}
|
|
// 642A14: using guessed type char lightmax;
|
|
// 69BEF8: using guessed type int light_table_index;
|
|
// 69CF0C: using guessed type int screen_buf_end;
|
|
// 69CF14: using guessed type int level_cel_block;
|
|
// 69CF20: using guessed type char arch_draw_type;
|
|
// 69CF94: using guessed type int cel_transparency_active;
|
|
// 69CF98: using guessed type int level_piece_id;
|
|
|
|
//----- (004696BE) --------------------------------------------------------
|
|
void __fastcall world_draw_black_tile(char *dst_buf)
|
|
{
|
|
char *v1; // edi
|
|
signed int v2; // edx
|
|
signed int i; // ebx
|
|
char *v4; // edi
|
|
signed int v5; // ecx
|
|
signed int v6; // edx
|
|
signed int v7; // ebx
|
|
char *v8; // edi
|
|
signed int v9; // ecx
|
|
|
|
v1 = dst_buf;
|
|
v2 = 30;
|
|
for ( i = 1; ; ++i )
|
|
{
|
|
v4 = &v1[v2];
|
|
v5 = i;
|
|
do
|
|
{
|
|
*(_DWORD *)v4 = 0;
|
|
v4 += 4;
|
|
--v5;
|
|
}
|
|
while ( v5 );
|
|
v1 = &v4[v2 - 832];
|
|
if ( !v2 )
|
|
break;
|
|
v2 -= 2;
|
|
}
|
|
v6 = 2;
|
|
v7 = 15;
|
|
do
|
|
{
|
|
v8 = &v1[v6];
|
|
v9 = v7;
|
|
do
|
|
{
|
|
*(_DWORD *)v8 = 0;
|
|
v8 += 4;
|
|
--v9;
|
|
}
|
|
while ( v9 );
|
|
v1 = &v8[v6 - 832];
|
|
--v7;
|
|
v6 += 2;
|
|
}
|
|
while ( v6 != 32 );
|
|
}
|