MCPcopy Create free account
hub / github.com/NetHack/NetHack / dosdoor

Function dosdoor

src/mklev.c:614–676  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

612}
613
614staticfn void
615dosdoor(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))

Callers 2

makenicheFunction · 0.85
dodoorFunction · 0.85

Calls 7

in_roomsFunction · 0.85
rn2Function · 0.85
level_difficultyFunction · 0.85
makemonFunction · 0.85
mkclassFunction · 0.85
set_mimic_symFunction · 0.85
add_doorFunction · 0.85

Tested by

no test coverage detected