crossbow:: piercing dragons

This commit is contained in:
Zeno Rogue 2023-10-29 07:57:05 +01:00
parent b2c8bb96d6
commit 1f6bee5701
3 changed files with 5 additions and 3 deletions

View File

@ -157,7 +157,8 @@ EX bool canAttack(cell *c1, eMonster m1, cell *c2, eMonster m2, flagtype flags)
if(isWorm(m2) && m2 != moTentacleGhost && !isDragon(m2)) return false;
// dragon can't attack itself, or player who mounted it
if(c1 && c2 && isWorm(c1->monst) && isWorm(c2->monst) && wormhead(c1) == wormhead(c2)
cell *cp = (flags & AF_BOW) ? cwt.at : c1;
if(cp && c2 && isWorm(cp->monst) && isWorm(c2->monst) && wormhead(cp) == wormhead(c2)
&& m1 != moTentacleGhost && m2 != moTentacleGhost)
return false;

View File

@ -101,7 +101,7 @@ EX int create_path() {
if(thruVine(cw2.at, cw2.peek())) continue;
if(cw2.at->monst) {
flagtype attackflags = AF_NORMAL;
flagtype attackflags = AF_BOW;
if(items[itOrbSpeed]&1) attackflags |= AF_FAST;
if(items[itOrbSlaying]) attackflags |= AF_CRUSH;
if(items[itCurseWeakness]) attackflags |= AF_WEAK;
@ -265,7 +265,7 @@ EX void add_fire(cell *c) {
}
EX void shoot() {
flagtype attackflags = AF_NORMAL;
flagtype attackflags = AF_BOW;
if(items[itOrbSpeed]&1) attackflags |= AF_FAST;
if(items[itOrbSlaying]) attackflags |= AF_CRUSH;
if(items[itCurseWeakness]) attackflags |= AF_WEAK;

View File

@ -636,6 +636,7 @@ typedef function<int(struct cell*)> cellfunction;
#define AF_PLAGUE Flag(32) // Orb of Plague (do not check adjacency)
#define AF_PSI Flag(33) // Orb of the Mind
#define AF_WEAK Flag(34) // Curse of Weakness
#define AF_BOW Flag(35) // crossbow attack
#if CAP_SDL