Browse Source

Use FindClosestValidPosition for casting firewall

pull/3431/head
ephphatha 4 years ago committed by Anders Jenbo
parent
commit
958602d600
  1. 43
      Source/missiles.cpp

43
Source/missiles.cpp

@ -2503,35 +2503,26 @@ void AddIdentify(Missile &missile, Point /*dst*/, Direction /*midir*/)
void AddFirewallC(Missile &missile, Point dst, Direction midir) void AddFirewallC(Missile &missile, Point dst, Direction midir)
{ {
missile._miDelFlag = true; std::optional<Point> spreadPosition = FindClosestValidPosition(
for (int i = 0; i < 6; i++) { [start = missile.position.start](Point target) {
int k = CrawlNum[i]; return start != target && IsTileNotSolid(target) && InDungeonBounds(target) && dObject[target.x][target.y] == 0 && LineClearMissile(start, target);
int ck = k + 2; },
for (auto j = static_cast<uint8_t>(CrawlTable[k]); j > 0; j--, ck += 2) { dst, 0, 5);
Point target = dst + Displacement { CrawlTable[ck - 1], CrawlTable[ck] };
if (!InDungeonBounds(target))
continue;
if (LineClearMissile(missile.position.start, target)) { if (!spreadPosition) {
if (missile.position.start != target && IsTileNotSolid(target) && dObject[target.x][target.y] == 0) { missile._miDelFlag = true;
missile.var1 = target.x; return;
missile.var2 = target.y;
missile.var5 = target.x;
missile.var6 = target.y;
missile._miDelFlag = false;
i = 6;
break;
}
}
}
} }
if (!missile._miDelFlag) { missile._miDelFlag = false;
missile.var3 = static_cast<int>(Left(Left(midir))); missile.var1 = spreadPosition->x;
missile.var4 = static_cast<int>(Right(Right(midir))); missile.var2 = spreadPosition->y;
missile._mirange = 7; missile.var5 = spreadPosition->x;
UseMana(missile._misource, SPL_FIREWALL); missile.var6 = spreadPosition->y;
} missile.var3 = static_cast<int>(Left(Left(midir)));
missile.var4 = static_cast<int>(Right(Right(midir)));
missile._mirange = 7;
UseMana(missile._misource, SPL_FIREWALL);
} }
void AddInfra(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddInfra(Missile &missile, Point /*dst*/, Direction /*midir*/)

Loading…
Cancel
Save