From 27b40436a9552abb4be7601a5ecda2f0efe38ed4 Mon Sep 17 00:00:00 2001 From: Robin Eklind Date: Fri, 14 Feb 2020 14:41:51 +0100 Subject: [PATCH] Use pointers instead of references for Devilution exported API With this change, all exported declarations of Devilution are now compatible with the C-ABI; that is, all declarations of Source/*.h. This makes it possible to link against DevilutionX from mods written in other languages than C++, for instance Rust, Go or Python. Updates #612. --- Source/items.cpp | 8 ++--- Source/items.h | 2 +- Source/missiles.cpp | 4 +-- Source/monster.cpp | 78 ++++++++++++++++++++++----------------------- Source/monster.h | 6 ++-- Source/objects.cpp | 20 ++++++------ Source/objects.h | 2 +- Source/player.cpp | 2 +- Source/towners.cpp | 26 +++++++-------- Source/towners.h | 2 +- 10 files changed, 75 insertions(+), 75 deletions(-) diff --git a/Source/items.cpp b/Source/items.cpp index 69b730a87..1861dc5e9 100644 --- a/Source/items.cpp +++ b/Source/items.cpp @@ -1073,16 +1073,16 @@ void GetSuperItemSpace(int x, int y, char inum) } } -void GetSuperItemLoc(int x, int y, int &xx, int &yy) +void GetSuperItemLoc(int x, int y, int *xx, int *yy) { int i, j, k; for (k = 1; k < 50; k++) { for (j = -k; j <= k; j++) { - yy = y + j; + *yy = y + j; for (i = -k; i <= k; i++) { - xx = i + x; - if (ItemSpaceOk(xx, yy)) { + *xx = i + x; + if (ItemSpaceOk(*xx, *yy)) { return; } } diff --git a/Source/items.h b/Source/items.h index 4440b0e84..175ef51d5 100644 --- a/Source/items.h +++ b/Source/items.h @@ -35,7 +35,7 @@ void CreatePlrItems(int p); BOOL ItemSpaceOk(int i, int j); BOOL GetItemSpace(int x, int y, char inum); void GetSuperItemSpace(int x, int y, char inum); -void GetSuperItemLoc(int x, int y, int &xx, int &yy); +void GetSuperItemLoc(int x, int y, int *xx, int *yy); void CalcItemValue(int i); void GetBookSpell(int i, int lvl); void GetStaffPower(int i, int lvl, int bs, BOOL onlygood); diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 588233104..be3fe2844 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -510,7 +510,7 @@ BOOL MonsterTrapHit(int m, int mindam, int maxdam, int dist, int t, BOOLEAN shif hper = 5; if (hper > 95) hper = 95; - if (CheckMonsterHit(m, ret)) { + if (CheckMonsterHit(m, &ret)) { return ret; } #ifdef _DEBUG @@ -608,7 +608,7 @@ BOOL MonsterMHit(int pnum, int m, int mindam, int maxdam, int dist, int t, BOOLE hper = 95; if (monster[m]._mmode == MM_STONE) hit = 0; - if (CheckMonsterHit(m, ret)) + if (CheckMonsterHit(m, &ret)) return ret; #ifdef _DEBUG if (hit >= hper && !debug_mode_key_inverted_v && !debug_mode_dollar_sign) diff --git a/Source/monster.cpp b/Source/monster.cpp index e0568cade..00bafcdc1 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1085,14 +1085,14 @@ int AddMonster(int x, int y, int dir, int mtype, BOOL InMap) return -1; } -void NewMonsterAnim(int i, AnimStruct &anim, int md) +void NewMonsterAnim(int i, AnimStruct *anim, int md) { MonsterStruct *Monst = monster + i; - Monst->_mAnimData = anim.Data[md]; - Monst->_mAnimLen = anim.Frames; + Monst->_mAnimData = anim->Data[md]; + Monst->_mAnimLen = anim->Frames; Monst->_mAnimCnt = 0; Monst->_mAnimFrame = 1; - Monst->_mAnimDelay = anim.Rate; + Monst->_mAnimDelay = anim->Rate; Monst->_mFlags &= ~(MFLAG_LOCK_ANIMATION | MFLAG_ALLOW_SPECIAL); Monst->_mdir = md; } @@ -1236,9 +1236,9 @@ void M_StartStand(int i, int md) { ClearMVars(i); if (monster[i].MType->mtype == MT_GOLEM) - NewMonsterAnim(i, monster[i].MType->Anims[MA_WALK], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_WALK], md); else - NewMonsterAnim(i, monster[i].MType->Anims[MA_STAND], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_STAND], md); monster[i]._mVar1 = monster[i]._mmode; monster[i]._mVar2 = 0; monster[i]._mmode = MM_STAND; @@ -1267,7 +1267,7 @@ void M_StartDelay(int i, int len) void M_StartSpStand(int i, int md) { - NewMonsterAnim(i, monster[i].MType->Anims[MA_SPECIAL], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md); monster[i]._mmode = MM_SPSTAND; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1296,7 +1296,7 @@ void M_StartWalk(int i, int xvel, int yvel, int xadd, int yadd, int EndDir) monster[i]._mVar2 = yadd; monster[i]._mVar3 = EndDir; monster[i]._mdir = EndDir; - NewMonsterAnim(i, monster[i].MType->Anims[MA_WALK], EndDir); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_WALK], EndDir); monster[i]._mVar6 = 0; monster[i]._mVar7 = 0; monster[i]._mVar8 = 0; @@ -1327,7 +1327,7 @@ void M_StartWalk2(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int y monster[i]._myvel = yvel; monster[i]._mVar3 = EndDir; monster[i]._mdir = EndDir; - NewMonsterAnim(i, monster[i].MType->Anims[MA_WALK], EndDir); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_WALK], EndDir); monster[i]._mVar6 = 16 * xoff; monster[i]._mVar7 = 16 * yoff; monster[i]._mVar8 = 0; @@ -1362,7 +1362,7 @@ void M_StartWalk3(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int y monster[i]._mVar2 = fy; monster[i]._mVar3 = EndDir; monster[i]._mdir = EndDir; - NewMonsterAnim(i, monster[i].MType->Anims[MA_WALK], EndDir); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_WALK], EndDir); monster[i]._mVar6 = 16 * xoff; monster[i]._mVar7 = 16 * yoff; monster[i]._mVar8 = 0; @@ -1372,7 +1372,7 @@ void M_StartWalk3(int i, int xvel, int yvel, int xoff, int yoff, int xadd, int y void M_StartAttack(int i) { int md = M_GetDir(i); - NewMonsterAnim(i, monster[i].MType->Anims[MA_ATTACK], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_ATTACK], md); monster[i]._mmode = MM_ATTACK; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1387,7 +1387,7 @@ void M_StartAttack(int i) void M_StartRAttack(int i, int missile_type, int dam) { int md = M_GetDir(i); - NewMonsterAnim(i, monster[i].MType->Anims[MA_ATTACK], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_ATTACK], md); monster[i]._mmode = MM_RATTACK; monster[i]._mVar1 = missile_type; monster[i]._mVar2 = dam; @@ -1404,7 +1404,7 @@ void M_StartRAttack(int i, int missile_type, int dam) void M_StartRSpAttack(int i, int missile_type, int dam) { int md = M_GetDir(i); - NewMonsterAnim(i, monster[i].MType->Anims[MA_SPECIAL], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md); monster[i]._mmode = MM_RSPATTACK; monster[i]._mVar1 = missile_type; monster[i]._mVar2 = 0; @@ -1422,7 +1422,7 @@ void M_StartRSpAttack(int i, int missile_type, int dam) void M_StartSpAttack(int i) { int md = M_GetDir(i); - NewMonsterAnim(i, monster[i].MType->Anims[MA_SPECIAL], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md); monster[i]._mmode = MM_SATTACK; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1436,7 +1436,7 @@ void M_StartSpAttack(int i) void M_StartEat(int i) { - NewMonsterAnim(i, monster[i].MType->Anims[MA_SPECIAL], monster[i]._mdir); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], monster[i]._mdir); monster[i]._mmode = MM_SATTACK; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1478,7 +1478,7 @@ void M_GetKnockback(int i) M_ClearSquares(i); monster[i]._moldx += offset_x[d]; monster[i]._moldy += offset_y[d]; - NewMonsterAnim(i, monster[i].MType->Anims[MA_GOTHIT], monster[i]._mdir); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_GOTHIT], monster[i]._mdir); monster[i]._mmode = MM_GOTHIT; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1518,7 +1518,7 @@ void M_StartHit(int i, int pnum, int dam) monster[i]._mgoal = MGOAL_NORMAL; } if (monster[i]._mmode != MM_STONE) { - NewMonsterAnim(i, monster[i].MType->Anims[MA_GOTHIT], monster[i]._mdir); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_GOTHIT], monster[i]._mdir); monster[i]._mmode = MM_GOTHIT; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1555,7 +1555,7 @@ void M_DiabloDeath(int i, BOOL sendmsg) continue; pmonster = monster + k; - NewMonsterAnim(k, pmonster->MType->Anims[MA_DEATH], pmonster->_mdir); + NewMonsterAnim(k, &pmonster->MType->Anims[MA_DEATH], pmonster->_mdir); monster[k]._mxoff = 0; monster[k]._myoff = 0; monster[k]._mVar1 = 0; @@ -1615,7 +1615,7 @@ void M2MStartHit(int mid, int i, int dam) if (monster[mid]._mmode != MM_STONE) { if (monster[mid].MType->mtype != MT_GOLEM) { - NewMonsterAnim(mid, monster[mid].MType->Anims[MA_GOTHIT], monster[mid]._mdir); + NewMonsterAnim(mid, &monster[mid].MType->Anims[MA_GOTHIT], monster[mid]._mdir); monster[mid]._mmode = MM_GOTHIT; } @@ -1665,7 +1665,7 @@ void MonstStartKill(int i, int pnum, BOOL sendmsg) else md = monster[i]._mdir; monster[i]._mdir = md; - NewMonsterAnim(i, monster[i].MType->Anims[MA_DEATH], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_DEATH], md); monster[i]._mmode = MM_DEATH; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1722,7 +1722,7 @@ void M2MStartKill(int i, int mid) md = 0; monster[mid]._mdir = md; - NewMonsterAnim(mid, monster[mid].MType->Anims[MA_DEATH], md); + NewMonsterAnim(mid, &monster[mid].MType->Anims[MA_DEATH], md); monster[mid]._mmode = MM_DEATH; monster[mid]._mxoff = 0; monster[mid]._myoff = 0; @@ -1789,7 +1789,7 @@ void M_StartFadein(int i, int md, BOOL backwards) if (monster[i].MType == NULL) app_fatal("M_StartFadein: Monster %d \"%s\" MType NULL", i, monster[i].mName); - NewMonsterAnim(i, monster[i].MType->Anims[MA_SPECIAL], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md); monster[i]._mmode = MM_FADEIN; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -1813,7 +1813,7 @@ void M_StartFadeout(int i, int md, BOOL backwards) if (monster[i].MType == NULL) app_fatal("M_StartFadeout: Monster %d \"%s\" MType NULL", i, monster[i].mName); - NewMonsterAnim(i, monster[i].MType->Anims[MA_SPECIAL], md); + NewMonsterAnim(i, &monster[i].MType->Anims[MA_SPECIAL], md); monster[i]._mmode = MM_FADEOUT; monster[i]._mxoff = 0; monster[i]._myoff = 0; @@ -2010,7 +2010,7 @@ void M_TryM2MHit(int i, int mid, int hper, int mind, int maxd) int hit = random_(4, 100); if (monster[mid]._mmode == MM_STONE) hit = 0; - if (!CheckMonsterHit(mid, ret) && hit < hper) { + if (!CheckMonsterHit(mid, &ret) && hit < hper) { int dam = (mind + random_(5, maxd - mind + 1)) << 6; monster[mid]._mhitpoints -= dam; if (monster[mid]._mhitpoints >> 6 <= 0) { @@ -2867,11 +2867,11 @@ BOOL M_DumbWalk(int i, int md) return ok; } -BOOL M_RoundWalk(int i, int md, int &dir) +BOOL M_RoundWalk(int i, int md, int *dir) { int mdtemp; BOOL ok; - if (dir) + if (*dir) md = left[left[md]]; else md = right[right[md]]; @@ -2879,7 +2879,7 @@ BOOL M_RoundWalk(int i, int md, int &dir) ok = DirOK(i, md); mdtemp = md; if (!ok) { - if (dir) { + if (*dir) { md = right[mdtemp]; ok = DirOK(i, md) || (md = right[right[mdtemp]], DirOK(i, md)); } else { @@ -2890,7 +2890,7 @@ BOOL M_RoundWalk(int i, int md, int &dir) if (ok) { M_WalkDir(i, md); } else { - dir = !dir; + *dir = !*dir; ok = M_CallWalk(i, opposite[mdtemp]); } return ok; @@ -3507,7 +3507,7 @@ void MAI_Round(int i, BOOL special) dist = abs(my); if (Monst->_mgoalvar1++ >= 2 * dist && DirOK(i, md) || dTransVal[Monst->_mx][Monst->_my] != dTransVal[fx][fy]) { Monst->_mgoal = MGOAL_NORMAL; - } else if (!M_RoundWalk(i, md, Monst->_mgoalvar2)) { + } else if (!M_RoundWalk(i, md, &Monst->_mgoalvar2)) { M_StartDelay(i, random_(125, 10) + 10); } } @@ -3765,7 +3765,7 @@ void MAI_RoundRanged(int i, int missile_type, BOOL checkdoors, int dam, int less && (LineClear(Monst->_mx, Monst->_my, fx, fy))) { M_StartRSpAttack(i, missile_type, dam); } else { - M_RoundWalk(i, md, Monst->_mgoalvar2); + M_RoundWalk(i, md, &Monst->_mgoalvar2); } } } else { @@ -3854,7 +3854,7 @@ void MAI_RR2(int i, int mistype, int dam) } if (Monst->_mgoalvar1++ < 2 * dist || !DirOK(i, md)) { if (v < 5 * (Monst->_mint + 16)) - M_RoundWalk(i, md, Monst->_mgoalvar2); + M_RoundWalk(i, md, &Monst->_mgoalvar2); } else Monst->_mgoal = MGOAL_NORMAL; } @@ -4004,7 +4004,7 @@ void MAI_SkelKing(int i) } if (Monst->_mgoalvar1++ >= 2 * dist && DirOK(i, md) || dTransVal[Monst->_mx][Monst->_my] != dTransVal[fx][fy]) { Monst->_mgoal = MGOAL_NORMAL; - } else if (!M_RoundWalk(i, md, Monst->_mgoalvar2)) { + } else if (!M_RoundWalk(i, md, &Monst->_mgoalvar2)) { M_StartDelay(i, random_(125, 10) + 10); } } @@ -4072,7 +4072,7 @@ void MAI_Rhino(int i) } if (Monst->_mgoalvar1++ >= 2 * dist || dTransVal[Monst->_mx][Monst->_my] != dTransVal[fx][fy]) { Monst->_mgoal = MGOAL_NORMAL; - } else if (!M_RoundWalk(i, md, Monst->_mgoalvar2)) { + } else if (!M_RoundWalk(i, md, &Monst->_mgoalvar2)) { M_StartDelay(i, random_(125, 10) + 10); } } @@ -4142,7 +4142,7 @@ void MAI_Counselor(int i) dist = abs(my); if ((abs(mx) >= 2 || abs(my) >= 2) && Monst->_msquelch == UCHAR_MAX && dTransVal[Monst->_mx][Monst->_my] == dTransVal[fx][fy]) { if (Monst->_mgoalvar1++ < 2 * dist || !DirOK(i, md)) { - M_RoundWalk(i, md, Monst->_mgoalvar2); + M_RoundWalk(i, md, &Monst->_mgoalvar2); } else { Monst->_mgoal = MGOAL_NORMAL; M_StartFadein(i, md, TRUE); @@ -5444,14 +5444,14 @@ 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(QTYPE_BOL) && quests[QTYPE_BOL]._qvar1 == 2 && PlrHasItem(pnum, IDI_BANNER, &itm) != NULL) { RemoveInvItem(pnum, itm); quests[QTYPE_BOL]._qactive = 3; Monst->mtalkmsg = QUEST_BANNER12; Monst->_mgoal = MGOAL_INQUIRING; } if (QuestStatus(QTYPE_VEIL) && Monst->mtalkmsg >= QUEST_VEIL9) { - if (PlrHasItem(pnum, IDI_GLDNELIX, itm)) { + if (PlrHasItem(pnum, IDI_GLDNELIX, &itm) != NULL) { RemoveInvItem(pnum, itm); Monst->mtalkmsg = QUEST_VEIL11; Monst->_mgoal = MGOAL_INQUIRING; @@ -5506,7 +5506,7 @@ BOOL CanTalkToMonst(int m) return monster[m]._mgoal == MGOAL_TALKING; } -BOOL CheckMonsterHit(int m, BOOL &ret) +BOOL CheckMonsterHit(int m, BOOL *ret) { if ((DWORD)m >= MAXMONSTERS) { app_fatal("CheckMonsterHit: Invalid monster %d", m); @@ -5515,14 +5515,14 @@ BOOL CheckMonsterHit(int m, BOOL &ret) if (monster[m]._mAi == AI_GARG && monster[m]._mFlags & MFLAG_ALLOW_SPECIAL) { monster[m]._mmode = MM_SATTACK; monster[m]._mFlags &= ~MFLAG_ALLOW_SPECIAL; - ret = TRUE; + *ret = TRUE; return TRUE; } if (monster[m].MType->mtype < MT_COUNSLR || monster[m].MType->mtype > MT_ADVOCATE || monster[m]._mgoal == MGOAL_NORMAL) { return FALSE; } else { - ret = FALSE; + *ret = FALSE; } return TRUE; diff --git a/Source/monster.h b/Source/monster.h index 4411b223a..acd8477f9 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -33,7 +33,7 @@ void PlaceUniques(); void SetMapMonsters(BYTE *pMap, int startx, int starty); void DeleteMonster(int i); int AddMonster(int x, int y, int dir, int mtype, BOOL InMap); -void NewMonsterAnim(int i, AnimStruct &anim, int md); +void NewMonsterAnim(int i, AnimStruct *anim, int md); BOOL M_Ranged(int i); BOOL M_Talker(int i); void M_Enemy(int i); @@ -92,7 +92,7 @@ BOOL M_CallWalk(int i, int md); BOOL M_PathWalk(int i); BOOL M_CallWalk2(int i, int md); BOOL M_DumbWalk(int i, int md); -BOOL M_RoundWalk(int i, int md, int &dir); +BOOL M_RoundWalk(int i, int md, int *dir); void MAI_Zombie(int i); void MAI_SkelSd(int i); BOOL MAI_Path(int i); @@ -156,7 +156,7 @@ int PreSpawnSkeleton(); void TalktoMonster(int i); void SpawnGolum(int i, int x, int y, int mi); BOOL CanTalkToMonst(int m); -BOOL CheckMonsterHit(int m, BOOL &ret); +BOOL CheckMonsterHit(int m, BOOL *ret); int encode_enemy(int m); void decode_enemy(int m, int enemy); diff --git a/Source/objects.cpp b/Source/objects.cpp index c8779a6d9..33242a8e6 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -1274,7 +1274,7 @@ void AddTorturedBody(int i) object[i]._oPreFlag = TRUE; } -void GetRndObjLoc(int randarea, int &xx, int &yy) +void GetRndObjLoc(int randarea, int *xx, int *yy) { BOOL failed; int i, j, tries; @@ -1287,12 +1287,12 @@ void GetRndObjLoc(int randarea, int &xx, int &yy) tries++; if (tries > 1000 && randarea > 1) randarea--; - xx = random_(0, MAXDUNX); - yy = random_(0, MAXDUNY); + *xx = random_(0, MAXDUNX); + *yy = random_(0, MAXDUNY); failed = FALSE; for (i = 0; i < randarea && !failed; i++) { for (j = 0; j < randarea && !failed; j++) { - failed = !RndLocOk(i + xx, j + yy); + failed = !RndLocOk(i + *xx, j + *yy); } } if (!failed) @@ -1307,7 +1307,7 @@ void AddMushPatch() if (nobjects < MAXOBJECTS) { i = objectavail[0]; - GetRndObjLoc(5, x, y); + GetRndObjLoc(5, &x, &y); dObject[x + 1][y + 1] = -1 - i; dObject[x + 2][y + 1] = -1 - i; dObject[x + 1][y + 2] = -1 - i; @@ -1319,7 +1319,7 @@ void AddSlainHero() { int x, y; - GetRndObjLoc(5, x, y); + GetRndObjLoc(5, &x, &y); AddObject(OBJ_SLAINHERO, x + 2, y + 2); } @@ -2598,7 +2598,7 @@ void OperateMushPatch(int pnum, int i) object[i]._oSelFlag = 0; object[i]._oAnimFrame++; if (!deltaload) { - GetSuperItemLoc(object[i]._ox, object[i]._oy, x, y); + GetSuperItemLoc(object[i]._ox, object[i]._oy, &x, &y); SpawnQuestItem(IDI_MUSHROOM, x, y, 0, 0); quests[QTYPE_BLKM]._qvar1 = QS_MUSHSPAWNED; } @@ -2629,7 +2629,7 @@ void OperateInnSignChest(int pnum, int i) object[i]._oAnimFrame += 2; object[i]._oSelFlag = 0; if (!deltaload) { - GetSuperItemLoc(object[i]._ox, object[i]._oy, x, y); + GetSuperItemLoc(object[i]._ox, object[i]._oy, &x, &y); SpawnQuestItem(IDI_BANNER, x, y, 0, 0); } } @@ -2745,7 +2745,7 @@ void OperatePedistal(int pnum, int i) int iv; if (object[i]._oVar6 != 3) { - if (PlrHasItem(pnum, IDI_BLDSTONE, iv)) { + if (PlrHasItem(pnum, IDI_BLDSTONE, &iv) != NULL) { RemoveInvItem(pnum, iv); object[i]._oAnimFrame++; object[i]._oVar6++; @@ -3720,7 +3720,7 @@ void OperateLazStand(int pnum, int i) if (object[i]._oSelFlag != 0 && !deltaload && !qtextflag && pnum == myplr) { object[i]._oAnimFrame++; object[i]._oSelFlag = 0; - GetSuperItemLoc(object[i]._ox, object[i]._oy, xx, yy); + GetSuperItemLoc(object[i]._ox, object[i]._oy, &xx, &yy); SpawnQuestItem(IDI_LAZSTAFF, xx, yy, 0, 0); } } diff --git a/Source/objects.h b/Source/objects.h index 0281f1251..9c2c10f2b 100644 --- a/Source/objects.h +++ b/Source/objects.h @@ -75,7 +75,7 @@ void AddPedistal(int i); void AddStoryBook(int i); void AddWeaponRack(int i); void AddTorturedBody(int i); -void GetRndObjLoc(int randarea, int &xx, int &yy); +void GetRndObjLoc(int randarea, int *xx, int *yy); void AddMushPatch(); void AddSlainHero(); void AddObject(int ot, int ox, int oy); diff --git a/Source/player.cpp b/Source/player.cpp index 5a73bc764..bc9c14653 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -2401,7 +2401,7 @@ BOOL PlrHitMonst(int pnum, int m) hper = 95; } - if (CheckMonsterHit(m, ret)) { + if (CheckMonsterHit(m, &ret)) { return ret; } #ifdef _DEBUG diff --git a/Source/towners.cpp b/Source/towners.cpp index ce174867f..38c8b7ab6 100644 --- a/Source/towners.cpp +++ b/Source/towners.cpp @@ -554,11 +554,11 @@ void ProcessTowners() } } -ItemStruct *PlrHasItem(int pnum, int item, int &i) +ItemStruct *PlrHasItem(int pnum, int item, int *i) { - for (i = 0; i < plr[pnum]._pNumInv; i++) { - if (plr[pnum].InvList[i].IDidx == item) - return &plr[pnum].InvList[i]; + for (*i = 0; *i < plr[pnum]._pNumInv; (*i)++) { + if (plr[pnum].InvList[*i].IDidx == item) + return &plr[pnum].InvList[*i]; } return NULL; @@ -647,7 +647,7 @@ void TalkToTowner(int p, int t) InitQTextMsg(QUEST_BANNER2); towner[t]._tMsgSaid = TRUE; } - if (quests[QTYPE_BOL]._qvar2 == 1 && PlrHasItem(p, IDI_BANNER, i) != NULL && !towner[t]._tMsgSaid) { + 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; RemoveInvItem(p, i); @@ -711,7 +711,7 @@ void TalkToTowner(int p, int t) InitQTextMsg(QUEST_INFRA5); towner[t]._tMsgSaid = TRUE; } - if (quests[QTYPE_INFRA]._qvar2 == 1 && PlrHasItem(p, IDI_ROCK, i) != NULL && !towner[t]._tMsgSaid) { + 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; @@ -738,7 +738,7 @@ void TalkToTowner(int p, int t) towner[t]._tMsgSaid = TRUE; } } - if (quests[QTYPE_ANVIL]._qvar2 == 1 && PlrHasItem(p, IDI_ANVIL, i) != NULL) { + if (quests[QTYPE_ANVIL]._qvar2 == 1 && PlrHasItem(p, IDI_ANVIL, &i) != NULL) { if (!towner[t]._tMsgSaid) { quests[QTYPE_ANVIL]._qactive = 3; quests[QTYPE_ANVIL]._qvar2 = 2; @@ -760,7 +760,7 @@ void TalkToTowner(int p, int t) } } } else if (t == GetActiveTowner(TOWN_WITCH)) { - if (quests[QTYPE_BLKM]._qactive == 1 && PlrHasItem(p, IDI_FUNGALTM, i) != NULL) { + if (quests[QTYPE_BLKM]._qactive == 1 && PlrHasItem(p, IDI_FUNGALTM, &i) != NULL) { RemoveInvItem(p, i); quests[QTYPE_BLKM]._qactive = 2; quests[QTYPE_BLKM]._qlog = TRUE; @@ -771,7 +771,7 @@ void TalkToTowner(int p, int t) towner[t]._tMsgSaid = TRUE; } else if (quests[QTYPE_BLKM]._qactive == 2) { if (quests[QTYPE_BLKM]._qvar1 >= 2 && quests[QTYPE_BLKM]._qvar1 <= 4) { - if (PlrHasItem(p, IDI_MUSHROOM, i) != NULL) { + if (PlrHasItem(p, IDI_MUSHROOM, &i) != NULL) { RemoveInvItem(p, i); quests[QTYPE_BLKM]._qvar1 = 5; Qtalklist[TOWN_HEALER]._qblkm = QUEST_MUSH3; @@ -789,7 +789,7 @@ void TalkToTowner(int p, int t) towner[t]._tMsgSaid = TRUE; } } else { - Item = PlrHasItem(p, IDI_SPECELIX, i); + Item = PlrHasItem(p, IDI_SPECELIX, &i); if (Item != NULL) { towner[t]._tbtcnt = 150; towner[t]._tVar1 = p; @@ -797,7 +797,7 @@ void TalkToTowner(int p, int t) quests[QTYPE_BLKM]._qactive = 3; 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[QTYPE_BLKM]._qvar2 != QUEST_MUSH11) { towner[t]._tbtcnt = 150; towner[t]._tVar1 = p; quests[QTYPE_BLKM]._qvar2 = QUEST_MUSH11; @@ -847,7 +847,7 @@ void TalkToTowner(int p, int t) towner[t]._tMsgSaid = TRUE; } } - if (quests[QTYPE_BLKM]._qactive == 2 && quests[QTYPE_BLKM]._qmsg == QUEST_MUSH10 && PlrHasItem(p, IDI_BRAIN, i) != NULL) { + if (quests[QTYPE_BLKM]._qactive == 2 && quests[QTYPE_BLKM]._qmsg == QUEST_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); @@ -870,7 +870,7 @@ void TalkToTowner(int p, int t) } } else if (t == GetActiveTowner(TOWN_STORY)) { if (gbMaxPlayers == 1) { - if (quests[QTYPE_VB]._qactive == 1 && PlrHasItem(p, IDI_LAZSTAFF, i) != NULL) { + if (quests[QTYPE_VB]._qactive == 1 && PlrHasItem(p, IDI_LAZSTAFF, &i) != NULL) { RemoveInvItem(p, i); quests[QTYPE_VB]._qvar1 = 2; towner[t]._tbtcnt = 150; diff --git a/Source/towners.h b/Source/towners.h index fccb6eb18..310d84e3c 100644 --- a/Source/towners.h +++ b/Source/towners.h @@ -33,7 +33,7 @@ void TownWitch(); void TownBarMaid(); void TownCow(); void ProcessTowners(); -ItemStruct *PlrHasItem(int pnum, int item, int &i); +ItemStruct *PlrHasItem(int pnum, int item, int *i); void TownerTalk(int first, int t); void TalkToTowner(int p, int t); void CowSFX(int pnum);