diff --git a/Source/quests.cpp b/Source/quests.cpp index e003e6ee5..d96069adc 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -225,6 +225,14 @@ void PrintQLString(const Surface &out, int x, int y, string_view str, bool marke } } +void StartPWaterPurify() +{ + PlaySfxLoc(IS_QUESTDN, MyPlayer->position.tile); + LoadPalette("levels\\l3data\\l3pwater.pal", false); + UpdatePWaterPalette(); + WaterDone = 32; +} + } // namespace void InitQuests() @@ -352,10 +360,7 @@ void CheckQuests() && Quests[Q_PWATER]._qactive != QUEST_DONE) { Quests[Q_PWATER]._qactive = QUEST_DONE; NetSendCmdQuest(true, Quests[Q_PWATER]); - PlaySfxLoc(IS_QUESTDN, MyPlayer->position.tile); - LoadPalette("levels\\l3data\\l3pwater.pal", false); - UpdatePWaterPalette(); - WaterDone = 32; + StartPWaterPurify(); } } else if (MyPlayer->_pmode == PM_STAND) { for (auto &quest : Quests) { @@ -831,6 +836,7 @@ void SetMultiQuest(int q, quest_state s, bool log, int v1, int v2) return; auto &quest = Quests[q]; + quest_state oldQuestState = quest._qactive; if (quest._qactive != QUEST_DONE) { if (s > quest._qactive) quest._qactive = s; @@ -843,6 +849,10 @@ void SetMultiQuest(int q, quest_state s, bool log, int v1, int v2) if (!UseMultiplayerQuests()) { // Ensure that changes on another client is also updated on our own ResyncQuests(); + + // Ensure that water also changes for remote players + if (quest._qidx == Q_PWATER && oldQuestState == QUEST_ACTIVE && quest._qactive == QUEST_DONE && MyPlayer->isOnLevel(quest._qslvl)) + StartPWaterPurify(); } }