diff --git a/Source/quests.cpp b/Source/quests.cpp index d3471045f..f4a8d98df 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -126,76 +126,72 @@ void InitQuests() void CheckQuests() { - //int v0; // eax - unsigned char *v1; // esi - unsigned char v2; // cl - - //_LOBYTE(v0) = QuestStatus(QTYPE_VB); - if (QuestStatus(QTYPE_VB)) { - if (gbMaxPlayers == 1) - goto LABEL_6; - if (quests[QTYPE_VB]._qvar1 == 2) { - AddObject(OBJ_ALTBOY, 2 * setpc_x + 20, 2 * setpc_y + 22); - quests[QTYPE_VB]._qvar1 = 3; - NetSendCmdQuest(TRUE, 0xFu); - } + int i, rportx, rporty; + + if(QuestStatus(QTYPE_VB) && gbMaxPlayers != 1 && quests[QTYPE_VB]._qvar1 == 2) { + AddObject(OBJ_ALTBOY, 2 * setpc_x + 20, 2 * setpc_y + 22); + quests[QTYPE_VB]._qvar1 = 3; + NetSendCmdQuest(TRUE, QTYPE_VB); } - if (gbMaxPlayers != 1) + + if(gbMaxPlayers != 1) { return; -LABEL_6: - if (currlevel == quests[QTYPE_VB]._qlevel && !setlevel && quests[QTYPE_VB]._qvar1 >= 2u) { - if (quests[QTYPE_VB]._qactive != 2 && quests[QTYPE_VB]._qactive != 3) - goto LABEL_29; - if (!quests[QTYPE_VB]._qvar2 || quests[QTYPE_VB]._qvar2 == 2) { - quests[QTYPE_VB]._qtx = 2 * quests[QTYPE_VB]._qtx + 16; - quests[QTYPE_VB]._qty = 2 * quests[QTYPE_VB]._qty + 16; - AddMissile(quests[QTYPE_VB]._qtx, quests[QTYPE_VB]._qty, quests[QTYPE_VB]._qtx, quests[QTYPE_VB]._qty, 0, MIS_RPORTAL, 0, myplr, 0, 0); - quests[QTYPE_VB]._qvar2 = 1; - if (quests[QTYPE_VB]._qactive == 2) - quests[QTYPE_VB]._qvar1 = 3; - } } - if (quests[QTYPE_VB]._qactive == 3) { - if (!setlevel) - goto LABEL_29; - if (setlvlnum == SL_VILEBETRAYER && quests[QTYPE_VB]._qvar2 == 4) { - AddMissile(35, 32, 35, 32, 0, MIS_RPORTAL, 0, myplr, 0, 0); - quests[QTYPE_VB]._qvar2 = 3; + + if(currlevel == quests[QTYPE_VB]._qlevel + && !setlevel + && quests[QTYPE_VB]._qvar1 >= 2 + && (quests[QTYPE_VB]._qactive == 2 || quests[QTYPE_VB]._qactive == 3) + && (quests[QTYPE_VB]._qvar2 == 0 || quests[QTYPE_VB]._qvar2 == 2)) { + quests[QTYPE_VB]._qtx = 2 * quests[QTYPE_VB]._qtx + 16; + quests[QTYPE_VB]._qty = 2 * quests[QTYPE_VB]._qty + 16; + rportx = quests[QTYPE_VB]._qtx; + rporty = quests[QTYPE_VB]._qty; + AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0); + quests[QTYPE_VB]._qvar2 = 1; + if(quests[QTYPE_VB]._qactive == 2) { + quests[QTYPE_VB]._qvar1 = 3; } } - if (setlevel) { - if (setlvlnum == quests[QTYPE_PW]._qslvl - && quests[QTYPE_PW]._qactive != 1 - && leveltype == quests[QTYPE_PW]._qlvltype - && nummonsters == 4 - && quests[QTYPE_PW]._qactive != 3) { + + if(quests[QTYPE_VB]._qactive == 3 + && setlevel + && setlvlnum == SL_VILEBETRAYER + && quests[QTYPE_VB]._qvar2 == 4) { + rportx = 35; + rporty = 32; + AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0); + quests[QTYPE_VB]._qvar2 = 3; + } + + if(setlevel) { + if(setlvlnum == quests[QTYPE_PW]._qslvl + && quests[QTYPE_PW]._qactive != 1 + && leveltype == quests[QTYPE_PW]._qlvltype + && nummonsters == 4 + && quests[QTYPE_PW]._qactive != 3) { quests[QTYPE_PW]._qactive = 3; PlaySfxLoc(IS_QUESTDN, plr[myplr].WorldX, plr[myplr].WorldY); LoadPalette("Levels\\L3Data\\L3pwater.pal"); WaterDone = 32; } - if (WaterDone > 0) { + if(WaterDone > 0) { palette_update_quest_palette(WaterDone); - --WaterDone; - } - return; - } -LABEL_29: - if (plr[myplr]._pmode == PM_STAND) { - v1 = &quests[0]._qactive; - do { - if (currlevel == *(v1 - 2)) { - v2 = v1[10]; - if (v2) { - if (*v1 && plr[myplr].WorldX == *(_DWORD *)(v1 + 2) && plr[myplr].WorldY == *(_DWORD *)(v1 + 6)) { - if (v1[1] != -1) - setlvltype = v1[1]; - StartNewLvl(myplr, WM_DIABSETLVL, v2); - } + WaterDone--; + } + } else if(plr[myplr]._pmode == PM_STAND) { + for(i = 0; i < MAXQUESTS; i++) { + if(currlevel == quests[i]._qlevel + && quests[i]._qslvl != 0 + && quests[i]._qactive != 0 + && plr[myplr].WorldX == quests[i]._qtx + && plr[myplr].WorldY == quests[i]._qty) { + if(quests[i]._qlvltype != 255) { + setlvltype = quests[i]._qlvltype; } + StartNewLvl(myplr, WM_DIABSETLVL, quests[i]._qslvl); } - v1 += 24; - } while ((signed int)v1 < (signed int)&quests[MAXQUESTS]._qactive); + } } } // 5BB1ED: using guessed type char leveltype;