1 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
2 /* hack.mkmaze.c - version 1.0.2 */
3 /* $FreeBSD: src/games/hack/hack.mkmaze.c,v 1.4 1999/11/16 10:26:37 marcel Exp $ */
4 /* $DragonFly: src/games/hack/hack.mkmaze.c,v 1.2 2003/06/17 04:25:24 dillon Exp $ */
7 #include "def.mkroom.h" /* not really used */
8 extern struct monst
*makemon();
9 extern struct permonst pm_wizard
;
10 extern struct obj
*mkobj_at();
11 extern coord
mazexy();
12 struct permonst hell_hound
=
13 { "hell hound", 'd', 12, 14, 2, 3, 6, 0 };
20 boolean al
= (dlevel
>= 30 && !flags
.made_amulet
);
22 for(x
= 2; x
< COLNO
-1; x
++)
23 for(y
= 2; y
< ROWNO
-1; y
++)
24 levl
[x
][y
].typ
= (x
%2 && y
%2) ? 0 : HWALL
;
30 for(x
= zx
-2; x
< zx
+4; x
++) for(y
= zy
-2; y
<= zy
+2; y
++) {
32 (y
== zy
-2 || y
== zy
+2 || x
== zx
-2 || x
== zx
+3) ? POOL
:
33 (y
== zy
-1 || y
== zy
+1 || x
== zx
-1 || x
== zx
+2) ? HWALL
:
36 (void) mkobj_at(AMULET_SYM
, zx
, zy
);
37 flags
.made_amulet
= 1;
39 if(mtmp
= makemon(&hell_hound
, zx
, zy
))
41 if(mtmp
= makemon(PM_WIZARD
, zx
+1, zy
)) {
43 flags
.no_of_wizards
= 1;
50 (void) mksobj_at(WAN_WISHING
, zx
, zy
);
51 (void) mkobj_at(ROCK_SYM
, zx
, zy
); /* put a rock on top of it */
54 for(x
= 2; x
< COLNO
-1; x
++)
55 for(y
= 2; y
< ROWNO
-1; y
++) {
56 switch(levl
[x
][y
].typ
) {
58 levl
[x
][y
].scrsym
= '-';
61 levl
[x
][y
].scrsym
= '.';
65 for(x
= rn1(8,11); x
; x
--) {
67 (void) mkobj_at(rn2(2) ? GEM_SYM
: 0, mm
.x
, mm
.y
);
69 for(x
= rn1(10,2); x
; x
--) {
71 (void) mkobj_at(ROCK_SYM
, mm
.x
, mm
.y
);
74 (void) makemon(PM_MINOTAUR
, mm
.x
, mm
.y
);
75 for(x
= rn1(5,7); x
; x
--) {
77 (void) makemon((struct permonst
*) 0, mm
.x
, mm
.y
);
79 for(x
= rn1(6,7); x
; x
--) {
83 for(x
= rn1(6,7); x
; x
--)
84 mktrap(0,1,(struct mkroom
*) 0);
86 levl
[(xupstair
= mm
.x
)][(yupstair
= mm
.y
)].scrsym
= '<';
87 levl
[xupstair
][yupstair
].typ
= STAIRS
;
88 xdnstair
= ydnstair
= 0;
91 walkfrom(x
,y
) int x
,y
; {
94 levl
[x
][y
].typ
= ROOM
;
97 for(a
= 0; a
< 4; a
++)
98 if(okay(x
,y
,a
)) dirs
[q
++]= a
;
102 levl
[x
][y
].typ
= ROOM
;
113 case 0: --(*y
); break;
114 case 1: (*x
)++; break;
115 case 2: (*y
)++; break;
116 case 3: --(*x
); break;
126 if(x
<3 || y
<3 || x
>COLNO
-3 || y
>ROWNO
-3 || levl
[x
][y
].typ
!= 0)
135 mm
.x
= 3 + 2*rn2(COLNO
/2 - 2);
136 mm
.y
= 3 + 2*rn2(ROWNO
/2 - 2);