diff --git a/Source/player.cpp b/Source/player.cpp index 5cfae22ba..cfb08dcfa 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -932,65 +932,55 @@ void __cdecl InitMultiView() void __fastcall InitPlayerLoc(int pnum, BOOL flag) { - int v2; // esi - int v3; // esi - int v4; // edi - int v5; // ebx - char *v6; // eax - int v7; // ebx - int v8; // edi - char *v9; // eax - int v10; // edi - int v11; // ebx - char *v12; // eax - BOOL v13; // [esp+Ch] [ebp-Ch] - int v14; // [esp+10h] [ebp-8h] - int v15; // [esp+10h] [ebp-8h] - int v16; // [esp+10h] [ebp-8h] - signed int v17; // [esp+14h] [ebp-4h] - signed int v18; // [esp+14h] [ebp-4h] - signed int v19; // [esp+14h] [ebp-4h] - - v2 = pnum; - v13 = flag; - if ( (unsigned int)pnum >= MAX_PLRS ) + if ( (DWORD)pnum >= MAX_PLRS ) { TermMsg("InitPlayer: illegal player %d", pnum); - v3 = v2; - v14 = 0; - v4 = plr[v3].WorldX - 1; - v5 = plr[v3].WorldY + 1; - v6 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(v4, v5); - v17 = 2; - do - v14 |= *(unsigned short *)&v6[2 * v17++]; - while ( v17 < 10 ); - if ( v14 | dArch[v4][v5] | nSolidTable[dPiece[v4][v5]] ) - plr[v3]._peflag = 1; - else - plr[v3]._peflag = 0; - if ( v13 == 1 && plr[v3]._peflag == 1 ) - { - v7 = plr[v3].WorldX; - v15 = 0; - v8 = plr[v3].WorldY + 2; - v9 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(plr[v3].WorldX, v8); - v18 = 2; - do - v15 |= *(unsigned short *)&v9[2 * v18++]; - while ( v18 < 10 ); - if ( !(v15 | dArch[v7][v8]) ) - { - v16 = 0; - v10 = plr[v3].WorldX - 2; - v11 = plr[v3].WorldY + 1; - v12 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(v10, v11); - v19 = 2; - do - v16 |= *(unsigned short *)&v12[2 * v19++]; - while ( v19 < 10 ); - if ( v16 | dArch[v10][v11] ) - plr[v3]._peflag = 2; - } + } + + int x = plr[pnum].WorldX - 1; + int y = plr[pnum].WorldY + 1; + int bitflags = 0; + USHORT *pieces = (USHORT *)dpiece_defs_map_1 + 16 * gendung_get_dpiece_num_from_coord(x, y); + + int i; + for ( i = 2; i < 10; i++ ) { + bitflags |= pieces[i]; + } + + if ( bitflags | nSolidTable[dPiece[x][y]] | dArch[x][y] ) { + plr[pnum]._peflag = 1; + } + else { + plr[pnum]._peflag = 0; + } + + if ( flag != 1 || plr[pnum]._peflag != 1 ) { + return; + } + + x = plr[pnum].WorldX; + y = plr[pnum].WorldY + 2; + bitflags = 0; + pieces = (USHORT *)dpiece_defs_map_1 + 16 * gendung_get_dpiece_num_from_coord(x, y); + + for ( i = 2; i < 10; i++ ) { + bitflags |= pieces[i]; + } + + if ( bitflags | dArch[x][y] ) { + return; + } + + x = plr[pnum].WorldX - 2; + y = plr[pnum].WorldY + 1; + bitflags = 0; + pieces = (USHORT *)dpiece_defs_map_1 + 16 * gendung_get_dpiece_num_from_coord(x, y); + + for ( i = 2; i < 10; i++ ) { + bitflags |= pieces[i]; + } + + if ( bitflags | dArch[x][y] ) { + plr[pnum]._peflag = 2; } }