| 612 | } |
| 613 | |
| 614 | staticfn void |
| 615 | dosdoor(coordxy x, coordxy y, struct mkroom *aroom, int type) |
| 616 | { |
| 617 | boolean shdoor = *in_rooms(x, y, SHOPBASE) ? TRUE : FALSE; |
| 618 | |
| 619 | if (!IS_WALL(levl[x][y].typ)) /* avoid S.doors on already made doors */ |
| 620 | type = DOOR; |
| 621 | levl[x][y].typ = type; |
| 622 | if (type == DOOR) { |
| 623 | if (!rn2(3)) { /* is it a locked door, closed, or a doorway? */ |
| 624 | if (!rn2(5)) |
| 625 | levl[x][y].doormask = D_ISOPEN; |
| 626 | else if (!rn2(6)) |
| 627 | levl[x][y].doormask = D_LOCKED; |
| 628 | else |
| 629 | levl[x][y].doormask = D_CLOSED; |
| 630 | |
| 631 | if (levl[x][y].doormask != D_ISOPEN && !shdoor |
| 632 | && level_difficulty() >= 5 && !rn2(25)) |
| 633 | levl[x][y].doormask |= D_TRAPPED; |
| 634 | } else { |
| 635 | #ifdef STUPID |
| 636 | if (shdoor) |
| 637 | levl[x][y].doormask = D_ISOPEN; |
| 638 | else |
| 639 | levl[x][y].doormask = D_NODOOR; |
| 640 | #else |
| 641 | levl[x][y].doormask = (shdoor ? D_ISOPEN : D_NODOOR); |
| 642 | #endif |
| 643 | } |
| 644 | |
| 645 | /* also done in roguecorr(); doing it here first prevents |
| 646 | making mimics in place of trapped doors on rogue svl.level */ |
| 647 | if (Is_rogue_level(&u.uz)) |
| 648 | levl[x][y].doormask = D_NODOOR; |
| 649 | |
| 650 | if (levl[x][y].doormask & D_TRAPPED) { |
| 651 | struct monst *mtmp; |
| 652 | |
| 653 | if (level_difficulty() >= 9 && !rn2(5) |
| 654 | && !((svm.mvitals[PM_SMALL_MIMIC].mvflags & G_GONE) |
| 655 | && (svm.mvitals[PM_LARGE_MIMIC].mvflags & G_GONE) |
| 656 | && (svm.mvitals[PM_GIANT_MIMIC].mvflags & G_GONE))) { |
| 657 | /* make a mimic instead */ |
| 658 | levl[x][y].doormask = D_NODOOR; |
| 659 | mtmp = makemon(mkclass(S_MIMIC, 0), x, y, NO_MM_FLAGS); |
| 660 | if (mtmp) |
| 661 | set_mimic_sym(mtmp); |
| 662 | } |
| 663 | } |
| 664 | /* newsym(x,y); */ |
| 665 | } else { /* SDOOR */ |
| 666 | if (shdoor || !rn2(5)) |
| 667 | levl[x][y].doormask = D_LOCKED; |
| 668 | else |
| 669 | levl[x][y].doormask = D_CLOSED; |
| 670 | |
| 671 | if (!shdoor && level_difficulty() >= 4 && !rn2(20)) |
no test coverage detected