Browse Source

Introduce UseMultiplayerQuests

pull/5478/head
obligaron 4 years ago committed by Anders Jenbo
parent
commit
57a3ede76a
  1. 11
      Source/diablo.cpp
  2. 26
      Source/msg.cpp
  3. 13
      Source/quests.cpp
  4. 1
      Source/quests.h

11
Source/diablo.cpp

@ -2745,10 +2745,10 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir)
for (int y = 0; y < DMAXY; y++)
UpdateAutomapExplorer({ x, y }, MAP_EXP_SELF);
}
if (!gbIsMultiplayer)
ResyncQuests();
else
if (UseMultiplayerQuests())
ResyncMPQuests();
else
ResyncQuests();
} else {
LoadSetMap();
IncProgress();
@ -2791,8 +2791,11 @@ void LoadGameLevel(bool firstflag, lvl_entry lvldir)
} else {
LoadLevel();
}
if (gbIsMultiplayer)
if (gbIsMultiplayer) {
DeltaLoadLevel();
if (!UseMultiplayerQuests())
ResyncQuests();
}
InitMissiles();
IncProgress();

26
Source/msg.cpp

@ -423,14 +423,15 @@ byte *DeltaExportJunk(byte *dst)
int q = 0;
for (auto &quest : Quests) {
if (!QuestsData[quest._qidx].isSinglePlayerOnly) {
sgJunk.quests[q].qlog = quest._qlog ? 1 : 0;
sgJunk.quests[q].qstate = quest._qactive;
sgJunk.quests[q].qvar1 = quest._qvar1;
memcpy(dst, &sgJunk.quests[q], sizeof(MultiQuests));
dst += sizeof(MultiQuests);
q++;
if (QuestsData[quest._qidx].isSinglePlayerOnly && UseMultiplayerQuests()) {
continue;
}
sgJunk.quests[q].qlog = quest._qlog ? 1 : 0;
sgJunk.quests[q].qstate = quest._qactive;
sgJunk.quests[q].qvar1 = quest._qvar1;
memcpy(dst, &sgJunk.quests[q], sizeof(MultiQuests));
dst += sizeof(MultiQuests);
q++;
}
return dst;
@ -450,11 +451,12 @@ void DeltaImportJunk(const byte *src)
int q = 0;
for (int qidx = 0; qidx < MAXQUESTS; qidx++) {
if (!QuestsData[qidx].isSinglePlayerOnly) {
memcpy(&sgJunk.quests[q], src, sizeof(MultiQuests));
src += sizeof(MultiQuests);
q++;
if (QuestsData[qidx].isSinglePlayerOnly && UseMultiplayerQuests()) {
continue;
}
memcpy(&sgJunk.quests[q], src, sizeof(MultiQuests));
src += sizeof(MultiQuests);
q++;
}
}
@ -2537,7 +2539,7 @@ void DeltaSyncJunk()
int q = 0;
for (auto &quest : Quests) {
if (QuestsData[quest._qidx].isSinglePlayerOnly) {
if (QuestsData[quest._qidx].isSinglePlayerOnly && UseMultiplayerQuests()) {
continue;
}
if (sgJunk.quests[q].qstate != QUEST_INVALID) {

13
Source/quests.cpp

@ -249,7 +249,7 @@ void InitQuests()
quest._qlog = false;
quest._qmsg = questData._qdmsg;
if (!gbIsMultiplayer) {
if (!UseMultiplayerQuests()) {
quest._qlevel = questData._qdlvl;
quest._qactive = QUEST_INIT;
} else if (!questData.isSinglePlayerOnly) {
@ -258,7 +258,7 @@ void InitQuests()
}
}
if (!gbIsMultiplayer && *sgOptions.Gameplay.randomizeQuests) {
if (!UseMultiplayerQuests() && *sgOptions.Gameplay.randomizeQuests) {
// Quests are set from the seed used to generate level 16.
InitialiseQuestPools(glSeedTbl[15], Quests);
}
@ -274,7 +274,7 @@ void InitQuests()
if (Quests[Q_ROCK]._qactive == QUEST_NOTAVAIL)
Quests[Q_ROCK]._qvar2 = 2;
Quests[Q_LTBANNER]._qvar1 = 1;
if (gbIsMultiplayer)
if (UseMultiplayerQuests())
Quests[Q_BETRAYER]._qvar1 = 2;
}
@ -804,6 +804,11 @@ void SetMultiQuest(int q, quest_state s, bool log, int v1, int v2)
quest._qvar2 = v2;
}
bool UseMultiplayerQuests()
{
return gbIsMultiplayer;
}
bool Quest::IsAvailable()
{
if (setlevel)
@ -812,7 +817,7 @@ bool Quest::IsAvailable()
return false;
if (_qactive == QUEST_NOTAVAIL)
return false;
if (gbIsMultiplayer && QuestsData[_qidx].isSinglePlayerOnly)
if (QuestsData[_qidx].isSinglePlayerOnly && UseMultiplayerQuests())
return false;
return true;

1
Source/quests.h

@ -104,6 +104,7 @@ void QuestlogDown();
void QuestlogEnter();
void QuestlogESC();
void SetMultiQuest(int q, quest_state s, bool log, int v1, int v2);
bool UseMultiplayerQuests();
/* rdata */
extern QuestData QuestsData[];

Loading…
Cancel
Save