diff --git a/Source/trigs.cpp b/Source/trigs.cpp index c01a1e098..1b4903519 100644 --- a/Source/trigs.cpp +++ b/Source/trigs.cpp @@ -516,126 +516,60 @@ BOOL ForceL1Trig() return FALSE; } -unsigned char ForceL2Trig() +BOOL ForceL2Trig() { - int *v0; // eax - int *v1; // ebp - int v2; // edi - TriggerStruct *v3; // esi - int v4; // ebx - int v5; // eax - int *v6; // eax - int *v7; // esi - int v8; // eax - int *v9; // ecx - int v10; // eax - int v11; // ecx - int v12; // eax - int *v13; // eax - int *v14; // ebp - TriggerStruct *v15; // esi - int v16; // ebx - int v17; // eax - int v19; // edi + int i, j, dx, dy; - if (L2UpList[0] == -1) { - LABEL_11: - if (L2DownList[0] != -1) { - v6 = L2DownList; - v7 = L2DownList; - while (1) { - if (dPiece[cursmx][cursmy] == *v6) { - sprintf(infostr, "Down to level %i", currlevel + 1); - v8 = 0; - if (trigflag[4] > 0) - break; + for (i = 0; L2UpList[i] != -1; i++) { + if (dPiece[cursmx][cursmy] == L2UpList[i]) { + for (j = 0; j < trigflag[4]; j++) { + if (trigs[j]._tmsg == WM_DIABPREVLVL) { + dx = abs(trigs[j]._tx - cursmx); + dy = abs(trigs[j]._ty - cursmy); + if (dx < 4 && dy < 4) { + sprintf(infostr, "Up to level %i", currlevel - 1); + cursmx = trigs[j]._tx; + cursmy = trigs[j]._ty; + return TRUE; + } } - LABEL_18: - ++v7; - v6 = v7; - if (*v7 == -1) - goto LABEL_22; - } - v9 = &trigs[0]._tmsg; - while (*v9 != WM_DIABNEXTLVL) { - ++v8; - v9 += 4; - if (v8 >= trigflag[4]) - goto LABEL_18; - } - v10 = v8; - v11 = trigs[v10]._tx; - v12 = trigs[v10]._ty; - cursmx = v11; - goto LABEL_37; - } - LABEL_22: - if (currlevel != 5 || L2TWarpUpList[0] == -1) - return 0; - v13 = L2TWarpUpList; - v14 = L2TWarpUpList; - while (1) { - if (dPiece[cursmx][cursmy] == *v13) { - v2 = 0; - if (trigflag[4] > 0) - break; - } - LABEL_32: - ++v14; - v13 = v14; - if (*v14 == -1) - return 0; - } - v15 = trigs; - while (1) { - if (v15->_tmsg == WM_DIABTWARPUP) { - v16 = abs(v15->_tx - cursmx); - v17 = abs(v15->_ty - cursmy); - if (v16 < 4 && v17 < 4) - break; } - ++v2; - ++v15; - if (v2 >= trigflag[4]) - goto LABEL_32; } - strcpy(infostr, "Up to town"); - } else { - v0 = L2UpList; - v1 = L2UpList; - while (1) { - if (dPiece[cursmx][cursmy] == *v0) { - v2 = 0; - if (trigflag[4] > 0) - break; + } + + for (i = 0; L2DownList[i] != -1; i++) { + if (dPiece[cursmx][cursmy] == L2DownList[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_10: - ++v1; - v0 = v1; - if (*v1 == -1) - goto LABEL_11; } - v3 = trigs; - while (1) { - if (v3->_tmsg == WM_DIABPREVLVL) { - v4 = abs(v3->_tx - cursmx); - v5 = abs(v3->_ty - cursmy); - if (v4 < 4 && v5 < 4) - break; + } + + if (currlevel == 5) { + for (i = 0; L2TWarpUpList[i] != -1; i++) { + if (dPiece[cursmx][cursmy] == L2TWarpUpList[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; + } + } + } } - ++v2; - ++v3; - if (v2 >= trigflag[4]) - goto LABEL_10; } - sprintf(infostr, "Up to level %i", currlevel - 1); } - v19 = v2; - cursmx = trigs[v19]._tx; - v12 = trigs[v19]._ty; -LABEL_37: - cursmy = v12; - return 1; + + return FALSE; } unsigned char ForceL3Trig() diff --git a/Source/trigs.h b/Source/trigs.h index b23930ccf..3e3bdf0d5 100644 --- a/Source/trigs.h +++ b/Source/trigs.h @@ -18,7 +18,7 @@ void InitPWaterTriggers(); void InitVPTriggers(); BOOL ForceTownTrig(); BOOL ForceL1Trig(); -unsigned char ForceL2Trig(); +BOOL ForceL2Trig(); unsigned char ForceL3Trig(); unsigned char ForceL4Trig(); void Freeupstairs();