rangers always succeed in disarming bear traps, unless impaired
bigroom variant 2 may have ice floor in unlit areas
some large monsters can knock back smaller monsters with a hit
+change Demonbane to a mace, make it the first sac gift for priests,
+ and give it an invoke ability to banish demons
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
LEV_TELE,
CREATE_PORTAL,
ENLIGHTENING,
- CREATE_AMMO
+ CREATE_AMMO,
+ BANISH
};
/* clang-format on */
PHYS(5, 0), NO_DFNS, NO_CARY, 0, A_NONE, NON_PM, NON_PM, 500L,
NO_COLOR, DRAGONBANE),
- A("Demonbane", LONG_SWORD, (SPFX_RESTR | SPFX_DFLAG2), 0, M2_DEMON,
- PHYS(5, 0), NO_DFNS, NO_CARY, 0, A_LAWFUL, NON_PM, NON_PM, 2500L,
+ A("Demonbane", MACE, (SPFX_RESTR | SPFX_DFLAG2), 0, M2_DEMON,
+ PHYS(5, 0), NO_DFNS, NO_CARY, BANISH, A_LAWFUL, PM_CLERIC, NON_PM, 2500L,
NO_COLOR, DEMONBANE),
A("Werebane", SILVER_SABER, (SPFX_RESTR | SPFX_DFLAG2), 0, M2_WERE,
extern void xkilled(struct monst *, int);
extern void mon_to_stone(struct monst *);
extern void m_into_limbo(struct monst *);
+extern void migrate_mon(struct monst *, coordxy, coordxy);
extern void mnexto(struct monst *, unsigned);
extern void maybe_mnexto(struct monst *);
extern int mnearto(struct monst *, coordxy, coordxy, boolean, unsigned);
nhUse(otmp);
break;
}
+ case BANISH: {
+ if (!Inhell) {
+ int nvanished = 0;
+ struct monst *mtmp, *mtmp2;
+ d_level dest;
+
+ find_hell(&dest);
+
+ for (mtmp = fmon; mtmp; mtmp = mtmp2) {
+ mtmp2 = mtmp->nmon;
+ if (DEADMONSTER(mtmp) || !isok(mtmp->mx, mtmp->my))
+ continue;
+ if (!is_demon(mtmp->data) && mtmp->data->mlet != S_IMP)
+ continue;
+ if (!couldsee(mtmp->mx, mtmp->my))
+ continue;
+ dest.dlevel = rn2(dunlevs_in_dungeon(&dest));
+ mtmp->msleeping = mtmp->mtame = mtmp->mpeaceful = 0;
+ nvanished++;
+ migrate_mon(mtmp, ledger_no(&dest), MIGR_RANDOM);
+ }
+
+ if (nvanished)
+ pline("The demon%s disappear%s in a cloud of brimstone!",
+ nvanished > 1 ? "s" : "",
+ nvanished > 1 ? "" : "s");
+ }
+ break;
+ }
}
} else {
long eprop = (u.uprops[oart->inv_prop].extrinsic ^= W_ARTI),
static void m_detach(struct monst *, struct permonst *);
static void set_mon_min_mhpmax(struct monst *, int);
static void lifesaved_monster(struct monst *);
-static void migrate_mon(struct monst *, coordxy, coordxy);
static boolean ok_to_obliterate(struct monst *);
static void deal_with_overcrowding(struct monst *);
static void m_restartcham(struct monst *);
migrate_mon(mtmp, target_lev, xyloc);
}
-static void
+void
migrate_mon(
struct monst *mtmp,
xint16 target_lev, /* destination level */