|
|
|
|
@ -16,6 +16,7 @@
|
|
|
|
|
#endif |
|
|
|
|
#include "engine/load_file.hpp" |
|
|
|
|
#include "engine/random.hpp" |
|
|
|
|
#include "engine/points_in_rectangle_range.hpp" |
|
|
|
|
#include "init.h" |
|
|
|
|
#include "inv.h" |
|
|
|
|
#include "levels/trigs.h" |
|
|
|
|
@ -1442,9 +1443,11 @@ void AddRuneExplosion(Missile &missile, const AddMissileParameter & /*parameter*
|
|
|
|
|
|
|
|
|
|
missile._midam = dmg; |
|
|
|
|
|
|
|
|
|
constexpr Displacement Offsets[] = { { -1, -1 }, { 0, -1 }, { 1, -1 }, { -1, 0 }, { 0, 0 }, { 1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 } }; |
|
|
|
|
for (Displacement offset : Offsets) |
|
|
|
|
CheckMissileCol(missile, dmg, dmg, false, missile.position.tile + offset, true); |
|
|
|
|
auto searchArea = PointsInRectangleRangeColMajor {
|
|
|
|
|
Rectangle { missile.position.tile, 1 }
|
|
|
|
|
}; |
|
|
|
|
for (Point position : searchArea) |
|
|
|
|
CheckMissileCol(missile, dmg, dmg, false, position, true); |
|
|
|
|
} |
|
|
|
|
missile._mlid = AddLight(missile.position.start, 8); |
|
|
|
|
SetMissDir(missile, 0); |
|
|
|
|
@ -2976,8 +2979,18 @@ void MI_Fireball(Missile &missile)
|
|
|
|
|
const Point missilePosition = missile.position.tile; |
|
|
|
|
ChangeLight(missile._mlid, missile.position.tile, missile._miAnimFrame); |
|
|
|
|
|
|
|
|
|
constexpr Displacement Offsets[] = { { 0, 0 }, { 0, 1 }, { 0, -1 }, { 1, 0 }, { 1, -1 }, { 1, 1 }, { -1, 0 }, { -1, 1 }, { -1, -1 } }; |
|
|
|
|
for (Displacement offset : Offsets) { |
|
|
|
|
constexpr Direction Offsets[] = {
|
|
|
|
|
Direction::NoDirection,
|
|
|
|
|
Direction::SouthWest,
|
|
|
|
|
Direction::NorthEast,
|
|
|
|
|
Direction::SouthEast,
|
|
|
|
|
Direction::East,
|
|
|
|
|
Direction::South,
|
|
|
|
|
Direction::NorthWest,
|
|
|
|
|
Direction::West,
|
|
|
|
|
Direction::North
|
|
|
|
|
}; |
|
|
|
|
for (Direction offset : Offsets) { |
|
|
|
|
if (!CheckBlock(missile.position.start, missilePosition + offset)) |
|
|
|
|
CheckMissileCol(missile, minDam, maxDam, false, missilePosition + offset, true); |
|
|
|
|
} |
|
|
|
|
@ -3314,8 +3327,15 @@ void MI_Flash(Missile &missile)
|
|
|
|
|
} |
|
|
|
|
missile._mirange--; |
|
|
|
|
|
|
|
|
|
constexpr Displacement Offsets[] = { { -1, 0 }, { 0, 0 }, { 1, 0 }, { -1, 1 }, { 0, 1 }, { 1, 1 } }; |
|
|
|
|
for (Displacement offset : Offsets) |
|
|
|
|
constexpr Direction Offsets[] = {
|
|
|
|
|
Direction::NorthWest,
|
|
|
|
|
Direction::NoDirection,
|
|
|
|
|
Direction::SouthEast,
|
|
|
|
|
Direction::West,
|
|
|
|
|
Direction::SouthWest, |
|
|
|
|
Direction::South
|
|
|
|
|
}; |
|
|
|
|
for (Direction offset : Offsets) |
|
|
|
|
CheckMissileCol(missile, missile._midam, missile._midam, true, missile.position.tile + offset, true); |
|
|
|
|
|
|
|
|
|
if (missile._mirange == 0) { |
|
|
|
|
@ -3336,8 +3356,12 @@ void MI_Flash2(Missile &missile)
|
|
|
|
|
} |
|
|
|
|
missile._mirange--; |
|
|
|
|
|
|
|
|
|
constexpr Displacement Offsets[] = { { -1, -1 }, { 0, -1 }, { 1, -1 } }; |
|
|
|
|
for (Displacement offset : Offsets) |
|
|
|
|
constexpr Direction Offsets[] = {
|
|
|
|
|
Direction::North,
|
|
|
|
|
Direction::North,
|
|
|
|
|
Direction::East |
|
|
|
|
}; |
|
|
|
|
for (Direction offset : Offsets) |
|
|
|
|
CheckMissileCol(missile, missile._midam, missile._midam, true, missile.position.tile + offset, true); |
|
|
|
|
|
|
|
|
|
if (missile._mirange == 0) { |
|
|
|
|
@ -3925,8 +3949,18 @@ void MI_Element(Missile &missile)
|
|
|
|
|
ChangeLight(missile._mlid, missile.position.tile, missile._miAnimFrame); |
|
|
|
|
|
|
|
|
|
Point startPoint = missile.var3 == 2 ? Point { missile.var4, missile.var5 } : Point(missile.position.start); |
|
|
|
|
constexpr Displacement Offsets[] = { { 0, 0 }, { 0, 1 }, { 0, -1 }, { 1, 0 }, { 1, -1 }, { 1, 1 }, { -1, 0 }, { -1, 1 }, { -1, -1 } }; |
|
|
|
|
for (Displacement offset : Offsets) { |
|
|
|
|
constexpr Direction Offsets[] = {
|
|
|
|
|
Direction::NoDirection,
|
|
|
|
|
Direction::SouthWest,
|
|
|
|
|
Direction::NorthEast,
|
|
|
|
|
Direction::SouthEast,
|
|
|
|
|
Direction::East,
|
|
|
|
|
Direction::South,
|
|
|
|
|
Direction::NorthWest,
|
|
|
|
|
Direction::West,
|
|
|
|
|
Direction::North |
|
|
|
|
}; |
|
|
|
|
for (Direction offset : Offsets) { |
|
|
|
|
if (!CheckBlock(startPoint, missilePosition + offset)) |
|
|
|
|
CheckMissileCol(missile, dam, dam, true, missilePosition + offset, true); |
|
|
|
|
} |
|
|
|
|
|