diff --git a/Source/monster.cpp b/Source/monster.cpp index 1bbbb2a55..017d66c39 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -2382,84 +2382,71 @@ int M_DoHeal(int i) int M_DoTalk(int i) { - int v1; // edi - int v2; // esi - //int v3; // eax - int v4; // eax - int v5; // edx - int v6; // ecx - char v7; // bl - int v8; // eax - char *v9; // eax + MonsterStruct *Monst; + int tren; - v1 = i; if ((DWORD)i >= MAXMONSTERS) app_fatal("M_DoTalk: Invalid monster %d", i); - v2 = v1; - M_StartStand(v1, monster[v1]._mdir); - _LOBYTE(monster[v1]._mgoal) = MGOAL_TALKING; - //_LOBYTE(v3) = effect_is_playing(alltext[monster[v1].mtalkmsg].sfxnr); - if (!effect_is_playing(alltext[monster[v1].mtalkmsg].sfxnr)) { - InitQTextMsg(monster[v2].mtalkmsg); - if (monster[v2].mName == UniqMonst[UMT_GARBUD].mName) { - v4 = monster[v2].mtalkmsg; - if (v4 == QUEST_GARBUD1) - quests[QTYPE_GARB]._qactive = 2; - quests[QTYPE_GARB]._qlog = 1; - if (v4 == QUEST_GARBUD2 && !(monster[v2]._mFlags & MFLAG_QUEST_COMPLETE)) { - SpawnItem(v1, monster[v2]._mx + 1, monster[v2]._my + 1, 1u); - monster[v2]._mFlags |= MFLAG_QUEST_COMPLETE; - } - } - if (monster[v2].mName == UniqMonst[UMT_ZHAR].mName - && monster[v2].mtalkmsg == QUEST_ZHAR1 - && !(monster[v2]._mFlags & MFLAG_QUEST_COMPLETE)) { - v5 = monster[v2]._my + 1; - v6 = monster[v2]._mx + 1; - quests[QTYPE_ZHAR]._qactive = 2; - quests[QTYPE_ZHAR]._qlog = 1; - CreateTypeItem(v6, v5, 0, 0, 24, 1, 0); - monster[v2]._mFlags |= MFLAG_QUEST_COMPLETE; - } - if (monster[v2].mName == UniqMonst[UMT_SNOTSPIL].mName) { - if (monster[v2].mtalkmsg == QUEST_BANNER10 && !(monster[v2]._mFlags & MFLAG_QUEST_COMPLETE)) { - ObjChangeMap(setpc_x, setpc_y, (setpc_w >> 1) + setpc_x + 2, (setpc_h >> 1) + setpc_y - 2); - v7 = TransVal; - TransVal = 9; - DRLG_MRectTrans(setpc_x, setpc_y, (setpc_w >> 1) + setpc_x + 4, setpc_y + (setpc_h >> 1)); - TransVal = v7; - quests[QTYPE_BOL]._qvar1 = 2; - if (quests[QTYPE_BOL]._qactive == 1) - quests[QTYPE_BOL]._qactive = 2; - monster[v2]._mFlags |= MFLAG_QUEST_COMPLETE; - } - if (quests[QTYPE_BOL]._qvar1 < 2u) { - sprintf(tempstr, "SS Talk = %i, Flags = %i", monster[v2].mtalkmsg, monster[v2]._mFlags); - app_fatal(tempstr); - } - } - if (monster[v2].mName == UniqMonst[UMT_LACHDAN].mName) { - v8 = monster[v2].mtalkmsg; - if (v8 == QUEST_VEIL9) { - quests[QTYPE_VEIL]._qactive = 2; - quests[QTYPE_VEIL]._qlog = 1; - } - if (v8 == QUEST_VEIL11 && !(monster[v2]._mFlags & MFLAG_QUEST_COMPLETE)) { - SpawnUnique(UITEM_STEELVEIL, monster[v2]._mx + 1, monster[v2]._my + 1); - monster[v2]._mFlags |= MFLAG_QUEST_COMPLETE; - } - } - v9 = monster[v2].mName; - if (v9 == UniqMonst[UMT_WARLORD].mName) - quests[QTYPE_WARLRD]._qvar1 = 2; - if (v9 == UniqMonst[UMT_LAZURUS].mName && gbMaxPlayers != 1) { - monster[v2]._msquelch = -1; - monster[v2].mtalkmsg = 0; - quests[QTYPE_VB]._qvar1 = 6; - _LOBYTE(monster[v2]._mgoal) = MGOAL_NORMAL; - } + + Monst = monster + i; + M_StartStand(i, Monst->_mdir); + monster[i]._mgoal = MGOAL_TALKING; + if (effect_is_playing(alltext[Monst->mtalkmsg].sfxnr)) + return FALSE; + InitQTextMsg(Monst->mtalkmsg); + if (Monst->mName == UniqMonst[UMT_GARBUD].mName) { + if (Monst->mtalkmsg == QUEST_GARBUD1) + quests[QTYPE_GARB]._qactive = 2; + quests[QTYPE_GARB]._qlog = TRUE; + if (Monst->mtalkmsg == QUEST_GARBUD2 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { + SpawnItem(i, Monst->_mx + 1, Monst->_my + 1, TRUE); + Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + } + } + if (Monst->mName == UniqMonst[UMT_ZHAR].mName + && Monst->mtalkmsg == QUEST_ZHAR1 + && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { + quests[QTYPE_ZHAR]._qactive = 2; + quests[QTYPE_ZHAR]._qlog = TRUE; + CreateTypeItem(Monst->_mx + 1, Monst->_my + 1, FALSE, 0, 24, TRUE, 0); + Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + } + if (Monst->mName == UniqMonst[UMT_SNOTSPIL].mName) { + if (Monst->mtalkmsg == QUEST_BANNER10 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { + ObjChangeMap(setpc_x, setpc_y, (setpc_w >> 1) + setpc_x + 2, (setpc_h >> 1) + setpc_y - 2); + tren = TransVal; + TransVal = 9; + DRLG_MRectTrans(setpc_x, setpc_y, (setpc_w >> 1) + setpc_x + 4, setpc_y + (setpc_h >> 1)); + TransVal = tren; + quests[QTYPE_BOL]._qvar1 = 2; + if (quests[QTYPE_BOL]._qactive == 1) + quests[QTYPE_BOL]._qactive = 2; + Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + } + if (quests[QTYPE_BOL]._qvar1 < 2) { + sprintf(tempstr, "SS Talk = %i, Flags = %i", Monst->mtalkmsg, Monst->_mFlags); + app_fatal(tempstr); + } + } + if (Monst->mName == UniqMonst[UMT_LACHDAN].mName) { + if (Monst->mtalkmsg == QUEST_VEIL9) { + quests[QTYPE_VEIL]._qactive = 2; + quests[QTYPE_VEIL]._qlog = TRUE; + } + if (Monst->mtalkmsg == QUEST_VEIL11 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) { + SpawnUnique(UITEM_STEELVEIL, Monst->_mx + 1, Monst->_my + 1); + Monst->_mFlags |= MFLAG_QUEST_COMPLETE; + } + } + if (Monst->mName == UniqMonst[UMT_WARLORD].mName) + quests[QTYPE_WARLRD]._qvar1 = 2; + if (Monst->mName == UniqMonst[UMT_LAZURUS].mName && gbMaxPlayers != 1) { + Monst->_msquelch = -1; + Monst->mtalkmsg = 0; + quests[QTYPE_VB]._qvar1 = 6; + Monst->_mgoal = MGOAL_NORMAL; } - return 0; + return FALSE; } // 4351F5: could not find valid save-restore pair for ebp // 5A5590: using guessed type char TransVal;