Browse Source

clang-tidy/Android Stuidio cleanups 3

pull/2310/head
Anders Jenbo 5 years ago
parent
commit
bc0d1f7ac0
  1. 4
      Source/dthread.cpp
  2. 4
      Source/effects.cpp
  3. 2
      Source/monstdat.cpp
  4. 4
      Source/monstdat.h
  5. 71
      Source/monster.cpp
  6. 6
      Source/monster.h
  7. 1
      Source/movie.cpp
  8. 36
      Source/mpqapi.cpp
  9. 11
      Source/msg.cpp
  10. 8
      Source/msg.h
  11. 6
      Source/multi.cpp
  12. 70
      Source/nthread.cpp
  13. 2
      Source/nthread.h
  14. 65
      Source/objects.cpp
  15. 9
      Source/options.cpp
  16. 16
      Source/sync.cpp
  17. 5
      Source/tmsg.cpp
  18. 2
      Source/tmsg.h
  19. 8
      Source/utils/thread.cpp
  20. 2
      Source/utils/thread.h

4
Source/dthread.cpp

@ -19,7 +19,7 @@ event_emul *sghWorkToDoEvent;
/* rdata */ /* rdata */
static SDL_Thread *sghThread = nullptr; static SDL_Thread *sghThread = nullptr;
static unsigned int DthreadHandler(void * /*data*/) static void DthreadHandler()
{ {
const char *errorBuf; const char *errorBuf;
TMegaPkt *pkt; TMegaPkt *pkt;
@ -53,8 +53,6 @@ static unsigned int DthreadHandler(void * /*data*/)
SDL_Delay(dwMilliseconds); SDL_Delay(dwMilliseconds);
} }
} }
return 0;
} }
void dthread_remove_player(uint8_t pnum) void dthread_remove_player(uint8_t pnum)

4
Source/effects.cpp

@ -1121,10 +1121,10 @@ void InitMonsterSND(int monst)
const int mtype = Monsters[monst].mtype; const int mtype = Monsters[monst].mtype;
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
if (MonstSndChar[i] != 's' || monsterdata[mtype].snd_special) { if (MonstSndChar[i] != 's' || MonsterData[mtype].snd_special) {
for (int j = 0; j < 2; j++) { for (int j = 0; j < 2; j++) {
char path[MAX_PATH]; char path[MAX_PATH];
sprintf(path, monsterdata[mtype].sndfile, MonstSndChar[i], j + 1); sprintf(path, MonsterData[mtype].sndfile, MonstSndChar[i], j + 1);
Monsters[monst].Snds[i][j] = sound_file_load(path); Monsters[monst].Snds[i][j] = sound_file_load(path);
} }
} }

2
Source/monstdat.cpp

@ -12,7 +12,7 @@
namespace devilution { namespace devilution {
/** Contains the data related to each monster ID. */ /** Contains the data related to each monster ID. */
const MonsterData monsterdata[] = { const MonsterDataStruct MonsterData[] = {
// clang-format off // clang-format off
// mName, GraphicType, sndfile, TransFile, width, mImage, has_special, snd_special, has_trans, Frames[6], Rate[6], mMinDLvl, mMaxDLvl, mLevel, mMinHP, mMaxHP, mAi, mFlags , mInt, mHit, mAFNum, mMinDamage, mMaxDamage, mHit2, mAFNum2, mMinDamage2, mMaxDamage2, mArmorClass, mMonstClass, mMagicRes , mMagicRes2 , mSelFlag, mTreasure, mExp // mName, GraphicType, sndfile, TransFile, width, mImage, has_special, snd_special, has_trans, Frames[6], Rate[6], mMinDLvl, mMaxDLvl, mLevel, mMinHP, mMaxHP, mAi, mFlags , mInt, mHit, mAFNum, mMinDamage, mMaxDamage, mHit2, mAFNum2, mMinDamage2, mMaxDamage2, mArmorClass, mMonstClass, mMagicRes , mMagicRes2 , mSelFlag, mTreasure, mExp
// TRANSLATORS: Monster Block start // TRANSLATORS: Monster Block start

4
Source/monstdat.h

@ -74,7 +74,7 @@ enum monster_resistance : uint8_t {
// clang-format on // clang-format on
}; };
struct MonsterData { struct MonsterDataStruct {
const char *mName; const char *mName;
const char *GraphicType; const char *GraphicType;
const char *sndfile; const char *sndfile;
@ -281,7 +281,7 @@ struct UniqMonstStruct {
_speech_id mtalkmsg; _speech_id mtalkmsg;
}; };
extern const MonsterData monsterdata[]; extern const MonsterDataStruct MonsterData[];
extern const _monster_id MonstConvTbl[]; extern const _monster_id MonstConvTbl[];
extern const char MonstAvailTbl[]; extern const char MonstAvailTbl[];
extern const UniqMonstStruct UniqMonst[]; extern const UniqMonstStruct UniqMonst[];

71
Source/monster.cpp

@ -240,7 +240,7 @@ int AddMonsterType(_monster_id type, placeflag placeflag)
i = nummtypes; i = nummtypes;
nummtypes++; nummtypes++;
Monsters[i].mtype = type; Monsters[i].mtype = type;
monstimgtot += monsterdata[type].mImage; monstimgtot += MonsterData[type].mImage;
InitMonsterGFX(i); InitMonsterGFX(i);
InitMonsterSND(i); InitMonsterSND(i);
} }
@ -311,8 +311,8 @@ void GetLevelMTypes()
nt = 0; nt = 0;
for (i = MT_WSKELAX; i <= MT_WSKELAX + numskeltypes; i++) { for (i = MT_WSKELAX; i <= MT_WSKELAX + numskeltypes; i++) {
if (IsSkel(i)) { if (IsSkel(i)) {
minl = 15 * monsterdata[i].mMinDLvl / 30 + 1; minl = 15 * MonsterData[i].mMinDLvl / 30 + 1;
maxl = 15 * monsterdata[i].mMaxDLvl / 30 + 1; maxl = 15 * MonsterData[i].mMaxDLvl / 30 + 1;
if (currlevel >= minl && currlevel <= maxl) { if (currlevel >= minl && currlevel <= maxl) {
if ((MonstAvailTbl[i] & mamask) != 0) { if ((MonstAvailTbl[i] & mamask) != 0) {
@ -326,8 +326,8 @@ void GetLevelMTypes()
nt = 0; nt = 0;
for (i = MT_NZOMBIE; i < NUM_MTYPES; i++) { for (i = MT_NZOMBIE; i < NUM_MTYPES; i++) {
minl = 15 * monsterdata[i].mMinDLvl / 30 + 1; minl = 15 * MonsterData[i].mMinDLvl / 30 + 1;
maxl = 15 * monsterdata[i].mMaxDLvl / 30 + 1; maxl = 15 * MonsterData[i].mMaxDLvl / 30 + 1;
if (currlevel >= minl && currlevel <= maxl) { if (currlevel >= minl && currlevel <= maxl) {
if ((MonstAvailTbl[i] & mamask) != 0) { if ((MonstAvailTbl[i] & mamask) != 0) {
@ -346,7 +346,7 @@ void GetLevelMTypes()
while (nt > 0 && nummtypes < MAX_LVLMTYPES && monstimgtot < 4000) { while (nt > 0 && nummtypes < MAX_LVLMTYPES && monstimgtot < 4000) {
for (i = 0; i < nt;) { for (i = 0; i < nt;) {
if (monsterdata[typelist[i]].mImage > 4000 - monstimgtot) { if (MonsterData[typelist[i]].mImage > 4000 - monstimgtot) {
typelist[i] = typelist[--nt]; typelist[i] = typelist[--nt];
continue; continue;
} }
@ -372,16 +372,16 @@ void GetLevelMTypes()
void InitMonsterGFX(int monst) void InitMonsterGFX(int monst)
{ {
int mtype = Monsters[monst].mtype; int mtype = Monsters[monst].mtype;
int width = monsterdata[mtype].width; int width = MonsterData[mtype].width;
for (int anim = 0; anim < 6; anim++) { for (int anim = 0; anim < 6; anim++) {
int frames = monsterdata[mtype].Frames[anim]; int frames = MonsterData[mtype].Frames[anim];
if (gbIsHellfire && mtype == MT_DIABLO && anim == 3) if (gbIsHellfire && mtype == MT_DIABLO && anim == 3)
frames = 2; frames = 2;
if ((animletter[anim] != 's' || monsterdata[mtype].has_special) && frames > 0) { if ((animletter[anim] != 's' || MonsterData[mtype].has_special) && frames > 0) {
char strBuff[256]; char strBuff[256];
sprintf(strBuff, monsterdata[mtype].GraphicType, animletter[anim]); sprintf(strBuff, MonsterData[mtype].GraphicType, animletter[anim]);
byte *celBuf; byte *celBuf;
{ {
@ -403,20 +403,19 @@ void InitMonsterGFX(int monst)
} }
Monsters[monst].Anims[anim].Frames = frames; Monsters[monst].Anims[anim].Frames = frames;
Monsters[monst].Anims[anim].Rate = monsterdata[mtype].Rate[anim]; Monsters[monst].Anims[anim].Rate = MonsterData[mtype].Rate[anim];
} }
Monsters[monst].mMinHP = monsterdata[mtype].mMinHP; Monsters[monst].mMinHP = MonsterData[mtype].mMinHP;
Monsters[monst].mMaxHP = monsterdata[mtype].mMaxHP; Monsters[monst].mMaxHP = MonsterData[mtype].mMaxHP;
if (!gbIsHellfire && mtype == MT_DIABLO) { if (!gbIsHellfire && mtype == MT_DIABLO) {
Monsters[monst].mMinHP -= 2000; Monsters[monst].mMinHP -= 2000;
Monsters[monst].mMaxHP -= 2000; Monsters[monst].mMaxHP -= 2000;
} }
Monsters[monst].has_special = monsterdata[mtype].has_special; Monsters[monst].mAFNum = MonsterData[mtype].mAFNum;
Monsters[monst].mAFNum = monsterdata[mtype].mAFNum; Monsters[monst].MData = &MonsterData[mtype];
Monsters[monst].MData = &monsterdata[mtype];
if (monsterdata[mtype].has_trans) { if (MonsterData[mtype].has_trans) {
InitMonsterTRN(Monsters[monst]); InitMonsterTRN(Monsters[monst]);
} }
@ -1332,7 +1331,7 @@ void M_Enemy(int i)
int mi = monstactive[j]; int mi = monstactive[j];
if (mi == i) if (mi == i)
continue; continue;
if (!((monster[mi]._mhitpoints >> 6) > 0)) if ((monster[mi]._mhitpoints >> 6) <= 0)
continue; continue;
if (monster[mi].position.tile.x == 1 && monster[mi].position.tile.y == 0) if (monster[mi].position.tile.x == 1 && monster[mi].position.tile.y == 0)
continue; continue;
@ -2374,7 +2373,7 @@ bool M_DoTalk(int i)
if (monster[i]._uniqtype - 1 == UMT_SNOTSPIL) { if (monster[i]._uniqtype - 1 == UMT_SNOTSPIL) {
if (monster[i].mtalkmsg == TEXT_BANNER10 && (monster[i]._mFlags & MFLAG_QUEST_COMPLETE) == 0) { if (monster[i].mtalkmsg == TEXT_BANNER10 && (monster[i]._mFlags & MFLAG_QUEST_COMPLETE) == 0) {
ObjChangeMap(setpc_x, setpc_y, (setpc_w / 2) + setpc_x + 2, (setpc_h / 2) + setpc_y - 2); ObjChangeMap(setpc_x, setpc_y, (setpc_w / 2) + setpc_x + 2, (setpc_h / 2) + setpc_y - 2);
int tren = TransVal; int8_t tren = TransVal;
TransVal = 9; TransVal = 9;
DRLG_MRectTrans(setpc_x, setpc_y, (setpc_w / 2) + setpc_x + 4, setpc_y + (setpc_h / 2)); DRLG_MRectTrans(setpc_x, setpc_y, (setpc_w / 2) + setpc_x + 4, setpc_y + (setpc_h / 2));
TransVal = tren; TransVal = tren;
@ -2491,14 +2490,18 @@ void DoEnding()
if (gbIsSpawn) if (gbIsSpawn)
return; return;
if (plr[myplr]._pClass == HeroClass::Warrior || plr[myplr]._pClass == HeroClass::Barbarian) { switch (plr[myplr]._pClass) {
play_movie("gendata\\DiabVic2.smk", false); case HeroClass::Sorcerer:
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) { case HeroClass::Monk:
play_movie("gendata\\DiabVic1.smk", false);
} else if (plr[myplr]._pClass == HeroClass::Monk) {
play_movie("gendata\\DiabVic1.smk", false); play_movie("gendata\\DiabVic1.smk", false);
} else { break;
case HeroClass::Warrior:
case HeroClass::Barbarian:
play_movie("gendata\\DiabVic2.smk", false);
break;
default:
play_movie("gendata\\DiabVic3.smk", false); play_movie("gendata\\DiabVic3.smk", false);
break;
} }
play_movie("gendata\\Diabend.smk", false); play_movie("gendata\\Diabend.smk", false);
@ -4409,9 +4412,7 @@ void ProcessMonsters()
} }
} }
do { do {
if ((monst->_mFlags & MFLAG_SEARCH) == 0) { if ((monst->_mFlags & MFLAG_SEARCH) == 0 || !MAI_Path(mi)) {
AiProc[monst->_mAi](mi);
} else if (!MAI_Path(mi)) {
AiProc[monst->_mAi](mi); AiProc[monst->_mAi](mi);
} }
switch (monst->_mmode) { switch (monst->_mmode) {
@ -4483,7 +4484,7 @@ void FreeMonsters()
for (int i = 0; i < nummtypes; i++) { for (int i = 0; i < nummtypes; i++) {
int mtype = Monsters[i].mtype; int mtype = Monsters[i].mtype;
for (int j = 0; j < 6; j++) { for (int j = 0; j < 6; j++) {
if (animletter[j] != 's' || monsterdata[mtype].has_special) { if (animletter[j] != 's' || MonsterData[mtype].has_special) {
Monsters[i].Anims[j].CMem = nullptr; Monsters[i].Anims[j].CMem = nullptr;
} }
} }
@ -4725,7 +4726,7 @@ void M_FallenFear(Point position)
} }
} }
const char *GetMonsterTypeText(const MonsterData &monsterData) const char *GetMonsterTypeText(const MonsterDataStruct &monsterData)
{ {
switch (monsterData.mMonstClass) { switch (monsterData.mMonstClass) {
case MC_ANIMAL: case MC_ANIMAL:
@ -4742,15 +4743,15 @@ const char *GetMonsterTypeText(const MonsterData &monsterData)
void PrintMonstHistory(int mt) void PrintMonstHistory(int mt)
{ {
if (sgOptions.Gameplay.bShowMonsterType) { if (sgOptions.Gameplay.bShowMonsterType) {
strcpy(tempstr, fmt::format(_("Type: {:s} Kills: {:d}"), GetMonsterTypeText(monsterdata[mt]), monstkills[mt]).c_str()); strcpy(tempstr, fmt::format(_("Type: {:s} Kills: {:d}"), GetMonsterTypeText(MonsterData[mt]), monstkills[mt]).c_str());
} else { } else {
strcpy(tempstr, fmt::format(_("Total kills: {:d}"), monstkills[mt]).c_str()); strcpy(tempstr, fmt::format(_("Total kills: {:d}"), monstkills[mt]).c_str());
} }
AddPanelString(tempstr); AddPanelString(tempstr);
if (monstkills[mt] >= 30) { if (monstkills[mt] >= 30) {
int minHP = monsterdata[mt].mMinHP; int minHP = MonsterData[mt].mMinHP;
int maxHP = monsterdata[mt].mMaxHP; int maxHP = MonsterData[mt].mMaxHP;
if (!gbIsHellfire && mt == MT_DIABLO) { if (!gbIsHellfire && mt == MT_DIABLO) {
minHP -= 2000; minHP -= 2000;
maxHP -= 2000; maxHP -= 2000;
@ -4781,7 +4782,7 @@ void PrintMonstHistory(int mt)
AddPanelString(tempstr); AddPanelString(tempstr);
} }
if (monstkills[mt] >= 15) { if (monstkills[mt] >= 15) {
int res = (sgGameInitInfo.nDifficulty != DIFF_HELL) ? monsterdata[mt].mMagicRes : monsterdata[mt].mMagicRes2; int res = (sgGameInitInfo.nDifficulty != DIFF_HELL) ? MonsterData[mt].mMagicRes : MonsterData[mt].mMagicRes2;
if ((res & (RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING)) == 0) { if ((res & (RESIST_MAGIC | RESIST_FIRE | RESIST_LIGHTNING | IMMUNE_MAGIC | IMMUNE_FIRE | IMMUNE_LIGHTNING)) == 0) {
strcpy(tempstr, _("No magic resistance")); strcpy(tempstr, _("No magic resistance"));
AddPanelString(tempstr); AddPanelString(tempstr);
@ -4915,7 +4916,7 @@ bool PosOkMonst(int i, Point position)
bool monster_posok(int i, Point position) bool monster_posok(int i, Point position)
{ {
int mi = dMissile[position.x][position.y]; int8_t mi = dMissile[position.x][position.y];
if (mi == 0 || i < 0) { if (mi == 0 || i < 0) {
return true; return true;
} }

6
Source/monster.h

@ -132,10 +132,9 @@ struct CMonster {
#endif #endif
uint16_t mMinHP; uint16_t mMinHP;
uint16_t mMaxHP; uint16_t mMaxHP;
bool has_special;
uint8_t mAFNum; uint8_t mAFNum;
int8_t mdeadval; int8_t mdeadval;
const MonsterData *MData; const MonsterDataStruct *MData;
}; };
struct MonsterStruct { // note: missing field _mAFNum struct MonsterStruct { // note: missing field _mAFNum
@ -192,7 +191,7 @@ struct MonsterStruct { // note: missing field _mAFNum
int8_t mlid; // BUGFIX -1 is used when not emitting light this should be signed (fixed) int8_t mlid; // BUGFIX -1 is used when not emitting light this should be signed (fixed)
const char *mName; const char *mName;
CMonster *MType; CMonster *MType;
const MonsterData *MData; const MonsterDataStruct *MData;
/** /**
* @brief Check thats the correct stand Animation is loaded. This is needed if direction is changed (monster stands and looks to player). * @brief Check thats the correct stand Animation is loaded. This is needed if direction is changed (monster stands and looks to player).
@ -293,7 +292,6 @@ bool DirOK(int i, Direction mdir);
bool PosOkMissile(int entity, Point position); bool PosOkMissile(int entity, Point position);
bool LineClearSolid(Point startPoint, Point endPoint); bool LineClearSolid(Point startPoint, Point endPoint);
bool LineClearMissile(Point startPoint, Point endPoint); bool LineClearMissile(Point startPoint, Point endPoint);
bool LineClear(Point startPoint, Point endPoint);
bool LineClear(bool (*Clear)(int, Point), int entity, Point startPoint, Point endPoint); bool LineClear(bool (*Clear)(int, Point), int entity, Point startPoint, Point endPoint);
void SyncMonsterAnim(int i); void SyncMonsterAnim(int i);
void M_FallenFear(Point position); void M_FallenFear(Point position);

1
Source/movie.cpp

@ -50,7 +50,6 @@ void play_movie(const char *pszMovie, bool userCanClose)
case DVL_WM_QUIT: case DVL_WM_QUIT:
SVidPlayEnd(); SVidPlayEnd();
diablo_quit(0); diablo_quit(0);
break;
} }
} }
if (!SVidPlayContinue()) if (!SVidPlayContinue())

36
Source/mpqapi.cpp

@ -105,18 +105,6 @@ public:
return s_ != nullptr; return s_ != nullptr;
} }
bool Seekg(std::streampos pos)
{
s_->seekg(pos);
return CheckError("seekg(%" PRIuMAX ")", static_cast<std::uintmax_t>(pos));
}
bool Seekg(std::streamoff pos, std::ios::seekdir dir)
{
s_->seekg(pos, dir);
return CheckError("seekg(%" PRIdMAX ", %s)", static_cast<std::intmax_t>(pos), DirToString(dir));
}
bool Seekp(std::streampos pos) bool Seekp(std::streampos pos)
{ {
s_->seekp(pos); s_->seekp(pos);
@ -129,12 +117,6 @@ public:
return CheckError("seekp(%" PRIdMAX ", %s)", static_cast<std::intmax_t>(pos), DirToString(dir)); return CheckError("seekp(%" PRIdMAX ", %s)", static_cast<std::intmax_t>(pos), DirToString(dir));
} }
bool Tellg(std::streampos *result)
{
*result = s_->tellg();
return CheckError("tellg() = %" PRIuMAX, static_cast<std::uintmax_t>(*result));
}
bool Tellp(std::streampos *result) bool Tellp(std::streampos *result)
{ {
*result = s_->tellp(); *result = s_->tellp();
@ -194,32 +176,32 @@ struct Archive {
_HASHENTRY *sgpHashTbl; _HASHENTRY *sgpHashTbl;
_BLOCKENTRY *sgpBlockTbl; _BLOCKENTRY *sgpBlockTbl;
bool Open(const char *name) bool Open(const char *path)
{ {
Close(); Close();
#ifdef _DEBUG #ifdef _DEBUG
Log("Opening {}", name); Log("Opening {}", path);
#endif #endif
exists = FileExists(name); exists = FileExists(path);
std::ios::openmode mode = std::ios::in | std::ios::out | std::ios::binary; std::ios::openmode mode = std::ios::in | std::ios::out | std::ios::binary;
if (exists) { if (exists) {
if (!GetFileSize(name, &size)) { if (!GetFileSize(path, &size)) {
Log(R"(GetFileSize("{}") failed with "{}")", name, std::strerror(errno)); Log(R"(GetFileSize("{}") failed with "{}")", path, std::strerror(errno));
return false; return false;
} }
#ifdef _DEBUG #ifdef _DEBUG
Log("GetFileSize(\"{}\") = {}", name, size); Log("GetFileSize(\"{}\") = {}", path, size);
#endif #endif
} else { } else {
mode |= std::ios::trunc; mode |= std::ios::trunc;
} }
if (!stream.Open(name, mode)) { if (!stream.Open(path, mode)) {
stream.Close(); stream.Close();
return false; return false;
} }
modified = !exists; modified = !exists;
this->name = name; name = path;
return true; return true;
} }
@ -475,7 +457,7 @@ _BLOCKENTRY *AddFile(const char *pszName, _BLOCKENTRY *pBlk, int blockIndex)
uint32_t h3 = Hash(pszName, 2); uint32_t h3 = Hash(pszName, 2);
if (GetHashIndex(h1, h2, h3) != -1) if (GetHashIndex(h1, h2, h3) != -1)
app_fatal("Hash collision between \"%s\" and existing file\n", pszName); app_fatal("Hash collision between \"%s\" and existing file\n", pszName);
int hIdx = h1 & 0x7FF; unsigned int hIdx = h1 & 0x7FF;
bool hasSpace = false; bool hasSpace = false;
for (int i = 0; i < INDEX_ENTRIES; i++) { for (int i = 0; i < INDEX_ENTRIES; i++) {

11
Source/msg.cpp

@ -130,7 +130,6 @@ void SendPacket(int pnum, const void *packet, DWORD dwSize)
int WaitForTurns() int WaitForTurns()
{ {
bool received;
DWORD turns; DWORD turns;
if (sgbDeltaChunks == 0) { if (sgbDeltaChunks == 0) {
@ -143,8 +142,9 @@ int WaitForTurns()
} }
multi_process_network_packets(); multi_process_network_packets();
nthread_send_and_recv_turn(0, 0); nthread_send_and_recv_turn(0, 0);
if (nthread_has_500ms_passed()) if (nthread_has_500ms_passed()) {
nthread_recv_turns(&received); nthread_recv_turns();
}
if (gbGameDestroyed) if (gbGameDestroyed)
return 100; return 100;
@ -326,10 +326,7 @@ DWORD OnLevelData(int pnum, TCmd *pCmd)
auto *p = (TCmdPlrInfoHdr *)pCmd; auto *p = (TCmdPlrInfoHdr *)pCmd;
if (gbDeltaSender != pnum) { if (gbDeltaSender != pnum) {
if (p->bCmd == CMD_DLEVEL_END) { if (p->bCmd == CMD_DLEVEL_END || (p->bCmd == CMD_DLEVEL_0 && p->wOffset == 0)) {
gbDeltaSender = pnum;
sgbRecvCmd = CMD_DLEVEL_END;
} else if (p->bCmd == CMD_DLEVEL_0 && p->wOffset == 0) {
gbDeltaSender = pnum; gbDeltaSender = pnum;
sgbRecvCmd = CMD_DLEVEL_END; sgbRecvCmd = CMD_DLEVEL_END;
} else { } else {

8
Source/msg.h

@ -308,8 +308,6 @@ struct TSyncHeader {
_cmd_id bCmd; _cmd_id bCmd;
uint8_t bLevel; uint8_t bLevel;
uint16_t wLen; uint16_t wLen;
uint8_t bObjId;
uint8_t bObjCmd;
uint8_t bItemI; uint8_t bItemI;
uint8_t bItemX; uint8_t bItemX;
uint8_t bItemY; uint8_t bItemY;
@ -328,12 +326,6 @@ struct TSyncHeader {
uint16_t wPInvCI; uint16_t wPInvCI;
uint32_t dwPInvSeed; uint32_t dwPInvSeed;
uint8_t bPInvId; uint8_t bPInvId;
uint16_t wToHit;
uint16_t wMaxDam;
uint8_t bMinStr;
uint8_t bMinMag;
uint8_t bMinDex;
uint8_t bAC;
}; };
struct TSyncMonster { struct TSyncMonster {

6
Source/multi.cpp

@ -240,7 +240,7 @@ void BeginTimeout()
} }
#endif #endif
int nTicks = SDL_GetTicks() - sglTimeoutStart; uint32_t nTicks = SDL_GetTicks() - sglTimeoutStart;
if (nTicks > 20000) { if (nTicks > 20000) {
gbRunGame = false; gbRunGame = false;
return; return;
@ -287,7 +287,7 @@ void BeginTimeout()
} }
} }
void HandleAllPackets(int pnum, byte *pData, int nSize) void HandleAllPackets(int pnum, byte *pData, size_t nSize)
{ {
while (nSize != 0) { while (nSize != 0) {
int nLen = ParseCmd(pnum, (TCmd *)pData); int nLen = ParseCmd(pnum, (TCmd *)pData);
@ -301,7 +301,7 @@ void HandleAllPackets(int pnum, byte *pData, int nSize)
void ProcessTmsgs() void ProcessTmsgs()
{ {
int cnt; size_t cnt;
TPkt pkt; TPkt pkt;
while ((cnt = tmsg_get((byte *)&pkt)) != 0) { while ((cnt = tmsg_get((byte *)&pkt)) != 0) {

70
Source/nthread.cpp

@ -6,6 +6,7 @@
#include "diablo.h" #include "diablo.h"
#include "gmenu.h" #include "gmenu.h"
#include "nthread.h"
#include "storm/storm.h" #include "storm/storm.h"
#include "utils/thread.h" #include "utils/thread.h"
@ -20,7 +21,7 @@ DWORD gdwTurnsInTransit;
uintptr_t glpMsgTbl[MAX_PLRS]; uintptr_t glpMsgTbl[MAX_PLRS];
SDL_threadID glpNThreadId; SDL_threadID glpNThreadId;
char sgbSyncCountdown; char sgbSyncCountdown;
int turn_upper_bit; uint32_t turn_upper_bit;
bool sgbTicsOutOfSync; bool sgbTicsOutOfSync;
char sgbPacketCountdown; char sgbPacketCountdown;
bool sgbThreadIsRunning; bool sgbThreadIsRunning;
@ -34,19 +35,15 @@ static SDL_Thread *sghThread = nullptr;
void nthread_terminate_game(const char *pszFcn) void nthread_terminate_game(const char *pszFcn)
{ {
DWORD sErr; uint32_t sErr = SErrGetLastError();
sErr = SErrGetLastError();
if (sErr == STORM_ERROR_INVALID_PLAYER) { if (sErr == STORM_ERROR_INVALID_PLAYER) {
return; return;
} }
if (sErr == STORM_ERROR_GAME_TERMINATED) { if (sErr != STORM_ERROR_GAME_TERMINATED && sErr != STORM_ERROR_NOT_IN_GAME) {
gbGameDestroyed = true;
} else if (sErr == STORM_ERROR_NOT_IN_GAME) {
gbGameDestroyed = true;
} else {
app_fatal("%s:\n%s", pszFcn, SDL_GetError()); app_fatal("%s:\n%s", pszFcn, SDL_GetError());
} }
gbGameDestroyed = true;
} }
uint32_t nthread_send_and_recv_turn(uint32_t curTurn, int turnDelta) uint32_t nthread_send_and_recv_turn(uint32_t curTurn, int turnDelta)
@ -58,9 +55,9 @@ uint32_t nthread_send_and_recv_turn(uint32_t curTurn, int turnDelta)
} }
while (curTurnsInTransit++ < gdwTurnsInTransit) { while (curTurnsInTransit++ < gdwTurnsInTransit) {
int turnTmp = turn_upper_bit | (curTurn & 0x7FFFFFFF); uint32_t turnTmp = turn_upper_bit | (curTurn & 0x7FFFFFFF);
turn_upper_bit = 0; turn_upper_bit = 0;
int turn = turnTmp; uint32_t turn = turnTmp;
if (!SNetSendTurn((char *)&turn, sizeof(turn))) { if (!SNetSendTurn((char *)&turn, sizeof(turn))) {
nthread_terminate_game("SNetSendTurn"); nthread_terminate_game("SNetSendTurn");
@ -76,7 +73,8 @@ uint32_t nthread_send_and_recv_turn(uint32_t curTurn, int turnDelta)
bool nthread_recv_turns(bool *pfSendAsync) bool nthread_recv_turns(bool *pfSendAsync)
{ {
*pfSendAsync = false; if (pfSendAsync != nullptr)
*pfSendAsync = false;
sgbPacketCountdown--; sgbPacketCountdown--;
if (sgbPacketCountdown > 0) { if (sgbPacketCountdown > 0) {
last_tick += gnTickDelay; last_tick += gnTickDelay;
@ -85,8 +83,8 @@ bool nthread_recv_turns(bool *pfSendAsync)
sgbSyncCountdown--; sgbSyncCountdown--;
sgbPacketCountdown = sgbNetUpdateRate; sgbPacketCountdown = sgbNetUpdateRate;
if (sgbSyncCountdown != 0) { if (sgbSyncCountdown != 0) {
if (pfSendAsync != nullptr)
*pfSendAsync = true; *pfSendAsync = true;
last_tick += gnTickDelay; last_tick += gnTickDelay;
return true; return true;
} }
@ -104,35 +102,34 @@ bool nthread_recv_turns(bool *pfSendAsync)
} }
sgbSyncCountdown = 4; sgbSyncCountdown = 4;
multi_msg_countdown(); multi_msg_countdown();
*pfSendAsync = true; if (pfSendAsync != nullptr)
*pfSendAsync = true;
last_tick += gnTickDelay; last_tick += gnTickDelay;
return true; return true;
} }
static unsigned int NthreadHandler(void * /*data*/) static void NthreadHandler()
{ {
int delta; if (!nthread_should_run) {
bool received; return;
}
if (nthread_should_run) { while (true) {
while (true) { sgMemCrit.Enter();
sgMemCrit.Enter(); if (!nthread_should_run) {
if (!nthread_should_run)
break;
nthread_send_and_recv_turn(0, 0);
if (nthread_recv_turns(&received))
delta = last_tick - SDL_GetTicks();
else
delta = gnTickDelay;
sgMemCrit.Leave(); sgMemCrit.Leave();
if (delta > 0) break;
SDL_Delay(delta);
if (!nthread_should_run)
return 0;
} }
nthread_send_and_recv_turn(0, 0);
int delta = gnTickDelay;
if (nthread_recv_turns())
delta = last_tick - SDL_GetTicks();
sgMemCrit.Leave(); sgMemCrit.Leave();
if (delta > 0)
SDL_Delay(delta);
if (!nthread_should_run)
return;
} }
return 0;
} }
void nthread_set_turn_upper_bit() void nthread_set_turn_upper_bit()
@ -223,11 +220,8 @@ void nthread_ignore_mutex(bool bStart)
*/ */
bool nthread_has_500ms_passed() bool nthread_has_500ms_passed()
{ {
DWORD currentTickCount; int currentTickCount = SDL_GetTicks();
int ticksElapsed; int ticksElapsed = currentTickCount - last_tick;
currentTickCount = SDL_GetTicks();
ticksElapsed = currentTickCount - last_tick;
if (!gbIsMultiplayer && ticksElapsed > gnTickDelay * 10) { if (!gbIsMultiplayer && ticksElapsed > gnTickDelay * 10) {
last_tick = currentTickCount; last_tick = currentTickCount;
ticksElapsed = 0; ticksElapsed = 0;

2
Source/nthread.h

@ -21,7 +21,7 @@ extern float gfProgressToNextGameTick; // the progress as a fraction (0.0f to 1.
void nthread_terminate_game(const char *pszFcn); void nthread_terminate_game(const char *pszFcn);
DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta); DWORD nthread_send_and_recv_turn(DWORD cur_turn, int turn_delta);
bool nthread_recv_turns(bool *pfSendAsync); bool nthread_recv_turns(bool *pfSendAsync = nullptr);
void nthread_set_turn_upper_bit(); void nthread_set_turn_upper_bit();
void nthread_start(bool set_turn_upper_bit); void nthread_start(bool set_turn_upper_bit);
void nthread_cleanup(); void nthread_cleanup();

65
Source/objects.cpp

@ -1625,48 +1625,63 @@ void AddCryptObject(int i, int a2)
if (a2 > 5) { if (a2 > 5) {
switch (a2) { switch (a2) {
case 6: case 6:
if (plr[myplr]._pClass == HeroClass::Warrior) { switch (plr[myplr]._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
object[i]._oVar2 = TEXT_BOOKA; object[i]._oVar2 = TEXT_BOOKA;
} else if (plr[myplr]._pClass == HeroClass::Rogue) { break;
case HeroClass::Rogue:
object[i]._oVar2 = TEXT_RBOOKA; object[i]._oVar2 = TEXT_RBOOKA;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) { break;
case HeroClass::Sorcerer:
object[i]._oVar2 = TEXT_MBOOKA; object[i]._oVar2 = TEXT_MBOOKA;
} else if (plr[myplr]._pClass == HeroClass::Monk) { break;
case HeroClass::Monk:
object[i]._oVar2 = TEXT_OBOOKA; object[i]._oVar2 = TEXT_OBOOKA;
} else if (plr[myplr]._pClass == HeroClass::Bard) { break;
case HeroClass::Bard:
object[i]._oVar2 = TEXT_BBOOKA; object[i]._oVar2 = TEXT_BBOOKA;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) { break;
object[i]._oVar2 = TEXT_BOOKA;
} }
break; break;
case 7: case 7:
if (plr[myplr]._pClass == HeroClass::Warrior) { switch (plr[myplr]._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
object[i]._oVar2 = TEXT_BOOKB; object[i]._oVar2 = TEXT_BOOKB;
} else if (plr[myplr]._pClass == HeroClass::Rogue) { break;
case HeroClass::Rogue:
object[i]._oVar2 = TEXT_RBOOKB; object[i]._oVar2 = TEXT_RBOOKB;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) { break;
case HeroClass::Sorcerer:
object[i]._oVar2 = TEXT_MBOOKB; object[i]._oVar2 = TEXT_MBOOKB;
} else if (plr[myplr]._pClass == HeroClass::Monk) { break;
case HeroClass::Monk:
object[i]._oVar2 = TEXT_OBOOKB; object[i]._oVar2 = TEXT_OBOOKB;
} else if (plr[myplr]._pClass == HeroClass::Bard) { break;
case HeroClass::Bard:
object[i]._oVar2 = TEXT_BBOOKB; object[i]._oVar2 = TEXT_BBOOKB;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) { break;
object[i]._oVar2 = TEXT_BOOKB;
} }
break; break;
case 8: case 8:
if (plr[myplr]._pClass == HeroClass::Warrior) { switch (plr[myplr]._pClass) {
case HeroClass::Warrior:
case HeroClass::Barbarian:
object[i]._oVar2 = TEXT_BOOKC; object[i]._oVar2 = TEXT_BOOKC;
} else if (plr[myplr]._pClass == HeroClass::Rogue) { break;
case HeroClass::Rogue:
object[i]._oVar2 = TEXT_RBOOKC; object[i]._oVar2 = TEXT_RBOOKC;
} else if (plr[myplr]._pClass == HeroClass::Sorcerer) { break;
case HeroClass::Sorcerer:
object[i]._oVar2 = TEXT_MBOOKC; object[i]._oVar2 = TEXT_MBOOKC;
} else if (plr[myplr]._pClass == HeroClass::Monk) { break;
case HeroClass::Monk:
object[i]._oVar2 = TEXT_OBOOKC; object[i]._oVar2 = TEXT_OBOOKC;
} else if (plr[myplr]._pClass == HeroClass::Bard) { break;
case HeroClass::Bard:
object[i]._oVar2 = TEXT_BBOOKC; object[i]._oVar2 = TEXT_BBOOKC;
} else if (plr[myplr]._pClass == HeroClass::Barbarian) { break;
object[i]._oVar2 = TEXT_BOOKC;
} }
break; break;
} }
@ -1694,8 +1709,6 @@ void AddObject(_object_id ot, int ox, int oy)
SetupObject(oi, ox, oy, ot); SetupObject(oi, ox, oy, ot);
switch (ot) { switch (ot) {
case OBJ_L1LIGHT: case OBJ_L1LIGHT:
AddObjLight(oi, 5);
break;
case OBJ_SKFIRE: case OBJ_SKFIRE:
case OBJ_CANDLE1: case OBJ_CANDLE1:
case OBJ_CANDLE2: case OBJ_CANDLE2:
@ -2054,7 +2067,7 @@ void Obj_BCrossDamage(int i)
if (plr[myplr]._pmode == PM_DEATH) if (plr[myplr]._pmode == PM_DEATH)
return; return;
int fireResist = plr[myplr]._pFireResist; int8_t fireResist = plr[myplr]._pFireResist;
if (fireResist > 0) if (fireResist > 0)
damage[leveltype - 1] -= fireResist * damage[leveltype - 1] / 100; damage[leveltype - 1] -= fireResist * damage[leveltype - 1] / 100;
@ -2903,7 +2916,7 @@ void OperateBookLever(int pnum, int i)
ObjChangeMap(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); ObjChangeMap(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4);
if (object[i]._otype == OBJ_BLINDBOOK) { if (object[i]._otype == OBJ_BLINDBOOK) {
SpawnUnique(UITEM_OPTAMULET, Point { x, y } + Displacement { 5, 5 }); SpawnUnique(UITEM_OPTAMULET, Point { x, y } + Displacement { 5, 5 });
int tren = TransVal; int8_t tren = TransVal;
TransVal = 9; TransVal = 9;
DRLG_MRectTrans(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); DRLG_MRectTrans(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4);
TransVal = tren; TransVal = tren;
@ -5154,7 +5167,7 @@ void SyncQSTLever(int i)
if (object[i]._oAnimFrame == object[i]._oVar6) { if (object[i]._oAnimFrame == object[i]._oVar6) {
ObjChangeMapResync(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); ObjChangeMapResync(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4);
if (object[i]._otype == OBJ_BLINDBOOK) { if (object[i]._otype == OBJ_BLINDBOOK) {
int tren = TransVal; int8_t tren = TransVal;
TransVal = 9; TransVal = 9;
DRLG_MRectTrans(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4); DRLG_MRectTrans(object[i]._oVar1, object[i]._oVar2, object[i]._oVar3, object[i]._oVar4);
TransVal = tren; TransVal = tren;

9
Source/options.cpp

@ -61,20 +61,17 @@ CSimpleIni &GetIni()
int GetIniInt(const char *keyname, const char *valuename, int defaultValue) int GetIniInt(const char *keyname, const char *valuename, int defaultValue)
{ {
long value = GetIni().GetLongValue(keyname, valuename, defaultValue); return GetIni().GetLongValue(keyname, valuename, defaultValue);
return value;
} }
bool GetIniBool(const char *sectionName, const char *keyName, bool defaultValue) bool GetIniBool(const char *sectionName, const char *keyName, bool defaultValue)
{ {
bool value = GetIni().GetBoolValue(sectionName, keyName, defaultValue); return GetIni().GetBoolValue(sectionName, keyName, defaultValue);
return value;
} }
float GetIniFloat(const char *sectionName, const char *keyName, float defaultValue) float GetIniFloat(const char *sectionName, const char *keyName, float defaultValue)
{ {
const double value = GetIni().GetDoubleValue(sectionName, keyName, defaultValue); return (float)GetIni().GetDoubleValue(sectionName, keyName, defaultValue);
return (float)value;
} }
void SetIniValue(const char *keyname, const char *valuename, int value) void SetIniValue(const char *keyname, const char *valuename, int value)

16
Source/sync.cpp

@ -152,20 +152,16 @@ void SyncPlrInv(TSyncHeader *pHdr)
uint32_t sync_all_monsters(const byte *pbBuf, uint32_t dwMaxLen) uint32_t sync_all_monsters(const byte *pbBuf, uint32_t dwMaxLen)
{ {
TSyncHeader *pHdr;
int i;
bool sync;
if (nummonsters < 1) { if (nummonsters < 1) {
return dwMaxLen; return dwMaxLen;
} }
if (dwMaxLen < sizeof(*pHdr) + sizeof(TSyncMonster)) { if (dwMaxLen < sizeof(TSyncHeader) + sizeof(TSyncMonster)) {
return dwMaxLen; return dwMaxLen;
} }
pHdr = (TSyncHeader *)pbBuf; auto *pHdr = (TSyncHeader *)pbBuf;
pbBuf += sizeof(*pHdr); pbBuf += sizeof(TSyncHeader);
dwMaxLen -= sizeof(*pHdr); dwMaxLen -= sizeof(TSyncHeader);
pHdr->bCmd = CMD_SYNCDATA; pHdr->bCmd = CMD_SYNCDATA;
pHdr->bLevel = currlevel; pHdr->bLevel = currlevel;
@ -174,8 +170,8 @@ uint32_t sync_all_monsters(const byte *pbBuf, uint32_t dwMaxLen)
assert(dwMaxLen <= 0xffff); assert(dwMaxLen <= 0xffff);
SyncOneMonster(); SyncOneMonster();
for (i = 0; i < nummonsters && dwMaxLen >= sizeof(TSyncMonster); i++) { for (int i = 0; i < nummonsters && dwMaxLen >= sizeof(TSyncMonster); i++) {
sync = false; bool sync = false;
if (i < 2) { if (i < 2) {
sync = SyncMonsterActive2((TSyncMonster *)pbBuf); sync = SyncMonsterActive2((TSyncMonster *)pbBuf);
} }

5
Source/tmsg.cpp

@ -15,9 +15,8 @@ TMsg *sgpTimedMsgHead;
} // namespace } // namespace
int tmsg_get(byte *pbMsg) size_t tmsg_get(byte *pbMsg)
{ {
int len;
TMsg *head; TMsg *head;
if (sgpTimedMsgHead == nullptr) if (sgpTimedMsgHead == nullptr)
@ -27,7 +26,7 @@ int tmsg_get(byte *pbMsg)
return 0; return 0;
head = sgpTimedMsgHead; head = sgpTimedMsgHead;
sgpTimedMsgHead = head->hdr.pNext; sgpTimedMsgHead = head->hdr.pNext;
len = head->hdr.bLen; size_t len = head->hdr.bLen;
// BUGFIX: ignores dwMaxLen // BUGFIX: ignores dwMaxLen
memcpy(pbMsg, head->body, len); memcpy(pbMsg, head->body, len);
std::free(head); std::free(head);

2
Source/tmsg.h

@ -26,7 +26,7 @@ struct TMsg {
}; };
#pragma pack(pop) #pragma pack(pop)
int tmsg_get(byte *pbMsg); size_t tmsg_get(byte *pbMsg);
void tmsg_add(byte *pbMsg, uint8_t bLen); void tmsg_add(byte *pbMsg, uint8_t bLen);
void tmsg_start(); void tmsg_start();
void tmsg_cleanup(); void tmsg_cleanup();

8
Source/utils/thread.cpp

@ -11,12 +11,14 @@ namespace devilution {
static int SDLCALL ThreadTranslate(void *ptr) static int SDLCALL ThreadTranslate(void *ptr)
{ {
auto handler = (unsigned int (*)(void *))ptr; auto handler = (void (*)())ptr;
return handler(nullptr); handler();
return 0;
} }
SDL_Thread *CreateThread(unsigned int (*handler)(void *), SDL_threadID *threadId) SDL_Thread *CreateThread(void (*handler)(), SDL_threadID *threadId)
{ {
#ifdef USE_SDL1 #ifdef USE_SDL1
SDL_Thread *ret = SDL_CreateThread(ThreadTranslate, (void *)handler); SDL_Thread *ret = SDL_CreateThread(ThreadTranslate, (void *)handler);

2
Source/utils/thread.h

@ -18,6 +18,6 @@ void EndEvent(event_emul *event);
void SetEvent(event_emul *e); void SetEvent(event_emul *e);
void ResetEvent(event_emul *e); void ResetEvent(event_emul *e);
int WaitForEvent(event_emul *e); int WaitForEvent(event_emul *e);
SDL_Thread *CreateThread(unsigned int (*handler)(void *), SDL_threadID *ThreadID); SDL_Thread *CreateThread(void (*handler)(), SDL_threadID *ThreadID);
} // namespace devilution } // namespace devilution

Loading…
Cancel
Save