diff --git a/monstermove.cpp b/monstermove.cpp index 5d8d5c4f..4a7564da 100644 --- a/monstermove.cpp +++ b/monstermove.cpp @@ -1466,7 +1466,7 @@ EX void moveghosts() { int goodmoves = 0; for(int k=0; ktype; k++) if(c->move(k) && c->move(k)->cpdist < c->cpdist) - if(ghostmove(c->monst, c->move(k), c) && !isPlayerOn(c->move(k))) + if(ghostmove(c->monst, c->move(k), c, 0) && !isPlayerOn(c->move(k))) goodmoves++; movesofgood.grow(goodmoves).push_back(c); @@ -1491,7 +1491,7 @@ EX void moveghosts() { } for(int k=0; ktype; k++) if(c->move(k) && c->move(k)->cpdist < c->cpdist) - if(ghostmove(c->monst, c->move(k), c)) + if(ghostmove(c->monst, c->move(k), c, 0)) mdir.push_back(k); if(mdir.empty()) continue; int d = hrand_elt(mdir); diff --git a/passable.cpp b/passable.cpp index 70de8768..2dbee5da 100644 --- a/passable.cpp +++ b/passable.cpp @@ -330,12 +330,12 @@ EX bool againstWind(cell *cto, cell *cfrom) { return false; } -EX bool ghostmove(eMonster m, cell* to, cell* from) { +EX bool ghostmove(eMonster m, cell* to, cell* from, flagtype extra) { if(!isGhost(m) && nonAdjacent(to, from)) return false; if(sword::at(to, 0)) return false; if(!shmup::on && isPlayerOn(to)) return false; if(to->monst && !(to->monst == moTentacletail && isGhost(m) && m != moFriendlyGhost) - && !(to->monst == moTortoise && isGhost(m) && m != moFriendlyGhost)) + && !(to->monst == moTortoise && isGhost(m) && m != moFriendlyGhost) && !(extra & P_MONSTER)) return false; if((m == moWitchGhost || m == moWitchWinter) && to->land != laPower) return false; @@ -499,7 +499,7 @@ EX bool passable_for(eMonster m, cell *w, cell *from, flagtype extra) { if(m == moGreaterShark) return isWatery(w) || w->wall == waBoat || w->wall == waFrozenLake; if(isGhostMover(m) || m == moFriendlyGhost) - return ghostmove(m, w, from); + return ghostmove(m, w, from, extra); // for the purpose of Shmup this is correct if(m == moTameBomberbird) return passable(w, from, extra | P_FLYING | P_ISFRIEND);