1754 lines
41 KiB
C++
1754 lines
41 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"
|
||
|
|
||
|
//----- (0045E151) --------------------------------------------------------
|
||
|
void __fastcall town_clear_upper_buf(int a1)
|
||
|
{
|
||
|
unsigned int v1; // edi
|
||
|
signed int v2; // edx
|
||
|
signed int v3; // ebx
|
||
|
char *v4; // edi
|
||
|
signed int v5; // edx
|
||
|
signed int v6; // ebx
|
||
|
char *v7; // edi
|
||
|
|
||
|
v1 = a1;
|
||
|
v2 = 30;
|
||
|
v3 = 1;
|
||
|
while ( v1 >= screen_buf_end )
|
||
|
{
|
||
|
v4 = (char *)(v2 + v1);
|
||
|
memset(v4, 0, 4 * v3);
|
||
|
v1 = (unsigned int)&v4[4 * v3 - 832 + v2];
|
||
|
if ( !v2 )
|
||
|
{
|
||
|
v5 = 2;
|
||
|
v6 = 15;
|
||
|
do
|
||
|
{
|
||
|
if ( v1 < screen_buf_end )
|
||
|
break;
|
||
|
v7 = (char *)(v5 + v1);
|
||
|
memset(v7, 0, 4 * v6);
|
||
|
v1 = (unsigned int)&v7[4 * v6-- - 832 + v5];
|
||
|
v5 += 2;
|
||
|
}
|
||
|
while ( v5 != 32 );
|
||
|
return;
|
||
|
}
|
||
|
v2 -= 2;
|
||
|
++v3;
|
||
|
}
|
||
|
}
|
||
|
// 69CF0C: using guessed type int screen_buf_end;
|
||
|
|
||
|
//----- (0045E1B7) --------------------------------------------------------
|
||
|
void __fastcall town_clear_low_buf(int y_related)
|
||
|
{
|
||
|
unsigned int v1; // edi
|
||
|
signed int v2; // edx
|
||
|
signed int i; // ebx
|
||
|
int v4; // edi
|
||
|
char *v5; // edi
|
||
|
signed int v6; // edx
|
||
|
signed int v7; // ebx
|
||
|
int v8; // edi
|
||
|
char *v9; // edi
|
||
|
|
||
|
v1 = y_related;
|
||
|
v2 = 30;
|
||
|
for ( i = 1; ; ++i )
|
||
|
{
|
||
|
if ( v1 < screen_buf_end )
|
||
|
{
|
||
|
v5 = (char *)(v2 + v1);
|
||
|
memset(v5, 0, 4 * i);
|
||
|
v4 = (int)&v5[4 * i + v2];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v4 = v1 + 64;
|
||
|
}
|
||
|
v1 = v4 - 832;
|
||
|
if ( !v2 )
|
||
|
break;
|
||
|
v2 -= 2;
|
||
|
}
|
||
|
v6 = 2;
|
||
|
v7 = 15;
|
||
|
do
|
||
|
{
|
||
|
if ( v1 < screen_buf_end )
|
||
|
{
|
||
|
v9 = (char *)(v6 + v1);
|
||
|
memset(v9, 0, 4 * v7);
|
||
|
v8 = (int)&v9[4 * v7 + v6];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v8 = v1 + 64;
|
||
|
}
|
||
|
v1 = v8 - 832;
|
||
|
--v7;
|
||
|
v6 += 2;
|
||
|
}
|
||
|
while ( v6 != 32 );
|
||
|
}
|
||
|
// 69CF0C: using guessed type int screen_buf_end;
|
||
|
|
||
|
//----- (0045E226) --------------------------------------------------------
|
||
|
void __fastcall town_draw_clipped_e_flag(void *buffer, int x, int y, int sx, int sy)
|
||
|
{
|
||
|
int v5; // ebx
|
||
|
char *v6; // esi
|
||
|
signed int v7; // edi
|
||
|
int v8; // eax
|
||
|
int v9; // eax
|
||
|
void *unused; // [esp+Ch] [ebp-8h]
|
||
|
char *a1; // [esp+10h] [ebp-4h]
|
||
|
|
||
|
v5 = x;
|
||
|
unused = buffer;
|
||
|
a1 = (char *)buffer;
|
||
|
v6 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(x, y);
|
||
|
v7 = 0;
|
||
|
do
|
||
|
{
|
||
|
v8 = *(unsigned short *)&v6[2 * v7];
|
||
|
level_cel_block = *(unsigned short *)&v6[2 * v7];
|
||
|
if ( v8 )
|
||
|
drawLowerScreen(a1);
|
||
|
v9 = *(unsigned short *)&v6[2 * v7 + 2];
|
||
|
level_cel_block = *(unsigned short *)&v6[2 * v7 + 2];
|
||
|
if ( v9 )
|
||
|
drawLowerScreen(a1 + 32);
|
||
|
a1 -= 24576;
|
||
|
v7 += 2;
|
||
|
}
|
||
|
while ( v7 < 12 );
|
||
|
town_draw_clipped_town(unused, v5, y, sx, sy, 0);
|
||
|
}
|
||
|
// 69CF14: using guessed type int level_cel_block;
|
||
|
|
||
|
//----- (0045E2A5) --------------------------------------------------------
|
||
|
void __fastcall town_draw_clipped_town(void *unused, int x, int y, int sx, int sy, int some_flag)
|
||
|
{
|
||
|
unsigned int v6; // edx
|
||
|
int v7; // edi
|
||
|
char v8; // al
|
||
|
char v9; // al
|
||
|
int v10; // esi
|
||
|
int v11; // ebx
|
||
|
int v12; // esi
|
||
|
int v13; // ebx
|
||
|
int v14; // eax
|
||
|
int v15; // eax
|
||
|
int v16; // esi
|
||
|
int v17; // ebx
|
||
|
char v18; // al
|
||
|
int v19; // esi
|
||
|
int v20; // ebx
|
||
|
int v21; // edi
|
||
|
char v22; // al
|
||
|
char v23; // al
|
||
|
int v24; // esi
|
||
|
int v25; // ebx
|
||
|
int v26; // edi
|
||
|
char *v27; // [esp+Ch] [ebp-Ch]
|
||
|
int xa; // [esp+10h] [ebp-8h]
|
||
|
int v29; // [esp+14h] [ebp-4h]
|
||
|
|
||
|
xa = x;
|
||
|
v6 = 112 * x;
|
||
|
v27 = (char *)gpBuffer + screen_y_times_768[sy] + sx;
|
||
|
v7 = v6 + y;
|
||
|
v29 = v6 + y;
|
||
|
v8 = dItem[v6 / 0x70][y];
|
||
|
if ( v8 )
|
||
|
{
|
||
|
v9 = v8 - 1;
|
||
|
v10 = v9;
|
||
|
v11 = sx - item[v10]._iAnimXOff;
|
||
|
if ( v9 == pcursitem )
|
||
|
CelDrawHdrClrHL(
|
||
|
181,
|
||
|
v11,
|
||
|
sy,
|
||
|
(char *)item[v10].ItemFrame,
|
||
|
item[v10]._iAnimFrame,
|
||
|
item[v10]._iAnimWidth,
|
||
|
0,
|
||
|
8);
|
||
|
Cel2DrawHdrOnly(v11, sy, (char *)item[v10].ItemFrame, item[v10]._iAnimFrame, item[v10]._iAnimWidth, 0, 8);
|
||
|
}
|
||
|
if ( dFlags[0][v7] & 0x10 )
|
||
|
{
|
||
|
v12 = -1 - dMonster[x][y-1]; // -1 - *(&dword_52D204 + v7); /* check */
|
||
|
v13 = sx - towner[v12]._tAnimWidth2;
|
||
|
if ( v12 == pcursmonst )
|
||
|
CelDrawHdrClrHL(
|
||
|
166,
|
||
|
v13,
|
||
|
sy,
|
||
|
(char *)towner[v12]._tAnimCel,
|
||
|
towner[v12]._tAnimFrame,
|
||
|
towner[v12]._tAnimWidth,
|
||
|
0,
|
||
|
8);
|
||
|
Cel2DrawHdrOnly(v13, sy, (char *)towner[v12]._tAnimCel, towner[v12]._tAnimFrame, towner[v12]._tAnimWidth, 0, 8);
|
||
|
}
|
||
|
v14 = dMonster[0][v7];
|
||
|
if ( v14 > 0 )
|
||
|
{
|
||
|
v15 = v14 - 1;
|
||
|
v16 = v15;
|
||
|
v17 = sx - towner[v15]._tAnimWidth2;
|
||
|
if ( v15 == pcursmonst )
|
||
|
CelDrawHdrClrHL(
|
||
|
166,
|
||
|
v17,
|
||
|
sy,
|
||
|
(char *)towner[v16]._tAnimCel,
|
||
|
towner[v16]._tAnimFrame,
|
||
|
towner[v16]._tAnimWidth,
|
||
|
0,
|
||
|
8);
|
||
|
Cel2DrawHdrOnly(v17, sy, (char *)towner[v16]._tAnimCel, towner[v16]._tAnimFrame, towner[v16]._tAnimWidth, 0, 8);
|
||
|
}
|
||
|
if ( dFlags[0][v7] & 0x20 )
|
||
|
{
|
||
|
v18 = -1 - dPlayer[x][y-1]; // -1 - *((_BYTE *)&themeLoc[49].height + v7 + 3);
|
||
|
v19 = v18;
|
||
|
v20 = sy + plr[v19]._pyoff;
|
||
|
v21 = sx + plr[v19]._pxoff - plr[v19]._pAnimWidth2;
|
||
|
if ( v18 == pcursplr )
|
||
|
Cl2DecodeClrHL(165, v21, v20, (char *)plr[v19]._pAnimData, plr[v19]._pAnimFrame, plr[v19]._pAnimWidth, 0, 8);
|
||
|
Cl2DecodeFrm4(v21, v20, (char *)plr[v19]._pAnimData, plr[v19]._pAnimFrame, plr[v19]._pAnimWidth, 0, 8);
|
||
|
if ( some_flag && plr[v19]._peflag )
|
||
|
town_draw_clipped_e_flag(v27 - 64, xa - 1, y + 1, sx - 64, sy);
|
||
|
v7 = v29;
|
||
|
}
|
||
|
if ( dFlags[0][v7] & 4 )
|
||
|
DrawDeadPlayer(xa, y, sx, sy, 0, 8, 1);
|
||
|
v22 = dPlayer[0][v7];
|
||
|
if ( v22 > 0 )
|
||
|
{
|
||
|
v23 = v22 - 1;
|
||
|
v24 = v23;
|
||
|
v25 = sy + plr[v24]._pyoff;
|
||
|
v26 = sx + plr[v24]._pxoff - plr[v24]._pAnimWidth2;
|
||
|
if ( v23 == pcursplr )
|
||
|
Cl2DecodeClrHL(165, v26, v25, (char *)plr[v24]._pAnimData, plr[v24]._pAnimFrame, plr[v24]._pAnimWidth, 0, 8);
|
||
|
Cl2DecodeFrm4(v26, v25, (char *)plr[v24]._pAnimData, plr[v24]._pAnimFrame, plr[v24]._pAnimWidth, 0, 8);
|
||
|
if ( some_flag && plr[v24]._peflag )
|
||
|
town_draw_clipped_e_flag(v27 - 64, xa - 1, y + 1, sx - 64, sy);
|
||
|
v7 = v29;
|
||
|
}
|
||
|
if ( dFlags[0][v7] & 1 )
|
||
|
DrawClippedMissile(xa, y, sx, sy, 0, 8, 0);
|
||
|
}
|
||
|
// 4B8CC0: using guessed type char pcursitem;
|
||
|
// 4B8CC2: using guessed type char pcursplr;
|
||
|
|
||
|
//----- (0045E5B0) --------------------------------------------------------
|
||
|
void __fastcall town_draw_lower(int x, int y, int sx, int sy, int a5, int some_flag)
|
||
|
{
|
||
|
int v6; // ebx
|
||
|
int *v7; // edi
|
||
|
char *v8; // esi
|
||
|
int v9; // eax
|
||
|
int v10; // eax
|
||
|
int *v11; // ebx
|
||
|
int v12; // esi
|
||
|
char *v13; // esi
|
||
|
char *v14; // edi
|
||
|
int v15; // eax
|
||
|
int v16; // eax
|
||
|
bool v17; // zf
|
||
|
int *v18; // ebx
|
||
|
char *v19; // esi
|
||
|
char *v20; // edi
|
||
|
int v21; // eax
|
||
|
char *a1; // [esp+Ch] [ebp-10h]
|
||
|
int a1a; // [esp+Ch] [ebp-10h]
|
||
|
int ya; // [esp+10h] [ebp-Ch]
|
||
|
signed int v25; // [esp+14h] [ebp-8h]
|
||
|
signed int v26; // [esp+14h] [ebp-8h]
|
||
|
signed int v27; // [esp+14h] [ebp-8h]
|
||
|
signed int xa; // [esp+18h] [ebp-4h]
|
||
|
int a5a; // [esp+2Ch] [ebp+10h]
|
||
|
|
||
|
ya = y;
|
||
|
xa = x;
|
||
|
if ( some_flag )
|
||
|
{
|
||
|
if ( y >= 0 && y < 112 && x >= 0 && x < 112 && (level_cel_block = dPiece[0][y + 112 * x]) != 0 )
|
||
|
{
|
||
|
v6 = sy;
|
||
|
v7 = &screen_y_times_768[sy];
|
||
|
a1 = &gpBuffer->row_unused_1[0].col_unused_1[*v7 + 32 + sx];
|
||
|
v25 = 1;
|
||
|
v8 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(x, y);
|
||
|
do
|
||
|
{
|
||
|
v9 = *(unsigned short *)&v8[2 * v25];
|
||
|
level_cel_block = *(unsigned short *)&v8[2 * v25];
|
||
|
if ( v9 )
|
||
|
drawLowerScreen(a1);
|
||
|
v25 += 2;
|
||
|
a1 -= 24576;
|
||
|
}
|
||
|
while ( v25 < 17 );
|
||
|
town_draw_clipped_town((char *)gpBuffer + *v7 + sx, xa, ya, sx, sy, 0);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
town_clear_low_buf((int)gpBuffer + screen_y_times_768[sy] + sx);
|
||
|
v6 = sy;
|
||
|
}
|
||
|
++xa;
|
||
|
y = ya - 1;
|
||
|
sx += 64;
|
||
|
--ya;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v6 = sy;
|
||
|
}
|
||
|
v10 = a5 - some_flag;
|
||
|
if ( a5 - some_flag > 0 )
|
||
|
{
|
||
|
v11 = &screen_y_times_768[v6];
|
||
|
v12 = 112 * xa;
|
||
|
a5a = 112 * xa;
|
||
|
a1a = v10;
|
||
|
do
|
||
|
{
|
||
|
if ( y >= 0 && y < 112 && v12 >= 0 && v12 < 12544 && (level_cel_block = dPiece[0][v12 + y]) != 0 )
|
||
|
{
|
||
|
v13 = (char *)gpBuffer + *v11 + sx;
|
||
|
v14 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(xa, ya);
|
||
|
v26 = 0;
|
||
|
do
|
||
|
{
|
||
|
v15 = *(unsigned short *)&v14[2 * v26];
|
||
|
level_cel_block = *(unsigned short *)&v14[2 * v26];
|
||
|
if ( v15 )
|
||
|
drawLowerScreen(v13);
|
||
|
v16 = *(unsigned short *)&v14[2 * v26 + 2];
|
||
|
level_cel_block = *(unsigned short *)&v14[2 * v26 + 2];
|
||
|
if ( v16 )
|
||
|
drawLowerScreen(v13 + 32);
|
||
|
v26 += 2;
|
||
|
v13 -= 24576;
|
||
|
}
|
||
|
while ( v26 < 16 );
|
||
|
town_draw_clipped_town((char *)gpBuffer + *v11 + sx, xa, ya, sx, sy, 1);
|
||
|
v12 = a5a;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
town_clear_low_buf((int)gpBuffer + *v11 + sx);
|
||
|
}
|
||
|
++xa;
|
||
|
sx += 64;
|
||
|
v12 += 112;
|
||
|
y = ya - 1;
|
||
|
v17 = a1a-- == 1;
|
||
|
a5a = v12;
|
||
|
--ya;
|
||
|
}
|
||
|
while ( !v17 );
|
||
|
v6 = sy;
|
||
|
}
|
||
|
if ( some_flag )
|
||
|
{
|
||
|
if ( y >= 0 && y < 112 && xa >= 0 && xa < 112 && (level_cel_block = dPiece[0][y + 112 * xa]) != 0 )
|
||
|
{
|
||
|
v18 = &screen_y_times_768[v6];
|
||
|
v19 = (char *)gpBuffer + *v18 + sx;
|
||
|
v20 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(xa, ya);
|
||
|
v27 = 0;
|
||
|
do
|
||
|
{
|
||
|
v21 = *(unsigned short *)&v20[2 * v27];
|
||
|
level_cel_block = *(unsigned short *)&v20[2 * v27];
|
||
|
if ( v21 )
|
||
|
drawLowerScreen(v19);
|
||
|
v27 += 2;
|
||
|
v19 -= 24576;
|
||
|
}
|
||
|
while ( v27 < 16 );
|
||
|
town_draw_clipped_town((char *)gpBuffer + *v18 + sx, xa, ya, sx, sy, 0);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
town_clear_low_buf((int)gpBuffer + screen_y_times_768[v6] + sx);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// 69CF14: using guessed type int level_cel_block;
|
||
|
|
||
|
//----- (0045E898) --------------------------------------------------------
|
||
|
void __fastcall town_draw_clipped_e_flag_2(void *buffer, int x, int y, int a4, int a5, int sx, int sy)
|
||
|
{
|
||
|
int v7; // ebx
|
||
|
char *v8; // edi
|
||
|
short *v9; // esi
|
||
|
int v10; // eax
|
||
|
int v11; // eax
|
||
|
void *v12; // [esp+8h] [ebp-8h]
|
||
|
int xa; // [esp+Ch] [ebp-4h]
|
||
|
int a4a; // [esp+1Ch] [ebp+Ch]
|
||
|
|
||
|
v7 = a4;
|
||
|
xa = x;
|
||
|
v12 = buffer;
|
||
|
if ( a4 )
|
||
|
v8 = (char *)buffer + 24576 * a4;
|
||
|
else
|
||
|
v8 = (char *)buffer;
|
||
|
a4a = 0;
|
||
|
v9 = &dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(x, y) + 3];
|
||
|
do
|
||
|
{
|
||
|
if ( v7 <= a4a )
|
||
|
{
|
||
|
v10 = (unsigned short)*(v9 - 1);
|
||
|
level_cel_block = (unsigned short)*(v9 - 1);
|
||
|
if ( v10 )
|
||
|
drawLowerScreen(v8);
|
||
|
v11 = (unsigned short)*v9;
|
||
|
level_cel_block = (unsigned short)*v9;
|
||
|
if ( v11 )
|
||
|
drawLowerScreen(v8 + 32);
|
||
|
}
|
||
|
v8 -= 24576;
|
||
|
++a4a;
|
||
|
v9 += 2;
|
||
|
}
|
||
|
while ( a4a < 6 );
|
||
|
if ( a5 < 8 )
|
||
|
town_draw_clipped_town_2((int)v12, xa, y, v7, a5, sx, sy, 0);
|
||
|
}
|
||
|
// 69CF14: using guessed type int level_cel_block;
|
||
|
|
||
|
//----- (0045E939) --------------------------------------------------------
|
||
|
void __fastcall town_draw_clipped_town_2(int x, int y, int a3, int a4, int a5, int sx, int sy, int some_flag)
|
||
|
{
|
||
|
unsigned int v8; // edx
|
||
|
int v9; // ebx
|
||
|
char v10; // al
|
||
|
char v11; // al
|
||
|
int v12; // esi
|
||
|
int v13; // edi
|
||
|
int v14; // esi
|
||
|
int v15; // edi
|
||
|
int v16; // eax
|
||
|
int v17; // eax
|
||
|
int v18; // esi
|
||
|
int v19; // edi
|
||
|
char v20; // al
|
||
|
int v21; // esi
|
||
|
int v22; // ebx
|
||
|
int v23; // edi
|
||
|
char v24; // al
|
||
|
char v25; // al
|
||
|
int v26; // esi
|
||
|
int v27; // ebx
|
||
|
int v28; // edi
|
||
|
int v29; // [esp+Ch] [ebp-Ch]
|
||
|
int xa; // [esp+10h] [ebp-8h]
|
||
|
int v31; // [esp+14h] [ebp-4h]
|
||
|
|
||
|
xa = y;
|
||
|
v8 = 112 * y;
|
||
|
v9 = v8 + a3;
|
||
|
v29 = x;
|
||
|
v31 = v8 + a3;
|
||
|
v10 = dItem[v8 / 0x70][a3];
|
||
|
if ( v10 )
|
||
|
{
|
||
|
v11 = v10 - 1;
|
||
|
v12 = v11;
|
||
|
v13 = sx - item[v12]._iAnimXOff;
|
||
|
if ( v11 == pcursitem )
|
||
|
CelDrawHdrClrHL(
|
||
|
181,
|
||
|
v13,
|
||
|
sy,
|
||
|
(char *)item[v12].ItemFrame,
|
||
|
item[v12]._iAnimFrame,
|
||
|
item[v12]._iAnimWidth,
|
||
|
a5,
|
||
|
8);
|
||
|
Cel2DrawHdrOnly(v13, sy, (char *)item[v12].ItemFrame, item[v12]._iAnimFrame, item[v12]._iAnimWidth, a5, 8);
|
||
|
}
|
||
|
if ( dFlags[0][v9] & 0x10 )
|
||
|
{
|
||
|
v14 = -1 - dMonster[x][y-1]; // -1 - *(&dword_52D204 + v9); /* check */
|
||
|
v15 = sx - towner[v14]._tAnimWidth2;
|
||
|
if ( v14 == pcursmonst )
|
||
|
CelDrawHdrClrHL(
|
||
|
166,
|
||
|
v15,
|
||
|
sy,
|
||
|
(char *)towner[v14]._tAnimCel,
|
||
|
towner[v14]._tAnimFrame,
|
||
|
towner[v14]._tAnimWidth,
|
||
|
a5,
|
||
|
8);
|
||
|
Cel2DrawHdrOnly(v15, sy, (char *)towner[v14]._tAnimCel, towner[v14]._tAnimFrame, towner[v14]._tAnimWidth, a5, 8);
|
||
|
}
|
||
|
v16 = dMonster[0][v9];
|
||
|
if ( v16 > 0 )
|
||
|
{
|
||
|
v17 = v16 - 1;
|
||
|
v18 = v17;
|
||
|
v19 = sx - towner[v17]._tAnimWidth2;
|
||
|
if ( v17 == pcursmonst )
|
||
|
CelDrawHdrClrHL(
|
||
|
166,
|
||
|
v19,
|
||
|
sy,
|
||
|
(char *)towner[v18]._tAnimCel,
|
||
|
towner[v18]._tAnimFrame,
|
||
|
towner[v18]._tAnimWidth,
|
||
|
a5,
|
||
|
8);
|
||
|
Cel2DrawHdrOnly(v19, sy, (char *)towner[v18]._tAnimCel, towner[v18]._tAnimFrame, towner[v18]._tAnimWidth, a5, 8);
|
||
|
}
|
||
|
if ( dFlags[0][v9] & 0x20 )
|
||
|
{
|
||
|
v20 = -1 - dPlayer[x][y-1]; // -1 - *((_BYTE *)&themeLoc[49].height + v9 + 3);
|
||
|
v21 = v20;
|
||
|
v22 = sy + plr[v21]._pyoff;
|
||
|
v23 = sx + plr[v21]._pxoff - plr[v21]._pAnimWidth2;
|
||
|
if ( v20 == pcursplr )
|
||
|
Cl2DecodeClrHL(165, v23, v22, (char *)plr[v21]._pAnimData, plr[v21]._pAnimFrame, plr[v21]._pAnimWidth, a5, 8);
|
||
|
Cl2DecodeFrm4(v23, v22, (char *)plr[v21]._pAnimData, plr[v21]._pAnimFrame, plr[v21]._pAnimWidth, a5, 8);
|
||
|
if ( some_flag && plr[v21]._peflag )
|
||
|
town_draw_clipped_e_flag_2((void *)(v29 - 64), xa - 1, a3 + 1, a4, a5, sx - 64, sy);
|
||
|
v9 = v31;
|
||
|
}
|
||
|
if ( dFlags[0][v9] & 4 )
|
||
|
DrawDeadPlayer(xa, a3, sx, sy, a5, 8, 1);
|
||
|
v24 = dPlayer[0][v9];
|
||
|
if ( v24 > 0 )
|
||
|
{
|
||
|
v25 = v24 - 1;
|
||
|
v26 = v25;
|
||
|
v27 = sy + plr[v26]._pyoff;
|
||
|
v28 = sx + plr[v26]._pxoff - plr[v26]._pAnimWidth2;
|
||
|
if ( v25 == pcursplr )
|
||
|
Cl2DecodeClrHL(165, v28, v27, (char *)plr[v26]._pAnimData, plr[v26]._pAnimFrame, plr[v26]._pAnimWidth, a5, 8);
|
||
|
Cl2DecodeFrm4(v28, v27, (char *)plr[v26]._pAnimData, plr[v26]._pAnimFrame, plr[v26]._pAnimWidth, a5, 8);
|
||
|
if ( some_flag && plr[v26]._peflag )
|
||
|
town_draw_clipped_e_flag_2((void *)(v29 - 64), xa - 1, a3 + 1, a4, a5, sx - 64, sy);
|
||
|
v9 = v31;
|
||
|
}
|
||
|
if ( dFlags[0][v9] & 1 )
|
||
|
DrawClippedMissile(xa, a3, sx, sy, a5, 8, 0);
|
||
|
}
|
||
|
// 4B8CC0: using guessed type char pcursitem;
|
||
|
// 4B8CC2: using guessed type char pcursplr;
|
||
|
|
||
|
//----- (0045EC49) --------------------------------------------------------
|
||
|
void __fastcall town_draw_lower_2(int x, int y, int sx, int sy, int a5, int a6, int some_flag)
|
||
|
{
|
||
|
int v7; // esi
|
||
|
int v8; // ebx
|
||
|
int *v9; // edi
|
||
|
short *v10; // eax
|
||
|
int v11; // esi
|
||
|
int v12; // eax
|
||
|
int *v13; // ebx
|
||
|
int v14; // edi
|
||
|
short *v15; // edi
|
||
|
int v16; // eax
|
||
|
int v17; // eax
|
||
|
int v18; // eax
|
||
|
bool v19; // zf
|
||
|
int *v20; // edi
|
||
|
short *v21; // ebx
|
||
|
int v22; // eax
|
||
|
short *v23; // [esp+Ch] [ebp-10h]
|
||
|
int v24; // [esp+Ch] [ebp-10h]
|
||
|
char *a1; // [esp+10h] [ebp-Ch]
|
||
|
char *a1a; // [esp+10h] [ebp-Ch]
|
||
|
char *a1b; // [esp+10h] [ebp-Ch]
|
||
|
signed int ya; // [esp+14h] [ebp-8h]
|
||
|
signed int xa; // [esp+18h] [ebp-4h]
|
||
|
signed int sxa; // [esp+24h] [ebp+8h]
|
||
|
signed int sxb; // [esp+24h] [ebp+8h]
|
||
|
signed int sxc; // [esp+24h] [ebp+8h]
|
||
|
int a5a; // [esp+2Ch] [ebp+10h]
|
||
|
|
||
|
ya = y;
|
||
|
xa = x;
|
||
|
if ( some_flag )
|
||
|
{
|
||
|
if ( y < 0 || y >= 112 || x < 0 || x >= 112 )
|
||
|
{
|
||
|
v7 = sx;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v7 = sx;
|
||
|
level_cel_block = dPiece[0][y + 112 * x];
|
||
|
if ( level_cel_block )
|
||
|
{
|
||
|
v8 = sy;
|
||
|
v9 = &screen_y_times_768[sy];
|
||
|
a1 = (char *)gpBuffer + *v9 + sx - 24544;
|
||
|
sxa = 0;
|
||
|
v10 = &dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(x, y) + 3];
|
||
|
v23 = v10;
|
||
|
do
|
||
|
{
|
||
|
if ( a6 <= sxa )
|
||
|
{
|
||
|
level_cel_block = (unsigned short)*v10;
|
||
|
if ( level_cel_block )
|
||
|
drawLowerScreen(a1);
|
||
|
}
|
||
|
a1 -= 24576;
|
||
|
++sxa;
|
||
|
v10 = v23 + 2;
|
||
|
v23 += 2;
|
||
|
}
|
||
|
while ( sxa < 7 );
|
||
|
if ( 2 * a6 + 2 < 8 )
|
||
|
town_draw_clipped_town_2((int)gpBuffer + *v9 + v7, xa, ya, a6, 2 * a6 + 2, v7, sy, 0);
|
||
|
goto LABEL_16;
|
||
|
}
|
||
|
}
|
||
|
town_clear_low_buf((int)gpBuffer + screen_y_times_768[sy] + v7);
|
||
|
v8 = sy;
|
||
|
LABEL_16:
|
||
|
++xa;
|
||
|
--ya;
|
||
|
v11 = v7 + 64;
|
||
|
goto LABEL_18;
|
||
|
}
|
||
|
v11 = sx;
|
||
|
v8 = sy;
|
||
|
LABEL_18:
|
||
|
v12 = a5 - some_flag;
|
||
|
if ( a5 - some_flag > 0 )
|
||
|
{
|
||
|
v13 = &screen_y_times_768[v8];
|
||
|
v14 = 112 * xa;
|
||
|
a5a = 112 * xa;
|
||
|
v24 = v12;
|
||
|
do
|
||
|
{
|
||
|
if ( ya >= 0 && ya < 112 && v14 >= 0 && v14 < 12544 && (level_cel_block = dPiece[0][v14 + ya]) != 0 )
|
||
|
{
|
||
|
a1a = (char *)gpBuffer + *v13 + v11 - 24576;
|
||
|
sxb = 0;
|
||
|
v15 = &dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(xa, ya) + 3];
|
||
|
do
|
||
|
{
|
||
|
if ( a6 <= sxb )
|
||
|
{
|
||
|
v16 = (unsigned short)*(v15 - 1);
|
||
|
level_cel_block = (unsigned short)*(v15 - 1);
|
||
|
if ( v16 )
|
||
|
drawLowerScreen(a1a);
|
||
|
v17 = (unsigned short)*v15;
|
||
|
level_cel_block = (unsigned short)*v15;
|
||
|
if ( v17 )
|
||
|
drawLowerScreen(a1a + 32);
|
||
|
}
|
||
|
a1a -= 24576;
|
||
|
++sxb;
|
||
|
v15 += 2;
|
||
|
}
|
||
|
while ( sxb < 7 );
|
||
|
v18 = 2 * a6 + 2;
|
||
|
if ( v18 < 8 )
|
||
|
town_draw_clipped_town_2((int)gpBuffer + *v13 - 12288 * v18 + v11, xa, ya, a6, 2 * a6 + 2, v11, sy, 1);
|
||
|
v14 = a5a;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
town_clear_low_buf((int)gpBuffer + *v13 + v11);
|
||
|
}
|
||
|
++xa;
|
||
|
v14 += 112;
|
||
|
--ya;
|
||
|
v11 += 64;
|
||
|
v19 = v24-- == 1;
|
||
|
a5a = v14;
|
||
|
}
|
||
|
while ( !v19 );
|
||
|
v8 = sy;
|
||
|
}
|
||
|
if ( some_flag )
|
||
|
{
|
||
|
if ( ya >= 0 && ya < 112 && xa >= 0 && xa < 112 && (level_cel_block = dPiece[0][ya + 112 * xa]) != 0 )
|
||
|
{
|
||
|
v20 = &screen_y_times_768[v8];
|
||
|
a1b = (char *)gpBuffer + *v20 + v11 - 24576;
|
||
|
sxc = 0;
|
||
|
v21 = &dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(xa, ya) + 2];
|
||
|
do
|
||
|
{
|
||
|
if ( a6 <= sxc )
|
||
|
{
|
||
|
v22 = (unsigned short)*v21;
|
||
|
level_cel_block = (unsigned short)*v21;
|
||
|
if ( v22 )
|
||
|
drawLowerScreen(a1b);
|
||
|
}
|
||
|
a1b -= 24576;
|
||
|
++sxc;
|
||
|
v21 += 2;
|
||
|
}
|
||
|
while ( sxc < 7 );
|
||
|
if ( 2 * a6 + 2 < 8 )
|
||
|
town_draw_clipped_town_2((int)gpBuffer + *v20 + v11, xa, ya, a6, 2 * a6 + 2, v11, sy, 0);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
town_clear_low_buf((int)gpBuffer + screen_y_times_768[v8] + v11);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
// 69CF14: using guessed type int level_cel_block;
|
||
|
|
||
|
//----- (0045EF8A) --------------------------------------------------------
|
||
|
void __fastcall town_draw_e_flag(void *buffer, int x, int y, int a4, int dir, int sx, int sy)
|
||
|
{
|
||
|
int v7; // ebx
|
||
|
char *v8; // esi
|
||
|
int v9; // edi
|
||
|
int v10; // eax
|
||
|
int v11; // eax
|
||
|
void *buffera; // [esp+Ch] [ebp-8h]
|
||
|
int *a1; // [esp+10h] [ebp-4h]
|
||
|
|
||
|
v7 = x;
|
||
|
buffera = buffer;
|
||
|
a1 = (int *)buffer;
|
||
|
v8 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(x, y);
|
||
|
v9 = 0;
|
||
|
do
|
||
|
{
|
||
|
if ( a4 >= v9 )
|
||
|
{
|
||
|
v10 = *(unsigned short *)&v8[4 * v9];
|
||
|
level_cel_block = *(unsigned short *)&v8[4 * v9];
|
||
|
if ( v10 )
|
||
|
drawUpperScreen(a1);
|
||
|
v11 = *(unsigned short *)&v8[4 * v9 + 2];
|
||
|
level_cel_block = *(unsigned short *)&v8[4 * v9 + 2];
|
||
|
if ( v11 )
|
||
|
drawUpperScreen(a1 + 8);
|
||
|
}
|
||
|
a1 -= 6144;
|
||
|
++v9;
|
||
|
}
|
||
|
while ( v9 < 7 );
|
||
|
town_draw_town_all(buffera, v7, y, a4, dir, sx, sy, 0);
|
||
|
}
|
||
|
// 69CF14: using guessed type int level_cel_block;
|
||
|
|
||
|
//----- (0045F013) --------------------------------------------------------
|
||
|
void __fastcall town_draw_town_all(void *buffer, int x, int y, int a4, int dir, int sx, int sy, int some_flag)
|
||
|
{
|
||
|
//int v9; // ebx
|
||
|
int id; // esi
|
||
|
int yy; // ebx
|
||
|
int xx; // edi
|
||
|
|
||
|
//v9 = 112 * x + y;
|
||
|
if ( dItem[x][y] )
|
||
|
{
|
||
|
id = dItem[x][y] - 1;
|
||
|
xx = sx - item[id]._iAnimXOff;
|
||
|
if ( id == pcursitem )
|
||
|
CelDecodeClr(181, xx, sy, (char *)item[id].ItemFrame, item[id]._iAnimFrame, item[id]._iAnimWidth, 0, dir);
|
||
|
CelDrawHdrOnly(xx, sy, (char *)item[id].ItemFrame, item[id]._iAnimFrame, item[id]._iAnimWidth, 0, dir);
|
||
|
}
|
||
|
if ( dFlags[x][y] & 0x10 )
|
||
|
{
|
||
|
id = -1 - dMonster[x][y-1]; // -1 - *(&dword_52D204 + v9); /* check */
|
||
|
xx = sx - towner[id]._tAnimWidth2;
|
||
|
if ( id == pcursmonst )
|
||
|
CelDecodeClr(166, xx, sy, (char *)towner[id]._tAnimCel, towner[id]._tAnimFrame, towner[id]._tAnimWidth, 0, dir);
|
||
|
CelDrawHdrOnly(xx, sy, (char *)towner[id]._tAnimCel, towner[id]._tAnimFrame, towner[id]._tAnimWidth, 0, dir);
|
||
|
}
|
||
|
if ( dMonster[x][y] > 0 )
|
||
|
{
|
||
|
id = dMonster[x][y] - 1;
|
||
|
xx = sx - towner[id]._tAnimWidth2;
|
||
|
if ( id == pcursmonst )
|
||
|
CelDecodeClr(166, xx, sy, (char *)towner[id]._tAnimCel, towner[id]._tAnimFrame, towner[id]._tAnimWidth, 0, dir);
|
||
|
CelDrawHdrOnly(xx, sy, (char *)towner[id]._tAnimCel, towner[id]._tAnimFrame, towner[id]._tAnimWidth, 0, dir);
|
||
|
}
|
||
|
if ( dFlags[x][y] & 0x20 )
|
||
|
{
|
||
|
id = -1 - dPlayer[x][y-1]; // -1 - *((_BYTE *)&themeLoc[49].height + v9 + 3);
|
||
|
yy = sy + plr[id]._pyoff;
|
||
|
xx = sx + plr[id]._pxoff - plr[id]._pAnimWidth2;
|
||
|
if ( id == pcursplr )
|
||
|
Cl2DecodeFrm2(165, xx, yy, (char *)plr[id]._pAnimData, plr[id]._pAnimFrame, plr[id]._pAnimWidth, 0, dir);
|
||
|
Cl2DecodeFrm1(xx, yy, (char *)plr[id]._pAnimData, plr[id]._pAnimFrame, plr[id]._pAnimWidth, 0, dir);
|
||
|
if ( some_flag && plr[id]._peflag )
|
||
|
town_draw_e_flag((char *)buffer - 64, x - 1, y + 1, a4, dir, sx - 64, sy);
|
||
|
}
|
||
|
if ( dFlags[x][y] & 4 )
|
||
|
DrawDeadPlayer(x, y, sx, sy, 0, dir, 0);
|
||
|
if ( dPlayer[x][y] > 0 )
|
||
|
{
|
||
|
id = dPlayer[x][y] - 1;
|
||
|
yy = sy + plr[id]._pyoff;
|
||
|
xx = sx + plr[id]._pxoff - plr[id]._pAnimWidth2;
|
||
|
if ( id == pcursplr )
|
||
|
Cl2DecodeFrm2(165, xx, yy, (char *)plr[id]._pAnimData, plr[id]._pAnimFrame, plr[id]._pAnimWidth, 0, dir);
|
||
|
Cl2DecodeFrm1(xx, yy, (char *)plr[id]._pAnimData, plr[id]._pAnimFrame, plr[id]._pAnimWidth, 0, dir);
|
||
|
if ( some_flag && plr[id]._peflag )
|
||
|
town_draw_e_flag((char *)buffer - 64, x - 1, y + 1, a4, dir, sx - 64, sy);
|
||
|
}
|
||
|
if ( dFlags[x][y] & 1 )
|
||
|
DrawMissile(x, y, sx, sy, 0, dir, 0);
|
||
|
}
|
||
|
// 4B8CC0: using guessed type char pcursitem;
|
||
|
// 4B8CC2: using guessed type char pcursplr;
|
||
|
|
||
|
//----- (0045F323) --------------------------------------------------------
|
||
|
void __fastcall town_draw_upper(int x, int y, int sx, int sy, int a5, int a6, int some_flag)
|
||
|
{
|
||
|
signed int v7; // ebx
|
||
|
int v8; // esi
|
||
|
int v9; // eax
|
||
|
bool v10; // zf
|
||
|
int v11; // eax
|
||
|
short *v12; // ebx
|
||
|
int v13; // eax
|
||
|
int v14; // esi
|
||
|
int v15; // edi
|
||
|
int v16; // eax
|
||
|
Screen *v17; // eax
|
||
|
char *v18; // ebx
|
||
|
char *v19; // edi
|
||
|
int v20; // eax
|
||
|
int v21; // eax
|
||
|
int v22; // eax
|
||
|
int v23; // eax
|
||
|
char *v24; // edi
|
||
|
char *v25; // ebx
|
||
|
int v26; // eax
|
||
|
int *a1; // [esp+Ch] [ebp-10h]
|
||
|
int *a1a; // [esp+Ch] [ebp-10h]
|
||
|
int dir; // [esp+10h] [ebp-Ch]
|
||
|
int ya; // [esp+14h] [ebp-8h]
|
||
|
signed int xa; // [esp+18h] [ebp-4h]
|
||
|
signed int sxa; // [esp+24h] [ebp+8h]
|
||
|
signed int sxb; // [esp+24h] [ebp+8h]
|
||
|
signed int sxc; // [esp+24h] [ebp+8h]
|
||
|
int a5a; // [esp+2Ch] [ebp+10h]
|
||
|
|
||
|
xa = x;
|
||
|
v7 = y;
|
||
|
ya = y;
|
||
|
dir = 2 * a6 + 2;
|
||
|
if ( dir > 8 )
|
||
|
dir = 8;
|
||
|
if ( some_flag )
|
||
|
{
|
||
|
if ( y < 0 || y >= 112 || x < 0 || x >= 112 )
|
||
|
{
|
||
|
v11 = sy;
|
||
|
v8 = sx;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v8 = sx;
|
||
|
v9 = dPiece[0][y + 112 * x];
|
||
|
level_cel_block = v9;
|
||
|
v10 = v9 == 0;
|
||
|
v11 = sy;
|
||
|
if ( !v10 )
|
||
|
{
|
||
|
a1 = (int *)&gpBuffer->row_unused_1[0].col_unused_1[sx + 32 + screen_y_times_768[sy]];
|
||
|
sxa = 0;
|
||
|
v12 = &dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(x, y) + 1];
|
||
|
do
|
||
|
{
|
||
|
if ( a6 >= sxa )
|
||
|
{
|
||
|
v13 = (unsigned short)*v12;
|
||
|
level_cel_block = (unsigned short)*v12;
|
||
|
if ( v13 )
|
||
|
drawUpperScreen(a1);
|
||
|
}
|
||
|
a1 -= 6144;
|
||
|
++sxa;
|
||
|
v12 += 2;
|
||
|
}
|
||
|
while ( sxa < 7 );
|
||
|
town_draw_town_all((char *)gpBuffer + v8 + screen_y_times_768[sy], xa, ya, a6, dir, v8, sy, 0);
|
||
|
v7 = ya;
|
||
|
goto LABEL_17;
|
||
|
}
|
||
|
}
|
||
|
town_clear_upper_buf((int)gpBuffer + screen_y_times_768[v11] + v8);
|
||
|
LABEL_17:
|
||
|
++xa;
|
||
|
ya = --v7;
|
||
|
v14 = v8 + 64;
|
||
|
goto LABEL_19;
|
||
|
}
|
||
|
v14 = sx;
|
||
|
LABEL_19:
|
||
|
if ( a5 - some_flag > 0 )
|
||
|
{
|
||
|
a1a = (int *)(a5 - some_flag);
|
||
|
v15 = 112 * xa;
|
||
|
a5a = 112 * xa;
|
||
|
do
|
||
|
{
|
||
|
if ( v7 < 0 || v7 >= 112 || v15 < 0 || v15 >= 12544 )
|
||
|
{
|
||
|
v17 = gpBuffer;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v16 = dPiece[0][v15 + v7];
|
||
|
level_cel_block = v16;
|
||
|
v10 = v16 == 0;
|
||
|
v17 = gpBuffer;
|
||
|
if ( !v10 )
|
||
|
{
|
||
|
v18 = (char *)gpBuffer + v14 + screen_y_times_768[sy];
|
||
|
v19 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(xa, ya);
|
||
|
sxb = 0;
|
||
|
do
|
||
|
{
|
||
|
if ( a6 >= sxb )
|
||
|
{
|
||
|
v20 = *(unsigned short *)&v19[4 * sxb];
|
||
|
level_cel_block = *(unsigned short *)&v19[4 * sxb];
|
||
|
if ( v20 )
|
||
|
drawUpperScreen(v18);
|
||
|
v21 = *(unsigned short *)&v19[4 * sxb + 2];
|
||
|
level_cel_block = *(unsigned short *)&v19[4 * sxb + 2];
|
||
|
if ( v21 )
|
||
|
drawUpperScreen(v18 + 32);
|
||
|
}
|
||
|
v18 -= 24576;
|
||
|
++sxb;
|
||
|
}
|
||
|
while ( sxb < 7 );
|
||
|
town_draw_town_all((char *)gpBuffer + v14 + screen_y_times_768[sy], xa, ya, a6, dir, v14, sy, 1);
|
||
|
v15 = a5a;
|
||
|
v7 = ya;
|
||
|
goto LABEL_36;
|
||
|
}
|
||
|
}
|
||
|
town_clear_upper_buf((int)v17 + v14 + screen_y_times_768[sy]);
|
||
|
LABEL_36:
|
||
|
++xa;
|
||
|
v15 += 112;
|
||
|
--v7;
|
||
|
v14 += 64;
|
||
|
v10 = a1a == (int *)1;
|
||
|
a1a = (int *)((char *)a1a - 1);
|
||
|
a5a = v15;
|
||
|
ya = v7;
|
||
|
}
|
||
|
while ( !v10 );
|
||
|
}
|
||
|
if ( some_flag )
|
||
|
{
|
||
|
if ( v7 < 0 || v7 >= 112 || xa < 0 || xa >= 112 )
|
||
|
{
|
||
|
v23 = sy;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
v22 = dPiece[0][v7 + 112 * xa];
|
||
|
level_cel_block = v22;
|
||
|
v10 = v22 == 0;
|
||
|
v23 = sy;
|
||
|
if ( !v10 )
|
||
|
{
|
||
|
v24 = (char *)gpBuffer + v14 + screen_y_times_768[sy];
|
||
|
v25 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(xa, v7);
|
||
|
sxc = 0;
|
||
|
do
|
||
|
{
|
||
|
if ( a6 >= sxc )
|
||
|
{
|
||
|
v26 = *(unsigned short *)&v25[4 * sxc];
|
||
|
level_cel_block = *(unsigned short *)&v25[4 * sxc];
|
||
|
if ( v26 )
|
||
|
drawUpperScreen(v24);
|
||
|
}
|
||
|
v24 -= 24576;
|
||
|
++sxc;
|
||
|
}
|
||
|
while ( sxc < 7 );
|
||
|
town_draw_town_all((char *)gpBuffer + v14 + screen_y_times_768[sy], xa, ya, a6, dir, v14, sy, 0);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
town_clear_upper_buf((int)gpBuffer + screen_y_times_768[v23] + v14);
|
||
|
}
|
||
|
}
|
||
|
// 69CF14: using guessed type int level_cel_block;
|
||
|
|
||
|
//----- (0045F65D) --------------------------------------------------------
|
||
|
void __fastcall T_DrawGame(int x, int y)
|
||
|
{
|
||
|
int v2; // esi
|
||
|
int v3; // edi
|
||
|
int v4; // ebx
|
||
|
int v5; // ebx
|
||
|
int v6; // esi
|
||
|
int v7; // ebx
|
||
|
int v8; // esi
|
||
|
int v9; // ebx
|
||
|
int v10; // esi
|
||
|
signed int v11; // [esp+Ch] [ebp-10h]
|
||
|
signed int a6; // [esp+10h] [ebp-Ch]
|
||
|
signed int a6a; // [esp+10h] [ebp-Ch]
|
||
|
signed int a5; // [esp+14h] [ebp-8h]
|
||
|
int ya; // [esp+18h] [ebp-4h]
|
||
|
|
||
|
v2 = ScrollInfo._sxoff + 64;
|
||
|
v3 = x - 10;
|
||
|
ya = y - 1;
|
||
|
v4 = ScrollInfo._syoff + 175;
|
||
|
dword_5C2FF8 = 10;
|
||
|
a5 = 10;
|
||
|
scr_pix_width = 640;
|
||
|
scr_pix_height = 352;
|
||
|
dword_5C2FFC = 11;
|
||
|
v11 = 5;
|
||
|
if ( chrflag || questlog )
|
||
|
{
|
||
|
ya = y - 3;
|
||
|
v3 += 2;
|
||
|
v2 = ScrollInfo._sxoff + 352;
|
||
|
a5 = 6;
|
||
|
}
|
||
|
if ( invflag || sbookflag )
|
||
|
{
|
||
|
ya -= 2;
|
||
|
v3 += 2;
|
||
|
v2 -= 32;
|
||
|
a5 = 6;
|
||
|
}
|
||
|
switch ( ScrollInfo._sdir )
|
||
|
{
|
||
|
case DIR_SW:
|
||
|
v4 = ScrollInfo._syoff + 143;
|
||
|
--v3;
|
||
|
--ya;
|
||
|
goto LABEL_15;
|
||
|
case DIR_W:
|
||
|
v4 = ScrollInfo._syoff + 143;
|
||
|
--v3;
|
||
|
--ya;
|
||
|
goto LABEL_14;
|
||
|
case DIR_NW:
|
||
|
goto LABEL_12;
|
||
|
case DIR_N:
|
||
|
goto LABEL_14;
|
||
|
case DIR_NE:
|
||
|
goto LABEL_15;
|
||
|
case DIR_E:
|
||
|
v2 -= 64;
|
||
|
--v3;
|
||
|
++ya;
|
||
|
goto LABEL_14;
|
||
|
case DIR_SE:
|
||
|
v2 -= 64;
|
||
|
--v3;
|
||
|
++ya;
|
||
|
LABEL_12:
|
||
|
++a5;
|
||
|
break;
|
||
|
case DIR_OMNI:
|
||
|
v2 -= 64;
|
||
|
v4 = ScrollInfo._syoff + 143;
|
||
|
v3 -= 2;
|
||
|
LABEL_14:
|
||
|
++a5;
|
||
|
LABEL_15:
|
||
|
v11 = 6;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
a6 = 0;
|
||
|
screen_buf_end = (int)gpBuffer + screen_y_times_768[160];
|
||
|
do
|
||
|
{
|
||
|
town_draw_upper(v3, ya++, v2, v4, a5, a6, 0);
|
||
|
v5 = v4 + 16;
|
||
|
v6 = v2 - 32;
|
||
|
town_draw_upper(v3++, ya, v6, v5, a5, a6, 1);
|
||
|
v2 = v6 + 32;
|
||
|
v4 = v5 + 16;
|
||
|
++a6;
|
||
|
}
|
||
|
while ( a6 < 7 );
|
||
|
screen_buf_end = (int)gpBuffer + screen_y_times_768[512];
|
||
|
if ( v11 > 0 )
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
town_draw_lower(v3, ya++, v2, v4, a5, 0);
|
||
|
v7 = v4 + 16;
|
||
|
v8 = v2 - 32;
|
||
|
town_draw_lower(v3++, ya, v8, v7, a5, 1);
|
||
|
v2 = v8 + 32;
|
||
|
v4 = v7 + 16;
|
||
|
--v11;
|
||
|
}
|
||
|
while ( v11 );
|
||
|
}
|
||
|
a6a = 0;
|
||
|
do
|
||
|
{
|
||
|
town_draw_lower_2(v3, ya++, v2, v4, a5, a6a, 0);
|
||
|
v9 = v4 + 16;
|
||
|
v10 = v2 - 32;
|
||
|
town_draw_lower_2(v3++, ya, v10, v9, a5, a6a, 1);
|
||
|
v2 = v10 + 32;
|
||
|
v4 = v9 + 16;
|
||
|
++a6a;
|
||
|
}
|
||
|
while ( a6a < 7 );
|
||
|
}
|
||
|
// 4B8968: using guessed type int sbookflag;
|
||
|
// 5C2FF8: using guessed type int dword_5C2FF8;
|
||
|
// 5C2FFC: using guessed type int dword_5C2FFC;
|
||
|
// 5C3000: using guessed type int scr_pix_width;
|
||
|
// 5C3004: using guessed type int scr_pix_height;
|
||
|
// 69BD04: using guessed type int questlog;
|
||
|
// 69CF0C: using guessed type int screen_buf_end;
|
||
|
|
||
|
//----- (0045F856) --------------------------------------------------------
|
||
|
void __fastcall T_DrawZoom(int x, int y)
|
||
|
{
|
||
|
int v2; // edi
|
||
|
int v3; // ebx
|
||
|
int v4; // esi
|
||
|
int v5; // esi
|
||
|
int v6; // edi
|
||
|
int v7; // esi
|
||
|
int v8; // edi
|
||
|
int v9; // esi
|
||
|
int v10; // edi
|
||
|
_WORD *v11; // edi
|
||
|
char *v12; // esi
|
||
|
char *v13; // ebx
|
||
|
signed int v14; // edx
|
||
|
signed int v15; // ecx
|
||
|
short v16; // ax
|
||
|
int v17; // eax
|
||
|
signed int v18; // [esp+Ch] [ebp-10h]
|
||
|
signed int v19; // [esp+Ch] [ebp-10h]
|
||
|
signed int a6; // [esp+10h] [ebp-Ch]
|
||
|
signed int a6a; // [esp+10h] [ebp-Ch]
|
||
|
int a6b; // [esp+10h] [ebp-Ch]
|
||
|
signed int a5; // [esp+14h] [ebp-8h]
|
||
|
int a5a; // [esp+14h] [ebp-8h]
|
||
|
int ya; // [esp+18h] [ebp-4h]
|
||
|
|
||
|
v18 = 0;
|
||
|
v2 = ScrollInfo._sxoff + 64;
|
||
|
dword_5C2FF8 = 6;
|
||
|
dword_5C2FFC = 6;
|
||
|
v3 = x - 6;
|
||
|
a5 = 6;
|
||
|
v4 = ScrollInfo._syoff + 143;
|
||
|
ya = y - 1;
|
||
|
scr_pix_width = 384;
|
||
|
scr_pix_height = 192;
|
||
|
switch ( ScrollInfo._sdir )
|
||
|
{
|
||
|
case DIR_SW:
|
||
|
v4 = ScrollInfo._syoff + 111;
|
||
|
v3 = x - 7;
|
||
|
ya = y - 2;
|
||
|
goto LABEL_9;
|
||
|
case DIR_W:
|
||
|
v4 = ScrollInfo._syoff + 111;
|
||
|
v3 = x - 7;
|
||
|
ya = y - 2;
|
||
|
goto LABEL_8;
|
||
|
case DIR_NW:
|
||
|
goto LABEL_6;
|
||
|
case DIR_N:
|
||
|
goto LABEL_8;
|
||
|
case DIR_NE:
|
||
|
goto LABEL_9;
|
||
|
case DIR_E:
|
||
|
v2 = ScrollInfo._sxoff;
|
||
|
v3 = x - 7;
|
||
|
ya = y;
|
||
|
goto LABEL_8;
|
||
|
case DIR_SE:
|
||
|
v2 = ScrollInfo._sxoff;
|
||
|
v3 = x - 7;
|
||
|
ya = y;
|
||
|
LABEL_6:
|
||
|
a5 = 7;
|
||
|
break;
|
||
|
case DIR_OMNI:
|
||
|
v2 = ScrollInfo._sxoff;
|
||
|
v4 = ScrollInfo._syoff + 111;
|
||
|
v3 = x - 8;
|
||
|
LABEL_8:
|
||
|
a5 = 7;
|
||
|
LABEL_9:
|
||
|
v18 = 1;
|
||
|
break;
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
a6 = 0;
|
||
|
screen_buf_end = (int)gpBuffer + screen_y_times_768[143];
|
||
|
do
|
||
|
{
|
||
|
town_draw_upper(v3, ya++, v2, v4, a5, a6, 0);
|
||
|
v5 = v4 + 16;
|
||
|
v6 = v2 - 32;
|
||
|
town_draw_upper(v3++, ya, v6, v5, a5, a6, 1);
|
||
|
v2 = v6 + 32;
|
||
|
v4 = v5 + 16;
|
||
|
++a6;
|
||
|
}
|
||
|
while ( a6 < 7 );
|
||
|
screen_buf_end = (int)gpBuffer + screen_y_times_768[320];
|
||
|
if ( v18 > 0 )
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
town_draw_lower(v3, ya++, v2, v4, a5, 0);
|
||
|
v7 = v4 + 16;
|
||
|
v8 = v2 - 32;
|
||
|
town_draw_lower(v3++, ya, v8, v7, a5, 1);
|
||
|
v2 = v8 + 32;
|
||
|
v4 = v7 + 16;
|
||
|
--v18;
|
||
|
}
|
||
|
while ( v18 );
|
||
|
}
|
||
|
a6a = 0;
|
||
|
do
|
||
|
{
|
||
|
town_draw_lower_2(v3, ya++, v2, v4, a5, a6a, 0);
|
||
|
v9 = v4 + 16;
|
||
|
v10 = v2 - 32;
|
||
|
town_draw_lower_2(v3++, ya, v10, v9, a5, a6a, 1);
|
||
|
v2 = v10 + 32;
|
||
|
v4 = v9 + 16;
|
||
|
++a6a;
|
||
|
}
|
||
|
while ( a6a < 7 );
|
||
|
if ( chrflag || questlog )
|
||
|
{
|
||
|
a5a = 392064;
|
||
|
goto LABEL_23;
|
||
|
}
|
||
|
if ( invflag || sbookflag )
|
||
|
{
|
||
|
a5a = 391744;
|
||
|
LABEL_23:
|
||
|
a6b = 245168;
|
||
|
v19 = 160;
|
||
|
goto LABEL_24;
|
||
|
}
|
||
|
a6b = 245088;
|
||
|
a5a = 391744;
|
||
|
v19 = 320;
|
||
|
LABEL_24:
|
||
|
v11 = (_WORD *)((char *)gpBuffer + a5a);
|
||
|
v12 = (char *)gpBuffer + a6b;
|
||
|
v13 = &gpBuffer->row_unused_1[1].col_unused_1[a5a];
|
||
|
v14 = 176;
|
||
|
do
|
||
|
{
|
||
|
v15 = v19;
|
||
|
do
|
||
|
{
|
||
|
_LOBYTE(v16) = *v12++;
|
||
|
_HIBYTE(v16) = v16;
|
||
|
*v11 = v16;
|
||
|
*(_WORD *)v13 = v16;
|
||
|
++v11;
|
||
|
v13 += 2;
|
||
|
--v15;
|
||
|
}
|
||
|
while ( v15 );
|
||
|
v12 += -v19 - 768;
|
||
|
v17 = 2 * (v19 + 768);
|
||
|
v13 -= v17;
|
||
|
v11 = (_WORD *)((char *)v11 - v17);
|
||
|
--v14;
|
||
|
}
|
||
|
while ( v14 );
|
||
|
}
|
||
|
// 4B8968: using guessed type int sbookflag;
|
||
|
// 5C2FF8: using guessed type int dword_5C2FF8;
|
||
|
// 5C2FFC: using guessed type int dword_5C2FFC;
|
||
|
// 5C3000: using guessed type int scr_pix_width;
|
||
|
// 5C3004: using guessed type int scr_pix_height;
|
||
|
// 69BD04: using guessed type int questlog;
|
||
|
// 69CF0C: using guessed type int screen_buf_end;
|
||
|
|
||
|
//----- (0045FAAB) --------------------------------------------------------
|
||
|
void __fastcall T_DrawView(int StartX, int StartY)
|
||
|
{
|
||
|
light_table_index = 0;
|
||
|
cel_transparency_active = 0;
|
||
|
if ( zoomflag )
|
||
|
T_DrawGame(StartX, StartY);
|
||
|
else
|
||
|
T_DrawZoom(StartX, StartY);
|
||
|
if ( automapflag )
|
||
|
DrawAutomap();
|
||
|
if ( stextflag && !qtextflag )
|
||
|
DrawSText();
|
||
|
if ( invflag )
|
||
|
{
|
||
|
DrawInv();
|
||
|
}
|
||
|
else if ( sbookflag )
|
||
|
{
|
||
|
DrawSpellBook();
|
||
|
}
|
||
|
DrawDurIcon();
|
||
|
if ( chrflag )
|
||
|
{
|
||
|
DrawChr();
|
||
|
}
|
||
|
else if ( questlog )
|
||
|
{
|
||
|
DrawQuestLog();
|
||
|
}
|
||
|
else if ( plr[myplr]._pStatPts && !spselflag )
|
||
|
{
|
||
|
DrawLevelUpIcon();
|
||
|
}
|
||
|
if ( uitemflag )
|
||
|
DrawUniqueInfo();
|
||
|
if ( qtextflag )
|
||
|
DrawQText();
|
||
|
if ( spselflag )
|
||
|
DrawSpellList();
|
||
|
if ( dropGoldFlag )
|
||
|
DrawGoldSplit(dropGoldValue);
|
||
|
if ( helpflag )
|
||
|
DrawHelp();
|
||
|
if ( msgflag )
|
||
|
DrawDiabloMsg();
|
||
|
if ( PauseMode && !deathflag )
|
||
|
gmenu_draw_pause();
|
||
|
DrawPlrMsg();
|
||
|
gmenu_draw();
|
||
|
doom_draw();
|
||
|
DrawInfoBox();
|
||
|
DrawLifeFlask();
|
||
|
DrawManaFlask();
|
||
|
}
|
||
|
// 4B84DC: using guessed type int dropGoldFlag;
|
||
|
// 4B8968: using guessed type int sbookflag;
|
||
|
// 4B8C98: using guessed type int spselflag;
|
||
|
// 52569C: using guessed type int zoomflag;
|
||
|
// 525740: using guessed type int PauseMode;
|
||
|
// 52B9F1: using guessed type char msgflag;
|
||
|
// 646D00: using guessed type char qtextflag;
|
||
|
// 69BD04: using guessed type int questlog;
|
||
|
// 69BEF8: using guessed type int light_table_index;
|
||
|
// 69CF94: using guessed type int cel_transparency_active;
|
||
|
// 6AA705: using guessed type char stextflag;
|
||
|
|
||
|
//----- (0045FBD7) --------------------------------------------------------
|
||
|
void __cdecl town_init_dpiece_defs_map()
|
||
|
{
|
||
|
int (*v0)[112]; // ebx
|
||
|
int v1; // ebp
|
||
|
int v2; // esi
|
||
|
char *v3; // edi
|
||
|
int v4; // ecx
|
||
|
signed int v5; // eax
|
||
|
int (*v6)[112]; // [esp+10h] [ebp-8h]
|
||
|
int y; // [esp+14h] [ebp-4h]
|
||
|
|
||
|
y = 0;
|
||
|
v6 = dPiece;
|
||
|
do
|
||
|
{
|
||
|
v0 = v6;
|
||
|
v1 = 0;
|
||
|
do
|
||
|
{
|
||
|
v2 = (*v0)[0];
|
||
|
v3 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(v1, y);
|
||
|
if ( v2 )
|
||
|
{
|
||
|
v4 = 32 * v2 + *(_DWORD *)&dpiece_defs[0].blocks - 32;
|
||
|
v5 = 0;
|
||
|
do
|
||
|
{
|
||
|
*(_WORD *)&v3[2 * v5] = *(_WORD *)(v4 + 2 * ((v5 & 1) - (v5 & 0xE)) + 28);
|
||
|
++v5;
|
||
|
}
|
||
|
while ( v5 < 16 );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
memset(v3, 0, 0x20u);
|
||
|
}
|
||
|
++v1;
|
||
|
++v0;
|
||
|
}
|
||
|
while ( v1 < 112 );
|
||
|
v6 = (int (*)[112])((char *)v6 + 4);
|
||
|
++y;
|
||
|
}
|
||
|
while ( (signed int)v6 < (signed int)dPiece[1] );
|
||
|
if ( zoomflag )
|
||
|
{
|
||
|
scr_pix_width = 640;
|
||
|
scr_pix_height = 352;
|
||
|
dword_5C2FF8 = 10;
|
||
|
dword_5C2FFC = 11;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
scr_pix_width = 384;
|
||
|
scr_pix_height = 224;
|
||
|
dword_5C2FF8 = 6;
|
||
|
dword_5C2FFC = 7;
|
||
|
}
|
||
|
}
|
||
|
// 52569C: using guessed type int zoomflag;
|
||
|
// 5C2FF8: using guessed type int dword_5C2FF8;
|
||
|
// 5C2FFC: using guessed type int dword_5C2FFC;
|
||
|
// 5C3000: using guessed type int scr_pix_width;
|
||
|
// 5C3004: using guessed type int scr_pix_height;
|
||
|
|
||
|
//----- (0045FCBF) --------------------------------------------------------
|
||
|
void __fastcall T_FillSector(unsigned char *P3Tiles, unsigned char *pSector, int xi, int yi, int w, int h) /* check 7 params: int AddSec */
|
||
|
{
|
||
|
int v7; // ebx
|
||
|
int v8; // edx
|
||
|
int v9; // edi
|
||
|
int *v10; // ecx
|
||
|
int v11; // eax
|
||
|
unsigned char *v12; // esi
|
||
|
unsigned short v13; // ax
|
||
|
int v14; // eax
|
||
|
int v15; // [esp+4h] [ebp-14h]
|
||
|
int v16; // [esp+8h] [ebp-10h]
|
||
|
unsigned char *v17; // [esp+Ch] [ebp-Ch]
|
||
|
unsigned char *v18; // [esp+10h] [ebp-8h]
|
||
|
signed int v19; // [esp+14h] [ebp-4h]
|
||
|
int a4; // [esp+24h] [ebp+Ch]
|
||
|
int a6; // [esp+2Ch] [ebp+14h]
|
||
|
|
||
|
v7 = h;
|
||
|
v17 = pSector;
|
||
|
v8 = yi;
|
||
|
v18 = P3Tiles;
|
||
|
v19 = 4;
|
||
|
if ( h > 0 )
|
||
|
{
|
||
|
do
|
||
|
{
|
||
|
v9 = w;
|
||
|
if ( w > 0 )
|
||
|
{
|
||
|
v10 = &dPiece[1][v8 + 112 * xi];
|
||
|
do
|
||
|
{
|
||
|
v11 = *(unsigned short *)&v17[v19];
|
||
|
if ( (_WORD)v11 )
|
||
|
{
|
||
|
v12 = &v18[8 * (v11 - 1)];
|
||
|
v13 = *(_WORD *)v12;
|
||
|
v12 += 2;
|
||
|
v14 = v13 + 1;
|
||
|
a4 = v14;
|
||
|
_LOWORD(v14) = *(_WORD *)v12;
|
||
|
v12 += 2;
|
||
|
a6 = ++v14;
|
||
|
_LOWORD(v14) = *(_WORD *)v12;
|
||
|
v16 = ++v14;
|
||
|
_LOWORD(v14) = *((_WORD *)v12 + 1);
|
||
|
v15 = v14 + 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
a4 = 0;
|
||
|
a6 = 0;
|
||
|
v16 = 0;
|
||
|
v15 = 0;
|
||
|
}
|
||
|
v19 += 2;
|
||
|
*(v10 - 112) = a4;
|
||
|
*v10 = a6;
|
||
|
*(v10 - 111) = v16;
|
||
|
v10[1] = v15;
|
||
|
v10 += 224;
|
||
|
--v9;
|
||
|
}
|
||
|
while ( v9 );
|
||
|
}
|
||
|
v8 += 2;
|
||
|
--v7;
|
||
|
}
|
||
|
while ( v7 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//----- (0045FD75) --------------------------------------------------------
|
||
|
void __fastcall T_FillTile(unsigned char *P3Tiles, int xx, int yy, int t)
|
||
|
{
|
||
|
unsigned char *v4; // esi
|
||
|
unsigned short v5; // ax
|
||
|
int v6; // eax
|
||
|
int v7; // ST10_4
|
||
|
int v8; // ST0C_4
|
||
|
int v9; // ST08_4
|
||
|
|
||
|
v4 = &P3Tiles[8 * (t - 1)];
|
||
|
v5 = *(_WORD *)v4;
|
||
|
v4 += 2;
|
||
|
v6 = v5 + 1;
|
||
|
v7 = v6;
|
||
|
_LOWORD(v6) = *(_WORD *)v4;
|
||
|
v4 += 2;
|
||
|
v8 = ++v6;
|
||
|
_LOWORD(v6) = *(_WORD *)v4;
|
||
|
v9 = ++v6;
|
||
|
_LOWORD(v6) = *((_WORD *)v4 + 1);
|
||
|
dPiece[xx][yy] = v7;
|
||
|
dPiece[xx + 1][yy] = v8;
|
||
|
dPiece[xx][yy + 1] = v9;
|
||
|
dPiece[xx + 1][yy + 1] = v6 + 1;
|
||
|
}
|
||
|
|
||
|
//----- (0045FDE6) --------------------------------------------------------
|
||
|
void __cdecl T_Pass3()
|
||
|
{
|
||
|
int *v1; // esi
|
||
|
int *v2; // eax
|
||
|
signed int v3; // ecx
|
||
|
unsigned char *P3Tiles; // esi
|
||
|
unsigned char *pSector; // edi
|
||
|
int xx; // edi
|
||
|
|
||
|
v1 = dPiece[1];
|
||
|
do
|
||
|
{
|
||
|
v2 = v1;
|
||
|
v3 = 56;
|
||
|
do
|
||
|
{
|
||
|
*(v2 - 112) = 0;
|
||
|
*v2 = 0;
|
||
|
*(v2 - 111) = 0;
|
||
|
v2[1] = 0;
|
||
|
v2 += 224;
|
||
|
--v3;
|
||
|
}
|
||
|
while ( v3 );
|
||
|
v1 += 2;
|
||
|
}
|
||
|
while ( (signed int)v1 < (signed int)dPiece[2] );
|
||
|
P3Tiles = LoadFileInMem("Levels\\TownData\\Town.TIL", 0);
|
||
|
pSector = LoadFileInMem("Levels\\TownData\\Sector1s.DUN", 0);
|
||
|
T_FillSector(P3Tiles, pSector, 46, 46, 25, 25);
|
||
|
mem_free_dbg(pSector);
|
||
|
pSector = LoadFileInMem("Levels\\TownData\\Sector2s.DUN", 0);
|
||
|
T_FillSector(P3Tiles, pSector, 46, 0, 25, 23);
|
||
|
mem_free_dbg(pSector);
|
||
|
pSector = LoadFileInMem("Levels\\TownData\\Sector3s.DUN", 0);
|
||
|
T_FillSector(P3Tiles, pSector, 0, 46, 23, 25);
|
||
|
mem_free_dbg(pSector);
|
||
|
pSector = LoadFileInMem("Levels\\TownData\\Sector4s.DUN", 0);
|
||
|
T_FillSector(P3Tiles, pSector, 0, 0, 23, 23);
|
||
|
mem_free_dbg(pSector);
|
||
|
if ( gbMaxPlayers == 1 )
|
||
|
{
|
||
|
if ( !(plr[myplr].pTownWarps & 1) )
|
||
|
{
|
||
|
T_FillTile(P3Tiles, 48, 20, 320);
|
||
|
}
|
||
|
if ( !(plr[myplr].pTownWarps & 2) )
|
||
|
{
|
||
|
T_FillTile(P3Tiles, 16, 68, 332);
|
||
|
T_FillTile(P3Tiles, 16, 70, 331);
|
||
|
}
|
||
|
if ( !(plr[myplr].pTownWarps & 4) )
|
||
|
{
|
||
|
xx = 36;
|
||
|
do
|
||
|
{
|
||
|
T_FillTile(P3Tiles, xx++, 78, random(0, 4) + 1);
|
||
|
}
|
||
|
while ( xx < 46 );
|
||
|
}
|
||
|
}
|
||
|
if ( quests[13]._qactive != 3 && quests[13]._qactive )
|
||
|
T_FillTile(P3Tiles, 60, 70, 342);
|
||
|
else
|
||
|
T_FillTile(P3Tiles, 60, 70, 71);
|
||
|
mem_free_dbg(P3Tiles);
|
||
|
}
|
||
|
// 45FDE6: could not find valid save-restore pair for edi
|
||
|
// 679660: using guessed type char gbMaxPlayers;
|
||
|
|
||
|
//----- (0045FF83) --------------------------------------------------------
|
||
|
void __fastcall CreateTown(int entry)
|
||
|
{
|
||
|
int v1; // edi
|
||
|
int (*v2)[112]; // esi
|
||
|
_BYTE *v3; // eax
|
||
|
int (*v4)[112]; // edx
|
||
|
signed int v5; // ebp
|
||
|
int v6; // ecx
|
||
|
|
||
|
v1 = 0;
|
||
|
dminx = 10;
|
||
|
dminy = 10;
|
||
|
dmaxx = 84;
|
||
|
dmaxy = 84;
|
||
|
if ( entry )
|
||
|
{
|
||
|
if ( entry == 1 )
|
||
|
{
|
||
|
ViewX = 25;
|
||
|
ViewY = 31;
|
||
|
}
|
||
|
else if ( entry == 7 )
|
||
|
{
|
||
|
if ( TWarpFrom == 5 )
|
||
|
{
|
||
|
ViewX = 49;
|
||
|
ViewY = 22;
|
||
|
}
|
||
|
if ( TWarpFrom == 9 )
|
||
|
{
|
||
|
ViewX = 18;
|
||
|
ViewY = 69;
|
||
|
}
|
||
|
if ( TWarpFrom == 13 )
|
||
|
{
|
||
|
ViewX = 41;
|
||
|
ViewY = 81;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ViewX = 75;
|
||
|
ViewY = 68;
|
||
|
}
|
||
|
T_Pass3();
|
||
|
memset(dTransVal, 0, 0x3100u);
|
||
|
memset(dFlags, 0, 0x3100u);
|
||
|
memset(dPlayer, 0, 0x3100u);
|
||
|
memset(dMonster, 0, 0xC400u);
|
||
|
memset(dObject, 0, 0x3100u);
|
||
|
memset(dItem, 0, 0x3100u);
|
||
|
memset(dArch, 0, 0x3100u);
|
||
|
v2 = dPiece;
|
||
|
do
|
||
|
{
|
||
|
v3 = (unsigned char *)dArch + v1;
|
||
|
v4 = v2;
|
||
|
v5 = 112;
|
||
|
do
|
||
|
{
|
||
|
v6 = (*v4)[0];
|
||
|
if ( (*v4)[0] == 360 )
|
||
|
{
|
||
|
*v3 = 1;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
switch ( v6 )
|
||
|
{
|
||
|
case 358:
|
||
|
*v3 = 2;
|
||
|
break;
|
||
|
case 129:
|
||
|
*v3 = 6;
|
||
|
break;
|
||
|
case 130:
|
||
|
*v3 = 7;
|
||
|
break;
|
||
|
case 128:
|
||
|
*v3 = 8;
|
||
|
break;
|
||
|
case 117:
|
||
|
*v3 = 9;
|
||
|
break;
|
||
|
case 157:
|
||
|
*v3 = 10;
|
||
|
break;
|
||
|
case 158:
|
||
|
*v3 = 11;
|
||
|
break;
|
||
|
case 156:
|
||
|
*v3 = 12;
|
||
|
break;
|
||
|
case 162:
|
||
|
*v3 = 13;
|
||
|
break;
|
||
|
case 160:
|
||
|
*v3 = 14;
|
||
|
break;
|
||
|
case 214:
|
||
|
*v3 = 15;
|
||
|
break;
|
||
|
case 212:
|
||
|
*v3 = 16;
|
||
|
break;
|
||
|
case 217:
|
||
|
*v3 = 17;
|
||
|
break;
|
||
|
case 216:
|
||
|
*v3 = 18;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
++v4;
|
||
|
v3 += 112;
|
||
|
--v5;
|
||
|
}
|
||
|
while ( v5 );
|
||
|
v2 = (int (*)[112])((char *)v2 + 4);
|
||
|
++v1;
|
||
|
}
|
||
|
while ( (signed int)v2 < (signed int)dPiece[1] );
|
||
|
town_init_dpiece_defs_map();
|
||
|
}
|
||
|
// 5CF328: using guessed type int dmaxx;
|
||
|
// 5CF32C: using guessed type int dmaxy;
|
||
|
// 5D2458: using guessed type int dminx;
|
||
|
// 5D245C: using guessed type int dminy;
|
||
|
// 6ABB30: using guessed type int TWarpFrom;
|