Browse Source

Clean up M_DoTalk.

pull/100/head
Sergey Semushin 7 years ago committed by Anders Jenbo
parent
commit
e152599c48
  1. 135
      Source/monster.cpp

135
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;

Loading…
Cancel
Save