Browse Source

♻️ Refactor M_StartKill to receive a Monster reference (#4943)

pull/4989/head
Cesar Canassa 4 years ago committed by GitHub
parent
commit
ce349789cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 9
      Source/missiles.cpp
  2. 14
      Source/monster.cpp
  3. 2
      Source/monster.h
  4. 6
      Source/player.cpp

9
Source/missiles.cpp

@ -245,7 +245,7 @@ bool MonsterMHit(int pnum, int monsterId, int mindam, int maxdam, int dist, miss
monster.flags |= MFLAG_NOHEAL;
if (monster.hitPoints >> 6 <= 0) {
M_StartKill(monsterId, pnum);
M_StartKill(monster, pnum);
} else if (resist) {
PlayEffect(monster, 1);
} else {
@ -2156,13 +2156,14 @@ void AddGolem(Missile &missile, const AddMissileParameter &parameter)
int playerId = missile._misource;
Player &player = Players[playerId];
Monster &golem = Monsters[playerId];
if (Monsters[playerId].position.tile != GolemHoldingCell && &player == MyPlayer)
M_StartKill(playerId, playerId);
if (golem.position.tile != GolemHoldingCell && &player == MyPlayer)
M_StartKill(golem, playerId);
UseMana(player, SPL_GOLEM);
if (Monsters[playerId].position.tile == GolemHoldingCell) {
if (golem.position.tile == GolemHoldingCell) {
std::optional<Point> spawnPosition = FindClosestValidPosition(
[start = missile.position.start](Point target) {
return !IsTileOccupied(target) && LineClearMissile(start, target);

14
Source/monster.cpp

@ -1300,7 +1300,7 @@ void CheckReflect(int monsterId, int pnum, int dam)
monster.hitPoints -= mdam;
dam = std::max(dam - mdam, 0);
if (monster.hitPoints >> 6 <= 0)
M_StartKill(monsterId, pnum);
M_StartKill(monster, pnum);
else
M_StartHit(monster, pnum, mdam);
}
@ -1388,10 +1388,11 @@ void MonsterAttackPlayer(int monsterId, int pnum, int hit, int minDam, int maxDa
int mdam = (GenerateRnd(3) + 1) << 6;
monster.hitPoints -= mdam;
if (monster.hitPoints >> 6 <= 0)
M_StartKill(monsterId, pnum);
M_StartKill(monster, pnum);
else
M_StartHit(monster, pnum, mdam);
}
if ((monster.flags & MFLAG_NOLIFESTEAL) == 0 && monster.type().type == MT_SKING && gbIsMultiplayer)
monster.hitPoints += dam;
if (player._pHitPoints >> 6 <= 0) {
@ -3924,15 +3925,12 @@ void StartMonsterDeath(Monster &monster, int pnum, bool sendmsg)
MonsterDeath(monster, pnum, md, sendmsg);
}
void M_StartKill(int monsterId, int pnum)
void M_StartKill(Monster &monster, int pnum)
{
assert(static_cast<size_t>(monsterId) < MaxMonsters);
Monster &monster = Monsters[monsterId];
if (pnum == MyPlayerId) {
delta_kill_monster(monster, monster.position.tile, *MyPlayer);
if (monsterId != pnum) {
NetSendCmdLocParam1(false, CMD_MONSTDEATH, monster.position.tile, monsterId);
if (&monster != &Monsters[pnum]) {
NetSendCmdLocParam1(false, CMD_MONSTDEATH, monster.position.tile, monster.getId());
} else {
NetSendCmdLoc(MyPlayerId, false, CMD_KILLGOLEM, monster.position.tile);
}

2
Source/monster.h

@ -350,7 +350,7 @@ void M_GetKnockback(Monster &monster);
void M_StartHit(Monster &monster, int dam);
void M_StartHit(Monster &monster, int pnum, int dam);
void StartMonsterDeath(Monster &monster, int pnum, bool sendmsg);
void M_StartKill(int monsterId, int pnum);
void M_StartKill(Monster &monster, int pnum);
void M_SyncStartKill(int monsterId, Point position, int pnum);
void M_UpdateRelations(const Monster &monster);
void DoEnding();

6
Source/player.cpp

@ -957,7 +957,7 @@ bool PlrHitMonst(int pnum, size_t monsterId, bool adjacentDamage = false)
}
#endif
if ((monster.hitPoints >> 6) <= 0) {
M_StartKill(monsterId, pnum);
M_StartKill(monster, pnum);
} else {
if (monster.mode != MonsterMode::Petrified && HasAnyOf(player._pIFlags, ItemSpecialEffect::Knockback))
M_GetKnockback(monster);
@ -3139,9 +3139,9 @@ void SyncPlrKill(Player &player, int earflag)
void RemovePlrMissiles(const Player &player)
{
if (leveltype != DTYPE_TOWN && &player == MyPlayer) {
auto &golem = Monsters[MyPlayerId];
Monster &golem = Monsters[MyPlayerId];
if (golem.position.tile.x != 1 || golem.position.tile.y != 0) {
M_StartKill(MyPlayerId, MyPlayerId);
M_StartKill(golem, MyPlayerId);
AddCorpse(golem.position.tile, golem.type().corpseId, golem.direction);
int mx = golem.position.tile.x;
int my = golem.position.tile.y;

Loading…
Cancel
Save