|
|
|
|
@ -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; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|