Browse Source

♻️Add helper function to wall spells

pull/2225/head
Anders Jenbo 5 years ago
parent
commit
325ac10044
  1. 104
      Source/missiles.cpp

104
Source/missiles.cpp

@ -3810,40 +3810,53 @@ void MI_Search(int i)
AutoMapShowItems = false;
}
void MI_LightningWallC(int i)
bool GrowWall(int playerId, Point position, Point target, missile_id type, int spellLevel, int damage)
{
int tx, ty;
int dp = dPiece[position.x][position.y];
assert(dp <= MAXTILES && dp >= 0);
missile[i]._mirange--;
int id = missile[i]._misource;
int lvl = (id > -1) ? plr[id]._pLevel : 0;
if (nMissileTable[dp] || !InDungeonBounds(target)) {
return false;
}
int dmg = 16 * (GenerateRnd(10) + GenerateRnd(10) + lvl + 2);
AddMissile(position, position, plr[playerId]._pdir, type, TARGET_BOTH, playerId, damage, spellLevel);
return true;
}
void MI_LightningWallC(int i)
{
missile[i]._mirange--;
if (missile[i]._mirange == 0) {
missile[i]._miDelFlag = true;
return;
}
int dp = dPiece[missile[i]._miVar1][missile[i]._miVar2];
assert(dp <= MAXTILES && dp >= 0);
Point t = Point { missile[i]._miVar1, missile[i]._miVar2 } + (Direction)missile[i]._miVar3;
if (!nMissileTable[dp] && missile[i]._miVar8 == 0 && InDungeonBounds(t)) {
AddMissile({ missile[i]._miVar1, missile[i]._miVar2 }, { missile[i]._miVar1, missile[i]._miVar2 }, plr[id]._pdir, MIS_LIGHTWALL, TARGET_BOTH, id, dmg, missile[i]._mispllvl);
missile[i]._miVar1 = t.x;
missile[i]._miVar2 = t.y;
} else {
missile[i]._miVar8 = 1;
int id = missile[i]._misource;
int lvl = (id > -1) ? plr[id]._pLevel : 0;
int dmg = 16 * (GenerateRnd(10) + GenerateRnd(10) + lvl + 2);
{
Point position = { missile[i]._miVar1, missile[i]._miVar2 };
Point target = position + static_cast<Direction>(missile[i]._miVar3);
if (missile[i]._miVar8 == 0 && GrowWall(id, position, target, MIS_LIGHTWALL, missile[i]._mispllvl, dmg)) {
missile[i]._miVar1 = target.x;
missile[i]._miVar2 = target.y;
} else {
missile[i]._miVar8 = 1;
}
}
dp = dPiece[missile[i]._miVar5][missile[i]._miVar6];
assert(dp <= MAXTILES && dp >= 0);
t = Point { missile[i]._miVar5, missile[i]._miVar6 } + (Direction)missile[i]._miVar4;
if (!nMissileTable[dp] && missile[i]._miVar7 == 0 && InDungeonBounds(t)) {
AddMissile({ missile[i]._miVar5, missile[i]._miVar6 }, { missile[i]._miVar5, missile[i]._miVar6 }, plr[id]._pdir, MIS_LIGHTWALL, TARGET_BOTH, id, dmg, missile[i]._mispllvl);
missile[i]._miVar5 = t.x;
missile[i]._miVar6 = t.y;
} else {
missile[i]._miVar7 = 1;
{
Point position = { missile[i]._miVar5, missile[i]._miVar6 };
Point target = position + static_cast<Direction>(missile[i]._miVar4);
if (missile[i]._miVar7 == 0 && GrowWall(id, position, target, MIS_LIGHTWALL, missile[i]._mispllvl, dmg)) {
missile[i]._miVar5 = target.x;
missile[i]._miVar6 = target.y;
} else {
missile[i]._miVar7 = 1;
}
}
}
@ -4504,35 +4517,36 @@ void MI_Fireman(int i)
void MI_FirewallC(int i)
{
int dp, tx, ty;
missile[i]._mirange--;
int id = missile[i]._misource;
if (missile[i]._mirange == 0) {
missile[i]._miDelFlag = true;
return;
}
int dp = dPiece[missile[i]._miVar1][missile[i]._miVar2];
assert(dp <= MAXTILES && dp >= 0);
Point t = Point { missile[i]._miVar1, missile[i]._miVar2 } + (Direction)missile[i]._miVar3;
if (!nMissileTable[dp] && missile[i]._miVar8 == 0 && InDungeonBounds(t)) {
AddMissile({ missile[i]._miVar1, missile[i]._miVar2 }, { missile[i]._miVar1, missile[i]._miVar2 }, plr[id]._pdir, MIS_FIREWALL, TARGET_BOTH, id, 0, missile[i]._mispllvl);
missile[i]._miVar1 = t.x;
missile[i]._miVar2 = t.y;
} else {
missile[i]._miVar8 = 1;
int id = missile[i]._misource;
{
Point position = { missile[i]._miVar1, missile[i]._miVar2 };
Point target = position + static_cast<Direction>(missile[i]._miVar3);
if (missile[i]._miVar8 == 0 && GrowWall(id, position, target, MIS_FIREWALL, missile[i]._mispllvl, 0)) {
missile[i]._miVar1 = target.x;
missile[i]._miVar2 = target.y;
} else {
missile[i]._miVar8 = 1;
}
}
dp = dPiece[missile[i]._miVar5][missile[i]._miVar6];
assert(dp <= MAXTILES && dp >= 0);
t = Point { missile[i]._miVar5, missile[i]._miVar6 } + (Direction)missile[i]._miVar4;
if (!nMissileTable[dp] && missile[i]._miVar7 == 0 && InDungeonBounds(t)) {
AddMissile({ missile[i]._miVar5, missile[i]._miVar6 }, { missile[i]._miVar5, missile[i]._miVar6 }, plr[id]._pdir, MIS_FIREWALL, TARGET_BOTH, id, 0, missile[i]._mispllvl);
missile[i]._miVar5 = t.x;
missile[i]._miVar6 = t.y;
} else {
missile[i]._miVar7 = 1;
{
Point position = { missile[i]._miVar5, missile[i]._miVar6 };
Point target = position + static_cast<Direction>(missile[i]._miVar4);
if (missile[i]._miVar7 == 0 && GrowWall(id, position, target, MIS_FIREWALL, missile[i]._mispllvl, 0)) {
missile[i]._miVar5 = target.x;
missile[i]._miVar6 = target.y;
} else {
missile[i]._miVar7 = 1;
}
}
}

Loading…
Cancel
Save