Mercurial > hg > early-roguelike
annotate srogue/rooms.c @ 231:455464db5800
Don't force the use of GCC.
Due to incomplete autoconfiscation, most of the Makefiles ignored the
C compiler found by 'configure' and always used 'gcc'.
| author | John "Elwin" Edwards | 
|---|---|
| date | Sun, 06 Mar 2016 17:09:17 -0500 | 
| parents | 94a0d9dd5ce1 | 
| children | e52a8a7ad4c5 | 
| rev | line source | 
|---|---|
| 
36
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
1 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
2 * Draw the nine rooms on the screen | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
3 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
4 * @(#)rooms.c 9.0 (rdk) 7/17/84 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
5 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
6 * Super-Rogue | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
7 * Copyright (C) 1984 Robert D. Kindelberger | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
8 * All rights reserved. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
9 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
10 * Based on "Rogue: Exploring the Dungeons of Doom" | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
11 * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
12 * All rights reserved. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
13 * | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
14 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
15 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
16 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
17 #include "rogue.h" | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
18 #include "rogue.ext" | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
19 | 
| 
217
 
94a0d9dd5ce1
Super-Rogue: convert to ANSI-style function declarations.
 
John "Elwin" Edwards 
parents: 
36 
diff
changeset
 | 
20 void horiz(int cnt); | 
| 
 
94a0d9dd5ce1
Super-Rogue: convert to ANSI-style function declarations.
 
John "Elwin" Edwards 
parents: 
36 
diff
changeset
 | 
21 void vert(int cnt); | 
| 
 
94a0d9dd5ce1
Super-Rogue: convert to ANSI-style function declarations.
 
John "Elwin" Edwards 
parents: 
36 
diff
changeset
 | 
22 | 
| 
36
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
23 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
24 * do_rooms: | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
25 * Place the rooms in the dungeon | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
26 */ | 
| 
217
 
94a0d9dd5ce1
Super-Rogue: convert to ANSI-style function declarations.
 
John "Elwin" Edwards 
parents: 
36 
diff
changeset
 | 
27 void | 
| 
 
94a0d9dd5ce1
Super-Rogue: convert to ANSI-style function declarations.
 
John "Elwin" Edwards 
parents: 
36 
diff
changeset
 | 
28 do_rooms(void) | 
| 
36
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
29 { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
30 int mloops, mchance, nummons, left_out, roomtries; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
31 bool treas = FALSE; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
32 reg int i; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
33 reg struct room *rp; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
34 reg struct linked_list *item; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
35 reg struct thing *tp; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
36 struct coord top, bsze, mp; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
37 | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
38 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
39 * bsze is the maximum room size | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
40 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
41 bsze.x = COLS / 3; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
42 bsze.y = (LINES - 1) / 3; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
43 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
44 * Clear things for a new level | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
45 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
46 for (rp = rooms; rp < &rooms[MAXROOMS]; rp++) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
47 rp->r_goldval = rp->r_nexits = rp->r_flags = 0; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
48 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
49 * Put the gone rooms, if any, on the level | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
50 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
51 left_out = rnd(4); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
52 for (i = 0; i < left_out; i++) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
53 rooms[rnd_room()].r_flags |= ISGONE; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
54 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
55 * dig and populate all the rooms on the level | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
56 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
57 for (i = 0, rp = rooms; i < MAXROOMS; rp++, i++) { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
58 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
59 * Find upper left corner of box that this room goes in | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
60 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
61 top.x = (i%3) * bsze.x + 1; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
62 top.y = i/3 * bsze.y; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
63 if (rf_on(rp,ISGONE)) { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
64 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
65 * Place a gone room. Make certain that there is a | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
66 * blank line for passage drawing. | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
67 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
68 roomtries = 0; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
69 do { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
70 rp->r_pos.x = top.x + rnd(bsze.x-2) + 1; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
71 rp->r_pos.y = top.y + rnd(bsze.y-2) + 1; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
72 rp->r_max.x = -COLS; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
73 rp->r_max.x = -LINES; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
74 if (++roomtries > 250) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
75 fatal("failed to place a gone room"); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
76 } until(rp->r_pos.y > 0 && rp->r_pos.y < LINES-2); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
77 continue; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
78 } | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
79 if (rnd(10) < level-1) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
80 rp->r_flags |= ISDARK; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
81 /* | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
82 * Find a place and size for a random room | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
83 */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
84 roomtries = 0; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
85 do { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
86 rp->r_max.x = rnd(bsze.x - 4) + 4; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
87 rp->r_max.y = rnd(bsze.y - 4) + 4; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
88 rp->r_pos.x = top.x + rnd(bsze.x - rp->r_max.x); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
89 rp->r_pos.y = top.y + rnd(bsze.y - rp->r_max.y); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
90 if (++roomtries > 250) { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
91 fatal("failed to place a good room"); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
92 } | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
93 } until (rp->r_pos.y != 0); | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
94 if (level < max_level) | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
95 mchance = 30; /* 30% when going up (all monsters) */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
96 else | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
97 mchance = 3; /* 3% when going down */ | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
98 treas = FALSE; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
99 if (rnd(100) < mchance && (rp->r_max.x * rp->r_max.y) > | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
100 ((bsze.x * bsze.y * 55) / 100)) { | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
101 treas = TRUE; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
102 rp->r_flags |= ISTREAS; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
103 rp->r_flags |= ISDARK; | 
| 
 
2128c7dc8a40
Import Super-Rogue 9.0 from the Roguelike Restoration Project (r1490)
 
elwin 
parents:  
diff
changeset
 | 
104 } | 
