From b46750ace308683050e6425eccb49593e9102901 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sat, 10 Apr 2021 07:22:41 +0200 Subject: [PATCH] :recycle: Change _qflags to a meaningful bool --- Source/msg.cpp | 4 ++-- Source/quests.cpp | 56 +++++++++++++++++++++++------------------------ Source/quests.h | 7 +----- 3 files changed, 31 insertions(+), 36 deletions(-) diff --git a/Source/msg.cpp b/Source/msg.cpp index 23a701825..f11c02d4f 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -266,7 +266,7 @@ static BYTE *DeltaExportJunk(BYTE *dst) } for (i = 0, q = 0; i < MAXQUESTS; i++) { - if (questlist[i]._qflags == QUEST_ANY) { + if (!questlist[i].isSinglePlayerOnly) { sgJunk.quests[q].qlog = quests[i]._qlog; sgJunk.quests[q].qstate = quests[i]._qactive; sgJunk.quests[q].qvar1 = quests[i]._qvar1; @@ -302,7 +302,7 @@ static void DeltaImportJunk(BYTE *src) } for (i = 0, q = 0; i < MAXQUESTS; i++) { - if (questlist[i]._qflags == QUEST_ANY) { + if (!questlist[i].isSinglePlayerOnly) { memcpy(&sgJunk.quests[q], src, sizeof(MultiQuests)); src += sizeof(MultiQuests); quests[i]._qlog = sgJunk.quests[q].qlog; diff --git a/Source/quests.cpp b/Source/quests.cpp index 8519cc2e3..a39277716 100644 --- a/Source/quests.cpp +++ b/Source/quests.cpp @@ -25,31 +25,31 @@ int ReturnLvl; /** Contains the data related to each quest_id. */ QuestData questlist[] = { // clang-format off - // _qdlvl, _qdmultlvl, _qlvlt, _qdtype, _qdrnd, _qslvl, _qflags, _qdmsg, _qlstr - { 5, -1, DTYPE_NONE, Q_ROCK, 100, 0, QUEST_SINGLE, TEXT_INFRA5, "The Magic Rock" }, - { 9, -1, DTYPE_NONE, Q_MUSHROOM, 100, 0, QUEST_SINGLE, TEXT_MUSH8, "Black Mushroom" }, - { 4, -1, DTYPE_NONE, Q_GARBUD, 100, 0, QUEST_SINGLE, TEXT_GARBUD1, "Gharbad The Weak" }, - { 8, -1, DTYPE_NONE, Q_ZHAR, 100, 0, QUEST_SINGLE, TEXT_ZHAR1, "Zhar the Mad" }, - { 14, -1, DTYPE_NONE, Q_VEIL, 100, 0, QUEST_SINGLE, TEXT_VEIL9, "Lachdanan" }, - { 15, -1, DTYPE_NONE, Q_DIABLO, 100, 0, QUEST_ANY, TEXT_VILE3, "Diablo" }, - { 2, 2, DTYPE_NONE, Q_BUTCHER, 100, 0, QUEST_ANY, TEXT_BUTCH9, "The Butcher" }, - { 4, -1, DTYPE_NONE, Q_LTBANNER, 100, 0, QUEST_SINGLE, TEXT_BANNER2, "Ogden's Sign" }, - { 7, -1, DTYPE_NONE, Q_BLIND, 100, 0, QUEST_SINGLE, TEXT_BLINDING, "Halls of the Blind" }, - { 5, -1, DTYPE_NONE, Q_BLOOD, 100, 0, QUEST_SINGLE, TEXT_BLOODY, "Valor" }, - { 10, -1, DTYPE_NONE, Q_ANVIL, 100, 0, QUEST_SINGLE, TEXT_ANVIL5, "Anvil of Fury" }, - { 13, -1, DTYPE_NONE, Q_WARLORD, 100, 0, QUEST_SINGLE, TEXT_BLOODWAR, "Warlord of Blood" }, - { 3, 3, DTYPE_CATHEDRAL, Q_SKELKING, 100, 1, QUEST_ANY, TEXT_KING2, "The Curse of King Leoric" }, - { 2, -1, DTYPE_CAVES, Q_PWATER, 100, 4, QUEST_SINGLE, TEXT_POISON3, "Poisoned Water Supply" }, - { 6, -1, DTYPE_CATACOMBS, Q_SCHAMB, 100, 2, QUEST_SINGLE, TEXT_BONER, "The Chamber of Bone" }, - { 15, 15, DTYPE_CATHEDRAL, Q_BETRAYER, 100, 5, QUEST_ANY, TEXT_VILE1, "Archbishop Lazarus" }, - { 17, 17, DTYPE_NONE, Q_GRAVE, 100, 0, QUEST_ANY, TEXT_GRAVE7, "Grave Matters" }, - { 9, 9, DTYPE_NONE, Q_FARMER, 100, 0, QUEST_ANY, TEXT_FARMER1, "Farmer's Orchard" }, - { 17, -1, DTYPE_NONE, Q_GIRL, 100, 0, QUEST_SINGLE, TEXT_GIRL2, "Little Girl" }, - { 19, -1, DTYPE_NONE, Q_TRADER, 100, 0, QUEST_SINGLE, TEXT_TRADER, "Wandering Trader" }, - { 17, 17, DTYPE_NONE, Q_DEFILER, 100, 0, QUEST_ANY, TEXT_DEFILER1, "The Defiler" }, - { 21, 21, DTYPE_NONE, Q_NAKRUL, 100, 0, QUEST_ANY, TEXT_NAKRUL1, "Na-Krul" }, - { 21, -1, DTYPE_NONE, Q_CORNSTN, 100, 0, QUEST_SINGLE, TEXT_CORNSTN, "Cornerstone of the World" }, - { 9, 9, DTYPE_NONE, Q_JERSEY, 100, 0, QUEST_ANY, TEXT_JERSEY4, "The Jersey's Jersey" }, + // _qdlvl, _qdmultlvl, _qlvlt, _qdtype, _qdrnd, _qslvl, isSinglePlayerOnly, _qdmsg, _qlstr + { 5, -1, DTYPE_NONE, Q_ROCK, 100, 0, true, TEXT_INFRA5, "The Magic Rock" }, + { 9, -1, DTYPE_NONE, Q_MUSHROOM, 100, 0, true, TEXT_MUSH8, "Black Mushroom" }, + { 4, -1, DTYPE_NONE, Q_GARBUD, 100, 0, true, TEXT_GARBUD1, "Gharbad The Weak" }, + { 8, -1, DTYPE_NONE, Q_ZHAR, 100, 0, true, TEXT_ZHAR1, "Zhar the Mad" }, + { 14, -1, DTYPE_NONE, Q_VEIL, 100, 0, true, TEXT_VEIL9, "Lachdanan" }, + { 15, -1, DTYPE_NONE, Q_DIABLO, 100, 0, false, TEXT_VILE3, "Diablo" }, + { 2, 2, DTYPE_NONE, Q_BUTCHER, 100, 0, false, TEXT_BUTCH9, "The Butcher" }, + { 4, -1, DTYPE_NONE, Q_LTBANNER, 100, 0, true, TEXT_BANNER2, "Ogden's Sign" }, + { 7, -1, DTYPE_NONE, Q_BLIND, 100, 0, true, TEXT_BLINDING, "Halls of the Blind" }, + { 5, -1, DTYPE_NONE, Q_BLOOD, 100, 0, true, TEXT_BLOODY, "Valor" }, + { 10, -1, DTYPE_NONE, Q_ANVIL, 100, 0, true, TEXT_ANVIL5, "Anvil of Fury" }, + { 13, -1, DTYPE_NONE, Q_WARLORD, 100, 0, true, TEXT_BLOODWAR, "Warlord of Blood" }, + { 3, 3, DTYPE_CATHEDRAL, Q_SKELKING, 100, 1, false, TEXT_KING2, "The Curse of King Leoric" }, + { 2, -1, DTYPE_CAVES, Q_PWATER, 100, 4, true, TEXT_POISON3, "Poisoned Water Supply" }, + { 6, -1, DTYPE_CATACOMBS, Q_SCHAMB, 100, 2, true, TEXT_BONER, "The Chamber of Bone" }, + { 15, 15, DTYPE_CATHEDRAL, Q_BETRAYER, 100, 5, false, TEXT_VILE1, "Archbishop Lazarus" }, + { 17, 17, DTYPE_NONE, Q_GRAVE, 100, 0, false, TEXT_GRAVE7, "Grave Matters" }, + { 9, 9, DTYPE_NONE, Q_FARMER, 100, 0, false, TEXT_FARMER1, "Farmer's Orchard" }, + { 17, -1, DTYPE_NONE, Q_GIRL, 100, 0, true, TEXT_GIRL2, "Little Girl" }, + { 19, -1, DTYPE_NONE, Q_TRADER, 100, 0, true, TEXT_TRADER, "Wandering Trader" }, + { 17, 17, DTYPE_NONE, Q_DEFILER, 100, 0, false, TEXT_DEFILER1, "The Defiler" }, + { 21, 21, DTYPE_NONE, Q_NAKRUL, 100, 0, false, TEXT_NAKRUL1, "Na-Krul" }, + { 21, -1, DTYPE_NONE, Q_CORNSTN, 100, 0, true, TEXT_CORNSTN, "Cornerstone of the World" }, + { 9, 9, DTYPE_NONE, Q_JERSEY, 100, 0, false, TEXT_JERSEY4, "The Jersey's Jersey" }, // clang-format on }; /** @@ -105,7 +105,7 @@ void InitQuests() } } else { for (i = 0; i < MAXQUESTS; i++) { - if (!(questlist[i]._qflags == QUEST_ANY)) { + if (questlist[i].isSinglePlayerOnly) { quests[i]._qactive = QUEST_NOTAVAIL; } } @@ -119,7 +119,7 @@ void InitQuests() initiatedQuests = 0; for (z = 0; z < MAXQUESTS; z++) { - if (gbIsMultiplayer && !(questlist[z]._qflags == QUEST_ANY)) + if (gbIsMultiplayer && questlist[z].isSinglePlayerOnly) continue; quests[z]._qtype = questlist[z]._qdtype; if (gbIsMultiplayer) { @@ -292,7 +292,7 @@ bool QuestStatus(int i) return false; if (quests[i]._qactive == QUEST_NOTAVAIL) return false; - if (gbIsMultiplayer && questlist[i]._qflags != QUEST_ANY) + if (gbIsMultiplayer && questlist[i].isSinglePlayerOnly) return false; return true; } diff --git a/Source/quests.h b/Source/quests.h index 62ee2c4d2..63b185722 100644 --- a/Source/quests.h +++ b/Source/quests.h @@ -33,11 +33,6 @@ enum quest_state : uint8_t { QUEST_INVALID = 0xFF, }; -enum quest_gametype : uint8_t { - QUEST_SINGLE, - QUEST_ANY, -}; - struct QuestStruct { Uint8 _qlevel; Uint8 _qtype; @@ -60,7 +55,7 @@ struct QuestData { Uint8 _qdtype; Uint8 _qdrnd; Uint8 _qslvl; - quest_gametype _qflags; + bool isSinglePlayerOnly; Sint32 _qdmsg; const char *_qlstr; };