Browse Source

🐛 Fix quests not activating on Windows

Compare _uniqtype instead mName
Fixes #1152
pull/1151/head
Anders Jenbo 5 years ago
parent
commit
8b8caf5a7e
  1. 2
      Source/missiles.cpp
  2. 21
      Source/monster.cpp
  3. 2
      Source/objects.cpp
  4. 10
      Source/quests.cpp

2
Source/missiles.cpp

@ -1481,7 +1481,7 @@ void AddBerserk(Sint32 mi, Sint32 sx, Sint32 sy, Sint32 dx, Sint32 dy, Sint32 mi
dm = dMonster[tx][ty];
dm = dm > 0 ? dm - 1 : -(dm + 1);
if (dm > 3) {
if (!monster[dm]._uniqtype && monster[dm]._mAi != AI_DIABLO) {
if (monster[dm]._uniqtype == 0 && monster[dm]._mAi != AI_DIABLO) {
if (monster[dm]._mmode != MM_FADEIN && monster[dm]._mmode != MM_FADEOUT) {
if (!(monster[dm].mMagicRes & IMMUNE_MAGIC)) {
if ((!(monster[dm].mMagicRes & RESIST_MAGIC) || (monster[dm].mMagicRes & RESIST_MAGIC) == 1 && !random_(99, 2)) && monster[dm]._mmode != MM_CHARGE) {

21
Source/monster.cpp

@ -1714,14 +1714,14 @@ void SpawnLoot(int i, BOOL sendmsg)
MonsterStruct *Monst;
Monst = &monster[i];
if (QuestStatus(Q_GARBUD) && Monst->mName == UniqMonst[UMT_GARBUD].mName) {
if (QuestStatus(Q_GARBUD) && Monst->_uniqtype - 1 == UMT_GARBUD) {
CreateTypeItem(Monst->_mx + 1, Monst->_my + 1, TRUE, ITYPE_MACE, IMISC_NONE, TRUE, FALSE);
} else if (Monst->mName == UniqMonst[UMT_DEFILER].mName) {
} else if (Monst->_uniqtype - 1 == UMT_DEFILER) {
if (effect_is_playing(USFX_DEFILER8))
stream_stop();
quests[Q_DEFILER]._qlog = 0;
SpawnMapOfDoom(Monst->_mx, Monst->_my);
} else if (Monst->mName == UniqMonst[UMT_HORKDMN].mName) {
} else if (Monst->_uniqtype - 1 == UMT_HORKDMN) {
if (gbTheoQuest) {
SpawnTheodore(Monst->_mx, Monst->_my);
} else {
@ -2488,7 +2488,7 @@ BOOL M_DoTalk(int i)
if (effect_is_playing(alltext[monster[i].mtalkmsg].sfxnr))
return FALSE;
InitQTextMsg(monster[i].mtalkmsg);
if (monster[i].mName == UniqMonst[UMT_GARBUD].mName) {
if (monster[i]._uniqtype - 1 == UMT_GARBUD) {
if (monster[i].mtalkmsg == TEXT_GARBUD1) {
quests[Q_GARBUD]._qactive = QUEST_ACTIVE;
quests[Q_GARBUD]._qlog = TRUE; // BUGFIX: (?) for other quests qactive and qlog go together, maybe this should actually go into the if above (fixed)
@ -2498,7 +2498,7 @@ BOOL M_DoTalk(int i)
monster[i]._mFlags |= MFLAG_QUEST_COMPLETE;
}
}
if (monster[i].mName == UniqMonst[UMT_ZHAR].mName
if (monster[i]._uniqtype - 1 == UMT_ZHAR
&& monster[i].mtalkmsg == TEXT_ZHAR1
&& !(monster[i]._mFlags & MFLAG_QUEST_COMPLETE)) {
quests[Q_ZHAR]._qactive = QUEST_ACTIVE;
@ -2506,7 +2506,7 @@ BOOL M_DoTalk(int i)
CreateTypeItem(monster[i]._mx + 1, monster[i]._my + 1, FALSE, ITYPE_MISC, IMISC_BOOK, TRUE, FALSE);
monster[i]._mFlags |= MFLAG_QUEST_COMPLETE;
}
if (monster[i].mName == UniqMonst[UMT_SNOTSPIL].mName) {
if (monster[i]._uniqtype - 1 == UMT_SNOTSPIL) {
if (monster[i].mtalkmsg == TEXT_BANNER10 && !(monster[i]._mFlags & MFLAG_QUEST_COMPLETE)) {
ObjChangeMap(setpc_x, setpc_y, (setpc_w >> 1) + setpc_x + 2, (setpc_h >> 1) + setpc_y - 2);
tren = TransVal;
@ -2519,11 +2519,10 @@ BOOL M_DoTalk(int i)
monster[i]._mFlags |= MFLAG_QUEST_COMPLETE;
}
if (quests[Q_LTBANNER]._qvar1 < 2) {
sprintf(tempstr, "SS Talk = %i, Flags = %i", monster[i].mtalkmsg, monster[i]._mFlags); // CODEFIX: no need for tempstr, app_fatal supports v_args
app_fatal(tempstr);
app_fatal("SS Talk = %i, Flags = %i", monster[i].mtalkmsg, monster[i]._mFlags);
}
}
if (monster[i].mName == UniqMonst[UMT_LACHDAN].mName) {
if (monster[i]._uniqtype - 1 == UMT_LACHDAN) {
if (monster[i].mtalkmsg == TEXT_VEIL9) {
quests[Q_VEIL]._qactive = QUEST_ACTIVE;
quests[Q_VEIL]._qlog = TRUE;
@ -2533,9 +2532,9 @@ BOOL M_DoTalk(int i)
monster[i]._mFlags |= MFLAG_QUEST_COMPLETE;
}
}
if (monster[i].mName == UniqMonst[UMT_WARLORD].mName)
if (monster[i]._uniqtype - 1 == UMT_WARLORD)
quests[Q_WARLORD]._qvar1 = 2;
if (monster[i].mName == UniqMonst[UMT_LAZURUS].mName && gbIsMultiplayer) {
if (monster[i]._uniqtype - 1 == UMT_LAZURUS && gbIsMultiplayer) {
quests[Q_BETRAYER]._qvar1 = 6;
monster[i]._mgoal = MGOAL_NORMAL;
monster[i]._msquelch = UCHAR_MAX;

2
Source/objects.cpp

@ -4135,7 +4135,7 @@ void OperateBookCase(int pnum, int i, bool sendmsg)
SetRndSeed(object[i]._oRndSeed);
CreateTypeItem(object[i]._ox, object[i]._oy, FALSE, ITYPE_MISC, IMISC_BOOK, sendmsg, FALSE);
if (QuestStatus(Q_ZHAR)
&& monster[MAX_PLRS].mName == UniqMonst[UMT_ZHAR].mName
&& monster[MAX_PLRS]._uniqtype - 1 == UMT_ZHAR
&& monster[MAX_PLRS]._msquelch == UCHAR_MAX
&& monster[MAX_PLRS]._mhitpoints) {
monster[MAX_PLRS].mtalkmsg = TEXT_ZHAR2;

10
Source/quests.cpp

@ -340,7 +340,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
}
if (sendmsg)
NetSendCmdQuest(TRUE, Q_BUTCHER);
} else if (monster[m].mName == UniqMonst[UMT_GARBUD].mName) { //"Gharbad the Weak"
} else if (monster[m]._uniqtype - 1 == UMT_GARBUD) { //"Gharbad the Weak"
quests[Q_GARBUD]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {
@ -356,7 +356,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
} else if (plr[myplr]._pClass == PC_BARBARIAN) {
sfxdnum = PS_WARR61;
}
} else if (monster[m].mName == UniqMonst[UMT_ZHAR].mName) { //"Zhar the Mad"
} else if (monster[m]._uniqtype - 1 == UMT_ZHAR) { //"Zhar the Mad"
quests[Q_ZHAR]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {
@ -372,7 +372,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
} else if (plr[myplr]._pClass == PC_BARBARIAN) {
sfxdnum = PS_WARR62;
}
} else if (monster[m].mName == UniqMonst[UMT_LAZURUS].mName && gbIsMultiplayer) { //"Arch-Bishop Lazarus"
} else if (monster[m]._uniqtype - 1 == UMT_LAZURUS && gbIsMultiplayer) { //"Arch-Bishop Lazarus"
quests[Q_BETRAYER]._qactive = QUEST_DONE;
quests[Q_BETRAYER]._qvar1 = 7;
sfxdelay = 30;
@ -405,7 +405,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
NetSendCmdQuest(TRUE, Q_BETRAYER);
NetSendCmdQuest(TRUE, Q_DIABLO);
}
} else if (monster[m].mName == UniqMonst[UMT_LAZURUS].mName && !gbIsMultiplayer) { //"Arch-Bishop Lazarus"
} else if (monster[m]._uniqtype - 1 == UMT_LAZURUS && !gbIsMultiplayer) { //"Arch-Bishop Lazarus"
quests[Q_BETRAYER]._qactive = QUEST_DONE;
sfxdelay = 30;
InitVPTriggers();
@ -426,7 +426,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
} else if (plr[myplr]._pClass == PC_BARBARIAN) {
sfxdnum = PS_WARR83;
}
} else if (monster[m].mName == UniqMonst[UMT_WARLORD].mName) { //"Warlord of Blood"
} else if (monster[m]._uniqtype - 1 == UMT_WARLORD) { //"Warlord of Blood"
quests[Q_WARLORD]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {

Loading…
Cancel
Save