Browse Source

Set _micaster type to mienemy_type

Rino never made use of the player id, so no reason to abuse _micaster
pull/2679/head
Anders Jenbo 5 years ago
parent
commit
96b19ca8d5
  1. 2
      Source/loadsave.cpp
  2. 8
      Source/missiles.cpp
  3. 5
      Source/missiles.h
  4. 8
      Source/monster.cpp
  5. 8
      Source/objects.cpp

2
Source/loadsave.cpp

@ -670,7 +670,7 @@ void LoadMissile(LoadHelper *file, int i)
pMissile->_miUniqTrans = file->NextLE<uint32_t>();
pMissile->_mirange = file->NextLE<int32_t>();
pMissile->_misource = file->NextLE<int32_t>();
pMissile->_micaster = file->NextLE<int32_t>();
pMissile->_micaster = static_cast<mienemy_type>(file->NextLE<int32_t>());
pMissile->_midam = file->NextLE<int32_t>();
pMissile->_miHitFlag = file->NextBool32();
pMissile->_midist = file->NextLE<int32_t>();

8
Source/missiles.cpp

@ -1921,7 +1921,7 @@ void AddFirebolt(MissileStruct &missile, Point dst, int midir)
dst += static_cast<Direction>(midir);
}
int sp = 26;
if (missile._micaster == 0) {
if (missile._micaster == TARGET_MONSTERS) {
sp = 16;
if (missile._misource != -1) {
sp += std::min(missile._mispllvl * 2, 47);
@ -2078,7 +2078,7 @@ void AddLightning(MissileStruct &missile, Point dst, int midir)
void AddMisexp(MissileStruct &missile, Point dst, int /*midir*/)
{
if (missile._micaster != 0 && missile._misource >= 0) {
if (missile._micaster != TARGET_MONSTERS && missile._misource >= 0) {
switch (Monsters[missile._misource].MType->mtype) {
case MT_SUCCUBUS:
SetMissAnim(missile, MFILE_FLAREEXP);
@ -2735,7 +2735,7 @@ void AddFlamec(MissileStruct &missile, Point dst, int midir)
void AddCbolt(MissileStruct &missile, Point dst, int midir)
{
missile._mirnd = GenerateRnd(15) + 1;
missile._midam = (missile._micaster == 0) ? (GenerateRnd(Players[missile._misource]._pMagic / 4) + 1) : 15;
missile._midam = (missile._micaster == TARGET_MONSTERS) ? (GenerateRnd(Players[missile._misource]._pMagic / 4) + 1) : 15;
if (missile.position.start == dst) {
dst += static_cast<Direction>(midir);
@ -2860,7 +2860,7 @@ bool CanAddEffect(int playerId, missile_id type)
} // namespace
int AddMissile(Point src, Point dst, int midir, missile_id mitype, int8_t micaster, int id, int midam, int spllvl)
int AddMissile(Point src, Point dst, int midir, missile_id mitype, mienemy_type micaster, int id, int midam, int spllvl)
{
if (ActiveMissileCount >= MAXMISSILES - 1)
return -1;

5
Source/missiles.h

@ -110,8 +110,7 @@ struct MissileStruct {
uint32_t _miUniqTrans;
int _mirange; // Time to live for the missile in game ticks, oncs 0 the missile will be marked for deletion via _miDelFlag
int _misource;
/** mienemy_type or player id*/
int8_t _micaster;
mienemy_type _micaster;
int _midam;
bool _miHitFlag;
int _midist; // Used for arrows to measure distance travelled (increases by 1 each game tick). Higher value is a penalty for accuracy calculation when hitting enemy
@ -217,7 +216,7 @@ void AddTelekinesis(MissileStruct &missile, Point dst, int midir);
void AddBoneSpirit(MissileStruct &missile, Point dst, int midir);
void AddRportal(MissileStruct &missile, Point dst, int midir);
void AddDiabApoca(MissileStruct &missile, Point dst, int midir);
int AddMissile(Point src, Point dst, int midir, missile_id mitype, int8_t micaster, int id, int midam, int spllvl);
int AddMissile(Point src, Point dst, int midir, missile_id mitype, mienemy_type micaster, int id, int midam, int spllvl);
void MI_Golem(int mi);
void MI_Manashield(int i);
void MI_LArrow(int i);

8
Source/monster.cpp

@ -2570,7 +2570,7 @@ void RhinoAi(int i)
if (dist >= 5
&& v < 2 * monster._mint + 43
&& LineClear([&monster](Point position) { return IsTileAvailable(monster, position); }, monster.position.tile, { fx, fy })) {
if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, monster._menemy, i, 0, 0) != -1) {
if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, TARGET_PLAYERS, i, 0, 0) != -1) {
if (monster.MData->snd_special)
PlayEffect(monster, 3);
dMonster[monster.position.tile.x][monster.position.tile.y] = -(i + 1);
@ -2744,7 +2744,6 @@ void BatAi(int i)
assert(i >= 0 && i < MAXMONSTERS);
auto &monster = Monsters[i];
int pnum = monster._menemy;
if (monster._mmode != MM_STAND || monster._msquelch == 0) {
return;
}
@ -2774,7 +2773,7 @@ void BatAi(int i)
&& (abs(xd) >= 5 || abs(yd) >= 5)
&& v < 4 * monster._mint + 33
&& LineClear([&monster](Point position) { return IsTileAvailable(monster, position); }, monster.position.tile, { fx, fy })) {
if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, pnum, i, 0, 0) != -1) {
if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, TARGET_PLAYERS, i, 0, 0) != -1) {
dMonster[monster.position.tile.x][monster.position.tile.y] = -(i + 1);
monster._mmode = MM_CHARGE;
}
@ -3037,7 +3036,6 @@ void SnakeAi(int i)
auto &monster = Monsters[i];
char pattern[6] = { 1, 1, 0, -1, -1, 0 };
int pnum = monster._menemy;
if (monster._mmode != MM_STAND || monster._msquelch == 0)
return;
int fx = monster.enemyPosition.x;
@ -3048,7 +3046,7 @@ void SnakeAi(int i)
monster._mdir = md;
if (abs(mx) >= 2 || abs(my) >= 2) {
if (abs(mx) < 3 && abs(my) < 3 && LineClear([&monster](Point position) { return IsTileAvailable(monster, position); }, monster.position.tile, { fx, fy }) && monster._mVar1 != MM_CHARGE) {
if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, pnum, i, 0, 0) != -1) {
if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, TARGET_PLAYERS, i, 0, 0) != -1) {
PlayEffect(monster, 0);
dMonster[monster.position.tile.x][monster.position.tile.y] = -(i + 1);
monster._mmode = MM_CHARGE;

8
Source/objects.cpp

@ -2772,7 +2772,7 @@ bool OperateShrineMagical(int pnum)
player.position.tile,
player._pdir,
MIS_MANASHIELD,
-1,
TARGET_PLAYERS,
pnum,
0,
2 * leveltype);
@ -2947,7 +2947,7 @@ bool OperateShrineCryptic(int pnum)
player.position.tile,
player._pdir,
MIS_NOVA,
-1,
TARGET_PLAYERS,
pnum,
0,
2 * leveltype);
@ -3085,7 +3085,7 @@ bool OperateShrineHoly(int pnum)
break;
} while (nSolidTable[lv] || dObject[xx][yy] != 0 || dMonster[xx][yy] != 0);
AddMissile(player.position.tile, { xx, yy }, player._pdir, MIS_RNDTELEPORT, -1, pnum, 0, 2 * leveltype);
AddMissile(player.position.tile, { xx, yy }, player._pdir, MIS_RNDTELEPORT, TARGET_PLAYERS, pnum, 0, 2 * leveltype);
if (pnum != MyPlayerId)
return false;
@ -3953,7 +3953,7 @@ bool OperateFountains(int pnum, int i)
player.position.tile,
player._pdir,
MIS_INFRA,
-1,
TARGET_PLAYERS,
pnum,
0,
2 * leveltype);

Loading…
Cancel
Save