Browse Source

Several updates [enums+names] (#2002)

* Several updates

* Correct msg_get_next_packet

* Update enums.h

Co-Authored-By: Robin Eklind <mewmew@users.noreply.github.com>

Co-authored-by: Robin Eklind <mewmew@users.noreply.github.com>
pull/681/head
galaxyhaxz 6 years ago committed by GitHub
parent
commit
71565b9c02
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      Source/diablo.cpp
  2. 14
      Source/drlg_l1.cpp
  3. 16
      Source/drlg_l2.cpp
  4. 6
      Source/drlg_l3.cpp
  5. 22
      Source/drlg_l4.cpp
  6. 24
      Source/inv.cpp
  7. 16
      Source/items.cpp
  8. 16
      Source/monstdat.cpp
  9. 148
      Source/monster.cpp
  10. 10
      Source/msg.cpp
  11. 6
      Source/msg.h
  12. 2
      Source/multi.cpp
  13. 114
      Source/objects.cpp
  14. 6
      Source/player.cpp
  15. 280
      Source/quests.cpp
  16. 18
      Source/setmaps.cpp
  17. 44
      Source/stores.cpp
  18. 4
      Source/themes.cpp
  19. 2
      Source/town.cpp
  20. 270
      Source/towners.cpp
  21. 10
      Source/trigs.cpp
  22. 4
      comparer-config/diablo.toml
  23. 4
      comparer-config/spawn.toml
  24. 562
      enums.h

4
Source/diablo.cpp

@ -139,7 +139,7 @@ void run_game_loop(unsigned int uMsg)
/// ASSERT: assert(ghMainWnd);
saveProc = SetWindowProc(GM_Game);
control_update_life_mana();
msg_process_net_packets();
run_delta_info();
gbRunGame = TRUE;
gbProcessPlayers = TRUE;
gbRunGameResult = TRUE;
@ -1815,7 +1815,7 @@ void LoadGameLevel(BOOL firstflag, int lvldir)
;
#ifndef SPAWN
if (setlevel && setlvlnum == SL_SKELKING && quests[QTYPE_KING]._qactive == 2)
if (setlevel && setlvlnum == SL_SKELKING && quests[Q_SKELKING]._qactive == QUEST_ACTIVE)
PlaySFX(USFX_SKING1);
#endif
}

14
Source/drlg_l1.cpp

@ -355,8 +355,8 @@ static int DRLG_PlaceMiniSet(const BYTE *miniset, int tmin, int tmax, int cx, in
DRLG_MRectTrans(sx, sy + 2, sx + 5, sy + 4);
TransVal = t;
quests[QTYPE_PW]._qtx = 2 * sx + 21;
quests[QTYPE_PW]._qty = 2 * sy + 22;
quests[Q_PWATER]._qtx = 2 * sx + 21;
quests[Q_PWATER]._qty = 2 * sy + 22;
}
if (setview == TRUE) {
@ -487,15 +487,15 @@ static void DRLG_L1Pass3()
static void DRLG_LoadL1SP()
{
L5setloadflag = FALSE;
if (QuestStatus(QTYPE_BUTCH)) {
if (QuestStatus(Q_BUTCHER)) {
L5pSetPiece = LoadFileInMem("Levels\\L1Data\\rnd6.DUN", NULL);
L5setloadflag = TRUE;
}
if (QuestStatus(QTYPE_KING) && gbMaxPlayers == 1) {
if (QuestStatus(Q_SKELKING) && gbMaxPlayers == 1) {
L5pSetPiece = LoadFileInMem("Levels\\L1Data\\SKngDO.DUN", NULL);
L5setloadflag = TRUE;
}
if (QuestStatus(QTYPE_BOL)) {
if (QuestStatus(Q_LTBANNER)) {
L5pSetPiece = LoadFileInMem("Levels\\L1Data\\Banner2.DUN", NULL);
L5setloadflag = TRUE;
}
@ -1658,7 +1658,7 @@ static void DRLG_L5(int entry)
doneflag = TRUE;
if (QuestStatus(QTYPE_PW)) {
if (QuestStatus(Q_PWATER)) {
if (entry == 0) {
if (DRLG_PlaceMiniSet(PWATERIN, 1, 1, 0, 0, 1, -1, 0) < 0)
doneflag = FALSE;
@ -1668,7 +1668,7 @@ static void DRLG_L5(int entry)
ViewY--;
}
}
if (QuestStatus(QTYPE_BOL)) {
if (QuestStatus(Q_LTBANNER)) {
if (entry == 0) {
if (DRLG_PlaceMiniSet(STAIRSUP, 1, 1, 0, 0, 1, -1, 0) < 0)
doneflag = FALSE;

16
Source/drlg_l2.cpp

@ -470,13 +470,13 @@ static void DRLG_LoadL2SP()
{
setloadflag = FALSE;
if (QuestStatus(QTYPE_BLIND)) {
if (QuestStatus(Q_BLIND)) {
pSetPiece = LoadFileInMem("Levels\\L2Data\\Blind2.DUN", NULL);
setloadflag = TRUE;
} else if (QuestStatus(QTYPE_BLOOD)) {
} else if (QuestStatus(Q_BLOOD)) {
pSetPiece = LoadFileInMem("Levels\\L2Data\\Blood1.DUN", NULL);
setloadflag = TRUE;
} else if (QuestStatus(QTYPE_BONE)) {
} else if (QuestStatus(Q_SCHAMB)) {
pSetPiece = LoadFileInMem("Levels\\L2Data\\Bonestr2.DUN", NULL);
setloadflag = TRUE;
}
@ -1383,21 +1383,21 @@ static BOOL CreateDungeon()
switch (currlevel) {
case 5:
if (quests[QTYPE_BLOOD]._qactive) {
if (quests[Q_BLOOD]._qactive) {
ForceHW = TRUE;
ForceH = 20;
ForceW = 14;
}
break;
case 6:
if (quests[QTYPE_BONE]._qactive) {
if (quests[Q_SCHAMB]._qactive) {
ForceHW = TRUE;
ForceW = 10;
ForceH = 10;
}
break;
case 7:
if (quests[QTYPE_BLIND]._qactive) {
if (quests[Q_BLIND]._qactive) {
ForceHW = TRUE;
ForceW = 15;
ForceH = 15;
@ -2123,13 +2123,13 @@ void LoadPreL2Dungeon(char *sFileName, int vx, int vy)
void CreateL2Dungeon(DWORD rseed, int entry)
{
if (gbMaxPlayers == 1) {
if (currlevel == 7 && !quests[QTYPE_BLIND]._qactive) {
if (currlevel == 7 && !quests[Q_BLIND]._qactive) {
currlevel = 6;
CreateL2Dungeon(glSeedTbl[6], 4);
currlevel = 7;
}
if (currlevel == 8) {
if (!quests[QTYPE_BLIND]._qactive) {
if (!quests[Q_BLIND]._qactive) {
currlevel = 6;
CreateL2Dungeon(glSeedTbl[6], 4);
currlevel = 8;

6
Source/drlg_l3.cpp

@ -1508,7 +1508,7 @@ static void DRLG_L3(int entry)
DRLG_L3CreateBlock(x2, y1, 2, 1);
DRLG_L3CreateBlock(x1, y2, 2, 2);
DRLG_L3CreateBlock(x1, y1, 2, 3);
if (QuestStatus(QTYPE_ANVIL)) {
if (QuestStatus(Q_ANVIL)) {
x1 = random_(0, 10) + 10;
y1 = random_(0, 10) + 10;
x2 = x1 + 12;
@ -1554,7 +1554,7 @@ static void DRLG_L3(int entry)
}
}
}
if (!genok && QuestStatus(QTYPE_ANVIL)) {
if (!genok && QuestStatus(Q_ANVIL)) {
genok = DRLG_L3Anvil();
}
} while (genok == TRUE);
@ -1573,7 +1573,7 @@ static void DRLG_L3(int entry)
FixL3HallofHeroes();
DRLG_L3River();
if (QuestStatus(QTYPE_ANVIL)) {
if (QuestStatus(Q_ANVIL)) {
dungeon[setpc_x + 7][setpc_y + 5] = 7;
dungeon[setpc_x + 8][setpc_y + 5] = 7;
dungeon[setpc_x + 9][setpc_y + 5] = 7;

22
Source/drlg_l4.cpp

@ -344,7 +344,7 @@ static void InitL4Dungeon()
void DRLG_LoadL4SP()
{
setloadflag = FALSE;
if (QuestStatus(QTYPE_WARLRD)) {
if (QuestStatus(Q_WARLORD)) {
pSetPiece = LoadFileInMem("Levels\\L4Data\\Warlord.DUN", NULL);
setloadflag = TRUE;
}
@ -1323,11 +1323,11 @@ static void L4firstRoom()
int x, y, w, h, rndx, rndy, xmin, xmax, ymin, ymax, tx, ty;
if (currlevel != 16) {
if (currlevel == quests[QTYPE_WARLRD]._qlevel && quests[QTYPE_WARLRD]._qactive) {
if (currlevel == quests[Q_WARLORD]._qlevel && quests[Q_WARLORD]._qactive) {
/// ASSERT: assert(gbMaxPlayers == 1);
w = 11;
h = 11;
} else if (currlevel == quests[QTYPE_VB]._qlevel && gbMaxPlayers != 1) {
} else if (currlevel == quests[Q_BETRAYER]._qlevel && gbMaxPlayers != 1) {
w = 11;
h = 11;
} else {
@ -1362,7 +1362,7 @@ static void L4firstRoom()
l4holdx = x;
l4holdy = y;
}
if (QuestStatus(QTYPE_WARLRD) || currlevel == quests[QTYPE_VB]._qlevel && gbMaxPlayers != 1) {
if (QuestStatus(Q_WARLORD) || currlevel == quests[Q_BETRAYER]._qlevel && gbMaxPlayers != 1) {
SP4x1 = x + 1;
SP4y1 = y + 1;
SP4x2 = SP4x1 + w;
@ -1530,8 +1530,8 @@ static BOOL DRLG_L4PlaceMiniSet(const BYTE *miniset, int tmin, int tmax, int cx,
}
if (currlevel == 15) {
quests[QTYPE_VB]._qtx = sx + 1;
quests[QTYPE_VB]._qty = sy + 1;
quests[Q_BETRAYER]._qtx = sx + 1;
quests[Q_BETRAYER]._qty = sy + 1;
}
if (setview == TRUE) {
ViewX = 2 * sx + 21;
@ -1747,7 +1747,7 @@ static void DRLG_L4(int entry)
if (currlevel == 16) {
L4SaveQuads();
}
if (QuestStatus(QTYPE_WARLRD) || currlevel == quests[QTYPE_VB]._qlevel && gbMaxPlayers != 1) {
if (QuestStatus(Q_WARLORD) || currlevel == quests[Q_BETRAYER]._qlevel && gbMaxPlayers != 1) {
for (spi = SP4x1; spi < SP4x2; spi++) {
for (spj = SP4y1; spj < SP4y2; spj++) {
dflags[spi][spj] = 1;
@ -1763,7 +1763,7 @@ static void DRLG_L4(int entry)
if (currlevel == 16) {
DRLG_LoadDiabQuads(TRUE);
}
if (QuestStatus(QTYPE_WARLRD)) {
if (QuestStatus(Q_WARLORD)) {
if (entry == 0) {
doneflag = DRLG_L4PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, 1, 0);
if (doneflag && currlevel == 13) {
@ -1817,7 +1817,7 @@ static void DRLG_L4(int entry)
if (entry == 0) {
doneflag = DRLG_L4PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, 1, 0);
if (doneflag) {
if (gbMaxPlayers == 1 && quests[QTYPE_MOD]._qactive != 2) {
if (gbMaxPlayers == 1 && quests[Q_DIABLO]._qactive != QUEST_ACTIVE) {
doneflag = DRLG_L4PlaceMiniSet(L4PENTA, 1, 1, -1, -1, 0, 1);
} else {
doneflag = DRLG_L4PlaceMiniSet(L4PENTA2, 1, 1, -1, -1, 0, 1);
@ -1827,7 +1827,7 @@ static void DRLG_L4(int entry)
} else {
doneflag = DRLG_L4PlaceMiniSet(L4USTAIRS, 1, 1, -1, -1, 0, 0);
if (doneflag) {
if (gbMaxPlayers == 1 && quests[QTYPE_MOD]._qactive != 2) {
if (gbMaxPlayers == 1 && quests[Q_DIABLO]._qactive != QUEST_ACTIVE) {
doneflag = DRLG_L4PlaceMiniSet(L4PENTA, 1, 1, -1, -1, 1, 1);
} else {
doneflag = DRLG_L4PlaceMiniSet(L4PENTA2, 1, 1, -1, -1, 1, 1);
@ -1849,7 +1849,7 @@ static void DRLG_L4(int entry)
DRLG_L4Subs();
DRLG_Init_Globals();
if (QuestStatus(QTYPE_WARLRD)) {
if (QuestStatus(Q_WARLORD)) {
for (j = 0; j < DMAXY; j++) {
for (i = 0; i < DMAXX; i++) {
pdungeon[i][j] = dungeon[i][j];

24
Source/inv.cpp

@ -1406,8 +1406,8 @@ void CheckBookLevel(int pnum)
void CheckQuestItem(int pnum)
{
if (plr[pnum].HoldItem.IDidx == IDI_OPTAMULET)
quests[QTYPE_BLIND]._qactive = 3;
if (plr[pnum].HoldItem.IDidx == IDI_MUSHROOM && quests[QTYPE_BLKM]._qactive == 2 && quests[QTYPE_BLKM]._qvar1 == QS_MUSHSPAWNED) {
quests[Q_BLIND]._qactive = QUEST_DONE;
if (plr[pnum].HoldItem.IDidx == IDI_MUSHROOM && quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE && quests[Q_MUSHROOM]._qvar1 == QS_MUSHSPAWNED) {
#ifndef SPAWN
sfxdelay = 10;
if (plr[pnum]._pClass == PC_WARRIOR) { // BUGFIX: Voice for this quest might be wrong in MP
@ -1418,15 +1418,15 @@ void CheckQuestItem(int pnum)
sfxdnum = PS_MAGE95;
}
#endif
quests[QTYPE_BLKM]._qvar1 = QS_MUSHPICKED;
quests[Q_MUSHROOM]._qvar1 = QS_MUSHPICKED;
}
if (plr[pnum].HoldItem.IDidx == IDI_ANVIL) {
if (quests[QTYPE_ANVIL]._qactive == 1) {
quests[QTYPE_ANVIL]._qactive = 2;
quests[QTYPE_ANVIL]._qvar1 = 1;
if (quests[Q_ANVIL]._qactive == QUEST_INIT) {
quests[Q_ANVIL]._qactive = QUEST_ACTIVE;
quests[Q_ANVIL]._qvar1 = 1;
}
#ifndef SPAWN
if (quests[QTYPE_ANVIL]._qlog == 1) {
if (quests[Q_ANVIL]._qlog == 1) {
sfxdelay = 10;
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR89;
@ -1451,12 +1451,12 @@ void CheckQuestItem(int pnum)
}
#endif
if (plr[pnum].HoldItem.IDidx == IDI_ROCK) {
if (quests[QTYPE_INFRA]._qactive == 1) {
quests[QTYPE_INFRA]._qactive = 2;
quests[QTYPE_INFRA]._qvar1 = 1;
if (quests[Q_ROCK]._qactive == QUEST_INIT) {
quests[Q_ROCK]._qactive = QUEST_ACTIVE;
quests[Q_ROCK]._qvar1 = 1;
}
#ifndef SPAWN
if (quests[QTYPE_INFRA]._qlog == 1) {
if (quests[Q_ROCK]._qlog == 1) {
sfxdelay = 10;
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR87;
@ -1469,7 +1469,7 @@ void CheckQuestItem(int pnum)
#endif
}
if (plr[pnum].HoldItem.IDidx == IDI_ARMOFVAL) {
quests[QTYPE_BLOOD]._qactive = 3;
quests[Q_BLOOD]._qactive = QUEST_DONE;
#ifndef SPAWN
sfxdelay = 20;
if (plr[myplr]._pClass == PC_WARRIOR) {

16
Source/items.cpp

@ -280,9 +280,9 @@ void InitItems()
if (!setlevel) {
s = GetRndSeed(); /* unused */
if (QuestStatus(QTYPE_INFRA))
if (QuestStatus(Q_ROCK))
SpawnRock();
if (QuestStatus(QTYPE_ANVIL))
if (QuestStatus(Q_ANVIL))
SpawnQuestItem(IDI_ANVIL, 2 * setpc_x + 27, 2 * setpc_y + 27, 0, 1);
if (currlevel > 0 && currlevel < 16)
AddInitItems();
@ -1875,7 +1875,7 @@ int RndUItem(int m)
okflag = FALSE;
if (AllItemsList[i].itype == ITYPE_GOLD)
okflag = FALSE;
if (AllItemsList[i].itype == ITYPE_0E)
if (AllItemsList[i].itype == ITYPE_MEAT)
okflag = FALSE;
if (AllItemsList[i].iMiscId == IMISC_BOOK)
okflag = TRUE;
@ -2105,7 +2105,7 @@ void SpawnItem(int m, int x, int y, BOOL sendmsg)
return;
}
onlygood = 1;
} else if (quests[QTYPE_BLKM]._qactive != 2 || quests[QTYPE_BLKM]._qvar1 != QS_MUSHGIVEN) {
} else if (quests[Q_MUSHROOM]._qactive != QUEST_ACTIVE || quests[Q_MUSHROOM]._qvar1 != QS_MUSHGIVEN) {
idx = RndItem(m);
if (!idx)
return;
@ -2118,7 +2118,7 @@ void SpawnItem(int m, int x, int y, BOOL sendmsg)
}
} else {
idx = IDI_BRAIN;
quests[QTYPE_BLKM]._qvar1 = QS_BRAINSPAWNED;
quests[Q_MUSHROOM]._qvar1 = QS_BRAINSPAWNED;
}
if (numitems < MAXITEMS) {
@ -3159,7 +3159,7 @@ void UseItem(int p, int Mid, int spl)
switch (Mid) {
case IMISC_HEAL:
case IMISC_HEAL_1C:
case IMISC_MEAT:
j = plr[p]._pMaxHP >> 8;
l = ((j >> 1) + random_(39, j)) << 6;
if (plr[p]._pClass == PC_WARRIOR)
@ -3339,7 +3339,7 @@ BOOL SmithItemOk(int i)
rv = FALSE;
if (AllItemsList[i].itype == ITYPE_GOLD)
rv = FALSE;
if (AllItemsList[i].itype == ITYPE_0E)
if (AllItemsList[i].itype == ITYPE_MEAT)
rv = FALSE;
if (AllItemsList[i].itype == ITYPE_STAFF)
rv = FALSE;
@ -3435,7 +3435,7 @@ BOOL PremiumItemOk(int i)
rv = FALSE;
if (AllItemsList[i].itype == ITYPE_GOLD)
rv = FALSE;
if (AllItemsList[i].itype == ITYPE_0E)
if (AllItemsList[i].itype == ITYPE_MEAT)
rv = FALSE;
if (AllItemsList[i].itype == ITYPE_STAFF)
rv = FALSE;

16
Source/monstdat.cpp

@ -262,15 +262,15 @@ BYTE MonstAvailTbl[] = {
UniqMonstStruct UniqMonst[] = {
// clang-format off
// mtype, mName, mTrnName, mlevel, mmaxhp, mAi, mint, mMinDamage, mMaxDamage, mMagicRes, mUnqAttr, mUnqVar1, mUnqVar2, mtalkmsg
{ MT_NGOATMC, "Gharbad the Weak", "BSDB", 4, 120, AI_GARBUD, 3, 8, 16, IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_GARBUD1 },
{ MT_NGOATMC, "Gharbad the Weak", "BSDB", 4, 120, AI_GARBUD, 3, 8, 16, IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, TEXT_GARBUD1 },
{ MT_SKING, "Skeleton King", "GENRL", 0, 240, AI_SKELKING, 3, 6, 16, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 1, 0, 0, 0 },
{ MT_COUNSLR, "Zhar the Mad", "GENERAL", 8, 360, AI_ZHAR, 3, 16, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 0, 0, 0, QUEST_ZHAR1 },
{ MT_BFALLSP, "Snotspill", "BNG", 4, 220, AI_SNOTSPIL, 3, 10, 18, RESIST_LIGHTNING , 0, 0, 0, QUEST_BANNER10 },
{ MT_ADVOCATE, "Arch-Bishop Lazarus", "GENERAL", 0, 600, AI_LAZURUS, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 },
{ MT_HLSPWN, "Red Vex", "REDV", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 },
{ MT_HLSPWN, "BlackJade", "BLKJD", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_VILE13 },
{ MT_RBLACK, "Lachdanan", "BHKA", 14, 500, AI_LACHDAN, 3, 0, 0, 0 , 0, 0, 0, QUEST_VEIL9 },
{ MT_BTBLACK, "Warlord of Blood", "GENERAL", 13, 850, AI_WARLORD, 3, 35, 50, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, QUEST_WARLRD9 },
{ MT_COUNSLR, "Zhar the Mad", "GENERAL", 8, 360, AI_ZHAR, 3, 16, 40, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING , 0, 0, 0, TEXT_ZHAR1 },
{ MT_BFALLSP, "Snotspill", "BNG", 4, 220, AI_SNOTSPIL, 3, 10, 18, RESIST_LIGHTNING , 0, 0, 0, TEXT_BANNER10 },
{ MT_ADVOCATE, "Arch-Bishop Lazarus", "GENERAL", 0, 600, AI_LAZURUS, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, TEXT_VILE13 },
{ MT_HLSPWN, "Red Vex", "REDV", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_FIRE | IMUNE_NULL_40, 0, 0, 0, TEXT_VILE13 },
{ MT_HLSPWN, "BlackJade", "BLKJD", 0, 400, AI_LAZHELP, 3, 30, 50, IMUNE_MAGIC | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, TEXT_VILE13 },
{ MT_RBLACK, "Lachdanan", "BHKA", 14, 500, AI_LACHDAN, 3, 0, 0, 0 , 0, 0, 0, TEXT_VEIL9 },
{ MT_BTBLACK, "Warlord of Blood", "GENERAL", 13, 850, AI_WARLORD, 3, 35, 50, IMUNE_MAGIC | IMUNE_FIRE | IMUNE_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, TEXT_WARLRD9 },
{ MT_CLEAVER, "The Butcher", "GENRL", 0, 220, AI_CLEAVER, 3, 6, 12, RESIST_FIRE | RESIST_LIGHTNING | IMUNE_NULL_40, 0, 0, 0, 0 },
{ MT_TSKELAX, "Bonehead Keenaxe", "BHKA", 2, 91, AI_SKELSD, 2, 4, 10, IMUNE_MAGIC | IMUNE_NULL_40, 7, 100, 0, 0 },
{ MT_RFALLSD, "Bladeskin the Slasher", "BSTS", 2, 51, AI_FALLEN, 0, 6, 18, RESIST_FIRE , 11, 45, 0, 0 },

148
Source/monster.cpp

@ -203,20 +203,20 @@ void GetLevelMTypes()
}
if (!setlevel) {
if (QuestStatus(QTYPE_BUTCH))
if (QuestStatus(Q_BUTCHER))
AddMonsterType(MT_CLEAVER, 2);
if (QuestStatus(QTYPE_GARB))
if (QuestStatus(Q_GARBUD))
AddMonsterType(UniqMonst[UMT_GARBUD].mtype, 4);
if (QuestStatus(QTYPE_ZHAR))
if (QuestStatus(Q_ZHAR))
AddMonsterType(UniqMonst[UMT_ZHAR].mtype, 4);
if (QuestStatus(QTYPE_BOL))
if (QuestStatus(Q_LTBANNER))
AddMonsterType(UniqMonst[UMT_SNOTSPIL].mtype, 4);
if (QuestStatus(QTYPE_VEIL))
if (QuestStatus(Q_VEIL))
AddMonsterType(UniqMonst[UMT_LACHDAN].mtype, 4);
if (QuestStatus(QTYPE_WARLRD))
if (QuestStatus(Q_WARLORD))
AddMonsterType(UniqMonst[UMT_WARLORD].mtype, 4);
if (gbMaxPlayers != 1 && currlevel == quests[QTYPE_KING]._qlevel) {
if (gbMaxPlayers != 1 && currlevel == quests[Q_SKELKING]._qlevel) {
AddMonsterType(MT_SKING, 4);
@ -698,7 +698,7 @@ void PlaceUniqueMonst(int uniqindex, int miniontype, int unpackfilesize)
Monst->mtalkmsg = 0;
}
if (Monst->_mAi != AI_LAZURUS || quests[QTYPE_VB]._qvar1 <= 3) {
if (Monst->_mAi != AI_LAZURUS || quests[Q_BETRAYER]._qvar1 <= 3) {
if (Monst->mtalkmsg) {
Monst->_mgoal = MGOAL_INQUIRING;
}
@ -762,11 +762,11 @@ void PlaceQuestMonsters()
BYTE *setp;
if (!setlevel) {
if (QuestStatus(QTYPE_BUTCH)) {
if (QuestStatus(Q_BUTCHER)) {
PlaceUniqueMonst(UMT_BUTCHER, 0, 0);
}
if (currlevel == quests[QTYPE_KING]._qlevel && gbMaxPlayers != 1) {
if (currlevel == quests[Q_SKELKING]._qlevel && gbMaxPlayers != 1) {
skeltype = 0;
for (skeltype = 0; skeltype < nummtypes; skeltype++) {
@ -778,40 +778,40 @@ void PlaceQuestMonsters()
PlaceUniqueMonst(UMT_SKELKING, skeltype, 30);
}
if (QuestStatus(QTYPE_BOL)) {
if (QuestStatus(Q_LTBANNER)) {
setp = LoadFileInMem("Levels\\L1Data\\Banner1.DUN", NULL);
SetMapMonsters(setp, 2 * setpc_x, 2 * setpc_y);
mem_free_dbg(setp);
}
if (QuestStatus(QTYPE_BLOOD)) {
if (QuestStatus(Q_BLOOD)) {
setp = LoadFileInMem("Levels\\L2Data\\Blood2.DUN", NULL);
SetMapMonsters(setp, 2 * setpc_x, 2 * setpc_y);
mem_free_dbg(setp);
}
if (QuestStatus(QTYPE_BLIND)) {
if (QuestStatus(Q_BLIND)) {
setp = LoadFileInMem("Levels\\L2Data\\Blind2.DUN", NULL);
SetMapMonsters(setp, 2 * setpc_x, 2 * setpc_y);
mem_free_dbg(setp);
}
if (QuestStatus(QTYPE_ANVIL)) {
if (QuestStatus(Q_ANVIL)) {
setp = LoadFileInMem("Levels\\L3Data\\Anvil.DUN", NULL);
SetMapMonsters(setp, 2 * setpc_x + 2, 2 * setpc_y + 2);
mem_free_dbg(setp);
}
if (QuestStatus(QTYPE_WARLRD)) {
if (QuestStatus(Q_WARLORD)) {
setp = LoadFileInMem("Levels\\L4Data\\Warlord.DUN", NULL);
SetMapMonsters(setp, 2 * setpc_x, 2 * setpc_y);
mem_free_dbg(setp);
AddMonsterType(UniqMonst[UMT_WARLORD].mtype, 1);
}
if (QuestStatus(QTYPE_VEIL)) {
if (QuestStatus(Q_VEIL)) {
AddMonsterType(UniqMonst[UMT_LACHDAN].mtype, 1);
}
if (QuestStatus(QTYPE_ZHAR) && zharlib == -1) {
quests[QTYPE_ZHAR]._qactive = 0;
if (QuestStatus(Q_ZHAR) && zharlib == -1) {
quests[Q_ZHAR]._qactive = QUEST_NOTAVAIL;
}
if (currlevel == quests[QTYPE_VB]._qlevel && gbMaxPlayers != 1) {
if (currlevel == quests[Q_BETRAYER]._qlevel && gbMaxPlayers != 1) {
AddMonsterType(UniqMonst[UMT_LAZURUS].mtype, 4);
AddMonsterType(UniqMonst[UMT_RED_VEX].mtype, 4);
PlaceUniqueMonst(UMT_LAZURUS, 0, 0);
@ -1009,15 +1009,15 @@ void PlaceUniques()
done = (Monsters[mt].mtype == UniqMonst[u].mtype);
}
mt--;
if (u == UMT_GARBUD && quests[QTYPE_GARB]._qactive == 0)
if (u == UMT_GARBUD && quests[Q_GARBUD]._qactive == QUEST_NOTAVAIL)
done = FALSE;
if (u == UMT_ZHAR && quests[QTYPE_ZHAR]._qactive == 0)
if (u == UMT_ZHAR && quests[Q_ZHAR]._qactive == QUEST_NOTAVAIL)
done = FALSE;
if (u == UMT_SNOTSPIL && quests[QTYPE_BOL]._qactive == 0)
if (u == UMT_SNOTSPIL && quests[Q_LTBANNER]._qactive == QUEST_NOTAVAIL)
done = FALSE;
if (u == UMT_LACHDAN && quests[QTYPE_VEIL]._qactive == 0)
if (u == UMT_LACHDAN && quests[Q_VEIL]._qactive == QUEST_NOTAVAIL)
done = FALSE;
if (u == UMT_WARLORD && quests[QTYPE_WARLRD]._qactive == 0)
if (u == UMT_WARLORD && quests[Q_WARLORD]._qactive == QUEST_NOTAVAIL)
done = FALSE;
if (done)
PlaceUniqueMonst(u, mt, 8);
@ -1541,9 +1541,9 @@ void M_DiabloDeath(int i, BOOL sendmsg)
#ifndef SPAWN
PlaySFX(USFX_DIABLOD);
#endif
quests[QTYPE_MOD]._qactive = 3;
quests[Q_DIABLO]._qactive = QUEST_DONE;
if (sendmsg)
NetSendCmdQuest(TRUE, QTYPE_MOD);
NetSendCmdQuest(TRUE, Q_DIABLO);
gbProcessPlayers = FALSE;
sgbSaveSoundOn = gbSoundOn;
for (j = 0; j < nummonsters; j++) {
@ -1647,7 +1647,7 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg)
monstkills[monster[i].MType->mtype]++;
monster[i]._mhitpoints = 0;
SetRndSeed(monster[i]._mRndSeed);
if (QuestStatus(QTYPE_GARB) && monster[i].mName == UniqMonst[UMT_GARBUD].mName) {
if (QuestStatus(Q_GARBUD) && monster[i].mName == UniqMonst[UMT_GARBUD].mName) {
CreateTypeItem(monster[i]._mx + 1, monster[i]._my + 1, TRUE, ITYPE_MACE, IMISC_NONE, TRUE, FALSE);
} else if (i > MAX_PLRS - 1) { // Golems should not spawn items
SpawnItem(i, monster[i]._mx, monster[i]._my, sendmsg);
@ -2388,55 +2388,55 @@ int M_DoTalk(int i)
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)) {
if (Monst->mtalkmsg == TEXT_GARBUD1)
quests[Q_GARBUD]._qactive = QUEST_ACTIVE;
quests[Q_GARBUD]._qlog = TRUE;
if (Monst->mtalkmsg == TEXT_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->mtalkmsg == TEXT_ZHAR1
&& !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) {
quests[QTYPE_ZHAR]._qactive = 2;
quests[QTYPE_ZHAR]._qlog = TRUE;
quests[Q_ZHAR]._qactive = QUEST_ACTIVE;
quests[Q_ZHAR]._qlog = TRUE;
CreateTypeItem(Monst->_mx + 1, Monst->_my + 1, FALSE, ITYPE_MISC, IMISC_BOOK, TRUE, FALSE);
Monst->_mFlags |= MFLAG_QUEST_COMPLETE;
}
if (Monst->mName == UniqMonst[UMT_SNOTSPIL].mName) {
if (Monst->mtalkmsg == QUEST_BANNER10 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) {
if (Monst->mtalkmsg == TEXT_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;
quests[Q_LTBANNER]._qvar1 = 2;
if (quests[Q_LTBANNER]._qactive == QUEST_INIT)
quests[Q_LTBANNER]._qactive = QUEST_ACTIVE;
Monst->_mFlags |= MFLAG_QUEST_COMPLETE;
}
if (quests[QTYPE_BOL]._qvar1 < 2) {
if (quests[Q_LTBANNER]._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 == TEXT_VEIL9) {
quests[Q_VEIL]._qactive = QUEST_ACTIVE;
quests[Q_VEIL]._qlog = TRUE;
}
if (Monst->mtalkmsg == QUEST_VEIL11 && !(Monst->_mFlags & MFLAG_QUEST_COMPLETE)) {
if (Monst->mtalkmsg == TEXT_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;
quests[Q_WARLORD]._qvar1 = 2;
if (Monst->mName == UniqMonst[UMT_LAZURUS].mName && gbMaxPlayers != 1) {
Monst->_msquelch = UCHAR_MAX;
Monst->mtalkmsg = 0;
quests[QTYPE_VB]._qvar1 = 6;
quests[Q_BETRAYER]._qvar1 = 6;
Monst->_mgoal = MGOAL_NORMAL;
}
return FALSE;
@ -4196,8 +4196,8 @@ void MAI_Garbud(int i)
_my = Monst->_my;
md = M_GetDir(i);
if (Monst->mtalkmsg < QUEST_GARBUD4
&& Monst->mtalkmsg > QUEST_DOOM10
if (Monst->mtalkmsg < TEXT_GARBUD4
&& Monst->mtalkmsg > TEXT_DOOM10
&& !(dFlags[_mx][_my] & BFLAG_VISIBLE)
&& Monst->_mgoal == MGOAL_TALKING) {
Monst->_mgoal = MGOAL_INQUIRING;
@ -4206,7 +4206,7 @@ void MAI_Garbud(int i)
if (dFlags[_mx][_my] & BFLAG_VISIBLE) {
#ifndef SPAWN
if (Monst->mtalkmsg == QUEST_GARBUD4) {
if (Monst->mtalkmsg == TEXT_GARBUD4) {
if (!effect_is_playing(USFX_GARBUD4) && Monst->_mgoal == MGOAL_TALKING) {
Monst->_mgoal = MGOAL_NORMAL;
Monst->_msquelch = UCHAR_MAX;
@ -4241,8 +4241,8 @@ void MAI_Zhar(int i)
mx = Monst->_mx;
my = Monst->_my;
md = M_GetDir(i);
if (Monst->mtalkmsg == QUEST_ZHAR1 && !(dFlags[mx][my] & BFLAG_VISIBLE) && Monst->_mgoal == MGOAL_TALKING) {
Monst->mtalkmsg = QUEST_ZHAR2;
if (Monst->mtalkmsg == TEXT_ZHAR1 && !(dFlags[mx][my] & BFLAG_VISIBLE) && Monst->_mgoal == MGOAL_TALKING) {
Monst->mtalkmsg = TEXT_ZHAR2;
Monst->_mgoal = MGOAL_INQUIRING;
}
@ -4254,7 +4254,7 @@ void MAI_Zhar(int i)
else
abs(_my);
#ifndef SPAWN
if (Monst->mtalkmsg == QUEST_ZHAR2) {
if (Monst->mtalkmsg == TEXT_ZHAR2) {
if (!effect_is_playing(USFX_ZHAR2) && Monst->_mgoal == MGOAL_TALKING) {
Monst->_msquelch = UCHAR_MAX;
Monst->mtalkmsg = 0;
@ -4290,22 +4290,22 @@ void MAI_SnotSpil(int i)
my = Monst->_my;
md = M_GetDir(i);
if (Monst->mtalkmsg == QUEST_BANNER10 && !(dFlags[mx][my] & BFLAG_VISIBLE) && Monst->_mgoal == MGOAL_TALKING) {
Monst->mtalkmsg = QUEST_BANNER11;
if (Monst->mtalkmsg == TEXT_BANNER10 && !(dFlags[mx][my] & BFLAG_VISIBLE) && Monst->_mgoal == MGOAL_TALKING) {
Monst->mtalkmsg = TEXT_BANNER11;
Monst->_mgoal = MGOAL_INQUIRING;
}
if (Monst->mtalkmsg == QUEST_BANNER11 && quests[QTYPE_BOL]._qvar1 == 3) {
if (Monst->mtalkmsg == TEXT_BANNER11 && quests[Q_LTBANNER]._qvar1 == 3) {
Monst->mtalkmsg = 0;
Monst->_mgoal = MGOAL_NORMAL;
}
if (dFlags[mx][my] & BFLAG_VISIBLE) {
#ifndef SPAWN
if (Monst->mtalkmsg == QUEST_BANNER12) {
if (Monst->mtalkmsg == TEXT_BANNER12) {
if (!effect_is_playing(USFX_SNOT3) && Monst->_mgoal == MGOAL_TALKING) {
ObjChangeMap(setpc_x, setpc_y, setpc_x + setpc_w + 1, setpc_y + setpc_h + 1);
quests[QTYPE_BOL]._qvar1 = 3;
quests[Q_LTBANNER]._qvar1 = 3;
RedoPlayerVision();
Monst->_msquelch = UCHAR_MAX;
Monst->mtalkmsg = 0;
@ -4313,7 +4313,7 @@ void MAI_SnotSpil(int i)
}
}
#endif
if (quests[QTYPE_BOL]._qvar1 == 3) {
if (quests[Q_LTBANNER]._qvar1 == 3) {
if (Monst->_mgoal == MGOAL_NORMAL || Monst->_mgoal == MGOAL_SHOOT)
MAI_Fallen(i);
}
@ -4343,25 +4343,25 @@ void MAI_Lazurus(int i)
md = M_GetDir(i);
if (dFlags[mx][my] & BFLAG_VISIBLE) {
if (gbMaxPlayers == 1) {
if (Monst->mtalkmsg == QUEST_VILE13 && Monst->_mgoal == MGOAL_INQUIRING && plr[myplr].WorldX == QUEST_VILE13 && plr[myplr].WorldY == 46) {
if (Monst->mtalkmsg == TEXT_VILE13 && Monst->_mgoal == MGOAL_INQUIRING && plr[myplr].WorldX == TEXT_VILE13 && plr[myplr].WorldY == 46) {
PlayInGameMovie("gendata\\fprst3.smk");
Monst->_mmode = MM_TALK;
quests[QTYPE_VB]._qvar1 = 5;
quests[Q_BETRAYER]._qvar1 = 5;
}
#ifndef SPAWN
if (Monst->mtalkmsg == QUEST_VILE13 && !effect_is_playing(USFX_LAZ1) && Monst->_mgoal == MGOAL_TALKING) {
if (Monst->mtalkmsg == TEXT_VILE13 && !effect_is_playing(USFX_LAZ1) && Monst->_mgoal == MGOAL_TALKING) {
ObjChangeMapResync(1, 18, 20, 24);
RedoPlayerVision();
Monst->_msquelch = UCHAR_MAX;
Monst->mtalkmsg = 0;
quests[QTYPE_VB]._qvar1 = 6;
quests[Q_BETRAYER]._qvar1 = 6;
Monst->_mgoal = MGOAL_NORMAL;
}
#endif
}
if (gbMaxPlayers != 1 && Monst->mtalkmsg == QUEST_VILE13 && Monst->_mgoal == MGOAL_INQUIRING && quests[QTYPE_VB]._qvar1 <= 3) {
if (gbMaxPlayers != 1 && Monst->mtalkmsg == TEXT_VILE13 && Monst->_mgoal == MGOAL_INQUIRING && quests[Q_BETRAYER]._qvar1 <= 3) {
Monst->_mmode = MM_TALK;
}
}
@ -4395,7 +4395,7 @@ void MAI_Lazhelp(int i)
if (dFlags[_mx][_my] & BFLAG_VISIBLE) {
if (gbMaxPlayers == 1) {
if (quests[QTYPE_VB]._qvar1 <= 5) {
if (quests[Q_BETRAYER]._qvar1 <= 5) {
Monst->_mgoal = MGOAL_INQUIRING;
} else {
Monst->mtalkmsg = 0;
@ -4428,16 +4428,16 @@ void MAI_Lachdanan(int i)
_my = Monst->_my;
md = M_GetDir(i);
#ifndef SPAWN
if (Monst->mtalkmsg == QUEST_VEIL9 && !(dFlags[_mx][_my] & BFLAG_VISIBLE) && monster[i]._mgoal == MGOAL_TALKING) {
Monst->mtalkmsg = QUEST_VEIL10;
if (Monst->mtalkmsg == TEXT_VEIL9 && !(dFlags[_mx][_my] & BFLAG_VISIBLE) && monster[i]._mgoal == MGOAL_TALKING) {
Monst->mtalkmsg = TEXT_VEIL10;
monster[i]._mgoal = MGOAL_INQUIRING;
}
if (dFlags[_mx][_my] & BFLAG_VISIBLE) {
if (Monst->mtalkmsg == QUEST_VEIL11) {
if (Monst->mtalkmsg == TEXT_VEIL11) {
if (!effect_is_playing(USFX_LACH3) && Monst->_mgoal == MGOAL_TALKING) {
Monst->mtalkmsg = 0;
quests[QTYPE_VEIL]._qactive = 3;
quests[Q_VEIL]._qactive = QUEST_DONE;
M_StartKill(i, -1);
}
}
@ -4467,10 +4467,10 @@ void MAI_Warlord(int i)
my = Monst->_my;
md = M_GetDir(i);
if (dFlags[mx][my] & BFLAG_VISIBLE) {
if (Monst->mtalkmsg == QUEST_WARLRD9 && Monst->_mgoal == MGOAL_INQUIRING)
if (Monst->mtalkmsg == TEXT_WARLRD9 && Monst->_mgoal == MGOAL_INQUIRING)
Monst->_mmode = MM_TALK;
#ifndef SPAWN
if (Monst->mtalkmsg == QUEST_WARLRD9 && !effect_is_playing(USFX_WARLRD1) && Monst->_mgoal == MGOAL_TALKING) {
if (Monst->mtalkmsg == TEXT_WARLRD9 && !effect_is_playing(USFX_WARLRD1) && Monst->_mgoal == MGOAL_TALKING) {
Monst->_msquelch = UCHAR_MAX;
Monst->mtalkmsg = 0;
Monst->_mgoal = MGOAL_NORMAL;
@ -5441,16 +5441,16 @@ void TalktoMonster(int i)
pnum = Monst->_menemy;
Monst->_mmode = MM_TALK;
if (Monst->_mAi == AI_SNOTSPIL || Monst->_mAi == AI_LACHDAN) {
if (QuestStatus(QTYPE_BOL) && quests[QTYPE_BOL]._qvar1 == 2 && PlrHasItem(pnum, IDI_BANNER, itm)) {
if (QuestStatus(Q_LTBANNER) && quests[Q_LTBANNER]._qvar1 == 2 && PlrHasItem(pnum, IDI_BANNER, itm)) {
RemoveInvItem(pnum, itm);
quests[QTYPE_BOL]._qactive = 3;
Monst->mtalkmsg = QUEST_BANNER12;
quests[Q_LTBANNER]._qactive = QUEST_DONE;
Monst->mtalkmsg = TEXT_BANNER12;
Monst->_mgoal = MGOAL_INQUIRING;
}
if (QuestStatus(QTYPE_VEIL) && Monst->mtalkmsg >= QUEST_VEIL9) {
if (QuestStatus(Q_VEIL) && Monst->mtalkmsg >= TEXT_VEIL9) {
if (PlrHasItem(pnum, IDI_GLDNELIX, itm)) {
RemoveInvItem(pnum, itm);
Monst->mtalkmsg = QUEST_VEIL11;
Monst->mtalkmsg = TEXT_VEIL11;
Monst->_mgoal = MGOAL_INQUIRING;
}
}

10
Source/msg.cpp

@ -54,7 +54,7 @@ void msg_send_packet(int pnum, const void *packet, DWORD dwSize)
sgpCurrPkt->dwSpaceLeft -= dwSize;
}
TMegaPkt *msg_get_next_packet()
void msg_get_next_packet()
{
TMegaPkt *result;
@ -67,8 +67,6 @@ TMegaPkt *msg_get_next_packet()
result = result->pNext;
}
result->pNext = sgpCurrPkt;
return result;
}
BOOL msg_wait_resync()
@ -145,7 +143,7 @@ int msg_wait_for_turns()
return 100 * sgbDeltaChunks / 21;
}
void msg_process_net_packets()
void run_delta_info()
{
if (gbMaxPlayers != 1) {
gbBufferMsgs = 2;
@ -973,7 +971,7 @@ void NetSendCmdString(int pmask, const char *pszStr)
multi_send_msg_packet(pmask, (BYTE *)&cmd.bCmd, dwStrLen + 2);
}
void RemovePlrPortal(int pnum)
void delta_close_portal(int pnum)
{
memset(&sgJunk.portal[pnum], 0xFF, sizeof(sgJunk.portal[pnum]));
sgbDeltaChanged = TRUE;
@ -2429,7 +2427,7 @@ DWORD On_DEACTIVATEPORTAL(TCmd *pCmd, int pnum)
if (PortalOnLevel(pnum))
RemovePortalMissile(pnum);
DeactivatePortal(pnum);
RemovePlrPortal(pnum);
delta_close_portal(pnum);
}
return sizeof(*pCmd);

6
Source/msg.h

@ -12,11 +12,11 @@ extern int pkt_counter;
void msg_send_drop_pkt(int pnum, int reason);
void msg_send_packet(int pnum, const void *packet, DWORD dwSize);
TMegaPkt *msg_get_next_packet();
void msg_get_next_packet();
BOOL msg_wait_resync();
void msg_free_packets();
int msg_wait_for_turns();
void msg_process_net_packets();
void run_delta_info();
void msg_pre_packet();
void DeltaExportData(int pnum);
BYTE *DeltaExportItem(BYTE *dst, TCmdPItem *src);
@ -55,7 +55,7 @@ void NetSendCmdDelItem(BOOL bHiPri, BYTE bLoc);
void NetSendCmdDItem(BOOL bHiPri, int ii);
void NetSendCmdDamage(BOOL bHiPri, BYTE bPlr, DWORD dwDam);
void NetSendCmdString(int pmask, const char *pszStr);
void RemovePlrPortal(int pnum);
void delta_close_portal(int pnum);
DWORD ParseCmd(int pnum, TCmd *pCmd);
DWORD On_DLEVEL(int pnum, TCmd *pCmd);
void DeltaImportData(BYTE cmd, DWORD recv_offset);

2
Source/multi.cpp

@ -277,7 +277,7 @@ void multi_player_left_msg(int pnum, int left)
RemovePlrFromMap(pnum);
RemovePortalMissile(pnum);
DeactivatePortal(pnum);
RemovePlrPortal(pnum);
delta_close_portal(pnum);
RemovePlrMissiles(pnum);
if (left) {
pszFmt = "Player '%s' just left the game";

114
Source/objects.cpp

@ -70,9 +70,9 @@ char *StoryBookName[9] = {
"The Black King"
};
int StoryText[3][3] = {
{ QUEST_BOOK11, QUEST_BOOK12, QUEST_BOOK13 },
{ QUEST_BOOK21, QUEST_BOOK22, QUEST_BOOK23 },
{ QUEST_BOOK31, QUEST_BOOK32, QUEST_BOOK33 }
{ TEXT_BOOK11, TEXT_BOOK12, TEXT_BOOK13 },
{ TEXT_BOOK21, TEXT_BOOK22, TEXT_BOOK23 },
{ TEXT_BOOK31, TEXT_BOOK32, TEXT_BOOK33 }
};
void InitObjectGFX()
@ -276,8 +276,8 @@ void AddCandles()
{
int tx, ty;
tx = quests[QTYPE_PW]._qtx;
ty = quests[QTYPE_PW]._qty;
tx = quests[Q_PWATER]._qtx;
ty = quests[Q_PWATER]._qty;
AddObject(OBJ_STORYCANDLE, tx - 2, ty + 1);
AddObject(OBJ_STORYCANDLE, tx + 3, ty + 1);
AddObject(OBJ_STORYCANDLE, tx - 1, ty + 2);
@ -307,11 +307,11 @@ void AddBookLever(int lx1, int ly1, int lx2, int ly2, int x1, int y1, int x2, in
return;
}
if (QuestStatus(QTYPE_BLIND))
if (QuestStatus(Q_BLIND))
AddObject(OBJ_BLINDBOOK, xp, yp);
if (QuestStatus(QTYPE_WARLRD))
if (QuestStatus(Q_WARLORD))
AddObject(OBJ_STEELTOME, xp, yp);
if (QuestStatus(QTYPE_BLOOD)) {
if (QuestStatus(Q_BLOOD)) {
xp = 2 * setpc_x + 25;
yp = 2 * setpc_y + 40;
AddObject(OBJ_BLOODBOOK, xp, yp);
@ -751,7 +751,7 @@ void InitObjects()
GetRndSeed();
if (currlevel == 9 && gbMaxPlayers == 1)
AddSlainHero();
if (currlevel == quests[QTYPE_BLKM]._qlevel && quests[QTYPE_BLKM]._qactive == 1)
if (currlevel == quests[Q_MUSHROOM]._qlevel && quests[Q_MUSHROOM]._qactive == QUEST_INIT)
AddMushPatch();
if (currlevel == 4)
AddStoryBooks();
@ -760,46 +760,46 @@ void InitObjects()
if (currlevel == 12)
AddStoryBooks();
if (leveltype == DTYPE_CATHEDRAL) {
if (QuestStatus(QTYPE_BUTCH))
if (QuestStatus(Q_BUTCHER))
AddTortures();
if (QuestStatus(QTYPE_PW))
if (QuestStatus(Q_PWATER))
AddCandles();
if (QuestStatus(QTYPE_BOL))
if (QuestStatus(Q_LTBANNER))
AddObject(OBJ_SIGNCHEST, 2 * setpc_x + 26, 2 * setpc_y + 19);
InitRndLocBigObj(10, 15, OBJ_SARC);
AddL1Objs(0, 0, MAXDUNX, MAXDUNY);
InitRndBarrels();
}
if (leveltype == DTYPE_CATACOMBS) {
if (QuestStatus(QTYPE_INFRA))
if (QuestStatus(Q_ROCK))
InitRndLocObj5x5(1, 1, OBJ_STAND);
if (QuestStatus(QTYPE_BONE))
if (QuestStatus(Q_SCHAMB))
InitRndLocObj5x5(1, 1, OBJ_BOOK2R);
AddL2Objs(0, 0, MAXDUNX, MAXDUNY);
AddL2Torches();
if (QuestStatus(QTYPE_BLIND)) {
if (QuestStatus(Q_BLIND)) {
if (plr[myplr]._pClass == PC_WARRIOR) {
sp_id = QUEST_BLINDING;
sp_id = TEXT_BLINDING;
} else if (plr[myplr]._pClass == PC_ROGUE) {
sp_id = QUEST_RBLINDING;
sp_id = TEXT_RBLINDING;
} else if (plr[myplr]._pClass == PC_SORCERER) {
sp_id = QUEST_MBLINDING;
sp_id = TEXT_MBLINDING;
}
quests[QTYPE_BLIND]._qmsg = sp_id;
quests[Q_BLIND]._qmsg = sp_id;
AddBookLever(0, 0, MAXDUNX, MAXDUNY, setpc_x, setpc_y, setpc_w + setpc_x + 1, setpc_h + setpc_y + 1, sp_id);
mem = LoadFileInMem("Levels\\L2Data\\Blind2.DUN", NULL);
LoadMapObjs(mem, 2 * setpc_x, 2 * setpc_y);
mem_free_dbg(mem);
}
if (QuestStatus(QTYPE_BLOOD)) {
if (QuestStatus(Q_BLOOD)) {
if (plr[myplr]._pClass == PC_WARRIOR) {
sp_id = QUEST_BLOODY;
sp_id = TEXT_BLOODY;
} else if (plr[myplr]._pClass == PC_ROGUE) {
sp_id = QUEST_RBLOODY;
sp_id = TEXT_RBLOODY;
} else if (plr[myplr]._pClass == PC_SORCERER) {
sp_id = QUEST_MBLOODY;
sp_id = TEXT_MBLOODY;
}
quests[QTYPE_BLOOD]._qmsg = sp_id;
quests[Q_BLOOD]._qmsg = sp_id;
AddBookLever(0, 0, MAXDUNX, MAXDUNY, setpc_x, setpc_y + 3, setpc_x + 2, setpc_y + 7, sp_id);
AddObject(OBJ_PEDISTAL, 2 * setpc_x + 25, 2 * setpc_y + 32);
}
@ -810,21 +810,21 @@ void InitObjects()
InitRndBarrels();
}
if (leveltype == DTYPE_HELL) {
if (QuestStatus(QTYPE_WARLRD)) {
if (QuestStatus(Q_WARLORD)) {
if (plr[myplr]._pClass == PC_WARRIOR) {
sp_id = QUEST_BLOODWAR;
sp_id = TEXT_BLOODWAR;
} else if (plr[myplr]._pClass == PC_ROGUE) {
sp_id = QUEST_RBLOODWAR;
sp_id = TEXT_RBLOODWAR;
} else if (plr[myplr]._pClass == PC_SORCERER) {
sp_id = QUEST_MBLOODWAR;
sp_id = TEXT_MBLOODWAR;
}
quests[QTYPE_WARLRD]._qmsg = sp_id;
quests[Q_WARLORD]._qmsg = sp_id;
AddBookLever(0, 0, MAXDUNX, MAXDUNY, setpc_x, setpc_y, setpc_x + setpc_w, setpc_y + setpc_h, sp_id);
mem = LoadFileInMem("Levels\\L4Data\\Warlord.DUN", NULL);
LoadMapObjs(mem, 2 * setpc_x, 2 * setpc_y);
mem_free_dbg(mem);
}
if (QuestStatus(QTYPE_VB) && gbMaxPlayers == 1)
if (QuestStatus(Q_BETRAYER) && gbMaxPlayers == 1)
AddLazStand();
InitRndBarrels();
AddL4Goodies();
@ -1519,8 +1519,8 @@ void Obj_Circle(int i)
if (ox == 35 && oy == 36 && object[i]._oVar5 == 3) {
object[i]._oVar6 = 4;
ObjChangeMapResync(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4);
if (quests[QTYPE_VB]._qactive == 2)
quests[QTYPE_VB]._qvar1 = 4;
if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE)
quests[Q_BETRAYER]._qvar1 = 4;
AddMissile(plr[myplr].WorldX, plr[myplr].WorldY, 35, 46, plr[myplr]._pdir, MIS_RNDTELEPORT, 0, myplr, 0, 0);
track_repeat_walk(FALSE);
sgbMouseDown = 0;
@ -2469,7 +2469,7 @@ void OperateBook(int pnum, int i)
plr[myplr]._pMemSpells |= ((__int64)1 << (SPL_GUARDIAN - 1));
if (plr[pnum]._pSplLvl[SPL_GUARDIAN] < 15)
plr[myplr]._pSplLvl[SPL_GUARDIAN]++;
quests[QTYPE_BONE]._qactive = 3;
quests[Q_SCHAMB]._qactive = QUEST_DONE;
if (!deltaload)
PlaySfxLoc(IS_QUESTDN, object[i]._ox, object[i]._oy);
InitDiabloMsg(EMSG_BONECHAMB);
@ -2503,24 +2503,24 @@ void OperateBookLever(int pnum, int i)
x = 2 * setpc_x + 16;
y = 2 * setpc_y + 16;
if (object[i]._oSelFlag != 0 && !qtextflag) {
if (object[i]._otype == OBJ_BLINDBOOK && !quests[QTYPE_BLIND]._qvar1) {
quests[QTYPE_BLIND]._qactive = 2;
quests[QTYPE_BLIND]._qlog = 1;
quests[QTYPE_BLIND]._qvar1 = 1;
if (object[i]._otype == OBJ_BLINDBOOK && !quests[Q_BLIND]._qvar1) {
quests[Q_BLIND]._qactive = QUEST_ACTIVE;
quests[Q_BLIND]._qlog = 1;
quests[Q_BLIND]._qvar1 = 1;
}
if (object[i]._otype == OBJ_BLOODBOOK && !quests[QTYPE_BLOOD]._qvar1) {
quests[QTYPE_BLOOD]._qactive = 2;
quests[QTYPE_BLOOD]._qlog = 1;
quests[QTYPE_BLOOD]._qvar1 = 1;
if (object[i]._otype == OBJ_BLOODBOOK && !quests[Q_BLOOD]._qvar1) {
quests[Q_BLOOD]._qactive = QUEST_ACTIVE;
quests[Q_BLOOD]._qlog = 1;
quests[Q_BLOOD]._qvar1 = 1;
SpawnQuestItem(IDI_BLDSTONE, 2 * setpc_x + 19, 2 * setpc_y + 26, 0, 1);
SpawnQuestItem(IDI_BLDSTONE, 2 * setpc_x + 31, 2 * setpc_y + 26, 0, 1);
SpawnQuestItem(IDI_BLDSTONE, 2 * setpc_x + 25, 2 * setpc_y + 33, 0, 1);
}
object[i]._otype = object[i]._otype;
if (object[i]._otype == OBJ_STEELTOME && !quests[QTYPE_WARLRD]._qvar1) {
quests[QTYPE_WARLRD]._qactive = 2;
quests[QTYPE_WARLRD]._qlog = 1;
quests[QTYPE_WARLRD]._qvar1 = 1;
if (object[i]._otype == OBJ_STEELTOME && !quests[Q_WARLORD]._qvar1) {
quests[Q_WARLORD]._qactive = QUEST_ACTIVE;
quests[Q_WARLORD]._qlog = 1;
quests[Q_WARLORD]._qvar1 = 1;
}
if (object[i]._oAnimFrame != object[i]._oVar6) {
if (object[i]._otype != OBJ_BLOODBOOK)
@ -2551,18 +2551,18 @@ void OperateSChambBk(int pnum, int i)
SyncObjectAnim(objectactive[j]);
}
object[i]._oAnimFrame = object[i]._oVar6;
if (quests[QTYPE_BONE]._qactive == 1) {
quests[QTYPE_BONE]._qactive = 2;
quests[QTYPE_BONE]._qlog = 1;
if (quests[Q_SCHAMB]._qactive == QUEST_INIT) {
quests[Q_SCHAMB]._qactive = QUEST_ACTIVE;
quests[Q_SCHAMB]._qlog = 1;
}
if (plr[myplr]._pClass == PC_WARRIOR) {
textdef = QUEST_BONER;
textdef = TEXT_BONER;
} else if (plr[myplr]._pClass == PC_ROGUE) {
textdef = QUEST_RBONER;
textdef = TEXT_RBONER;
} else if (plr[myplr]._pClass == PC_SORCERER) {
textdef = QUEST_MBONER;
textdef = TEXT_MBONER;
}
quests[QTYPE_BONE]._qmsg = textdef;
quests[Q_SCHAMB]._qmsg = textdef;
InitQTextMsg(textdef);
}
}
@ -2617,7 +2617,7 @@ void OperateMushPatch(int pnum, int i)
{
int x, y;
if (quests[QTYPE_BLKM]._qactive != 2 || quests[QTYPE_BLKM]._qvar1 < QS_TOMEGIVEN) {
if (quests[Q_MUSHROOM]._qactive != QUEST_ACTIVE || quests[Q_MUSHROOM]._qvar1 < QS_TOMEGIVEN) {
if (!deltaload && pnum == myplr) {
if (plr[myplr]._pClass == PC_WARRIOR) {
PlaySFX(PS_WARR13);
@ -2638,7 +2638,7 @@ void OperateMushPatch(int pnum, int i)
if (!deltaload) {
GetSuperItemLoc(object[i]._ox, object[i]._oy, x, y);
SpawnQuestItem(IDI_MUSHROOM, x, y, 0, 0);
quests[QTYPE_BLKM]._qvar1 = QS_MUSHSPAWNED;
quests[Q_MUSHROOM]._qvar1 = QS_MUSHSPAWNED;
}
}
}
@ -2648,7 +2648,7 @@ void OperateInnSignChest(int pnum, int i)
{
int x, y;
if (quests[QTYPE_BOL]._qvar1 != 2) {
if (quests[Q_LTBANNER]._qvar1 != 2) {
if (!deltaload && pnum == myplr) {
if (plr[myplr]._pClass == PC_WARRIOR) {
PlaySFX(PS_WARR24);
@ -3486,11 +3486,11 @@ void OperateBookCase(int pnum, int i, BOOL sendmsg)
if (!deltaload) {
SetRndSeed(object[i]._oRndSeed);
CreateTypeItem(object[i]._ox, object[i]._oy, FALSE, ITYPE_MISC, IMISC_BOOK, sendmsg, FALSE);
if (QuestStatus(QTYPE_ZHAR)
if (QuestStatus(Q_ZHAR)
&& monster[MAX_PLRS].mName == UniqMonst[UMT_ZHAR].mName
&& monster[MAX_PLRS]._msquelch == UCHAR_MAX
&& monster[MAX_PLRS]._mhitpoints) {
monster[MAX_PLRS].mtalkmsg = QUEST_ZHAR2;
monster[MAX_PLRS].mtalkmsg = TEXT_ZHAR2;
M_StartStand(0, monster[MAX_PLRS]._mdir);
monster[MAX_PLRS]._mgoal = MGOAL_SHOOT;
monster[MAX_PLRS]._mmode = MM_TALK;

6
Source/player.cpp

@ -3025,7 +3025,7 @@ void CheckNewPath(int pnum)
if (x < 2 && y < 2) {
ClrPlrPath(pnum);
if (monster[i].mtalkmsg && monster[i].mtalkmsg != QUEST_VILE14) {
if (monster[i].mtalkmsg && monster[i].mtalkmsg != TEXT_VILE14) {
TalktoMonster(i);
} else {
StartAttack(pnum, d);
@ -3102,7 +3102,7 @@ void CheckNewPath(int pnum)
y = abs(plr[pnum].WorldY - monster[i]._mfuty);
if (x <= 1 && y <= 1) {
d = GetDirection(plr[pnum]._px, plr[pnum]._py, monster[i]._mfutx, monster[i]._mfuty);
if (monster[i].mtalkmsg && monster[i].mtalkmsg != QUEST_VILE14) {
if (monster[i].mtalkmsg && monster[i].mtalkmsg != TEXT_VILE14) {
TalktoMonster(i);
} else {
StartAttack(pnum, d);
@ -3125,7 +3125,7 @@ void CheckNewPath(int pnum)
case ACTION_RATTACKMON:
i = plr[pnum].destParam1;
d = GetDirection(plr[pnum]._px, plr[pnum]._py, monster[i]._mfutx, monster[i]._mfuty);
if (monster[i].mtalkmsg && monster[i].mtalkmsg != QUEST_VILE14) {
if (monster[i].mtalkmsg && monster[i].mtalkmsg != TEXT_VILE14) {
TalktoMonster(i);
} else {
StartRangeAttack(pnum, d, monster[i]._mfutx, monster[i]._mfuty);

280
Source/quests.cpp

@ -17,22 +17,22 @@ int ReturnLvl;
QuestData questlist[MAXQUESTS] = {
// clang-format off
// _qdlvl, _qdmultlvl, _qlvlt, _qdtype, _qdrnd, _qslvl, _qflags, _qdmsg, _qlstr
{ 5, -1, DTYPE_NONE, QTYPE_INFRA, 100, 0, 0, QUEST_INFRA5, "The Magic Rock" },
{ 9, -1, DTYPE_NONE, QTYPE_BLKM, 100, 0, 0, QUEST_MUSH8, "Black Mushroom" },
{ 4, -1, DTYPE_NONE, QTYPE_GARB, 100, 0, 0, QUEST_GARBUD1, "Gharbad The Weak" },
{ 8, -1, DTYPE_NONE, QTYPE_ZHAR, 100, 0, 0, QUEST_ZHAR1, "Zhar the Mad" },
{ 14, -1, DTYPE_NONE, QTYPE_VEIL, 100, 0, 0, QUEST_VEIL9, "Lachdanan" },
{ 15, -1, DTYPE_NONE, QTYPE_MOD, 100, 0, 1, QUEST_VILE3, "Diablo" },
{ 2, 2, DTYPE_NONE, QTYPE_BUTCH, 100, 0, 1, QUEST_BUTCH9, "The Butcher" },
{ 4, -1, DTYPE_NONE, QTYPE_BOL, 100, 0, 0, QUEST_BANNER2, "Ogden's Sign" },
{ 7, -1, DTYPE_NONE, QTYPE_BLIND, 100, 0, 0, QUEST_BLINDING, "Halls of the Blind" },
{ 5, -1, DTYPE_NONE, QTYPE_BLOOD, 100, 0, 0, QUEST_BLOODY, "Valor" },
{ 10, -1, DTYPE_NONE, QTYPE_ANVIL, 100, 0, 0, QUEST_ANVIL5, "Anvil of Fury" },
{ 13, -1, DTYPE_NONE, QTYPE_WARLRD, 100, 0, 0, QUEST_BLOODWAR, "Warlord of Blood" },
{ 3, 3, DTYPE_CATHEDRAL, QTYPE_KING, 100, 1, 1, QUEST_KING2, "The Curse of King Leoric" },
{ 2, -1, DTYPE_CAVES, QTYPE_PW, 100, 4, 0, QUEST_POISON3, "Poisoned Water Supply" },
{ 6, -1, DTYPE_CATACOMBS, QTYPE_BONE, 100, 2, 0, QUEST_BONER, "The Chamber of Bone" },
{ 15, 15, DTYPE_CATHEDRAL, QTYPE_VB, 100, 5, 1, QUEST_VILE1, "Archbishop Lazarus" },
{ 5, -1, DTYPE_NONE, Q_ROCK, 100, 0, 0, TEXT_INFRA5, "The Magic Rock" },
{ 9, -1, DTYPE_NONE, Q_MUSHROOM, 100, 0, 0, TEXT_MUSH8, "Black Mushroom" },
{ 4, -1, DTYPE_NONE, Q_GARBUD, 100, 0, 0, TEXT_GARBUD1, "Gharbad The Weak" },
{ 8, -1, DTYPE_NONE, Q_ZHAR, 100, 0, 0, TEXT_ZHAR1, "Zhar the Mad" },
{ 14, -1, DTYPE_NONE, Q_VEIL, 100, 0, 0, TEXT_VEIL9, "Lachdanan" },
{ 15, -1, DTYPE_NONE, Q_DIABLO, 100, 0, 1, TEXT_VILE3, "Diablo" },
{ 2, 2, DTYPE_NONE, Q_BUTCHER, 100, 0, 1, TEXT_BUTCH9, "The Butcher" },
{ 4, -1, DTYPE_NONE, Q_LTBANNER, 100, 0, 0, TEXT_BANNER2, "Ogden's Sign" },
{ 7, -1, DTYPE_NONE, Q_BLIND, 100, 0, 0, TEXT_BLINDING, "Halls of the Blind" },
{ 5, -1, DTYPE_NONE, Q_BLOOD, 100, 0, 0, TEXT_BLOODY, "Valor" },
{ 10, -1, DTYPE_NONE, Q_ANVIL, 100, 0, 0, TEXT_ANVIL5, "Anvil of Fury" },
{ 13, -1, DTYPE_NONE, Q_WARLORD, 100, 0, 0, TEXT_BLOODWAR, "Warlord of Blood" },
{ 3, 3, DTYPE_CATHEDRAL, Q_SKELKING, 100, 1, 1, TEXT_KING2, "The Curse of King Leoric" },
{ 2, -1, DTYPE_CAVES, Q_PWATER, 100, 4, 0, TEXT_POISON3, "Poisoned Water Supply" },
{ 6, -1, DTYPE_CATACOMBS, Q_SCHAMB, 100, 2, 0, TEXT_BONER, "The Chamber of Bone" },
{ 15, 15, DTYPE_CATHEDRAL, Q_BETRAYER, 100, 5, 1, TEXT_VILE1, "Archbishop Lazarus" },
// clang-format on
};
char questxoff[7] = { 0, -1, 0, -1, -2, -1, -2 };
@ -44,10 +44,10 @@ char *questtrigstr[5] = {
"A Dark Passage",
"Unholy Altar"
};
int QuestGroup1[3] = { QTYPE_BUTCH, QTYPE_BOL, QTYPE_GARB };
int QuestGroup2[3] = { QTYPE_BLIND, QTYPE_INFRA, QTYPE_BLOOD };
int QuestGroup3[3] = { QTYPE_BLKM, QTYPE_ZHAR, QTYPE_ANVIL };
int QuestGroup4[2] = { QTYPE_VEIL, QTYPE_WARLRD };
int QuestGroup1[3] = { Q_BUTCHER, Q_LTBANNER, Q_GARBUD };
int QuestGroup2[3] = { Q_BLIND, Q_ROCK, Q_BLOOD };
int QuestGroup3[3] = { Q_MUSHROOM, Q_ZHAR, Q_ANVIL };
int QuestGroup4[2] = { Q_VEIL, Q_WARLORD };
void InitQuests()
{
@ -56,12 +56,12 @@ void InitQuests()
if (gbMaxPlayers == 1) {
for (i = 0; i < MAXQUESTS; i++) {
quests[i]._qactive = 0;
quests[i]._qactive = QUEST_NOTAVAIL;
}
} else {
for (i = 0; i < MAXQUESTS; i++) {
if (!(questlist[i]._qflags & 1)) {
quests[i]._qactive = 0;
quests[i]._qactive = QUEST_NOTAVAIL;
}
}
}
@ -77,13 +77,13 @@ void InitQuests()
if (gbMaxPlayers > 1) {
quests[z]._qlevel = questlist[z]._qdmultlvl;
if (!delta_quest_inited(initiatedQuests)) {
quests[z]._qactive = 1;
quests[z]._qactive = QUEST_INIT;
quests[z]._qvar1 = 0;
quests[z]._qlog = 0;
}
initiatedQuests++;
} else {
quests[z]._qactive = 1;
quests[z]._qactive = QUEST_INIT;
quests[z]._qlevel = questlist[z]._qdlvl;
quests[z]._qvar1 = 0;
quests[z]._qlog = 0;
@ -102,33 +102,33 @@ void InitQuests()
if (gbMaxPlayers == 1) {
SetRndSeed(glSeedTbl[15]);
if (random_(0, 2))
quests[QTYPE_PW]._qactive = 0;
quests[Q_PWATER]._qactive = QUEST_NOTAVAIL;
else
quests[QTYPE_KING]._qactive = 0;
quests[Q_SKELKING]._qactive = QUEST_NOTAVAIL;
quests[QuestGroup1[random_(0, sizeof(QuestGroup1) / sizeof(int))]]._qactive = 0;
quests[QuestGroup2[random_(0, sizeof(QuestGroup2) / sizeof(int))]]._qactive = 0;
quests[QuestGroup3[random_(0, sizeof(QuestGroup3) / sizeof(int))]]._qactive = 0;
quests[QuestGroup4[random_(0, sizeof(QuestGroup4) / sizeof(int))]]._qactive = 0;
quests[QuestGroup1[random_(0, sizeof(QuestGroup1) / sizeof(int))]]._qactive = QUEST_NOTAVAIL;
quests[QuestGroup2[random_(0, sizeof(QuestGroup2) / sizeof(int))]]._qactive = QUEST_NOTAVAIL;
quests[QuestGroup3[random_(0, sizeof(QuestGroup3) / sizeof(int))]]._qactive = QUEST_NOTAVAIL;
quests[QuestGroup4[random_(0, sizeof(QuestGroup4) / sizeof(int))]]._qactive = QUEST_NOTAVAIL;
}
#ifdef _DEBUG
if (questdebug != -1)
quests[questdebug]._qactive = 2;
quests[questdebug]._qactive = QUEST_ACTIVE;
#endif
#ifdef SPAWN
for (z = 0; z < MAXQUESTS; z++) {
quests[z]._qactive = 0;
quests[z]._qactive = QUEST_NOTAVAIL;
}
#endif
if (!quests[QTYPE_KING]._qactive)
quests[QTYPE_KING]._qvar2 = 2;
if (!quests[QTYPE_INFRA]._qactive)
quests[QTYPE_INFRA]._qvar2 = 2;
quests[QTYPE_BOL]._qvar1 = 1;
if (!quests[Q_SKELKING]._qactive)
quests[Q_SKELKING]._qvar2 = 2;
if (!quests[Q_ROCK]._qactive)
quests[Q_ROCK]._qvar2 = 2;
quests[Q_LTBANNER]._qvar1 = 1;
if (gbMaxPlayers != 1)
quests[QTYPE_VB]._qvar1 = 2;
quests[Q_BETRAYER]._qvar1 = 2;
}
void CheckQuests()
@ -136,49 +136,49 @@ void CheckQuests()
#ifndef SPAWN
int i, rportx, rporty;
if (QuestStatus(QTYPE_VB) && gbMaxPlayers != 1 && quests[QTYPE_VB]._qvar1 == 2) {
if (QuestStatus(Q_BETRAYER) && gbMaxPlayers != 1 && quests[Q_BETRAYER]._qvar1 == 2) {
AddObject(OBJ_ALTBOY, 2 * setpc_x + 20, 2 * setpc_y + 22);
quests[QTYPE_VB]._qvar1 = 3;
NetSendCmdQuest(TRUE, QTYPE_VB);
quests[Q_BETRAYER]._qvar1 = 3;
NetSendCmdQuest(TRUE, Q_BETRAYER);
}
if (gbMaxPlayers != 1) {
return;
}
if (currlevel == quests[QTYPE_VB]._qlevel
if (currlevel == quests[Q_BETRAYER]._qlevel
&& !setlevel
&& quests[QTYPE_VB]._qvar1 >= 2
&& (quests[QTYPE_VB]._qactive == 2 || quests[QTYPE_VB]._qactive == 3)
&& (quests[QTYPE_VB]._qvar2 == 0 || quests[QTYPE_VB]._qvar2 == 2)) {
quests[QTYPE_VB]._qtx = 2 * quests[QTYPE_VB]._qtx + 16;
quests[QTYPE_VB]._qty = 2 * quests[QTYPE_VB]._qty + 16;
rportx = quests[QTYPE_VB]._qtx;
rporty = quests[QTYPE_VB]._qty;
&& quests[Q_BETRAYER]._qvar1 >= 2
&& (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE || quests[Q_BETRAYER]._qactive == QUEST_DONE)
&& (quests[Q_BETRAYER]._qvar2 == 0 || quests[Q_BETRAYER]._qvar2 == 2)) {
quests[Q_BETRAYER]._qtx = 2 * quests[Q_BETRAYER]._qtx + 16;
quests[Q_BETRAYER]._qty = 2 * quests[Q_BETRAYER]._qty + 16;
rportx = quests[Q_BETRAYER]._qtx;
rporty = quests[Q_BETRAYER]._qty;
AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0);
quests[QTYPE_VB]._qvar2 = 1;
if (quests[QTYPE_VB]._qactive == 2) {
quests[QTYPE_VB]._qvar1 = 3;
quests[Q_BETRAYER]._qvar2 = 1;
if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE) {
quests[Q_BETRAYER]._qvar1 = 3;
}
}
if (quests[QTYPE_VB]._qactive == 3
if (quests[Q_BETRAYER]._qactive == QUEST_DONE
&& setlevel
&& setlvlnum == SL_VILEBETRAYER
&& quests[QTYPE_VB]._qvar2 == 4) {
&& quests[Q_BETRAYER]._qvar2 == 4) {
rportx = 35;
rporty = 32;
AddMissile(rportx, rporty, rportx, rporty, 0, MIS_RPORTAL, 0, myplr, 0, 0);
quests[QTYPE_VB]._qvar2 = 3;
quests[Q_BETRAYER]._qvar2 = 3;
}
if (setlevel) {
if (setlvlnum == quests[QTYPE_PW]._qslvl
&& quests[QTYPE_PW]._qactive != 1
&& leveltype == quests[QTYPE_PW]._qlvltype
if (setlvlnum == quests[Q_PWATER]._qslvl
&& quests[Q_PWATER]._qactive != QUEST_INIT
&& leveltype == quests[Q_PWATER]._qlvltype
&& nummonsters == 4
&& quests[QTYPE_PW]._qactive != 3) {
quests[QTYPE_PW]._qactive = 3;
&& quests[Q_PWATER]._qactive != QUEST_DONE) {
quests[Q_PWATER]._qactive = QUEST_DONE;
PlaySfxLoc(IS_QUESTDN, plr[myplr].WorldX, plr[myplr].WorldY);
LoadPalette("Levels\\L3Data\\L3pwater.pal");
WaterDone = 32;
@ -191,7 +191,7 @@ void CheckQuests()
for (i = 0; i < MAXQUESTS; i++) {
if (currlevel == quests[i]._qlevel
&& quests[i]._qslvl != 0
&& quests[i]._qactive != 0
&& quests[i]._qactive != QUEST_NOTAVAIL
&& plr[myplr].WorldX == quests[i]._qtx
&& plr[myplr].WorldY == quests[i]._qty) {
if (quests[i]._qlvltype != 255) {
@ -215,7 +215,7 @@ BOOL ForceQuests()
for (i = 0; i < MAXQUESTS; i++) {
if (i != QTYPE_VB && currlevel == quests[i]._qlevel && quests[i]._qslvl != 0) {
if (i != Q_BETRAYER && currlevel == quests[i]._qlevel && quests[i]._qslvl != 0) {
ql = quests[quests[i]._qidx]._qslvl - 1;
qx = quests[i]._qtx;
qy = quests[i]._qty;
@ -254,7 +254,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
int i, j;
if (monster[m].MType->mtype == MT_SKING) {
quests[QTYPE_KING]._qactive = 3;
quests[Q_SKELKING]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR82;
@ -264,10 +264,10 @@ void CheckQuestKill(int m, BOOL sendmsg)
sfxdnum = PS_MAGE82;
}
if (sendmsg)
NetSendCmdQuest(TRUE, QTYPE_KING);
NetSendCmdQuest(TRUE, Q_SKELKING);
} else if (monster[m].MType->mtype == MT_CLEAVER) {
quests[QTYPE_BUTCH]._qactive = 3;
quests[Q_BUTCHER]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR80;
@ -277,9 +277,9 @@ void CheckQuestKill(int m, BOOL sendmsg)
sfxdnum = PS_MAGE80;
}
if (sendmsg)
NetSendCmdQuest(TRUE, QTYPE_BUTCH);
NetSendCmdQuest(TRUE, Q_BUTCHER);
} else if (monster[m].mName == UniqMonst[UMT_GARBUD].mName) { //"Gharbad the Weak"
quests[QTYPE_GARB]._qactive = 3;
quests[Q_GARBUD]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR61;
@ -289,7 +289,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
sfxdnum = PS_MAGE61;
}
} else if (monster[m].mName == UniqMonst[UMT_ZHAR].mName) { //"Zhar the Mad"
quests[QTYPE_ZHAR]._qactive = 3;
quests[Q_ZHAR]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR62;
@ -299,10 +299,10 @@ void CheckQuestKill(int m, BOOL sendmsg)
sfxdnum = PS_MAGE62;
}
} else if (monster[m].mName == UniqMonst[UMT_LAZURUS].mName && gbMaxPlayers != 1) { //"Arch-Bishop Lazarus"
quests[QTYPE_VB]._qactive = 3;
quests[QTYPE_VB]._qvar1 = 7;
quests[Q_BETRAYER]._qactive = QUEST_DONE;
quests[Q_BETRAYER]._qvar1 = 7;
sfxdelay = 30;
quests[QTYPE_MOD]._qactive = 2;
quests[Q_DIABLO]._qactive = QUEST_ACTIVE;
for (j = 0; j < MAXDUNY; j++) {
for (i = 0; i < MAXDUNX; i++) {
@ -322,16 +322,16 @@ void CheckQuestKill(int m, BOOL sendmsg)
sfxdnum = PS_MAGE83;
}
if (sendmsg) {
NetSendCmdQuest(TRUE, QTYPE_VB);
NetSendCmdQuest(TRUE, QTYPE_MOD);
NetSendCmdQuest(TRUE, Q_BETRAYER);
NetSendCmdQuest(TRUE, Q_DIABLO);
}
} else if (monster[m].mName == UniqMonst[UMT_LAZURUS].mName && gbMaxPlayers == 1) { //"Arch-Bishop Lazarus"
quests[QTYPE_VB]._qactive = 3;
quests[Q_BETRAYER]._qactive = QUEST_DONE;
sfxdelay = 30;
InitVPTriggers();
quests[QTYPE_VB]._qvar1 = 7;
quests[QTYPE_VB]._qvar2 = 4;
quests[QTYPE_MOD]._qactive = 2;
quests[Q_BETRAYER]._qvar1 = 7;
quests[Q_BETRAYER]._qvar2 = 4;
quests[Q_DIABLO]._qactive = QUEST_ACTIVE;
AddMissile(35, 32, 35, 32, 0, MIS_RPORTAL, 0, myplr, 0, 0);
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR83;
@ -341,7 +341,7 @@ void CheckQuestKill(int m, BOOL sendmsg)
sfxdnum = PS_MAGE83;
}
} else if (monster[m].mName == UniqMonst[UMT_WARLORD].mName) { //"Warlord of Blood"
quests[QTYPE_WARLRD]._qactive = 3;
quests[Q_WARLORD]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == PC_WARRIOR) {
sfxdnum = PS_WARR94;
@ -519,25 +519,25 @@ void DRLG_CheckQuests(int x, int y)
for (i = 0; i < MAXQUESTS; i++) {
if (QuestStatus(i)) {
switch (quests[i]._qtype) {
case QTYPE_BUTCH:
case Q_BUTCHER:
DrawButcher();
break;
case QTYPE_BOL:
case Q_LTBANNER:
DrawLTBanner(x, y);
break;
case QTYPE_BLIND:
case Q_BLIND:
DrawBlind(x, y);
break;
case QTYPE_BLOOD:
case Q_BLOOD:
DrawBlood(x, y);
break;
case QTYPE_WARLRD:
case Q_WARLORD:
DrawWarLord(x, y);
break;
case QTYPE_KING:
case Q_SKELKING:
DrawSkelKing(i, x, y);
break;
case QTYPE_BONE:
case Q_SCHAMB:
DrawSChamber(i, x, y);
break;
}
@ -549,27 +549,27 @@ void SetReturnLvlPos()
{
switch (setlvlnum) {
case SL_SKELKING:
ReturnLvlX = quests[QTYPE_KING]._qtx + 1;
ReturnLvlY = quests[QTYPE_KING]._qty;
ReturnLvl = quests[QTYPE_KING]._qlevel;
ReturnLvlX = quests[Q_SKELKING]._qtx + 1;
ReturnLvlY = quests[Q_SKELKING]._qty;
ReturnLvl = quests[Q_SKELKING]._qlevel;
ReturnLvlT = DTYPE_CATHEDRAL;
break;
case SL_BONECHAMB:
ReturnLvlX = quests[QTYPE_BONE]._qtx + 1;
ReturnLvlY = quests[QTYPE_BONE]._qty;
ReturnLvl = quests[QTYPE_BONE]._qlevel;
ReturnLvlX = quests[Q_SCHAMB]._qtx + 1;
ReturnLvlY = quests[Q_SCHAMB]._qty;
ReturnLvl = quests[Q_SCHAMB]._qlevel;
ReturnLvlT = DTYPE_CATACOMBS;
break;
case SL_POISONWATER:
ReturnLvlX = quests[QTYPE_PW]._qtx;
ReturnLvlY = quests[QTYPE_PW]._qty + 1;
ReturnLvl = quests[QTYPE_PW]._qlevel;
ReturnLvlX = quests[Q_PWATER]._qtx;
ReturnLvlY = quests[Q_PWATER]._qty + 1;
ReturnLvl = quests[Q_PWATER]._qlevel;
ReturnLvlT = DTYPE_CATHEDRAL;
break;
case SL_VILEBETRAYER:
ReturnLvlX = quests[QTYPE_VB]._qtx + 1;
ReturnLvlY = quests[QTYPE_VB]._qty - 1;
ReturnLvl = quests[QTYPE_VB]._qlevel;
ReturnLvlX = quests[Q_BETRAYER]._qtx + 1;
ReturnLvlY = quests[Q_BETRAYER]._qty - 1;
ReturnLvl = quests[Q_BETRAYER]._qlevel;
ReturnLvlT = DTYPE_HELL;
break;
}
@ -577,8 +577,8 @@ void SetReturnLvlPos()
void GetReturnLvlPos()
{
if (quests[QTYPE_VB]._qactive == 3)
quests[QTYPE_VB]._qvar2 = 2;
if (quests[Q_BETRAYER]._qactive == QUEST_DONE)
quests[Q_BETRAYER]._qvar2 = 2;
ViewX = ReturnLvlX;
ViewY = ReturnLvlY;
currlevel = ReturnLvl;
@ -588,23 +588,23 @@ void GetReturnLvlPos()
void ResyncMPQuests()
{
#ifndef SPAWN
if (quests[QTYPE_KING]._qactive == 1
&& currlevel >= quests[QTYPE_KING]._qlevel - 1
&& currlevel <= quests[QTYPE_KING]._qlevel + 1) {
quests[QTYPE_KING]._qactive = 2;
NetSendCmdQuest(TRUE, QTYPE_KING);
}
if (quests[QTYPE_BUTCH]._qactive == 1
&& currlevel >= quests[QTYPE_BUTCH]._qlevel - 1
&& currlevel <= quests[QTYPE_BUTCH]._qlevel + 1) {
quests[QTYPE_BUTCH]._qactive = 2;
NetSendCmdQuest(TRUE, QTYPE_BUTCH);
}
if (quests[QTYPE_VB]._qactive == 1 && currlevel == quests[QTYPE_VB]._qlevel - 1) {
quests[QTYPE_VB]._qactive = 2;
NetSendCmdQuest(TRUE, QTYPE_VB);
}
if (QuestStatus(QTYPE_VB))
if (quests[Q_SKELKING]._qactive == QUEST_INIT
&& currlevel >= quests[Q_SKELKING]._qlevel - 1
&& currlevel <= quests[Q_SKELKING]._qlevel + 1) {
quests[Q_SKELKING]._qactive = QUEST_ACTIVE;
NetSendCmdQuest(TRUE, Q_SKELKING);
}
if (quests[Q_BUTCHER]._qactive == QUEST_INIT
&& currlevel >= quests[Q_BUTCHER]._qlevel - 1
&& currlevel <= quests[Q_BUTCHER]._qlevel + 1) {
quests[Q_BUTCHER]._qactive = QUEST_ACTIVE;
NetSendCmdQuest(TRUE, Q_BUTCHER);
}
if (quests[Q_BETRAYER]._qactive == QUEST_INIT && currlevel == quests[Q_BETRAYER]._qlevel - 1) {
quests[Q_BETRAYER]._qactive = QUEST_ACTIVE;
NetSendCmdQuest(TRUE, Q_BETRAYER);
}
if (QuestStatus(Q_BETRAYER))
AddObject(OBJ_ALTBOY, 2 * setpc_x + 20, 2 * setpc_y + 22);
#endif
}
@ -614,9 +614,9 @@ void ResyncQuests()
#ifndef SPAWN
int i, tren, x, y;
if (setlevel && setlvlnum == quests[QTYPE_PW]._qslvl && quests[QTYPE_PW]._qactive != 1 && leveltype == quests[QTYPE_PW]._qlvltype) {
if (setlevel && setlvlnum == quests[Q_PWATER]._qslvl && quests[Q_PWATER]._qactive != QUEST_INIT && leveltype == quests[Q_PWATER]._qlvltype) {
if (quests[QTYPE_PW]._qactive == 3)
if (quests[Q_PWATER]._qactive == QUEST_DONE)
LoadPalette("Levels\\L3Data\\L3pwater.pal");
else
LoadPalette("Levels\\L3Data\\L3pfoul.pal");
@ -625,14 +625,14 @@ void ResyncQuests()
palette_update_quest_palette(i);
}
if (QuestStatus(QTYPE_BOL)) {
if (quests[QTYPE_BOL]._qvar1 == 1)
if (QuestStatus(Q_LTBANNER)) {
if (quests[Q_LTBANNER]._qvar1 == 1)
ObjChangeMapResync(
setpc_w + setpc_x - 2,
setpc_h + setpc_y - 2,
setpc_w + setpc_x + 1,
setpc_h + setpc_y + 1);
if (quests[QTYPE_BOL]._qvar1 == 2) {
if (quests[Q_LTBANNER]._qvar1 == 2) {
ObjChangeMapResync(
setpc_w + setpc_x - 2,
setpc_h + setpc_y - 2,
@ -646,7 +646,7 @@ void ResyncQuests()
DRLG_MRectTrans(setpc_x, setpc_y, (setpc_w >> 1) + setpc_x + 4, setpc_y + (setpc_h >> 1));
TransVal = tren;
}
if (quests[QTYPE_BOL]._qvar1 == 3) {
if (quests[Q_LTBANNER]._qvar1 == 3) {
x = setpc_x;
y = setpc_y;
ObjChangeMapResync(x, y, x + setpc_w + 1, y + setpc_h + 1);
@ -658,40 +658,40 @@ void ResyncQuests()
TransVal = tren;
}
}
if (currlevel == quests[QTYPE_BLKM]._qlevel) {
if (quests[QTYPE_BLKM]._qactive == 1 && !quests[QTYPE_BLKM]._qvar1) {
if (currlevel == quests[Q_MUSHROOM]._qlevel) {
if (quests[Q_MUSHROOM]._qactive == QUEST_INIT && !quests[Q_MUSHROOM]._qvar1) {
SpawnQuestItem(IDI_FUNGALTM, 0, 0, 5, 1);
quests[QTYPE_BLKM]._qvar1 = QS_TOMESPAWNED;
quests[Q_MUSHROOM]._qvar1 = QS_TOMESPAWNED;
} else {
if (quests[QTYPE_BLKM]._qactive == 2) {
if (quests[QTYPE_BLKM]._qvar1 >= QS_MUSHGIVEN) {
if (quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE) {
if (quests[Q_MUSHROOM]._qvar1 >= QS_MUSHGIVEN) {
Qtalklist[TOWN_WITCH]._qblkm = -1;
Qtalklist[TOWN_HEALER]._qblkm = QUEST_MUSH3;
} else if (quests[QTYPE_BLKM]._qvar1 >= QS_BRAINGIVEN) {
Qtalklist[TOWN_HEALER]._qblkm = TEXT_MUSH3;
} else if (quests[Q_MUSHROOM]._qvar1 >= QS_BRAINGIVEN) {
Qtalklist[TOWN_HEALER]._qblkm = -1;
}
}
}
}
if (currlevel == quests[QTYPE_VEIL]._qlevel + 1 && quests[QTYPE_VEIL]._qactive == 2 && !quests[QTYPE_VEIL]._qvar1) {
quests[QTYPE_VEIL]._qvar1 = 1;
if (currlevel == quests[Q_VEIL]._qlevel + 1 && quests[Q_VEIL]._qactive == QUEST_ACTIVE && !quests[Q_VEIL]._qvar1) {
quests[Q_VEIL]._qvar1 = 1;
SpawnQuestItem(IDI_GLDNELIX, 0, 0, 5, 1);
}
if (setlevel && setlvlnum == SL_VILEBETRAYER) {
if (quests[QTYPE_VB]._qvar1 >= 4)
if (quests[Q_BETRAYER]._qvar1 >= 4)
ObjChangeMapResync(1, 11, 20, 18);
if (quests[QTYPE_VB]._qvar1 >= 6)
if (quests[Q_BETRAYER]._qvar1 >= 6)
ObjChangeMapResync(1, 18, 20, 24);
if (quests[QTYPE_VB]._qvar1 >= 7)
if (quests[Q_BETRAYER]._qvar1 >= 7)
InitVPTriggers();
for (i = 0; i < nobjects; i++)
SyncObjectAnim(objectactive[i]);
}
if (currlevel == quests[QTYPE_VB]._qlevel
if (currlevel == quests[Q_BETRAYER]._qlevel
&& !setlevel
&& (quests[QTYPE_VB]._qvar2 == 1 || quests[QTYPE_VB]._qvar2 >= 3)
&& (quests[QTYPE_VB]._qactive == 2 || quests[QTYPE_VB]._qactive == 3)) {
quests[QTYPE_VB]._qvar2 = 2;
&& (quests[Q_BETRAYER]._qvar2 == 1 || quests[Q_BETRAYER]._qvar2 >= 3)
&& (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE || quests[Q_BETRAYER]._qactive == QUEST_DONE)) {
quests[Q_BETRAYER]._qvar2 = 2;
}
#endif
}
@ -750,7 +750,7 @@ void StartQuestlog()
numqlines = 0;
for (i = 0; i < MAXQUESTS; i++) {
if (quests[i]._qactive == 2 && quests[i]._qlog) {
if (quests[i]._qactive == QUEST_ACTIVE && quests[i]._qlog) {
qlist[numqlines] = i;
numqlines++;
}
@ -825,7 +825,7 @@ void QuestlogESC()
void SetMultiQuest(int q, int s, int l, int v1)
{
#ifndef SPAWN
if (quests[q]._qactive != 3) {
if (quests[q]._qactive != QUEST_DONE) {
if (s > quests[q]._qactive)
quests[q]._qactive = s;
quests[q]._qlog |= l;

18
Source/setmaps.cpp

@ -133,9 +133,9 @@ void LoadSetMap()
{
switch (setlvlnum) {
case SL_SKELKING:
if (quests[QTYPE_KING]._qactive == 1) {
quests[QTYPE_KING]._qactive = 2;
quests[QTYPE_KING]._qvar1 = 1;
if (quests[Q_SKELKING]._qactive == QUEST_INIT) {
quests[Q_SKELKING]._qactive = QUEST_ACTIVE;
quests[Q_SKELKING]._qvar1 = 1;
}
LoadPreL1Dungeon("Levels\\L1Data\\SklKng1.DUN", 83, 45);
LoadL1Dungeon("Levels\\L1Data\\SklKng2.DUN", 83, 45);
@ -167,18 +167,18 @@ void LoadSetMap()
DRLG_SetMapTrans("Levels\\L1Data\\Lv1MazeA.DUN");
break;
case SL_POISONWATER:
if (quests[QTYPE_PW]._qactive == 1)
quests[QTYPE_PW]._qactive = 2;
if (quests[Q_PWATER]._qactive == QUEST_INIT)
quests[Q_PWATER]._qactive = QUEST_ACTIVE;
LoadPreL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 19, 50);
LoadL3Dungeon("Levels\\L3Data\\Foulwatr.DUN", 20, 50);
LoadPalette("Levels\\L3Data\\L3pfoul.pal");
InitPWaterTriggers();
break;
case SL_VILEBETRAYER:
if (quests[QTYPE_VB]._qactive == 3) {
quests[QTYPE_VB]._qvar2 = 4;
} else if (quests[QTYPE_VB]._qactive == 2) {
quests[QTYPE_VB]._qvar2 = 3;
if (quests[Q_BETRAYER]._qactive == QUEST_DONE) {
quests[Q_BETRAYER]._qvar2 = 4;
} else if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE) {
quests[Q_BETRAYER]._qvar2 = 3;
}
LoadPreL1Dungeon("Levels\\L1Data\\Vile1.DUN", 35, 36);
LoadL1Dungeon("Levels\\L1Data\\Vile2.DUN", 35, 36);

44
Source/stores.cpp

@ -615,7 +615,7 @@ BOOL SmithSellOk(int i)
return FALSE;
if (plr[myplr].InvList[i]._itype == ITYPE_GOLD)
return FALSE;
if (plr[myplr].InvList[i]._itype == ITYPE_0E)
if (plr[myplr].InvList[i]._itype == ITYPE_MEAT)
return FALSE;
if (plr[myplr].InvList[i]._itype == ITYPE_STAFF)
return FALSE;
@ -723,7 +723,7 @@ BOOL SmithRepairOk(int i)
return FALSE;
if (plr[myplr].InvList[i]._itype == ITYPE_GOLD)
return FALSE;
if (plr[myplr].InvList[i]._itype == ITYPE_0E)
if (plr[myplr].InvList[i]._itype == ITYPE_MEAT)
return FALSE;
if (plr[myplr].InvList[i]._iDurability == plr[myplr].InvList[i]._iMaxDur)
return FALSE;
@ -1379,7 +1379,7 @@ void S_StartTalk()
#else
sn = 0;
for (i = 0; i < MAXQUESTS; i++) {
if (quests[i]._qactive == 2 && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog)
if (quests[i]._qactive == QUEST_ACTIVE && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog)
sn++;
}
@ -1394,7 +1394,7 @@ void S_StartTalk()
sn2 = sn - 2;
for (i = 0; i < MAXQUESTS; i++) {
if (quests[i]._qactive == 2 && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog) {
if (quests[i]._qactive == QUEST_ACTIVE && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog) {
AddSText(0, sn, 1, questlist[i]._qlstr, COL_WHITE, 1);
sn += la;
}
@ -1773,8 +1773,8 @@ void S_SmithEnter()
talker = 0;
stextlhold = 10;
stextshold = STORE_SMITH;
gossipstart = QUEST_GRISWOLD2;
gossipend = QUEST_GRISWOLD13;
gossipstart = TEXT_GRISWOLD2;
gossipend = TEXT_GRISWOLD13;
StartStore(STORE_GOSSIP);
break;
case 12:
@ -2167,8 +2167,8 @@ void S_WitchEnter()
stextlhold = 12;
talker = 6;
stextshold = STORE_WITCH;
gossipstart = QUEST_ADRIA2;
gossipend = QUEST_ADRIA13;
gossipstart = TEXT_ADRIA2;
gossipend = TEXT_ADRIA13;
StartStore(STORE_GOSSIP);
return;
case 14:
@ -2321,8 +2321,8 @@ void S_BoyEnter()
talker = 8;
stextshold = STORE_BOY;
stextlhold = stextsel;
gossipstart = QUEST_WIRT2;
gossipend = QUEST_WIRT12;
gossipstart = TEXT_WIRT2;
gossipend = TEXT_WIRT12;
StartStore(STORE_GOSSIP);
} else {
stextflag = STORE_NONE;
@ -2491,8 +2491,8 @@ void S_HealerEnter()
stextlhold = 12;
talker = 1;
stextshold = STORE_HEALER;
gossipstart = QUEST_PEPIN2;
gossipend = QUEST_PEPIN11;
gossipstart = TEXT_PEPIN2;
gossipend = TEXT_PEPIN11;
StartStore(STORE_GOSSIP);
break;
case 14:
@ -2550,8 +2550,8 @@ void S_StoryEnter()
stextlhold = 12;
talker = 4;
stextshold = STORE_STORY;
gossipstart = QUEST_STORY2;
gossipend = QUEST_STORY11;
gossipstart = TEXT_STORY2;
gossipend = TEXT_STORY11;
StartStore(STORE_GOSSIP);
break;
case 14:
@ -2595,7 +2595,7 @@ void S_TalkEnter()
sn = 0;
for (i = 0; i < MAXQUESTS; i++) {
if (quests[i]._qactive == 2 && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog)
if (quests[i]._qactive == QUEST_ACTIVE && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog)
sn++;
}
if (sn > 6) {
@ -2614,7 +2614,7 @@ void S_TalkEnter()
}
for (i = 0; i < MAXQUESTS; i++) {
if (quests[i]._qactive == 2 && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog) {
if (quests[i]._qactive == QUEST_ACTIVE && ((DWORD *)&Qtalklist[talker])[i] != -1 && quests[i]._qlog) {
if (sn == stextsel) {
InitQTextMsg(((DWORD *)&Qtalklist[talker])[i]);
}
@ -2630,8 +2630,8 @@ void S_TavernEnter()
stextlhold = 12;
talker = 3;
stextshold = STORE_TAVERN;
gossipstart = QUEST_OGDEN2;
gossipend = QUEST_OGDEN10;
gossipstart = TEXT_OGDEN2;
gossipend = TEXT_OGDEN10;
StartStore(STORE_GOSSIP);
break;
case 18:
@ -2647,8 +2647,8 @@ void S_BarmaidEnter()
stextlhold = 12;
talker = 7;
stextshold = STORE_BARMAID;
gossipstart = QUEST_GILLIAN2;
gossipend = QUEST_GILLIAN10;
gossipstart = TEXT_GILLIAN2;
gossipend = TEXT_GILLIAN10;
StartStore(STORE_GOSSIP);
break;
case 18:
@ -2664,8 +2664,8 @@ void S_DrunkEnter()
stextlhold = 12;
talker = 5;
stextshold = STORE_DRUNK;
gossipstart = QUEST_FARNHAM2;
gossipend = QUEST_FARNHAM13;
gossipstart = TEXT_FARNHAM2;
gossipend = TEXT_FARNHAM13;
StartStore(STORE_GOSSIP);
break;
case 18:

4
Source/themes.cpp

@ -431,7 +431,7 @@ void InitThemes()
if (leveltype == DTYPE_CATACOMBS || leveltype == DTYPE_CAVES || leveltype == DTYPE_HELL) {
for (i = 0; i < themeCount; i++)
themes[i].ttype = THEME_NONE;
if (QuestStatus(QTYPE_ZHAR)) {
if (QuestStatus(Q_ZHAR)) {
for (j = 0; j < themeCount; j++) {
themes[j].ttval = themeLoc[j].ttval;
if (SpecialThemeFit(j, THEME_LIBRARY)) {
@ -744,7 +744,7 @@ void Theme_Library(int t)
}
}
if (QuestStatus(QTYPE_ZHAR)) {
if (QuestStatus(Q_ZHAR)) {
if (t == zharlib) {
return;
}

2
Source/town.cpp

@ -1623,7 +1623,7 @@ void T_Pass3()
}
#endif
if (quests[QTYPE_PW]._qactive != 3 && quests[QTYPE_PW]._qactive) {
if (quests[Q_PWATER]._qactive != QUEST_DONE && quests[Q_PWATER]._qactive) {
T_FillTile(P3Tiles, 60, 70, 342);
} else {
T_FillTile(P3Tiles, 60, 70, 71);

270
Source/towners.cpp

@ -94,17 +94,17 @@ int cowoffy[8] = { -1, -1, -1, 0, -1, -1, -1, 0 };
QuestTalkData Qtalklist[11] = {
// clang-format off
// _qinfra, _qblkm, _qgarb, _qzhar, _qveil, _qmod, _qbutch, _qbol, _qblind, _qblood, _qanvil, _qwarlrd, _qking, _qpw, _qbone, _qvb
{ QUEST_INFRA6, QUEST_MUSH6, -1, -1, QUEST_VEIL5, -1, QUEST_BUTCH5, QUEST_BANNER6, QUEST_BLIND5, QUEST_BLOOD5, QUEST_ANVIL6, QUEST_WARLRD5, QUEST_KING7, QUEST_POISON7, QUEST_BONE5, QUEST_VILE9 },
{ QUEST_INFRA3, -1, -1, -1, QUEST_VEIL3, -1, QUEST_BUTCH3, QUEST_BANNER4, QUEST_BLIND3, QUEST_BLOOD3, QUEST_ANVIL3, QUEST_WARLRD3, QUEST_KING5, QUEST_POISON4, QUEST_BONE3, QUEST_VILE7 },
{ TEXT_INFRA6, TEXT_MUSH6, -1, -1, TEXT_VEIL5, -1, TEXT_BUTCH5, TEXT_BANNER6, TEXT_BLIND5, TEXT_BLOOD5, TEXT_ANVIL6, TEXT_WARLRD5, TEXT_KING7, TEXT_POISON7, TEXT_BONE5, TEXT_VILE9 },
{ TEXT_INFRA3, -1, -1, -1, TEXT_VEIL3, -1, TEXT_BUTCH3, TEXT_BANNER4, TEXT_BLIND3, TEXT_BLOOD3, TEXT_ANVIL3, TEXT_WARLRD3, TEXT_KING5, TEXT_POISON4, TEXT_BONE3, TEXT_VILE7 },
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
{ QUEST_INFRA2, QUEST_MUSH2, -1, -1, QUEST_VEIL2, -1, QUEST_BUTCH2, -1, QUEST_BLIND2, QUEST_BLOOD2, QUEST_ANVIL2, QUEST_WARLRD2, QUEST_KING3, QUEST_POISON2, QUEST_BONE2, QUEST_VILE4 },
{ QUEST_INFRA1, QUEST_MUSH1, -1, -1, QUEST_VEIL1, QUEST_VILE3, QUEST_BUTCH1, QUEST_BANNER1, QUEST_BLIND1, QUEST_BLOOD1, QUEST_ANVIL1, QUEST_WARLRD1, QUEST_KING1, QUEST_POISON1, QUEST_BONE1, QUEST_VILE2 },
{ QUEST_INFRA8, QUEST_MUSH7, -1, -1, QUEST_VEIL6, -1, QUEST_BUTCH6, QUEST_BANNER7, QUEST_BLIND6, QUEST_BLOOD6, QUEST_ANVIL8, QUEST_WARLRD6, QUEST_KING8, QUEST_POISON8, QUEST_BONE6, QUEST_VILE10 },
{ QUEST_INFRA9, QUEST_MUSH9, -1, -1, QUEST_VEIL7, -1, QUEST_BUTCH7, QUEST_BANNER8, QUEST_BLIND7, QUEST_BLOOD7, QUEST_ANVIL9, QUEST_WARLRD7, QUEST_KING9, QUEST_POISON9, QUEST_BONE7, QUEST_VILE11 },
{ QUEST_INFRA4, QUEST_MUSH5, -1, -1, QUEST_VEIL4, -1, QUEST_BUTCH4, QUEST_BANNER5, QUEST_BLIND4, QUEST_BLOOD4, QUEST_ANVIL4, QUEST_WARLRD4, QUEST_KING6, QUEST_POISON6, QUEST_BONE4, QUEST_VILE8 },
{ QUEST_INFRA10, QUEST_MUSH13, -1, -1, QUEST_VEIL8, -1, QUEST_BUTCH8, QUEST_BANNER9, QUEST_BLIND8, QUEST_BLOOD8, QUEST_ANVIL10,QUEST_WARLRD8, QUEST_KING10, QUEST_POISON10, QUEST_BONE8, QUEST_VILE12 },
{ TEXT_INFRA2, TEXT_MUSH2, -1, -1, TEXT_VEIL2, -1, TEXT_BUTCH2, -1, TEXT_BLIND2, TEXT_BLOOD2, TEXT_ANVIL2, TEXT_WARLRD2, TEXT_KING3, TEXT_POISON2, TEXT_BONE2, TEXT_VILE4 },
{ TEXT_INFRA1, TEXT_MUSH1, -1, -1, TEXT_VEIL1, TEXT_VILE3, TEXT_BUTCH1, TEXT_BANNER1, TEXT_BLIND1, TEXT_BLOOD1, TEXT_ANVIL1, TEXT_WARLRD1, TEXT_KING1, TEXT_POISON1, TEXT_BONE1, TEXT_VILE2 },
{ TEXT_INFRA8, TEXT_MUSH7, -1, -1, TEXT_VEIL6, -1, TEXT_BUTCH6, TEXT_BANNER7, TEXT_BLIND6, TEXT_BLOOD6, TEXT_ANVIL8, TEXT_WARLRD6, TEXT_KING8, TEXT_POISON8, TEXT_BONE6, TEXT_VILE10 },
{ TEXT_INFRA9, TEXT_MUSH9, -1, -1, TEXT_VEIL7, -1, TEXT_BUTCH7, TEXT_BANNER8, TEXT_BLIND7, TEXT_BLOOD7, TEXT_ANVIL9, TEXT_WARLRD7, TEXT_KING9, TEXT_POISON9, TEXT_BONE7, TEXT_VILE11 },
{ TEXT_INFRA4, TEXT_MUSH5, -1, -1, TEXT_VEIL4, -1, TEXT_BUTCH4, TEXT_BANNER5, TEXT_BLIND4, TEXT_BLOOD4, TEXT_ANVIL4, TEXT_WARLRD4, TEXT_KING6, TEXT_POISON6, TEXT_BONE4, TEXT_VILE8 },
{ TEXT_INFRA10, TEXT_MUSH13, -1, -1, TEXT_VEIL8, -1, TEXT_BUTCH8, TEXT_BANNER9, TEXT_BLIND8, TEXT_BLOOD8, TEXT_ANVIL10,TEXT_WARLRD8, TEXT_KING10, TEXT_POISON10, TEXT_BONE8, TEXT_VILE12 },
{ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 },
{ QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1, QUEST_KING1 }
{ TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1, TEXT_KING1 }
// clang-format on
};
int CowPlaying = -1;
@ -379,7 +379,7 @@ void InitTowners()
boyloadflag = FALSE;
InitSmith();
InitHealer();
if (quests[QTYPE_BUTCH]._qactive && quests[QTYPE_BUTCH]._qactive != 3)
if (quests[Q_BUTCHER]._qactive && quests[Q_BUTCHER]._qactive != QUEST_DONE)
InitTownDead();
InitBarOwner();
InitTeller();
@ -446,7 +446,7 @@ void TownDead()
tidx = GetActiveTowner(TOWN_DEADGUY);
TownCtrlMsg(tidx);
if (!qtextflag) {
if ((quests[QTYPE_BUTCH]._qactive != 2 || quests[QTYPE_BUTCH]._qlog) && quests[QTYPE_BUTCH]._qactive != 1) {
if ((quests[Q_BUTCHER]._qactive != QUEST_ACTIVE || quests[Q_BUTCHER]._qlog) && quests[Q_BUTCHER]._qactive != QUEST_INIT) {
towner[tidx]._tAnimDelay = 1000;
towner[tidx]._tAnimFrame = 1;
strcpy(towner[tidx]._tName, "Slain Townsman");
@ -454,7 +454,7 @@ void TownDead()
return;
}
}
if (quests[QTYPE_BUTCH]._qactive != 1)
if (quests[Q_BUTCHER]._qactive != QUEST_INIT)
towner[tidx]._tAnimCnt = 0;
}
@ -625,68 +625,68 @@ void TalkToTowner(int p, int t)
if (!plr[p]._pLvlVisited[0] && !towner[t]._tMsgSaid) {
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_INTRO);
InitQTextMsg(TEXT_INTRO);
towner[t]._tMsgSaid = TRUE;
}
if ((plr[p]._pLvlVisited[2] || plr[p]._pLvlVisited[4]) && quests[QTYPE_KING]._qactive != 0) {
if (quests[QTYPE_KING]._qvar2 == 0 && !towner[t]._tMsgSaid) {
quests[QTYPE_KING]._qvar2 = 1;
quests[QTYPE_KING]._qlog = TRUE;
if (quests[QTYPE_KING]._qactive == 1) {
quests[QTYPE_KING]._qactive = 2;
quests[QTYPE_KING]._qvar1 = 1;
if ((plr[p]._pLvlVisited[2] || plr[p]._pLvlVisited[4]) && quests[Q_SKELKING]._qactive != QUEST_NOTAVAIL) {
if (quests[Q_SKELKING]._qvar2 == 0 && !towner[t]._tMsgSaid) {
quests[Q_SKELKING]._qvar2 = 1;
quests[Q_SKELKING]._qlog = TRUE;
if (quests[Q_SKELKING]._qactive == QUEST_INIT) {
quests[Q_SKELKING]._qactive = QUEST_ACTIVE;
quests[Q_SKELKING]._qvar1 = 1;
}
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_KING2);
InitQTextMsg(TEXT_KING2);
towner[t]._tMsgSaid = TRUE;
NetSendCmdQuest(TRUE, QTYPE_KING);
NetSendCmdQuest(TRUE, Q_SKELKING);
}
if (quests[QTYPE_KING]._qactive == 3 && quests[QTYPE_KING]._qvar2 == 1 && !towner[t]._tMsgSaid) {
quests[QTYPE_KING]._qvar2 = 2;
quests[QTYPE_KING]._qvar1 = 2;
if (quests[Q_SKELKING]._qactive == QUEST_DONE && quests[Q_SKELKING]._qvar2 == 1 && !towner[t]._tMsgSaid) {
quests[Q_SKELKING]._qvar2 = 2;
quests[Q_SKELKING]._qvar1 = 2;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_KING4);
InitQTextMsg(TEXT_KING4);
towner[t]._tMsgSaid = TRUE;
NetSendCmdQuest(TRUE, QTYPE_KING);
NetSendCmdQuest(TRUE, Q_SKELKING);
}
}
if (gbMaxPlayers == 1 && plr[p]._pLvlVisited[3] && quests[QTYPE_BOL]._qactive != 0) {
if ((quests[QTYPE_BOL]._qactive == 1 || quests[QTYPE_BOL]._qactive == 2) && quests[QTYPE_BOL]._qvar2 == 0 && !towner[t]._tMsgSaid) {
quests[QTYPE_BOL]._qvar2 = 1;
if (quests[QTYPE_BOL]._qactive == 1) {
quests[QTYPE_BOL]._qvar1 = 1;
quests[QTYPE_BOL]._qactive = 2;
if (gbMaxPlayers == 1 && plr[p]._pLvlVisited[3] && quests[Q_LTBANNER]._qactive != QUEST_NOTAVAIL) {
if ((quests[Q_LTBANNER]._qactive == QUEST_INIT || quests[Q_LTBANNER]._qactive == QUEST_ACTIVE) && quests[Q_LTBANNER]._qvar2 == 0 && !towner[t]._tMsgSaid) {
quests[Q_LTBANNER]._qvar2 = 1;
if (quests[Q_LTBANNER]._qactive == QUEST_INIT) {
quests[Q_LTBANNER]._qvar1 = 1;
quests[Q_LTBANNER]._qactive = QUEST_ACTIVE;
}
quests[QTYPE_BOL]._qlog = TRUE;
quests[Q_LTBANNER]._qlog = TRUE;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_BANNER2);
InitQTextMsg(TEXT_BANNER2);
towner[t]._tMsgSaid = TRUE;
}
if (quests[QTYPE_BOL]._qvar2 == 1 && PlrHasItem(p, IDI_BANNER, i) != NULL && !towner[t]._tMsgSaid) {
quests[QTYPE_BOL]._qactive = 3;
quests[QTYPE_BOL]._qvar1 = 3;
if (quests[Q_LTBANNER]._qvar2 == 1 && PlrHasItem(p, IDI_BANNER, i) != NULL && !towner[t]._tMsgSaid) {
quests[Q_LTBANNER]._qactive = QUEST_DONE;
quests[Q_LTBANNER]._qvar1 = 3;
RemoveInvItem(p, i);
CreateItem(UITEM_HARCREST, towner[t]._tx, towner[t]._ty + 1);
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_BANNER3);
InitQTextMsg(TEXT_BANNER3);
towner[t]._tMsgSaid = TRUE;
}
}
if (!qtextflag) {
TownerTalk(QUEST_OGDEN1, t);
TownerTalk(TEXT_OGDEN1, t);
if (storeflag) {
StartStore(STORE_TAVERN);
}
}
} else if (t == GetActiveTowner(TOWN_DEADGUY)) {
if (quests[QTYPE_BUTCH]._qactive == 2 && quests[QTYPE_BUTCH]._qvar1 == 1) {
if (quests[Q_BUTCHER]._qactive == QUEST_ACTIVE && quests[Q_BUTCHER]._qvar1 == 1) {
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
quests[QTYPE_BUTCH]._qvar1 = 1;
quests[Q_BUTCHER]._qvar1 = 1;
#ifndef SPAWN
if (plr[p]._pClass == PC_WARRIOR && !effect_is_playing(PS_WARR8)) {
PlaySFX(PS_WARR8);
@ -697,113 +697,113 @@ void TalkToTowner(int p, int t)
}
#endif
towner[t]._tMsgSaid = TRUE;
} else if (quests[QTYPE_BUTCH]._qactive == 3 && quests[QTYPE_BUTCH]._qvar1 == 1) {
quests[QTYPE_BUTCH]._qvar1 = 1;
} else if (quests[Q_BUTCHER]._qactive == QUEST_DONE && quests[Q_BUTCHER]._qvar1 == 1) {
quests[Q_BUTCHER]._qvar1 = 1;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
towner[t]._tMsgSaid = TRUE;
} else if (quests[QTYPE_BUTCH]._qactive == 1 || quests[QTYPE_BUTCH]._qactive == 2 && quests[QTYPE_BUTCH]._qvar1 == 0) {
quests[QTYPE_BUTCH]._qactive = 2;
quests[QTYPE_BUTCH]._qlog = TRUE;
quests[QTYPE_BUTCH]._qmsg = QUEST_BUTCH9;
quests[QTYPE_BUTCH]._qvar1 = 1;
} else if (quests[Q_BUTCHER]._qactive == QUEST_INIT || quests[Q_BUTCHER]._qactive == QUEST_ACTIVE && quests[Q_BUTCHER]._qvar1 == 0) {
quests[Q_BUTCHER]._qactive = QUEST_ACTIVE;
quests[Q_BUTCHER]._qlog = TRUE;
quests[Q_BUTCHER]._qmsg = TEXT_BUTCH9;
quests[Q_BUTCHER]._qvar1 = 1;
towner[t]._tbtcnt = 50;
towner[t]._tVar1 = p;
towner[t]._tVar2 = 3;
InitQTextMsg(QUEST_BUTCH9);
InitQTextMsg(TEXT_BUTCH9);
towner[t]._tMsgSaid = TRUE;
NetSendCmdQuest(TRUE, QTYPE_BUTCH);
NetSendCmdQuest(TRUE, Q_BUTCHER);
}
} else if (t == GetActiveTowner(TOWN_SMITH)) {
if (gbMaxPlayers == 1) {
if (plr[p]._pLvlVisited[4] && quests[QTYPE_INFRA]._qactive != 0) {
if (quests[QTYPE_INFRA]._qvar2 == 0) {
quests[QTYPE_INFRA]._qvar2 = 1;
quests[QTYPE_INFRA]._qlog = TRUE;
if (quests[QTYPE_INFRA]._qactive == 1) {
quests[QTYPE_INFRA]._qactive = 2;
quests[QTYPE_INFRA]._qvar1 = 1;
if (plr[p]._pLvlVisited[4] && quests[Q_ROCK]._qactive != QUEST_NOTAVAIL) {
if (quests[Q_ROCK]._qvar2 == 0) {
quests[Q_ROCK]._qvar2 = 1;
quests[Q_ROCK]._qlog = TRUE;
if (quests[Q_ROCK]._qactive == QUEST_INIT) {
quests[Q_ROCK]._qactive = QUEST_ACTIVE;
quests[Q_ROCK]._qvar1 = 1;
}
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_INFRA5);
InitQTextMsg(TEXT_INFRA5);
towner[t]._tMsgSaid = TRUE;
}
if (quests[QTYPE_INFRA]._qvar2 == 1 && PlrHasItem(p, IDI_ROCK, i) != NULL && !towner[t]._tMsgSaid) {
quests[QTYPE_INFRA]._qactive = 3;
quests[QTYPE_INFRA]._qvar2 = 2;
quests[QTYPE_INFRA]._qvar1 = 2;
if (quests[Q_ROCK]._qvar2 == 1 && PlrHasItem(p, IDI_ROCK, i) != NULL && !towner[t]._tMsgSaid) {
quests[Q_ROCK]._qactive = QUEST_DONE;
quests[Q_ROCK]._qvar2 = 2;
quests[Q_ROCK]._qvar1 = 2;
RemoveInvItem(p, i);
CreateItem(UITEM_INFRARING, towner[t]._tx, towner[t]._ty + 1);
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_INFRA7);
InitQTextMsg(TEXT_INFRA7);
towner[t]._tMsgSaid = TRUE;
}
}
if (plr[p]._pLvlVisited[9] && quests[QTYPE_ANVIL]._qactive != 0) {
if ((quests[QTYPE_ANVIL]._qactive == 1 || quests[QTYPE_ANVIL]._qactive == 2) && quests[QTYPE_ANVIL]._qvar2 == 0 && !towner[t]._tMsgSaid) {
if (quests[QTYPE_INFRA]._qvar2 == 2 || quests[QTYPE_INFRA]._qactive == 2 && quests[QTYPE_INFRA]._qvar2 == 1) {
quests[QTYPE_ANVIL]._qvar2 = 1;
quests[QTYPE_ANVIL]._qlog = TRUE;
if (quests[QTYPE_ANVIL]._qactive == 1) {
quests[QTYPE_ANVIL]._qactive = 2;
quests[QTYPE_ANVIL]._qvar1 = 1;
if (plr[p]._pLvlVisited[9] && quests[Q_ANVIL]._qactive != QUEST_NOTAVAIL) {
if ((quests[Q_ANVIL]._qactive == QUEST_INIT || quests[Q_ANVIL]._qactive == QUEST_ACTIVE) && quests[Q_ANVIL]._qvar2 == 0 && !towner[t]._tMsgSaid) {
if (quests[Q_ROCK]._qvar2 == 2 || quests[Q_ROCK]._qactive == QUEST_ACTIVE && quests[Q_ROCK]._qvar2 == 1) {
quests[Q_ANVIL]._qvar2 = 1;
quests[Q_ANVIL]._qlog = TRUE;
if (quests[Q_ANVIL]._qactive == QUEST_INIT) {
quests[Q_ANVIL]._qactive = QUEST_ACTIVE;
quests[Q_ANVIL]._qvar1 = 1;
}
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_ANVIL5);
InitQTextMsg(TEXT_ANVIL5);
towner[t]._tMsgSaid = TRUE;
}
}
if (quests[QTYPE_ANVIL]._qvar2 == 1 && PlrHasItem(p, IDI_ANVIL, i) != NULL) {
if (quests[Q_ANVIL]._qvar2 == 1 && PlrHasItem(p, IDI_ANVIL, i) != NULL) {
if (!towner[t]._tMsgSaid) {
quests[QTYPE_ANVIL]._qactive = 3;
quests[QTYPE_ANVIL]._qvar2 = 2;
quests[QTYPE_ANVIL]._qvar1 = 2;
quests[Q_ANVIL]._qactive = QUEST_DONE;
quests[Q_ANVIL]._qvar2 = 2;
quests[Q_ANVIL]._qvar1 = 2;
RemoveInvItem(p, i);
CreateItem(UITEM_GRISWOLD, towner[t]._tx, towner[t]._ty + 1);
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_ANVIL7);
InitQTextMsg(TEXT_ANVIL7);
towner[t]._tMsgSaid = TRUE;
}
}
}
}
if (!qtextflag) {
TownerTalk(QUEST_GRISWOLD1, t);
TownerTalk(TEXT_GRISWOLD1, t);
if (storeflag) {
StartStore(STORE_SMITH);
}
}
} else if (t == GetActiveTowner(TOWN_WITCH)) {
if (quests[QTYPE_BLKM]._qactive == 1 && PlrHasItem(p, IDI_FUNGALTM, i) != NULL) {
if (quests[Q_MUSHROOM]._qactive == QUEST_INIT && PlrHasItem(p, IDI_FUNGALTM, i) != NULL) {
RemoveInvItem(p, i);
quests[QTYPE_BLKM]._qactive = 2;
quests[QTYPE_BLKM]._qlog = TRUE;
quests[QTYPE_BLKM]._qvar1 = 2;
quests[Q_MUSHROOM]._qactive = QUEST_ACTIVE;
quests[Q_MUSHROOM]._qlog = TRUE;
quests[Q_MUSHROOM]._qvar1 = 2;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_MUSH8);
InitQTextMsg(TEXT_MUSH8);
towner[t]._tMsgSaid = TRUE;
} else if (quests[QTYPE_BLKM]._qactive == 2) {
if (quests[QTYPE_BLKM]._qvar1 >= 2 && quests[QTYPE_BLKM]._qvar1 <= 4) {
} else if (quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE) {
if (quests[Q_MUSHROOM]._qvar1 >= 2 && quests[Q_MUSHROOM]._qvar1 <= 4) {
if (PlrHasItem(p, IDI_MUSHROOM, i) != NULL) {
RemoveInvItem(p, i);
quests[QTYPE_BLKM]._qvar1 = 5;
Qtalklist[TOWN_HEALER]._qblkm = QUEST_MUSH3;
quests[Q_MUSHROOM]._qvar1 = 5;
Qtalklist[TOWN_HEALER]._qblkm = TEXT_MUSH3;
Qtalklist[TOWN_WITCH]._qblkm = -1;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
quests[QTYPE_BLKM]._qmsg = QUEST_MUSH10;
InitQTextMsg(QUEST_MUSH10);
quests[Q_MUSHROOM]._qmsg = TEXT_MUSH10;
InitQTextMsg(TEXT_MUSH10);
towner[t]._tMsgSaid = TRUE;
} else if (quests[QTYPE_BLKM]._qmsg != QUEST_MUSH9) {
} else if (quests[Q_MUSHROOM]._qmsg != TEXT_MUSH9) {
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
quests[QTYPE_BLKM]._qmsg = QUEST_MUSH9;
InitQTextMsg(QUEST_MUSH9);
quests[Q_MUSHROOM]._qmsg = TEXT_MUSH9;
InitQTextMsg(TEXT_MUSH9);
towner[t]._tMsgSaid = TRUE;
}
} else {
@ -811,35 +811,35 @@ void TalkToTowner(int p, int t)
if (Item != NULL) {
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_MUSH12);
quests[QTYPE_BLKM]._qactive = 3;
InitQTextMsg(TEXT_MUSH12);
quests[Q_MUSHROOM]._qactive = QUEST_DONE;
towner[t]._tMsgSaid = TRUE;
AllItemsList[Item->IDidx].iUsable = TRUE;
} else if (PlrHasItem(p, IDI_BRAIN, i) != NULL && quests[QTYPE_BLKM]._qvar2 != QUEST_MUSH11) {
} else if (PlrHasItem(p, IDI_BRAIN, i) != NULL && quests[Q_MUSHROOM]._qvar2 != TEXT_MUSH11) {
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
quests[QTYPE_BLKM]._qvar2 = QUEST_MUSH11;
InitQTextMsg(QUEST_MUSH11);
quests[Q_MUSHROOM]._qvar2 = TEXT_MUSH11;
InitQTextMsg(TEXT_MUSH11);
towner[t]._tMsgSaid = TRUE;
}
}
}
if (!qtextflag) {
TownerTalk(QUEST_ADRIA1, t);
TownerTalk(TEXT_ADRIA1, t);
if (storeflag) {
StartStore(STORE_WITCH);
}
}
} else if (t == GetActiveTowner(TOWN_BMAID)) {
if (!qtextflag) {
TownerTalk(QUEST_GILLIAN1, t);
TownerTalk(TEXT_GILLIAN1, t);
if (storeflag) {
StartStore(STORE_BARMAID);
}
}
} else if (t == GetActiveTowner(TOWN_DRUNK)) {
if (!qtextflag) {
TownerTalk(QUEST_FARNHAM1, t);
TownerTalk(TEXT_FARNHAM1, t);
if (storeflag) {
StartStore(STORE_DRUNK);
}
@ -847,86 +847,86 @@ void TalkToTowner(int p, int t)
} else if (t == GetActiveTowner(TOWN_HEALER)) {
if (gbMaxPlayers == 1) {
if (plr[p]._pLvlVisited[1] && !towner[t]._tMsgSaid) {
if (quests[QTYPE_PW]._qactive == 1) {
quests[QTYPE_PW]._qactive = 2;
quests[QTYPE_PW]._qlog = TRUE;
quests[QTYPE_PW]._qmsg = QUEST_POISON3;
quests[QTYPE_PW]._qvar1 = 1;
if (quests[Q_PWATER]._qactive == QUEST_INIT) {
quests[Q_PWATER]._qactive = QUEST_ACTIVE;
quests[Q_PWATER]._qlog = TRUE;
quests[Q_PWATER]._qmsg = TEXT_POISON3;
quests[Q_PWATER]._qvar1 = 1;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_POISON3);
InitQTextMsg(TEXT_POISON3);
towner[t]._tMsgSaid = TRUE;
} else if (quests[QTYPE_PW]._qactive == 3 && quests[QTYPE_PW]._qvar1 != 2) {
quests[QTYPE_PW]._qvar1 = 2;
} else if (quests[Q_PWATER]._qactive == QUEST_DONE && quests[Q_PWATER]._qvar1 != 2) {
quests[Q_PWATER]._qvar1 = 2;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_POISON5);
InitQTextMsg(TEXT_POISON5);
CreateItem(UITEM_TRING, towner[t]._tx, towner[t]._ty + 1);
towner[t]._tMsgSaid = TRUE;
}
}
if (quests[QTYPE_BLKM]._qactive == 2 && quests[QTYPE_BLKM]._qmsg == QUEST_MUSH10 && PlrHasItem(p, IDI_BRAIN, i) != NULL) {
if (quests[Q_MUSHROOM]._qactive == QUEST_ACTIVE && quests[Q_MUSHROOM]._qmsg == TEXT_MUSH10 && PlrHasItem(p, IDI_BRAIN, i) != NULL) {
RemoveInvItem(p, i);
SpawnQuestItem(IDI_SPECELIX, towner[t]._tx, towner[t]._ty + 1, 0, 0);
InitQTextMsg(QUEST_MUSH4);
quests[QTYPE_BLKM]._qvar1 = 7;
InitQTextMsg(TEXT_MUSH4);
quests[Q_MUSHROOM]._qvar1 = 7;
Qtalklist[TOWN_HEALER]._qblkm = -1;
}
}
if (!qtextflag) {
TownerTalk(QUEST_PEPIN1, t);
TownerTalk(TEXT_PEPIN1, t);
if (storeflag) {
StartStore(STORE_HEALER);
}
}
} else if (t == GetActiveTowner(TOWN_PEGBOY)) {
if (!qtextflag) {
TownerTalk(QUEST_WIRT1, t);
TownerTalk(TEXT_WIRT1, t);
if (storeflag) {
StartStore(STORE_BOY);
}
}
} else if (t == GetActiveTowner(TOWN_STORY)) {
if (gbMaxPlayers == 1) {
if (quests[QTYPE_VB]._qactive == 1 && PlrHasItem(p, IDI_LAZSTAFF, i) != NULL) {
if (quests[Q_BETRAYER]._qactive == QUEST_INIT && PlrHasItem(p, IDI_LAZSTAFF, i) != NULL) {
RemoveInvItem(p, i);
quests[QTYPE_VB]._qvar1 = 2;
quests[Q_BETRAYER]._qvar1 = 2;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_VILE1);
quests[QTYPE_VB]._qactive = 2;
quests[QTYPE_VB]._qlog = TRUE;
InitQTextMsg(TEXT_VILE1);
quests[Q_BETRAYER]._qactive = QUEST_ACTIVE;
quests[Q_BETRAYER]._qlog = TRUE;
towner[t]._tMsgSaid = TRUE;
} else if (quests[QTYPE_VB]._qactive == 3 && quests[QTYPE_VB]._qvar1 == 7) {
quests[QTYPE_VB]._qvar1 = 8;
} else if (quests[Q_BETRAYER]._qactive == QUEST_DONE && quests[Q_BETRAYER]._qvar1 == 7) {
quests[Q_BETRAYER]._qvar1 = 8;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_VILE3);
quests[QTYPE_MOD]._qlog = TRUE;
InitQTextMsg(TEXT_VILE3);
quests[Q_DIABLO]._qlog = TRUE;
towner[t]._tMsgSaid = TRUE;
}
}
if (gbMaxPlayers != 1) {
if (quests[QTYPE_VB]._qactive == 2 && !quests[QTYPE_VB]._qlog) {
if (quests[Q_BETRAYER]._qactive == QUEST_ACTIVE && !quests[Q_BETRAYER]._qlog) {
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_VILE1);
InitQTextMsg(TEXT_VILE1);
towner[t]._tMsgSaid = TRUE;
quests[QTYPE_VB]._qlog = TRUE;
NetSendCmdQuest(TRUE, QTYPE_VB);
} else if (quests[QTYPE_VB]._qactive == 3 && quests[QTYPE_VB]._qvar1 == 7) {
quests[QTYPE_VB]._qvar1 = 8;
quests[Q_BETRAYER]._qlog = TRUE;
NetSendCmdQuest(TRUE, Q_BETRAYER);
} else if (quests[Q_BETRAYER]._qactive == QUEST_DONE && quests[Q_BETRAYER]._qvar1 == 7) {
quests[Q_BETRAYER]._qvar1 = 8;
towner[t]._tbtcnt = 150;
towner[t]._tVar1 = p;
InitQTextMsg(QUEST_VILE3);
InitQTextMsg(TEXT_VILE3);
towner[t]._tMsgSaid = TRUE;
NetSendCmdQuest(TRUE, QTYPE_VB);
quests[QTYPE_MOD]._qlog = TRUE;
NetSendCmdQuest(TRUE, QTYPE_MOD);
NetSendCmdQuest(TRUE, Q_BETRAYER);
quests[Q_DIABLO]._qlog = TRUE;
NetSendCmdQuest(TRUE, Q_DIABLO);
}
}
if (!qtextflag) {
TownerTalk(QUEST_STORY1, t);
TownerTalk(TEXT_STORY1, t);
if (storeflag) {
StartStore(STORE_STORY);
}

10
Source/trigs.cpp

@ -189,7 +189,7 @@ void InitL2Triggers()
numtrigs = 0;
for (j = 0; j < MAXDUNY; j++) {
for (i = 0; i < MAXDUNX; i++) {
if (dPiece[i][j] == 267 && (i != quests[QTYPE_BONE]._qtx || j != quests[QTYPE_BONE]._qty)) {
if (dPiece[i][j] == 267 && (i != quests[Q_SCHAMB]._qtx || j != quests[Q_SCHAMB]._qty)) {
trigs[numtrigs]._tx = i;
trigs[numtrigs]._ty = j;
trigs[numtrigs]._tmsg = WM_DIABPREVLVL;
@ -280,7 +280,7 @@ void InitL4Triggers()
for (j = 0; j < MAXDUNY; j++) {
for (i = 0; i < MAXDUNX; i++) {
if (dPiece[i][j] == 370 && quests[QTYPE_VB]._qactive == 3) {
if (dPiece[i][j] == 370 && quests[Q_BETRAYER]._qactive == QUEST_DONE) {
trigs[numtrigs]._tx = i;
trigs[numtrigs]._ty = j;
trigs[numtrigs]._tmsg = WM_DIABNEXTLVL;
@ -612,7 +612,7 @@ BOOL ForceSKingTrig()
for (i = 0; L1UpList[i] != -1; i++) {
if (dPiece[cursmx][cursmy] == L1UpList[i]) {
sprintf(infostr, "Back to Level %i", quests[QTYPE_KING]._qlevel);
sprintf(infostr, "Back to Level %i", quests[Q_SKELKING]._qlevel);
cursmx = trigs[0]._tx;
cursmy = trigs[0]._ty;
@ -629,7 +629,7 @@ BOOL ForceSChambTrig()
for (i = 0; L2DownList[i] != -1; i++) {
if (dPiece[cursmx][cursmy] == L2DownList[i]) {
sprintf(infostr, "Back to Level %i", quests[QTYPE_BONE]._qlevel);
sprintf(infostr, "Back to Level %i", quests[Q_SCHAMB]._qlevel);
cursmx = trigs[0]._tx;
cursmy = trigs[0]._ty;
@ -646,7 +646,7 @@ BOOL ForcePWaterTrig()
for (i = 0; L3DownList[i] != -1; i++) {
if (dPiece[cursmx][cursmy] == L3DownList[i]) {
sprintf(infostr, "Back to Level %i", quests[QTYPE_PW]._qlevel);
sprintf(infostr, "Back to Level %i", quests[Q_PWATER]._qlevel);
cursmx = trigs[0]._tx;
cursmy = trigs[0]._ty;

4
comparer-config/diablo.toml

@ -5243,7 +5243,7 @@ addr = 0x43BD19
size = 0xD2
[[func]]
name = "msg_process_net_packets"
name = "run_delta_info"
addr = 0x43BDEB
size = 0x22
@ -5438,7 +5438,7 @@ addr = 0x43D064
size = 0x39
[[func]]
name = "RemovePlrPortal"
name = "delta_close_portal"
addr = 0x43D09D
size = 0x1F

4
comparer-config/spawn.toml

@ -4653,7 +4653,7 @@ addr = 0x432327
size = 0xD2
[[func]]
name = "msg_process_net_packets"
name = "run_delta_info"
addr = 0x4323F9
size = 0x22
@ -4848,7 +4848,7 @@ addr = 0x433672
size = 0x39
[[func]]
name = "RemovePlrPortal"
name = "delta_close_portal"
addr = 0x4336AB
size = 0x1F

562
enums.h

@ -1544,265 +1544,265 @@ typedef enum missile_resistance {
} missile_resistance;
typedef enum _speech_id {
QUEST_KING1 = 0x0,
QUEST_KING2 = 0x1,
QUEST_KING3 = 0x2,
QUEST_KING4 = 0x3,
QUEST_KING5 = 0x4,
QUEST_KING6 = 0x5,
QUEST_KING7 = 0x6,
QUEST_KING8 = 0x7,
QUEST_KING9 = 0x8,
QUEST_KING10 = 0x9,
QUEST_KING11 = 0xA,
QUEST_BANNER1 = 0xB,
QUEST_BANNER2 = 0xC,
QUEST_BANNER3 = 0xD,
QUEST_BANNER4 = 0xE,
QUEST_BANNER5 = 0xF,
QUEST_BANNER6 = 0x10,
QUEST_BANNER7 = 0x11,
QUEST_BANNER8 = 0x12,
QUEST_BANNER9 = 0x13,
QUEST_BANNER10 = 0x14,
QUEST_BANNER11 = 0x15,
QUEST_BANNER12 = 0x16,
QUEST_VILE1 = 0x17,
QUEST_VILE2 = 0x18,
QUEST_VILE3 = 0x19,
QUEST_VILE4 = 0x1A,
QUEST_VILE5 = 0x1B,
QUEST_VILE6 = 0x1C,
QUEST_VILE7 = 0x1D,
QUEST_VILE8 = 0x1E,
QUEST_VILE9 = 0x1F,
QUEST_VILE10 = 0x20,
QUEST_VILE11 = 0x21,
QUEST_VILE12 = 0x22,
QUEST_VILE13 = 0x23,
QUEST_VILE14 = 0x24,
QUEST_POISON1 = 0x25,
QUEST_POISON2 = 0x26,
QUEST_POISON3 = 0x27,
QUEST_POISON4 = 0x28,
QUEST_POISON5 = 0x29,
QUEST_POISON6 = 0x2A,
QUEST_POISON7 = 0x2B,
QUEST_POISON8 = 0x2C,
QUEST_POISON9 = 0x2D,
QUEST_POISON10 = 0x2E,
QUEST_BONE1 = 0x2F,
QUEST_BONE2 = 0x30,
QUEST_BONE3 = 0x31,
QUEST_BONE4 = 0x32,
QUEST_BONE5 = 0x33,
QUEST_BONE6 = 0x34,
QUEST_BONE7 = 0x35,
QUEST_BONE8 = 0x36,
QUEST_BUTCH1 = 0x37,
QUEST_BUTCH2 = 0x38,
QUEST_BUTCH3 = 0x39,
QUEST_BUTCH4 = 0x3A,
QUEST_BUTCH5 = 0x3B,
QUEST_BUTCH6 = 0x3C,
QUEST_BUTCH7 = 0x3D,
QUEST_BUTCH8 = 0x3E,
QUEST_BUTCH9 = 0x3F,
QUEST_BUTCH10 = 0x40,
QUEST_BLIND1 = 0x41,
QUEST_BLIND2 = 0x42,
QUEST_BLIND3 = 0x43,
QUEST_BLIND4 = 0x44,
QUEST_BLIND5 = 0x45,
QUEST_BLIND6 = 0x46,
QUEST_BLIND7 = 0x47,
QUEST_BLIND8 = 0x48,
QUEST_VEIL1 = 0x49,
QUEST_VEIL2 = 0x4A,
QUEST_VEIL3 = 0x4B,
QUEST_VEIL4 = 0x4C,
QUEST_VEIL5 = 0x4D,
QUEST_VEIL6 = 0x4E,
QUEST_VEIL7 = 0x4F,
QUEST_VEIL8 = 0x50,
QUEST_VEIL9 = 0x51,
QUEST_VEIL10 = 0x52,
QUEST_VEIL11 = 0x53,
QUEST_ANVIL1 = 0x54,
QUEST_ANVIL2 = 0x55,
QUEST_ANVIL3 = 0x56,
QUEST_ANVIL4 = 0x57,
QUEST_ANVIL5 = 0x58,
QUEST_ANVIL6 = 0x59,
QUEST_ANVIL7 = 0x5A,
QUEST_ANVIL8 = 0x5B,
QUEST_ANVIL9 = 0x5C,
QUEST_ANVIL10 = 0x5D,
QUEST_BLOOD1 = 0x5E,
QUEST_BLOOD2 = 0x5F,
QUEST_BLOOD3 = 0x60,
QUEST_BLOOD4 = 0x61,
QUEST_BLOOD5 = 0x62,
QUEST_BLOOD6 = 0x63,
QUEST_BLOOD7 = 0x64,
QUEST_BLOOD8 = 0x65,
QUEST_WARLRD1 = 0x66,
QUEST_WARLRD2 = 0x67,
QUEST_WARLRD3 = 0x68,
QUEST_WARLRD4 = 0x69,
QUEST_WARLRD5 = 0x6A,
QUEST_WARLRD6 = 0x6B,
QUEST_WARLRD7 = 0x6C,
QUEST_WARLRD8 = 0x6D,
QUEST_WARLRD9 = 0x6E,
QUEST_INFRA1 = 0x6F,
QUEST_INFRA2 = 0x70,
QUEST_INFRA3 = 0x71,
QUEST_INFRA4 = 0x72,
QUEST_INFRA5 = 0x73,
QUEST_INFRA6 = 0x74,
QUEST_INFRA7 = 0x75,
QUEST_INFRA8 = 0x76,
QUEST_INFRA9 = 0x77,
QUEST_INFRA10 = 0x78,
QUEST_MUSH1 = 0x79,
QUEST_MUSH2 = 0x7A,
QUEST_MUSH3 = 0x7B,
QUEST_MUSH4 = 0x7C,
QUEST_MUSH5 = 0x7D,
QUEST_MUSH6 = 0x7E,
QUEST_MUSH7 = 0x7F,
QUEST_MUSH8 = 0x80,
QUEST_MUSH9 = 0x81,
QUEST_MUSH10 = 0x82,
QUEST_MUSH11 = 0x83,
QUEST_MUSH12 = 0x84,
QUEST_MUSH13 = 0x85,
QUEST_DOOM1 = 0x86,
QUEST_DOOM2 = 0x87,
QUEST_DOOM3 = 0x88,
QUEST_DOOM4 = 0x89,
QUEST_DOOM5 = 0x8A,
QUEST_DOOM6 = 0x8B,
QUEST_DOOM7 = 0x8C,
QUEST_DOOM8 = 0x8D,
QUEST_DOOM9 = 0x8E,
QUEST_DOOM10 = 0x8F,
QUEST_GARBUD1 = 0x90,
QUEST_GARBUD2 = 0x91,
QUEST_GARBUD3 = 0x92,
QUEST_GARBUD4 = 0x93,
QUEST_ZHAR1 = 0x94,
QUEST_ZHAR2 = 0x95,
QUEST_STORY1 = 0x96,
QUEST_STORY2 = 0x97,
QUEST_STORY3 = 0x98,
QUEST_STORY4 = 0x99,
QUEST_STORY5 = 0x9A,
QUEST_STORY6 = 0x9B,
QUEST_STORY7 = 0x9C,
QUEST_STORY9 = 0x9D,
QUEST_STORY10 = 0x9E,
QUEST_STORY11 = 0x9F,
QUEST_OGDEN1 = 0xA0,
QUEST_OGDEN2 = 0xA1,
QUEST_OGDEN3 = 0xA2,
QUEST_OGDEN4 = 0xA3,
QUEST_OGDEN5 = 0xA4,
QUEST_OGDEN6 = 0xA5,
QUEST_OGDEN8 = 0xA6,
QUEST_OGDEN9 = 0xA7,
QUEST_OGDEN10 = 0xA8,
QUEST_PEPIN1 = 0xA9,
QUEST_PEPIN2 = 0xAA,
QUEST_PEPIN3 = 0xAB,
QUEST_PEPIN4 = 0xAC,
QUEST_PEPIN5 = 0xAD,
QUEST_PEPIN6 = 0xAE,
QUEST_PEPIN7 = 0xAF,
QUEST_PEPIN9 = 0xB0,
QUEST_PEPIN10 = 0xB1,
QUEST_PEPIN11 = 0xB2,
QUEST_GILLIAN1 = 0xB3,
QUEST_GILLIAN2 = 0xB4,
QUEST_GILLIAN3 = 0xB5,
QUEST_GILLIAN4 = 0xB6,
QUEST_GILLIAN5 = 0xB7,
QUEST_GILLIAN6 = 0xB8,
QUEST_GILLIAN7 = 0xB9,
QUEST_GILLIAN9 = 0xBA,
QUEST_GILLIAN10 = 0xBB,
QUEST_GRISWOLD1 = 0xBC,
QUEST_GRISWOLD2 = 0xBD,
QUEST_GRISWOLD3 = 0xBE,
QUEST_GRISWOLD4 = 0xBF,
QUEST_GRISWOLD5 = 0xC0,
QUEST_GRISWOLD6 = 0xC1,
QUEST_GRISWOLD7 = 0xC2,
QUEST_GRISWOLD8 = 0xC3,
QUEST_GRISWOLD9 = 0xC4,
QUEST_GRISWOLD10 = 0xC5,
QUEST_GRISWOLD12 = 0xC6,
QUEST_GRISWOLD13 = 0xC7,
QUEST_FARNHAM1 = 0xC8,
QUEST_FARNHAM2 = 0xC9,
QUEST_FARNHAM3 = 0xCA,
QUEST_FARNHAM4 = 0xCB,
QUEST_FARNHAM5 = 0xCC,
QUEST_FARNHAM6 = 0xCD,
QUEST_FARNHAM8 = 0xCE,
QUEST_FARNHAM9 = 0xCF,
QUEST_FARNHAM10 = 0xD0,
QUEST_FARNHAM11 = 0xD1,
QUEST_FARNHAM12 = 0xD2,
QUEST_FARNHAM13 = 0xD3,
QUEST_ADRIA1 = 0xD4,
QUEST_ADRIA2 = 0xD5,
QUEST_ADRIA3 = 0xD6,
QUEST_ADRIA4 = 0xD7,
QUEST_ADRIA5 = 0xD8,
QUEST_ADRIA6 = 0xD9,
QUEST_ADRIA7 = 0xDA,
QUEST_ADRIA8 = 0xDB,
QUEST_ADRIA9 = 0xDC,
QUEST_ADRIA10 = 0xDD,
QUEST_ADRIA12 = 0xDE,
QUEST_ADRIA13 = 0xDF,
QUEST_WIRT1 = 0xE0,
QUEST_WIRT2 = 0xE1,
QUEST_WIRT3 = 0xE2,
QUEST_WIRT4 = 0xE3,
QUEST_WIRT5 = 0xE4,
QUEST_WIRT6 = 0xE5,
QUEST_WIRT7 = 0xE6,
QUEST_WIRT8 = 0xE7,
QUEST_WIRT9 = 0xE8,
QUEST_WIRT11 = 0xE9,
QUEST_WIRT12 = 0xEA,
QUEST_BONER = 0xEB,
QUEST_BLOODY = 0xEC,
QUEST_BLINDING = 0xED,
QUEST_BLOODWAR = 0xEE,
QUEST_MBONER = 0xEF,
QUEST_MBLOODY = 0xF0,
QUEST_MBLINDING = 0xF1,
QUEST_MBLOODWAR = 0xF2,
QUEST_RBONER = 0xF3,
QUEST_RBLOODY = 0xF4,
QUEST_RBLINDING = 0xF5,
QUEST_RBLOODWAR = 0xF6,
QUEST_COW1 = 0xF7,
QUEST_COW2 = 0xF8,
QUEST_BOOK11 = 0xF9,
QUEST_BOOK12 = 0xFA,
QUEST_BOOK13 = 0xFB,
QUEST_BOOK21 = 0xFC,
QUEST_BOOK22 = 0xFD,
QUEST_BOOK23 = 0xFE,
QUEST_BOOK31 = 0xFF,
QUEST_BOOK32 = 0x100,
QUEST_BOOK33 = 0x101,
QUEST_INTRO = 0x102
TEXT_KING1 = 0x0,
TEXT_KING2 = 0x1,
TEXT_KING3 = 0x2,
TEXT_KING4 = 0x3,
TEXT_KING5 = 0x4,
TEXT_KING6 = 0x5,
TEXT_KING7 = 0x6,
TEXT_KING8 = 0x7,
TEXT_KING9 = 0x8,
TEXT_KING10 = 0x9,
TEXT_KING11 = 0xA,
TEXT_BANNER1 = 0xB,
TEXT_BANNER2 = 0xC,
TEXT_BANNER3 = 0xD,
TEXT_BANNER4 = 0xE,
TEXT_BANNER5 = 0xF,
TEXT_BANNER6 = 0x10,
TEXT_BANNER7 = 0x11,
TEXT_BANNER8 = 0x12,
TEXT_BANNER9 = 0x13,
TEXT_BANNER10 = 0x14,
TEXT_BANNER11 = 0x15,
TEXT_BANNER12 = 0x16,
TEXT_VILE1 = 0x17,
TEXT_VILE2 = 0x18,
TEXT_VILE3 = 0x19,
TEXT_VILE4 = 0x1A,
TEXT_VILE5 = 0x1B,
TEXT_VILE6 = 0x1C,
TEXT_VILE7 = 0x1D,
TEXT_VILE8 = 0x1E,
TEXT_VILE9 = 0x1F,
TEXT_VILE10 = 0x20,
TEXT_VILE11 = 0x21,
TEXT_VILE12 = 0x22,
TEXT_VILE13 = 0x23,
TEXT_VILE14 = 0x24,
TEXT_POISON1 = 0x25,
TEXT_POISON2 = 0x26,
TEXT_POISON3 = 0x27,
TEXT_POISON4 = 0x28,
TEXT_POISON5 = 0x29,
TEXT_POISON6 = 0x2A,
TEXT_POISON7 = 0x2B,
TEXT_POISON8 = 0x2C,
TEXT_POISON9 = 0x2D,
TEXT_POISON10 = 0x2E,
TEXT_BONE1 = 0x2F,
TEXT_BONE2 = 0x30,
TEXT_BONE3 = 0x31,
TEXT_BONE4 = 0x32,
TEXT_BONE5 = 0x33,
TEXT_BONE6 = 0x34,
TEXT_BONE7 = 0x35,
TEXT_BONE8 = 0x36,
TEXT_BUTCH1 = 0x37,
TEXT_BUTCH2 = 0x38,
TEXT_BUTCH3 = 0x39,
TEXT_BUTCH4 = 0x3A,
TEXT_BUTCH5 = 0x3B,
TEXT_BUTCH6 = 0x3C,
TEXT_BUTCH7 = 0x3D,
TEXT_BUTCH8 = 0x3E,
TEXT_BUTCH9 = 0x3F,
TEXT_BUTCH10 = 0x40,
TEXT_BLIND1 = 0x41,
TEXT_BLIND2 = 0x42,
TEXT_BLIND3 = 0x43,
TEXT_BLIND4 = 0x44,
TEXT_BLIND5 = 0x45,
TEXT_BLIND6 = 0x46,
TEXT_BLIND7 = 0x47,
TEXT_BLIND8 = 0x48,
TEXT_VEIL1 = 0x49,
TEXT_VEIL2 = 0x4A,
TEXT_VEIL3 = 0x4B,
TEXT_VEIL4 = 0x4C,
TEXT_VEIL5 = 0x4D,
TEXT_VEIL6 = 0x4E,
TEXT_VEIL7 = 0x4F,
TEXT_VEIL8 = 0x50,
TEXT_VEIL9 = 0x51,
TEXT_VEIL10 = 0x52,
TEXT_VEIL11 = 0x53,
TEXT_ANVIL1 = 0x54,
TEXT_ANVIL2 = 0x55,
TEXT_ANVIL3 = 0x56,
TEXT_ANVIL4 = 0x57,
TEXT_ANVIL5 = 0x58,
TEXT_ANVIL6 = 0x59,
TEXT_ANVIL7 = 0x5A,
TEXT_ANVIL8 = 0x5B,
TEXT_ANVIL9 = 0x5C,
TEXT_ANVIL10 = 0x5D,
TEXT_BLOOD1 = 0x5E,
TEXT_BLOOD2 = 0x5F,
TEXT_BLOOD3 = 0x60,
TEXT_BLOOD4 = 0x61,
TEXT_BLOOD5 = 0x62,
TEXT_BLOOD6 = 0x63,
TEXT_BLOOD7 = 0x64,
TEXT_BLOOD8 = 0x65,
TEXT_WARLRD1 = 0x66,
TEXT_WARLRD2 = 0x67,
TEXT_WARLRD3 = 0x68,
TEXT_WARLRD4 = 0x69,
TEXT_WARLRD5 = 0x6A,
TEXT_WARLRD6 = 0x6B,
TEXT_WARLRD7 = 0x6C,
TEXT_WARLRD8 = 0x6D,
TEXT_WARLRD9 = 0x6E,
TEXT_INFRA1 = 0x6F,
TEXT_INFRA2 = 0x70,
TEXT_INFRA3 = 0x71,
TEXT_INFRA4 = 0x72,
TEXT_INFRA5 = 0x73,
TEXT_INFRA6 = 0x74,
TEXT_INFRA7 = 0x75,
TEXT_INFRA8 = 0x76,
TEXT_INFRA9 = 0x77,
TEXT_INFRA10 = 0x78,
TEXT_MUSH1 = 0x79,
TEXT_MUSH2 = 0x7A,
TEXT_MUSH3 = 0x7B,
TEXT_MUSH4 = 0x7C,
TEXT_MUSH5 = 0x7D,
TEXT_MUSH6 = 0x7E,
TEXT_MUSH7 = 0x7F,
TEXT_MUSH8 = 0x80,
TEXT_MUSH9 = 0x81,
TEXT_MUSH10 = 0x82,
TEXT_MUSH11 = 0x83,
TEXT_MUSH12 = 0x84,
TEXT_MUSH13 = 0x85,
TEXT_DOOM1 = 0x86,
TEXT_DOOM2 = 0x87,
TEXT_DOOM3 = 0x88,
TEXT_DOOM4 = 0x89,
TEXT_DOOM5 = 0x8A,
TEXT_DOOM6 = 0x8B,
TEXT_DOOM7 = 0x8C,
TEXT_DOOM8 = 0x8D,
TEXT_DOOM9 = 0x8E,
TEXT_DOOM10 = 0x8F,
TEXT_GARBUD1 = 0x90,
TEXT_GARBUD2 = 0x91,
TEXT_GARBUD3 = 0x92,
TEXT_GARBUD4 = 0x93,
TEXT_ZHAR1 = 0x94,
TEXT_ZHAR2 = 0x95,
TEXT_STORY1 = 0x96,
TEXT_STORY2 = 0x97,
TEXT_STORY3 = 0x98,
TEXT_STORY4 = 0x99,
TEXT_STORY5 = 0x9A,
TEXT_STORY6 = 0x9B,
TEXT_STORY7 = 0x9C,
TEXT_STORY9 = 0x9D,
TEXT_STORY10 = 0x9E,
TEXT_STORY11 = 0x9F,
TEXT_OGDEN1 = 0xA0,
TEXT_OGDEN2 = 0xA1,
TEXT_OGDEN3 = 0xA2,
TEXT_OGDEN4 = 0xA3,
TEXT_OGDEN5 = 0xA4,
TEXT_OGDEN6 = 0xA5,
TEXT_OGDEN8 = 0xA6,
TEXT_OGDEN9 = 0xA7,
TEXT_OGDEN10 = 0xA8,
TEXT_PEPIN1 = 0xA9,
TEXT_PEPIN2 = 0xAA,
TEXT_PEPIN3 = 0xAB,
TEXT_PEPIN4 = 0xAC,
TEXT_PEPIN5 = 0xAD,
TEXT_PEPIN6 = 0xAE,
TEXT_PEPIN7 = 0xAF,
TEXT_PEPIN9 = 0xB0,
TEXT_PEPIN10 = 0xB1,
TEXT_PEPIN11 = 0xB2,
TEXT_GILLIAN1 = 0xB3,
TEXT_GILLIAN2 = 0xB4,
TEXT_GILLIAN3 = 0xB5,
TEXT_GILLIAN4 = 0xB6,
TEXT_GILLIAN5 = 0xB7,
TEXT_GILLIAN6 = 0xB8,
TEXT_GILLIAN7 = 0xB9,
TEXT_GILLIAN9 = 0xBA,
TEXT_GILLIAN10 = 0xBB,
TEXT_GRISWOLD1 = 0xBC,
TEXT_GRISWOLD2 = 0xBD,
TEXT_GRISWOLD3 = 0xBE,
TEXT_GRISWOLD4 = 0xBF,
TEXT_GRISWOLD5 = 0xC0,
TEXT_GRISWOLD6 = 0xC1,
TEXT_GRISWOLD7 = 0xC2,
TEXT_GRISWOLD8 = 0xC3,
TEXT_GRISWOLD9 = 0xC4,
TEXT_GRISWOLD10 = 0xC5,
TEXT_GRISWOLD12 = 0xC6,
TEXT_GRISWOLD13 = 0xC7,
TEXT_FARNHAM1 = 0xC8,
TEXT_FARNHAM2 = 0xC9,
TEXT_FARNHAM3 = 0xCA,
TEXT_FARNHAM4 = 0xCB,
TEXT_FARNHAM5 = 0xCC,
TEXT_FARNHAM6 = 0xCD,
TEXT_FARNHAM8 = 0xCE,
TEXT_FARNHAM9 = 0xCF,
TEXT_FARNHAM10 = 0xD0,
TEXT_FARNHAM11 = 0xD1,
TEXT_FARNHAM12 = 0xD2,
TEXT_FARNHAM13 = 0xD3,
TEXT_ADRIA1 = 0xD4,
TEXT_ADRIA2 = 0xD5,
TEXT_ADRIA3 = 0xD6,
TEXT_ADRIA4 = 0xD7,
TEXT_ADRIA5 = 0xD8,
TEXT_ADRIA6 = 0xD9,
TEXT_ADRIA7 = 0xDA,
TEXT_ADRIA8 = 0xDB,
TEXT_ADRIA9 = 0xDC,
TEXT_ADRIA10 = 0xDD,
TEXT_ADRIA12 = 0xDE,
TEXT_ADRIA13 = 0xDF,
TEXT_WIRT1 = 0xE0,
TEXT_WIRT2 = 0xE1,
TEXT_WIRT3 = 0xE2,
TEXT_WIRT4 = 0xE3,
TEXT_WIRT5 = 0xE4,
TEXT_WIRT6 = 0xE5,
TEXT_WIRT7 = 0xE6,
TEXT_WIRT8 = 0xE7,
TEXT_WIRT9 = 0xE8,
TEXT_WIRT11 = 0xE9,
TEXT_WIRT12 = 0xEA,
TEXT_BONER = 0xEB,
TEXT_BLOODY = 0xEC,
TEXT_BLINDING = 0xED,
TEXT_BLOODWAR = 0xEE,
TEXT_MBONER = 0xEF,
TEXT_MBLOODY = 0xF0,
TEXT_MBLINDING = 0xF1,
TEXT_MBLOODWAR = 0xF2,
TEXT_RBONER = 0xF3,
TEXT_RBLOODY = 0xF4,
TEXT_RBLINDING = 0xF5,
TEXT_RBLOODWAR = 0xF6,
TEXT_COW1 = 0xF7,
TEXT_COW2 = 0xF8,
TEXT_BOOK11 = 0xF9,
TEXT_BOOK12 = 0xFA,
TEXT_BOOK13 = 0xFB,
TEXT_BOOK21 = 0xFC,
TEXT_BOOK22 = 0xFD,
TEXT_BOOK23 = 0xFE,
TEXT_BOOK31 = 0xFF,
TEXT_BOOK32 = 0x100,
TEXT_BOOK33 = 0x101,
TEXT_INTRO = 0x102
} _speech_id;
typedef enum object_graphic_id {
@ -2458,7 +2458,7 @@ typedef enum item_misc_id {
IMISC_RING = 0x19,
IMISC_AMULET = 0x1A,
IMISC_UNIQUE = 0x1B,
IMISC_HEAL_1C = 0x1C,
IMISC_MEAT = 0x1C, /* from demo/PSX */
IMISC_OILFIRST = 0x1D,
IMISC_OILOF = 0x1E, /* oils are beta or hellfire only */
IMISC_OILACC = 0x1F,
@ -2493,7 +2493,7 @@ typedef enum item_type {
ITYPE_GOLD = 0xB,
ITYPE_RING = 0xC,
ITYPE_AMULET = 0xD,
ITYPE_0E = 0xE,
ITYPE_MEAT = 0xE, /* used in demo, might be generic for 'food' */
ITYPE_NONE = -1,
} item_type;
@ -2547,25 +2547,31 @@ typedef enum _setlevels {
} _setlevels;
typedef enum quest_id {
QTYPE_INFRA = 0x0,
QTYPE_BLKM = 0x1,
QTYPE_GARB = 0x2,
QTYPE_ZHAR = 0x3,
QTYPE_VEIL = 0x4,
QTYPE_MOD = 0x5,
QTYPE_BUTCH = 0x6,
QTYPE_BOL = 0x7,
QTYPE_BLIND = 0x8,
QTYPE_BLOOD = 0x9,
QTYPE_ANVIL = 0xA,
QTYPE_WARLRD = 0xB,
QTYPE_KING = 0xC,
QTYPE_PW = 0xD,
QTYPE_BONE = 0xE,
QTYPE_VB = 0xF,
QTYPE_INVALID = -1,
Q_ROCK = 0x0,
Q_MUSHROOM = 0x1,
Q_GARBUD = 0x2,
Q_ZHAR = 0x3,
Q_VEIL = 0x4,
Q_DIABLO = 0x5,
Q_BUTCHER = 0x6,
Q_LTBANNER = 0x7,
Q_BLIND = 0x8,
Q_BLOOD = 0x9,
Q_ANVIL = 0xA,
Q_WARLORD = 0xB,
Q_SKELKING = 0xC,
Q_PWATER = 0xD,
Q_SCHAMB = 0xE,
Q_BETRAYER = 0xF
} quest_id;
typedef enum quest_state {
QUEST_NOTAVAIL = 0,
QUEST_INIT = 1,
QUEST_ACTIVE = 2,
QUEST_DONE = 3
} quest_state;
typedef enum quest_mush_state {
QS_INIT = 0,
QS_TOMESPAWNED = 1,

Loading…
Cancel
Save