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

Function block_door

src/shk.c:5790–5821  ·  view source on GitHub ↗

used in domove to block diagonal shop-exit */ x,y should always be a door */

Source from the content-addressed store, hash-verified

5788/* used in domove to block diagonal shop-exit */
5789/* x,y should always be a door */
5790boolean
5791block_door(coordxy x, coordxy y)
5792{
5793 int roomno = *in_rooms(x, y, SHOPBASE);
5794 struct monst *shkp;
5795
5796 if (roomno < 0 || !IS_SHOP(roomno))
5797 return FALSE;
5798 if (!IS_DOOR(levl[x][y].typ))
5799 return FALSE;
5800 if (roomno != *u.ushops)
5801 return FALSE;
5802
5803 shkp = shop_keeper((char) roomno);
5804 if (!shkp || !inhishop(shkp))
5805 return FALSE;
5806
5807 if (shkp->mx == ESHK(shkp)->shk.x && shkp->my == ESHK(shkp)->shk.y
5808 /* Actually, the shk should be made to block _any_
5809 * door, including a door the player digs, if the
5810 * shk is within a 'jumping' distance.
5811 */
5812 && ESHK(shkp)->shd.x == x
5813 && ESHK(shkp)->shd.y == y
5814 && !helpless(shkp)
5815 && (ESHK(shkp)->debit || ESHK(shkp)->billct || ESHK(shkp)->robbed)) {
5816 pline("%s%s blocks your way!", Shknam(shkp),
5817 Invis ? " senses your motion and" : "");
5818 return TRUE;
5819 }
5820 return FALSE;
5821}
5822
5823/* used in domove to block diagonal shop-entry;
5824 u.ux, u.uy should always be a door */

Callers 2

test_moveFunction · 0.85
crawl_destinationFunction · 0.85

Calls 5

in_roomsFunction · 0.85
shop_keeperFunction · 0.85
inhishopFunction · 0.85
ShknamFunction · 0.85
plineFunction · 0.70

Tested by 1

test_moveFunction · 0.68