Browse Source

class sounds cleanup

pull/1631/head
qndel 5 years ago committed by Anders Jenbo
parent
commit
ec74917cb4
  1. 8
      Source/controls/plrctrls.cpp
  2. 14
      Source/effects.cpp
  3. 4
      Source/effects.h
  4. 210
      Source/inv.cpp
  5. 8
      Source/miniwin/misc_msg.cpp
  6. 58
      Source/missiles.cpp
  7. 49
      Source/objects.cpp
  8. 183
      Source/player.cpp
  9. 16
      Source/player.h
  10. 105
      Source/quests.cpp
  11. 14
      Source/towners.cpp
  12. 14
      Source/trigs.cpp

8
Source/controls/plrctrls.cpp

@ -1198,13 +1198,7 @@ void PerformSpellAction()
int spl = plr[myplr]._pRSpell;
if ((pcursplr == -1 && (spl == SPL_RESURRECT || spl == SPL_HEALOTHER))
|| (pcursobj == -1 && spl == SPL_DISARM)) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR27);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE27);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE27);
}
plr[myplr].PlaySpeach(27);
return;
}

14
Source/effects.cpp

@ -946,7 +946,7 @@ TSFX sgSFX[] = {
{ sfx_MONK, "Sfx\\Monk\\Monk69b.wav", nullptr },
{ sfx_MONK, "Sfx\\Monk\\Monk70.wav", nullptr },
{ sfx_MONK, "Sfx\\Monk\\Monk71.wav", nullptr },
{ sfx_MONK, "Sfx\\Misc\\blank.wav", nullptr },
{ sfx_MONK, "Sfx\\Sorceror\\Mage72.wav", nullptr },
{ sfx_MONK, "Sfx\\Misc\\blank.wav", nullptr },
{ sfx_MONK, "Sfx\\Misc\\blank.wav", nullptr },
{ sfx_MONK, "Sfx\\Misc\\blank.wav", nullptr },
@ -1279,20 +1279,20 @@ static _sfx_id RndSFX(_sfx_id psfx)
return static_cast<_sfx_id>(psfx + random_(165, nRand));
}
void PlaySFX(_sfx_id psfx, bool randomizeByCategory)
void PlaySFX(_sfx_id psfx)
{
if (randomizeByCategory) {
psfx = RndSFX(psfx);
}
psfx = RndSFX(psfx);
PlaySFX_priv(&sgSFX[psfx], false, 0, 0);
}
void PlaySfxLoc(_sfx_id psfx, int x, int y)
void PlaySfxLoc(_sfx_id psfx, int x, int y, bool randomizeByCategory)
{
TSnd *pSnd;
psfx = RndSFX(psfx);
if (randomizeByCategory) {
psfx = RndSFX(psfx);
}
if (psfx >= 0 && psfx <= 3) {
pSnd = sgSFX[psfx].pSnd;

4
Source/effects.h

@ -1071,8 +1071,8 @@ void InitMonsterSND(int monst);
void FreeMonsterSnd();
bool calc_snd_position(int x, int y, int *plVolume, int *plPan);
void PlayEffect(int i, int mode);
void PlaySFX(_sfx_id psfx, bool randomizeByCategory = true);
void PlaySfxLoc(_sfx_id psfx, int x, int y);
void PlaySFX(_sfx_id psfx);
void PlaySfxLoc(_sfx_id psfx, int x, int y, bool randomizeByCategory = true);
void sound_stop();
void sound_update();
void effects_cleanup_sfx();

210
Source/inv.cpp

@ -989,18 +989,7 @@ void CheckInvPaste(int pnum, int mx, int my)
if (il != ILOC_UNEQUIPABLE && il != ILOC_BELT && !plr[pnum].HoldItem._iStatFlag) {
done = false;
if (plr[pnum]._pClass == HeroClass::Warrior)
PlaySFX(PS_WARR13);
else if (plr[pnum]._pClass == HeroClass::Rogue)
PlaySFX(PS_ROGUE13);
else if (plr[pnum]._pClass == HeroClass::Sorcerer)
PlaySFX(PS_MAGE13);
else if (plr[pnum]._pClass == HeroClass::Monk)
PlaySFX(PS_MONK13);
else if (plr[pnum]._pClass == HeroClass::Bard)
PlaySFX(PS_ROGUE13);
else if (plr[pnum]._pClass == HeroClass::Barbarian)
PlaySFX(PS_MAGE13);
plr[pnum].PlaySpeach(13);
}
if (!done)
@ -1485,39 +1474,9 @@ void CheckInvCut(int pnum, int mx, int my, bool automaticMove)
if (automaticMove) {
if (!automaticallyMoved) {
if (CanBePlacedOnBelt(holdItem) || automaticallyUnequip) {
switch (player._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
PlaySFX(PS_WARR15, false);
break;
case HeroClass::Rogue:
case HeroClass::Bard:
PlaySFX(PS_ROGUE15, false);
break;
case HeroClass::Sorcerer:
PlaySFX(PS_MAGE15, false);
break;
case HeroClass::Monk:
PlaySFX(PS_MONK15, false);
break;
}
player.PlaySpecificSpeach(15);
} else {
switch (player._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
PlaySFX(PS_WARR37, false);
break;
case HeroClass::Rogue:
case HeroClass::Bard:
PlaySFX(PS_ROGUE37, false);
break;
case HeroClass::Sorcerer:
PlaySFX(PS_MAGE37, false);
break;
case HeroClass::Monk:
PlaySFX(PS_MONK37, false);
break;
}
player.PlaySpecificSpeach(37);
}
}
@ -1641,20 +1600,7 @@ void CheckQuestItem(int pnum)
if (plr[pnum].HoldItem.IDidx == IDI_OPTAMULET && quests[Q_BLIND]._qactive == QUEST_ACTIVE)
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) {
sfxdelay = 10;
if (plr[pnum]._pClass == HeroClass::Warrior) { // BUGFIX: Voice for this quest might be wrong in MP
sfxdnum = PS_WARR95;
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE95;
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE95;
} else if (plr[pnum]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK95;
} else if (plr[pnum]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE95;
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR95;
}
plr[pnum].PlaySpeach(95, 10); // BUGFIX: Voice for this quest might be wrong in MP
quests[Q_MUSHROOM]._qvar1 = QS_MUSHPICKED;
}
if (plr[pnum].HoldItem.IDidx == IDI_ANVIL && quests[Q_ANVIL]._qactive != QUEST_NOTAVAIL) {
@ -1663,37 +1609,11 @@ void CheckQuestItem(int pnum)
quests[Q_ANVIL]._qvar1 = 1;
}
if (quests[Q_ANVIL]._qlog) {
sfxdelay = 10;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR89;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE89;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE89;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK89;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE89;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR89;
}
plr[myplr].PlaySpeach(89, 10);
}
}
if (plr[pnum].HoldItem.IDidx == IDI_GLDNELIX && quests[Q_VEIL]._qactive != QUEST_NOTAVAIL) {
sfxdelay = 30;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR88;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE88;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE88;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK88;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE88;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR88;
}
plr[myplr].PlaySpeach(88, 30);
}
if (plr[pnum].HoldItem.IDidx == IDI_ROCK && quests[Q_ROCK]._qactive != QUEST_NOTAVAIL) {
if (quests[Q_ROCK]._qactive == QUEST_INIT) {
@ -1701,57 +1621,18 @@ void CheckQuestItem(int pnum)
quests[Q_ROCK]._qvar1 = 1;
}
if (quests[Q_ROCK]._qlog) {
sfxdelay = 10;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR87;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE87;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE87;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK87;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE87;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR87;
}
plr[myplr].PlaySpeach(87, 10);
}
}
if (plr[pnum].HoldItem.IDidx == IDI_ARMOFVAL && quests[Q_BLOOD]._qactive == QUEST_ACTIVE) {
quests[Q_BLOOD]._qactive = QUEST_DONE;
sfxdelay = 20;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR91;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE91;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE91;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK91;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE91;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR91;
}
plr[myplr].PlaySpeach(91, 20);
}
if (plr[pnum].HoldItem.IDidx == IDI_MAPOFDOOM) {
quests[Q_GRAVE]._qlog = false;
quests[Q_GRAVE]._qactive = QUEST_ACTIVE;
quests[Q_GRAVE]._qvar1 = 1;
sfxdelay = 10;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR79;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE79;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE79;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK79;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE79;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR79;
}
plr[myplr].PlaySpeach(79, 10);
}
if (plr[pnum].HoldItem.IDidx == IDI_NOTE1 || plr[pnum].HoldItem.IDidx == IDI_NOTE2 || plr[pnum].HoldItem.IDidx == IDI_NOTE3) {
int mask, idx, item_num;
@ -1766,20 +1647,7 @@ void CheckQuestItem(int pnum)
if (PlrHasItem(pnum, IDI_NOTE3, &n3) || idx == IDI_NOTE3)
mask |= 4;
if (mask == 7) {
sfxdelay = 10;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR46;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE46;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE46;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK46;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE46;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR46;
}
plr[myplr].PlaySpeach(46, 10);
switch (idx) {
case IDI_NOTE1:
PlrHasItem(pnum, IDI_NOTE2, &n2);
@ -1908,19 +1776,7 @@ void AutoGetItem(int pnum, ItemStruct *item, int ii)
}
if (pnum == myplr) {
if (plr[pnum]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR14);
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE14);
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE14);
} else if (plr[pnum]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK14);
} else if (plr[pnum]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE14);
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR14);
}
plr[pnum].PlaySpeach(14);
}
plr[pnum].HoldItem = *item;
RespawnItem(item, true);
@ -2438,37 +2294,11 @@ bool UseInvItem(int pnum, int cii)
switch (Item->IDidx) {
case IDI_MUSHROOM:
sfxdelay = 10;
if (plr[pnum]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR95;
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE95;
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE95;
} else if (plr[pnum]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK95;
} else if (plr[pnum]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE95;
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR95;
}
plr[pnum].PlaySpeach(95, 10);
return true;
case IDI_FUNGALTM:
PlaySFX(IS_IBOOK);
sfxdelay = 10;
if (plr[pnum]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR29;
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE29;
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE29;
} else if (plr[pnum]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK29;
} else if (plr[pnum]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE29;
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR29;
}
plr[pnum].PlaySpeach(29, 10);
return true;
}
@ -2476,19 +2306,7 @@ bool UseInvItem(int pnum, int cii)
return false;
if (!Item->_iStatFlag) {
if (plr[pnum]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR13);
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE13);
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE13);
} else if (plr[pnum]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK13);
} else if (plr[pnum]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE13);
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR13);
}
plr[pnum].PlaySpeach(13);
return true;
}

8
Source/miniwin/misc_msg.cpp

@ -279,13 +279,7 @@ bool BlurInventory()
{
if (pcurs >= CURSOR_FIRSTITEM) {
if (!TryDropItem()) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR16); // "Where would I put this?"
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE16);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE16);
}
plr[myplr].PlaySpeach(16); // "Where would I put this?"
return false;
}
}

58
Source/missiles.cpp

@ -871,19 +871,7 @@ bool PlayerMHit(int pnum, int m, int dist, int mind, int maxd, int mtype, bool s
}
if (plr[pnum]._pHitPoints >> 6 > 0) {
if (plr[pnum]._pClass == HeroClass::Warrior) {
PlaySfxLoc(PS_WARR69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
PlaySfxLoc(PS_ROGUE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
PlaySfxLoc(PS_MAGE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Monk) {
PlaySfxLoc(PS_MONK69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Bard) {
PlaySfxLoc(PS_ROGUE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
PlaySfxLoc(PS_WARR69, plr[pnum]._px, plr[pnum]._py);
}
plr[pnum].PlaySpeach(69);
}
return true;
}
@ -993,19 +981,7 @@ bool Plr2PlrMHit(int pnum, int p, int mindam, int maxdam, int dist, int mtype, b
dam -= (dam * resper) / 100;
if (pnum == myplr)
NetSendCmdDamage(true, p, dam);
if (plr[pnum]._pClass == HeroClass::Warrior) {
PlaySfxLoc(PS_WARR69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
PlaySfxLoc(PS_ROGUE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
PlaySfxLoc(PS_MAGE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Monk) {
PlaySfxLoc(PS_MONK69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Bard) {
PlaySfxLoc(PS_ROGUE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
PlaySfxLoc(PS_WARR69, plr[pnum]._px, plr[pnum]._py);
}
plr[pnum].PlaySpeach(69);
return true;
} else {
if (blkper < blk) {
@ -3069,14 +3045,6 @@ void AddBlodboil(Sint32 mi, Sint32 sx, Sint32 sy, Sint32 dx, Sint32 dy, Sint32 m
if (id == -1 || plr[id]._pSpellFlags & 6 || plr[id]._pHitPoints <= plr[id]._pLevel << 6) {
missile[mi]._miDelFlag = true;
} else {
_sfx_id blodboilSFX[enum_size<HeroClass>::value] = {
PS_WARR70,
PS_ROGUE70,
PS_MAGE70,
PS_MONK70, // BUGFIX: PS_MONK70? (fixed)
PS_ROGUE70,
PS_WARR70
};
UseMana(id, SPL_BLODBOIL);
missile[mi]._miVar1 = id;
int tmp = 3 * plr[id]._pLevel;
@ -3089,7 +3057,7 @@ void AddBlodboil(Sint32 mi, Sint32 sx, Sint32 sy, Sint32 dx, Sint32 dy, Sint32 m
missile[mi]._mirange = lvl + 10 * missile[mi]._mispllvl + 245;
CalcPlrItemVals(id, true);
force_redraw = 255;
PlaySfxLoc(blodboilSFX[static_cast<std::size_t>(plr[id]._pClass)], plr[id]._px, plr[id]._py);
plr[id].PlaySpeach(70);
}
}
@ -5170,14 +5138,6 @@ void MI_Blodboil(Sint32 i)
if (missile[i]._mirange == 0) {
id = missile[i]._miVar1;
if ((plr[id]._pSpellFlags & 2) == 2) {
_sfx_id blodboilSFX[enum_size<HeroClass>::value] = {
PS_WARR72,
PS_ROGUE72,
PS_MAGE72,
PS_MAGE72,
PS_ROGUE72,
PS_WARR72
};
plr[id]._pSpellFlags &= ~0x2;
plr[id]._pSpellFlags |= 4;
int lvl = 2;
@ -5188,23 +5148,15 @@ void MI_Blodboil(Sint32 i)
CalcPlrItemVals(id, true);
ApplyPlrDamage(id, 0, 1, hpdif);
force_redraw = 255;
PlaySfxLoc(blodboilSFX[static_cast<std::size_t>(plr[id]._pClass)], plr[id]._px, plr[id]._py);
plr[id].PlaySpeach(72);
} else {
_sfx_id blodboilSFX[enum_size<HeroClass>::value] = {
PS_WARR72,
PS_ROGUE72,
PS_MAGE72,
PS_MAGE72,
PS_ROGUE72,
PS_WARR72
};
missile[i]._miDelFlag = true;
plr[id]._pSpellFlags &= ~0x4;
hpdif = plr[id]._pMaxHP - plr[id]._pHitPoints;
CalcPlrItemVals(id, true);
ApplyPlrDamage(id, 0, 1, hpdif + missile[i]._miVar2);
force_redraw = 255;
PlaySfxLoc(blodboilSFX[static_cast<std::size_t>(plr[id]._pClass)], plr[id]._px, plr[id]._py);
plr[id].PlaySpeach(72);
}
}
}

49
Source/objects.cpp

@ -2161,19 +2161,7 @@ void Obj_BCrossDamage(int i)
ApplyPlrDamage(myplr, 0, 0, damage[leveltype - 1]);
if (plr[myplr]._pHitPoints >> 6 > 0) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySfxLoc(PS_WARR68, plr[myplr]._px, plr[myplr]._py);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySfxLoc(PS_ROGUE68, plr[myplr]._px, plr[myplr]._py);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySfxLoc(PS_MAGE68, plr[myplr]._px, plr[myplr]._py);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
PlaySfxLoc(PS_MONK68, plr[myplr]._px, plr[myplr]._py);
} else if (plr[myplr]._pClass == HeroClass::Bard) {
PlaySfxLoc(PS_ROGUE68, plr[myplr]._px, plr[myplr]._py);
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
PlaySfxLoc(PS_WARR68, plr[myplr]._px, plr[myplr]._py);
}
plr[myplr].PlaySpeach(68);
}
}
@ -3187,19 +3175,7 @@ void OperateMushPatch(int pnum, int i)
if (quests[Q_MUSHROOM]._qactive != QUEST_ACTIVE || quests[Q_MUSHROOM]._qvar1 < QS_TOMEGIVEN) {
if (!deltaload && pnum == myplr) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR13);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE13);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE13);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK13);
} else if (plr[myplr]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE13);
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR13);
}
plr[myplr].PlaySpeach(13);
}
} else {
if (object[i]._oSelFlag != 0) {
@ -3226,19 +3202,7 @@ void OperateInnSignChest(int pnum, int i)
if (quests[Q_LTBANNER]._qvar1 != 2) {
if (!deltaload && pnum == myplr) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR24);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE24);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE24);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK24);
} else if (plr[myplr]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE24);
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR24);
}
plr[myplr].PlaySpeach(24);
}
} else {
if (object[i]._oSelFlag != 0) {
@ -3261,23 +3225,18 @@ void OperateSlainHero(int pnum, int i, bool sendmsg)
if (!deltaload) {
if (plr[pnum]._pClass == HeroClass::Warrior) {
CreateMagicArmor(object[i]._ox, object[i]._oy, ITYPE_HARMOR, ICURS_BREAST_PLATE, false, true);
PlaySfxLoc(PS_WARR9, plr[myplr]._px, plr[myplr]._py);
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
CreateMagicWeapon(object[i]._ox, object[i]._oy, ITYPE_BOW, ICURS_LONG_WAR_BOW, false, true);
PlaySfxLoc(PS_ROGUE9, plr[myplr]._px, plr[myplr]._py);
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
CreateSpellBook(object[i]._ox, object[i]._oy, SPL_LIGHTNING, false, true);
PlaySfxLoc(PS_MAGE9, plr[myplr]._px, plr[myplr]._py);
} else if (plr[pnum]._pClass == HeroClass::Monk) {
CreateMagicWeapon(object[i]._ox, object[i]._oy, ITYPE_STAFF, ICURS_WAR_STAFF, false, true);
PlaySfxLoc(PS_MONK9, plr[myplr]._px, plr[myplr]._py);
} else if (plr[pnum]._pClass == HeroClass::Bard) {
CreateMagicWeapon(object[i]._ox, object[i]._oy, ITYPE_SWORD, ICURS_BASTARD_SWORD, false, true);
PlaySfxLoc(PS_ROGUE9, plr[myplr]._px, plr[myplr]._py);
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
CreateMagicWeapon(object[i]._ox, object[i]._oy, ITYPE_AXE, ICURS_BATTLE_AXE, false, true);
PlaySfxLoc(PS_WARR9, plr[myplr]._px, plr[myplr]._py);
}
plr[myplr].PlaySpeach(9);
if (pnum == myplr)
NetSendCmdParam1(false, CMD_OPERATEOBJ, i);
}

183
Source/player.cpp

@ -242,6 +242,40 @@ void PlayerStruct::UpdateTargetPosition()
}
}
_sfx_id herosounds[enum_size<HeroClass>::value][102] = {
// clang-format off
{ PS_WARR1, PS_WARR2, PS_WARR3, PS_WARR4, PS_WARR5, PS_WARR6, PS_WARR7, PS_WARR8, PS_WARR9, PS_WARR10, PS_WARR11, PS_WARR12, PS_WARR13, PS_WARR14, PS_WARR15, PS_WARR16, PS_WARR17, PS_WARR18, PS_WARR19, PS_WARR20, PS_WARR21, PS_WARR22, PS_WARR23, PS_WARR24, PS_WARR25, PS_WARR26, PS_WARR27, PS_WARR28, PS_WARR29, PS_WARR30, PS_WARR31, PS_WARR32, PS_WARR33, PS_WARR34, PS_WARR35, PS_WARR36, PS_WARR37, PS_WARR38, PS_WARR39, PS_WARR40, PS_WARR41, PS_WARR42, PS_WARR43, PS_WARR44, PS_WARR45, PS_WARR46, PS_WARR47, PS_WARR48, PS_WARR49, PS_WARR50, PS_WARR51, PS_WARR52, PS_WARR53, PS_WARR54, PS_WARR55, PS_WARR56, PS_WARR57, PS_WARR58, PS_WARR59, PS_WARR60, PS_WARR61, PS_WARR62, PS_WARR63, PS_WARR64, PS_WARR65, PS_WARR66, PS_WARR67, PS_WARR68, PS_WARR69, PS_WARR70, PS_WARR71, PS_WARR72, PS_WARR73, PS_WARR74, PS_WARR75, PS_WARR76, PS_WARR77, PS_WARR78, PS_WARR79, PS_WARR80, PS_WARR81, PS_WARR82, PS_WARR83, PS_WARR84, PS_WARR85, PS_WARR86, PS_WARR87, PS_WARR88, PS_WARR89, PS_WARR90, PS_WARR91, PS_WARR92, PS_WARR93, PS_WARR94, PS_WARR95, PS_WARR96B, PS_WARR97, PS_WARR98, PS_WARR99, PS_WARR100, PS_WARR101, PS_WARR102 },
{ PS_ROGUE1, PS_ROGUE2, PS_ROGUE3, PS_ROGUE4, PS_ROGUE5, PS_ROGUE6, PS_ROGUE7, PS_ROGUE8, PS_ROGUE9, PS_ROGUE10, PS_ROGUE11, PS_ROGUE12, PS_ROGUE13, PS_ROGUE14, PS_ROGUE15, PS_ROGUE16, PS_ROGUE17, PS_ROGUE18, PS_ROGUE19, PS_ROGUE20, PS_ROGUE21, PS_ROGUE22, PS_ROGUE23, PS_ROGUE24, PS_ROGUE25, PS_ROGUE26, PS_ROGUE27, PS_ROGUE28, PS_ROGUE29, PS_ROGUE30, PS_ROGUE31, PS_ROGUE32, PS_ROGUE33, PS_ROGUE34, PS_ROGUE35, PS_ROGUE36, PS_ROGUE37, PS_ROGUE38, PS_ROGUE39, PS_ROGUE40, PS_ROGUE41, PS_ROGUE42, PS_ROGUE43, PS_ROGUE44, PS_ROGUE45, PS_ROGUE46, PS_ROGUE47, PS_ROGUE48, PS_ROGUE49, PS_ROGUE50, PS_ROGUE51, PS_ROGUE52, PS_ROGUE53, PS_ROGUE54, PS_ROGUE55, PS_ROGUE56, PS_ROGUE57, PS_ROGUE58, PS_ROGUE59, PS_ROGUE60, PS_ROGUE61, PS_ROGUE62, PS_ROGUE63, PS_ROGUE64, PS_ROGUE65, PS_ROGUE66, PS_ROGUE67, PS_ROGUE68, PS_ROGUE69, PS_ROGUE70, PS_ROGUE71, PS_ROGUE72, PS_ROGUE73, PS_ROGUE74, PS_ROGUE75, PS_ROGUE76, PS_ROGUE77, PS_ROGUE78, PS_ROGUE79, PS_ROGUE80, PS_ROGUE81, PS_ROGUE82, PS_ROGUE83, PS_ROGUE84, PS_ROGUE85, PS_ROGUE86, PS_ROGUE87, PS_ROGUE88, PS_ROGUE89, PS_ROGUE90, PS_ROGUE91, PS_ROGUE92, PS_ROGUE93, PS_ROGUE94, PS_ROGUE95, PS_ROGUE96, PS_ROGUE97, PS_ROGUE98, PS_ROGUE99, PS_ROGUE100, PS_ROGUE101, PS_ROGUE102 },
{ PS_MAGE1, PS_MAGE2, PS_MAGE3, PS_MAGE4, PS_MAGE5, PS_MAGE6, PS_MAGE7, PS_MAGE8, PS_MAGE9, PS_MAGE10, PS_MAGE11, PS_MAGE12, PS_MAGE13, PS_MAGE14, PS_MAGE15, PS_MAGE16, PS_MAGE17, PS_MAGE18, PS_MAGE19, PS_MAGE20, PS_MAGE21, PS_MAGE22, PS_MAGE23, PS_MAGE24, PS_MAGE25, PS_MAGE26, PS_MAGE27, PS_MAGE28, PS_MAGE29, PS_MAGE30, PS_MAGE31, PS_MAGE32, PS_MAGE33, PS_MAGE34, PS_MAGE35, PS_MAGE36, PS_MAGE37, PS_MAGE38, PS_MAGE39, PS_MAGE40, PS_MAGE41, PS_MAGE42, PS_MAGE43, PS_MAGE44, PS_MAGE45, PS_MAGE46, PS_MAGE47, PS_MAGE48, PS_MAGE49, PS_MAGE50, PS_MAGE51, PS_MAGE52, PS_MAGE53, PS_MAGE54, PS_MAGE55, PS_MAGE56, PS_MAGE57, PS_MAGE58, PS_MAGE59, PS_MAGE60, PS_MAGE61, PS_MAGE62, PS_MAGE63, PS_MAGE64, PS_MAGE65, PS_MAGE66, PS_MAGE67, PS_MAGE68, PS_MAGE69, PS_MAGE70, PS_MAGE71, PS_MAGE72, PS_MAGE73, PS_MAGE74, PS_MAGE75, PS_MAGE76, PS_MAGE77, PS_MAGE78, PS_MAGE79, PS_MAGE80, PS_MAGE81, PS_MAGE82, PS_MAGE83, PS_MAGE84, PS_MAGE85, PS_MAGE86, PS_MAGE87, PS_MAGE88, PS_MAGE89, PS_MAGE90, PS_MAGE91, PS_MAGE92, PS_MAGE93, PS_MAGE94, PS_MAGE95, PS_MAGE96, PS_MAGE97, PS_MAGE98, PS_MAGE99, PS_MAGE100, PS_MAGE101, PS_MAGE102 },
{ PS_MONK1, PS_MONK2, PS_MONK3, PS_MONK4, PS_MONK5, PS_MONK6, PS_MONK7, PS_MONK8, PS_MONK9, PS_MONK10, PS_MONK11, PS_MONK12, PS_MONK13, PS_MONK14, PS_MONK15, PS_MONK16, PS_MONK17, PS_MONK18, PS_MONK19, PS_MONK20, PS_MONK21, PS_MONK22, PS_MONK23, PS_MONK24, PS_MONK25, PS_MONK26, PS_MONK27, PS_MONK28, PS_MONK29, PS_MONK30, PS_MONK31, PS_MONK32, PS_MONK33, PS_MONK34, PS_MONK35, PS_MONK36, PS_MONK37, PS_MONK38, PS_MONK39, PS_MONK40, PS_MONK41, PS_MONK42, PS_MONK43, PS_MONK44, PS_MONK45, PS_MONK46, PS_MONK47, PS_MONK48, PS_MONK49, PS_MONK50, PS_MONK51, PS_MONK52, PS_MONK53, PS_MONK54, PS_MONK55, PS_MONK56, PS_MONK57, PS_MONK58, PS_MONK59, PS_MONK60, PS_MONK61, PS_MONK62, PS_MONK63, PS_MONK64, PS_MONK65, PS_MONK66, PS_MONK67, PS_MONK68, PS_MONK69, PS_MONK70, PS_MONK71, PS_MONK72, PS_MONK73, PS_MONK74, PS_MONK75, PS_MONK76, PS_MONK77, PS_MONK78, PS_MONK79, PS_MONK80, PS_MONK81, PS_MONK82, PS_MONK83, PS_MONK84, PS_MONK85, PS_MONK86, PS_MONK87, PS_MONK88, PS_MONK89, PS_MONK90, PS_MONK91, PS_MONK92, PS_MONK93, PS_MONK94, PS_MONK95, PS_MONK96, PS_MONK97, PS_MONK98, PS_MONK99, PS_MONK100, PS_MONK101, PS_MONK102 },
{ PS_ROGUE1, PS_ROGUE2, PS_ROGUE3, PS_ROGUE4, PS_ROGUE5, PS_ROGUE6, PS_ROGUE7, PS_ROGUE8, PS_ROGUE9, PS_ROGUE10, PS_ROGUE11, PS_ROGUE12, PS_ROGUE13, PS_ROGUE14, PS_ROGUE15, PS_ROGUE16, PS_ROGUE17, PS_ROGUE18, PS_ROGUE19, PS_ROGUE20, PS_ROGUE21, PS_ROGUE22, PS_ROGUE23, PS_ROGUE24, PS_ROGUE25, PS_ROGUE26, PS_ROGUE27, PS_ROGUE28, PS_ROGUE29, PS_ROGUE30, PS_ROGUE31, PS_ROGUE32, PS_ROGUE33, PS_ROGUE34, PS_ROGUE35, PS_ROGUE36, PS_ROGUE37, PS_ROGUE38, PS_ROGUE39, PS_ROGUE40, PS_ROGUE41, PS_ROGUE42, PS_ROGUE43, PS_ROGUE44, PS_ROGUE45, PS_ROGUE46, PS_ROGUE47, PS_ROGUE48, PS_ROGUE49, PS_ROGUE50, PS_ROGUE51, PS_ROGUE52, PS_ROGUE53, PS_ROGUE54, PS_ROGUE55, PS_ROGUE56, PS_ROGUE57, PS_ROGUE58, PS_ROGUE59, PS_ROGUE60, PS_ROGUE61, PS_ROGUE62, PS_ROGUE63, PS_ROGUE64, PS_ROGUE65, PS_ROGUE66, PS_ROGUE67, PS_ROGUE68, PS_ROGUE69, PS_ROGUE70, PS_ROGUE71, PS_ROGUE72, PS_ROGUE73, PS_ROGUE74, PS_ROGUE75, PS_ROGUE76, PS_ROGUE77, PS_ROGUE78, PS_ROGUE79, PS_ROGUE80, PS_ROGUE81, PS_ROGUE82, PS_ROGUE83, PS_ROGUE84, PS_ROGUE85, PS_ROGUE86, PS_ROGUE87, PS_ROGUE88, PS_ROGUE89, PS_ROGUE90, PS_ROGUE91, PS_ROGUE92, PS_ROGUE93, PS_ROGUE94, PS_ROGUE95, PS_ROGUE96, PS_ROGUE97, PS_ROGUE98, PS_ROGUE99, PS_ROGUE100, PS_ROGUE101, PS_ROGUE102 },
{ PS_WARR1, PS_WARR2, PS_WARR3, PS_WARR4, PS_WARR5, PS_WARR6, PS_WARR7, PS_WARR8, PS_WARR9, PS_WARR10, PS_WARR11, PS_WARR12, PS_WARR13, PS_WARR14, PS_WARR15, PS_WARR16, PS_WARR17, PS_WARR18, PS_WARR19, PS_WARR20, PS_WARR21, PS_WARR22, PS_WARR23, PS_WARR24, PS_WARR25, PS_WARR26, PS_WARR27, PS_WARR28, PS_WARR29, PS_WARR30, PS_WARR31, PS_WARR32, PS_WARR33, PS_WARR34, PS_WARR35, PS_WARR36, PS_WARR37, PS_WARR38, PS_WARR39, PS_WARR40, PS_WARR41, PS_WARR42, PS_WARR43, PS_WARR44, PS_WARR45, PS_WARR46, PS_WARR47, PS_WARR48, PS_WARR49, PS_WARR50, PS_WARR51, PS_WARR52, PS_WARR53, PS_WARR54, PS_WARR55, PS_WARR56, PS_WARR57, PS_WARR58, PS_WARR59, PS_WARR60, PS_WARR61, PS_WARR62, PS_WARR63, PS_WARR64, PS_WARR65, PS_WARR66, PS_WARR67, PS_WARR68, PS_WARR69, PS_WARR70, PS_WARR71, PS_WARR72, PS_WARR73, PS_WARR74, PS_WARR75, PS_WARR76, PS_WARR77, PS_WARR78, PS_WARR79, PS_WARR80, PS_WARR81, PS_WARR82, PS_WARR83, PS_WARR84, PS_WARR85, PS_WARR86, PS_WARR87, PS_WARR88, PS_WARR89, PS_WARR90, PS_WARR91, PS_WARR92, PS_WARR93, PS_WARR94, PS_WARR95, PS_WARR96B, PS_WARR97, PS_WARR98, PS_WARR99, PS_WARR100, PS_WARR101, PS_WARR102 },
// clang-format on
};
void PlayerStruct::PlaySpeach(int speachId) const
{
_sfx_id soundEffect = herosounds[static_cast<size_t>(_pClass)][speachId - 1];
PlaySfxLoc(soundEffect, _px, _py);
}
void PlayerStruct::PlaySpecificSpeach(int speachId) const
{
_sfx_id soundEffect = herosounds[static_cast<size_t>(_pClass)][speachId - 1];
if (effect_is_playing(soundEffect))
return;
PlaySfxLoc(soundEffect, _px, _py, false);
}
void PlayerStruct::PlaySpeach(int speachId, int delay) const
{
sfxdelay = delay;
sfxdnum = herosounds[static_cast<size_t>(_pClass)][speachId - 1];
}
void SetPlayerGPtrs(BYTE *pData, BYTE **pAnim)
{
int i;
@ -1655,19 +1689,7 @@ void StartPlrHit(int pnum, int dam, bool forcehit)
return;
}
if (plr[pnum]._pClass == HeroClass::Warrior) {
PlaySfxLoc(PS_WARR69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
PlaySfxLoc(PS_ROGUE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
PlaySfxLoc(PS_MAGE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Monk) {
PlaySfxLoc(PS_MONK69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Bard) {
PlaySfxLoc(PS_ROGUE69, plr[pnum]._px, plr[pnum]._py);
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
PlaySfxLoc(PS_WARR69, plr[pnum]._px, plr[pnum]._py);
}
plr[pnum].PlaySpeach(69);
drawhpflag = true;
if (plr[pnum]._pClass == HeroClass::Barbarian) {
@ -1788,19 +1810,7 @@ StartPlayerKill(int pnum, int earflag)
app_fatal("StartPlayerKill: illegal player %d", pnum);
}
if (plr[pnum]._pClass == HeroClass::Warrior) {
PlaySfxLoc(PS_DEAD, p->_px, p->_py); // BUGFIX: should use `PS_WARR71` like other classes
} else if (plr[pnum]._pClass == HeroClass::Rogue) {
PlaySfxLoc(PS_ROGUE71, p->_px, p->_py);
} else if (plr[pnum]._pClass == HeroClass::Sorcerer) {
PlaySfxLoc(PS_MAGE71, p->_px, p->_py);
} else if (plr[pnum]._pClass == HeroClass::Monk) {
PlaySfxLoc(PS_MONK71, p->_px, p->_py);
} else if (plr[pnum]._pClass == HeroClass::Bard) {
PlaySfxLoc(PS_ROGUE71, p->_px, p->_py);
} else if (plr[pnum]._pClass == HeroClass::Barbarian) {
PlaySfxLoc(PS_WARR71, p->_px, p->_py);
}
plr[pnum].PlaySpeach(71);
if (p->_pgfxnum) {
p->_pgfxnum = 0;
@ -3879,36 +3889,12 @@ void CheckPlrSpell()
spell_id rspell = plr[myplr]._pRSpell;
if (rspell == SPL_INVALID) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR34);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE34);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE34);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK34);
} else if (plr[myplr]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE34);
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR34);
}
plr[myplr].PlaySpeach(34);
return;
}
if (leveltype == DTYPE_TOWN && !spelldata[rspell].sTownSpell) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR27);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE27);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE27);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK27);
} else if (plr[myplr]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE27);
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR27);
}
plr[myplr].PlaySpeach(27);
return;
}
@ -3966,19 +3952,7 @@ void CheckPlrSpell()
}
if (plr[myplr]._pRSplType == RSPLTYPE_SPELL) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR35);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE35);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE35);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK35);
} else if (plr[myplr]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE35);
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR35);
}
plr[myplr].PlaySpeach(35);
}
}
@ -4383,74 +4357,20 @@ void PlayDungMsgs()
}
if (currlevel == 1 && !plr[myplr]._pLvlVisited[1] && !gbIsMultiplayer && !(plr[myplr].pDungMsgs & DMSG_CATHEDRAL)) {
sfxdelay = 40;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR97;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE97;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE97;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK97;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE97;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR97;
}
plr[myplr].PlaySpeach(97, 40);
plr[myplr].pDungMsgs = plr[myplr].pDungMsgs | DMSG_CATHEDRAL;
} else if (currlevel == 5 && !plr[myplr]._pLvlVisited[5] && !gbIsMultiplayer && !(plr[myplr].pDungMsgs & DMSG_CATACOMBS)) {
sfxdelay = 40;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR96B;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE96;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE96;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK96;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE96;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR96B;
}
plr[myplr].PlaySpeach(96, 40);
plr[myplr].pDungMsgs |= DMSG_CATACOMBS;
} else if (currlevel == 9 && !plr[myplr]._pLvlVisited[9] && !gbIsMultiplayer && !(plr[myplr].pDungMsgs & DMSG_CAVES)) {
sfxdelay = 40;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR98;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE98;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE98;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK98;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE98;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR98;
}
plr[myplr].PlaySpeach(98, 40);
plr[myplr].pDungMsgs |= DMSG_CAVES;
} else if (currlevel == 13 && !plr[myplr]._pLvlVisited[13] && !gbIsMultiplayer && !(plr[myplr].pDungMsgs & DMSG_HELL)) {
sfxdelay = 40;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR99;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE99;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE99;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK99;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE99;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR99;
}
plr[myplr].PlaySpeach(99, 40);
plr[myplr].pDungMsgs |= DMSG_HELL;
} else if (currlevel == 16 && !plr[myplr]._pLvlVisited[15] && !gbIsMultiplayer && !(plr[myplr].pDungMsgs & DMSG_DIABLO)) { // BUGFIX: _pLvlVisited should check 16 or this message will never play
sfxdelay = 40;
if (plr[myplr]._pClass == HeroClass::Warrior || plr[myplr]._pClass == HeroClass::Rogue || plr[myplr]._pClass == HeroClass::Sorcerer || plr[myplr]._pClass == HeroClass::Monk || plr[myplr]._pClass == HeroClass::Bard || plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_DIABLVLINT;
}
sfxdnum = PS_DIABLVLINT;
plr[myplr].pDungMsgs |= DMSG_DIABLO;
} else if (currlevel == 17 && !plr[myplr]._pLvlVisited[17] && !gbIsMultiplayer && !(plr[myplr].pDungMsgs2 & 1)) {
sfxdelay = 10;
@ -4464,20 +4384,7 @@ void PlayDungMsgs()
sfxdnum = USFX_DEFILER3;
plr[myplr].pDungMsgs2 |= 4;
} else if (currlevel == 21 && !plr[myplr]._pLvlVisited[21] && !gbIsMultiplayer && !(plr[myplr].pDungMsgs & 32)) {
sfxdelay = 30;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR92;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE92;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE92;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK92;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE92;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR92;
}
plr[myplr].PlaySpeach(92, 30);
plr[myplr].pDungMsgs |= 32;
} else {
sfxdelay = 0;

16
Source/player.h

@ -375,6 +375,22 @@ struct PlayerStruct {
* @brief Update tile coordinates a player is moving to (if not moving, then it corresponds to current position).
*/
void UpdateTargetPosition();
/**
* @brief Play a speach file.
* @todo Create enum for speachId
* @todo BUGFIX Prevent more then one speach to be played at a time (reject new requests).
*/
void PlaySpeach(int speachId) const;
/**
* @brief Play a speach file after a given delay.
* @param delay Multiple of 20ms waith before starting the speach
*/
void PlaySpeach(int speachId, int delay) const;
/**
* @brief Play a player speach file, with out random variants.
*/
void PlaySpecificSpeach(int speachId) const;
};
extern int myplr;

105
Source/quests.cpp

@ -315,77 +315,24 @@ void CheckQuestKill(int m, bool sendmsg)
if (monster[m].MType->mtype == MT_SKING) {
quests[Q_SKELKING]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR82;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE82;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE82;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK82;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE82;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR82;
}
plr[myplr].PlaySpeach(82, 30);
if (sendmsg)
NetSendCmdQuest(true, Q_SKELKING);
} else if (monster[m].MType->mtype == MT_CLEAVER) {
quests[Q_BUTCHER]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR80;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE80;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE80;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK80;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE80;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR80;
}
plr[myplr].PlaySpeach(80, 30);
if (sendmsg)
NetSendCmdQuest(true, Q_BUTCHER);
} else if (monster[m]._uniqtype - 1 == UMT_GARBUD) { //"Gharbad the Weak"
quests[Q_GARBUD]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR61;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE61;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE61;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK61;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE61;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR61;
}
plr[myplr].PlaySpeach(61, 30);
} else if (monster[m]._uniqtype - 1 == UMT_ZHAR) { //"Zhar the Mad"
quests[Q_ZHAR]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR62;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE62;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE62;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK62;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE62;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR62;
}
plr[myplr].PlaySpeach(62, 30);
} else if (monster[m]._uniqtype - 1 == UMT_LAZURUS && gbIsMultiplayer) { //"Arch-Bishop Lazarus"
quests[Q_BETRAYER]._qactive = QUEST_DONE;
quests[Q_BETRAYER]._qvar1 = 7;
sfxdelay = 30;
quests[Q_DIABLO]._qactive = QUEST_ACTIVE;
for (j = 0; j < MAXDUNY; j++) {
@ -398,60 +345,22 @@ void CheckQuestKill(int m, bool sendmsg)
}
}
}
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR83;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE83;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE83;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK83;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE83;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR83;
}
plr[myplr].PlaySpeach(83, 30);
if (sendmsg) {
NetSendCmdQuest(true, Q_BETRAYER);
NetSendCmdQuest(true, Q_DIABLO);
}
} else if (monster[m]._uniqtype - 1 == UMT_LAZURUS && !gbIsMultiplayer) { //"Arch-Bishop Lazarus"
quests[Q_BETRAYER]._qactive = QUEST_DONE;
sfxdelay = 30;
InitVPTriggers();
quests[Q_BETRAYER]._qvar1 = 7;
quests[Q_BETRAYER]._qvar2 = 4;
quests[Q_DIABLO]._qactive = QUEST_ACTIVE;
AddMissile(35, 32, 35, 32, 0, MIS_RPORTAL, TARGET_MONSTERS, myplr, 0, 0);
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR83;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE83;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE83;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK83;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE83;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR83;
}
plr[myplr].PlaySpeach(83, 30);
} else if (monster[m]._uniqtype - 1 == UMT_WARLORD) { //"Warlord of Blood"
quests[Q_WARLORD]._qactive = QUEST_DONE;
sfxdelay = 30;
if (plr[myplr]._pClass == HeroClass::Warrior) {
sfxdnum = PS_WARR94;
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
sfxdnum = PS_ROGUE94;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
sfxdnum = PS_MAGE94;
} else if (plr[myplr]._pClass == HeroClass::Monk) {
sfxdnum = PS_MONK94;
} else if (plr[myplr]._pClass == HeroClass::Bard) {
sfxdnum = PS_ROGUE94;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
sfxdnum = PS_WARR94;
}
plr[myplr].PlaySpeach(94, 30);
}
}

14
Source/towners.cpp

@ -818,19 +818,7 @@ void TalkToTowner(int p, int t)
towners[t]._tbtcnt = true;
towners[t]._tTalkingToPlayer = p;
quests[Q_BUTCHER]._qvar1 = 1;
if (plr[p]._pClass == HeroClass::Warrior && !effect_is_playing(PS_WARR8)) {
PlaySFX(PS_WARR8);
} else if (plr[p]._pClass == HeroClass::Rogue && !effect_is_playing(PS_ROGUE8)) {
PlaySFX(PS_ROGUE8);
} else if (plr[p]._pClass == HeroClass::Sorcerer && !effect_is_playing(PS_MAGE8)) {
PlaySFX(PS_MAGE8);
} else if (plr[p]._pClass == HeroClass::Monk && !effect_is_playing(PS_MONK8)) {
PlaySFX(PS_MONK8);
} else if (plr[p]._pClass == HeroClass::Bard && !effect_is_playing(PS_ROGUE8)) {
PlaySFX(PS_ROGUE8);
} else if (plr[p]._pClass == HeroClass::Barbarian && !effect_is_playing(PS_WARR8)) {
PlaySFX(PS_WARR8);
}
plr[p].PlaySpecificSpeach(8);
towners[t]._tMsgSaid = true;
} else if (quests[Q_BUTCHER]._qactive == QUEST_DONE && quests[Q_BUTCHER]._qvar1 == 1) {
quests[Q_BUTCHER]._qvar1 = 1;

14
Source/trigs.cpp

@ -893,19 +893,7 @@ void CheckTriggers()
}
if (abort) {
if (plr[myplr]._pClass == HeroClass::Warrior) {
PlaySFX(PS_WARR43);
} else if (plr[myplr]._pClass == HeroClass::Rogue) {
PlaySFX(PS_ROGUE43);
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) {
PlaySFX(PS_MAGE43);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
PlaySFX(PS_MONK43);
} else if (plr[myplr]._pClass == HeroClass::Bard) {
PlaySFX(PS_ROGUE43);
} else if (plr[myplr]._pClass == HeroClass::Barbarian) {
PlaySFX(PS_WARR43);
}
plr[myplr].PlaySpeach(43);
InitDiabloMsg(abortflag);
NetSendCmdLoc(myplr, true, CMD_WALKXY, x, y);

Loading…
Cancel
Save