diff --git a/Source/trigs.cpp b/Source/trigs.cpp index 1b4903519..a424c9aa1 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -572,124 +572,56 @@ BOOL ForceL2Trig() return FALSE; } -unsigned char ForceL3Trig() +BOOL ForceL3Trig() { - int *v0; // eax - int *v1; // esi - int v2; // eax - int *v3; // ecx - int *v4; // ecx - int *v5; // esi - int v6; // ecx - int v7; // eax - int *v8; // ecx - int *v9; // eax - int *v10; // ebp - int v11; // edi - TriggerStruct *v12; // esi - int v13; // ebx - int v14; // eax - int v15; // eax - int v16; // ecx - int v17; // eax - int v18; // edi + int i, j, dx, dy; - if (L3UpList[0] != -1) { - v0 = L3UpList; - v1 = L3UpList; - while (1) { - if (dPiece[cursmx][cursmy] == *v0) { - sprintf(infostr, "Up to level %i", currlevel - 1); - v2 = 0; - if (trigflag[4] > 0) - break; + for (i = 0; L3UpList[i] != -1; ++i) { + if (dPiece[cursmx][cursmy] == L3UpList[i]) { + sprintf(infostr, "Up to level %i", currlevel - 1); + for (j = 0; j < trigflag[4]; j++) { + if (trigs[j]._tmsg == WM_DIABPREVLVL) { + cursmx = trigs[j]._tx; + cursmy = trigs[j]._ty; + return TRUE; + } } - LABEL_8: - ++v1; - v0 = v1; - if (*v1 == -1) - goto LABEL_9; } - v3 = &trigs[0]._tmsg; - while (*v3 != WM_DIABPREVLVL) { - ++v2; - v3 += 4; - if (v2 >= trigflag[4]) - goto LABEL_8; - } - goto LABEL_31; } -LABEL_9: - if (L3DownList[0] != -1) { - v4 = L3DownList; - v5 = L3DownList; - while (1) { - v6 = *v4; - v7 = cursmy + 112 * cursmx; - if (dPiece[0][v7] == v6 || dPiece[1][v7] == v6 || dPiece[2][v7] == v6) { - sprintf(infostr, "Down to level %i", currlevel + 1); - v2 = 0; - if (trigflag[4] > 0) - break; + + for (i = 0; L3DownList[i] != -1; i++) { + if (dPiece[cursmx][cursmy] == L3DownList[i] || dPiece[cursmx + 1][cursmy] == L3DownList[i] || dPiece[cursmx + 2][cursmy] == L3DownList[i]) { + sprintf(infostr, "Down to level %i", currlevel + 1); + for (j = 0; j < trigflag[4]; j++) { + if (trigs[j]._tmsg == WM_DIABNEXTLVL) { + cursmx = trigs[j]._tx; + cursmy = trigs[j]._ty; + return TRUE; + } } - LABEL_18: - ++v5; - v4 = v5; - if (*v5 == -1) - goto LABEL_19; } - v8 = &trigs[0]._tmsg; - while (*v8 != WM_DIABNEXTLVL) { - ++v2; - v8 += 4; - if (v2 >= trigflag[4]) - goto LABEL_18; - } - LABEL_31: - v15 = v2; - v16 = trigs[v15]._tx; - v17 = trigs[v15]._ty; - cursmx = v16; - LABEL_33: - cursmy = v17; - return 1; } -LABEL_19: - if (currlevel == 9 && L3TWarpUpList[0] != -1) { - v9 = L3TWarpUpList; - v10 = L3TWarpUpList; - while (1) { - if (dPiece[cursmx][cursmy] == *v9) { - v11 = 0; - if (trigflag[4] > 0) - break; - } - LABEL_29: - ++v10; - v9 = v10; - if (*v10 == -1) - return 0; - } - v12 = trigs; - while (1) { - if (v12->_tmsg == WM_DIABTWARPUP) { - v13 = abs(v12->_tx - cursmx); - v14 = abs(v12->_ty - cursmy); - if (v13 < 4 && v14 < 4) - break; + + if (currlevel == 9) { + for (i = 0; L3TWarpUpList[i] != -1; i++) { + if (dPiece[cursmx][cursmy] == L3TWarpUpList[i]) { + for (j = 0; j < trigflag[4]; j++) { + if (trigs[j]._tmsg == WM_DIABTWARPUP) { + dx = abs(trigs[j]._tx - cursmx); + dy = abs(trigs[j]._ty - cursmy); + if (dx < 4 && dy < 4) { + strcpy(infostr, "Up to town"); + cursmx = trigs[j]._tx; + cursmy = trigs[j]._ty; + return TRUE; + } + } + } } - ++v11; - ++v12; - if (v11 >= trigflag[4]) - goto LABEL_29; } - strcpy(infostr, "Up to town"); - v18 = v11; - cursmx = trigs[v18]._tx; - v17 = trigs[v18]._ty; - goto LABEL_33; } - return 0; + + return FALSE; } unsigned char ForceL4Trig() diff --git a/Source/trigs.h b/Source/trigs.h index 3e3bdf0d5..98bf7f994 100644 --- a/Source/trigs.h +++ b/Source/trigs.h @@ -19,7 +19,7 @@ void InitVPTriggers(); BOOL ForceTownTrig(); BOOL ForceL1Trig(); BOOL ForceL2Trig(); -unsigned char ForceL3Trig(); +BOOL ForceL3Trig(); unsigned char ForceL4Trig(); void Freeupstairs(); BOOL ForceSKingTrig();