pressing d or D when cursor positioning targets doors and doorways
pressing x or X when cursor positioning targets possibly unexplored location
(potentially useful when using '_' [not mouse] to invoke travel)
+swallowers can't re-engulf hero immediately after spitting him/her out
Platform- and/or Interface-Specific New Features
/* note: 3d9 is slightly higher than previous 4d6 */
}
+ } else if (attk->aatyp == AT_ENGL && magr->mspec_used) {
+ /* can't re-engulf yet; switch to simpler attack */
+ *alt_attk_buf = *attk;
+ attk = alt_attk_buf;
+ if (attk->adtyp == AD_ACID || attk->adtyp == AD_ELEC
+ || attk->adtyp == AD_COLD || attk->adtyp == AD_FIRE) {
+ attk->aatyp = AT_TUCH;
+ } else {
+ attk->aatyp = AT_CLAW; /* attack message will be "<foo> hits" */
+ attk->adtyp = AD_PHYS;
+ }
+ attk->damn = 1; /* relatively weak: 1d6 */
+ attk->damd = 6;
+
/* barrow wight, Nazgul, erinys have weapon attack for non-physical
damage; force physical damage if attacker has been cancelled or
if weapon is sufficiently interesting; a few unique creatures
case AT_ENGL:
if (!range2) {
if (foundyou) {
- if (u.uswallow || tmp > (j = rnd(20 + i))) {
- /* Force swallowing monster to be
- * displayed even when player is
- * moving away */
+ if (u.uswallow
+ || (!mtmp->mspec_used && tmp > (j = rnd(20 + i)))) {
+ /* force swallowing monster to be displayed
+ even when hero is moving away */
flush_screen(1);
sum[i] = gulpmu(mtmp, mattk);
} else {
placebc();
vision_full_recalc = 1;
docrt();
+ /* prevent swallower (mtmp might have just poly'd into something
+ without an engulf attack) from immediately re-engulfing */
+ if (attacktype(mtmp->data, AT_ENGL) && !mtmp->mspec_used)
+ mtmp->mspec_used = rnd(2);
}
u.ustuck = 0;
}
/* make other peaceful monsters react */
if (!context.mon_moving) {
struct monst *mon;
- int got_mad = 0;
- for (mon = fmon; mon; mon = mon->nmon)
- if (!DEADMONSTER(mon) && !mindless(mon->data) && mon->mpeaceful
+ for (mon = fmon; mon; mon = mon->nmon) {
+ if (DEADMONSTER(mon))
+ continue;
+ if (!mindless(mon->data) && mon->mpeaceful
&& couldsee(mon->mx, mon->my) && !mon->msleeping
&& mon->mcansee && m_canseeu(mon)) {
boolean exclaimed = FALSE;
verbalize("%s", exclam[mon->m_id % SIZE(exclam)]);
exclaimed = TRUE;
}
- if (!mon->isshk && !mon->ispriest && (mon->data->mlevel < rn2(10))) {
+ if (!mon->isshk && !mon->ispriest
+ && (mon->data->mlevel < rn2(10))) {
monflee(mon, rn2(50)+25, TRUE, !exclaimed);
exclaimed = TRUE;
}
monflee(mon, rn2(25)+15, TRUE, !exclaimed);
}
}
+ }
}
}