Branch data Line data Source code
1 : : /* omega copyright (C) by Laurence Raphael Brothers, 1987,1988,1989 */
2 : : /* country.c */
3 : : /* load_country(), and all load_ functions for places which are */
4 : : /* accessible from the country and don't have their own files */
5 : :
6 : : #include "glob.h"
7 : :
8 : : /* loads the countryside level from the data file */
9 : 9 : void load_country(void)
10 : : {
11 : : int i,j;
12 : : char site;
13 : : map *side;
14 : :
15 : 9 : side = map_open(MAP_country);
16 : 9 : map_setLevel(side,0);
17 : :
18 [ + + ]: 585 : for(j=0;j<COUNTRY_LENGTH;j++) {
19 [ + + ]: 37440 : for(i=0;i<COUNTRY_WIDTH;i++) {
20 : 36864 : site = map_getSiteChar(side,i,j);
21 : 36864 : Country[i][j].aux = 0;
22 : 36864 : Country[i][j].status = 0;
23 [ + + + + : 36864 : switch (site) {
+ + + + +
+ + - + +
+ + + + +
+ + - ]
24 : : case (PASS&0xff):
25 : 99 : Country[i][j].base_terrain_type = PASS;
26 : 99 : Country[i][j].current_terrain_type = MOUNTAINS;
27 : 99 : break;
28 : : case (CASTLE&0xff):
29 : 9 : Country[i][j].base_terrain_type = CASTLE;
30 : 9 : Country[i][j].current_terrain_type = MOUNTAINS;
31 : 9 : break;
32 : : case (STARPEAK&0xff):
33 : 9 : Country[i][j].base_terrain_type = STARPEAK;
34 : 9 : Country[i][j].current_terrain_type = MOUNTAINS;
35 : 9 : break;
36 : : case (CAVES&0xff):
37 : 9 : Country[i][j].base_terrain_type = CAVES;
38 : 9 : Country[i][j].current_terrain_type = MOUNTAINS;
39 : 9 : break;
40 : : case (VOLCANO&0xff):
41 : 9 : Country[i][j].base_terrain_type = VOLCANO;
42 : 9 : Country[i][j].current_terrain_type = MOUNTAINS;
43 : 9 : break;
44 : : case (DRAGONLAIR&0xff):
45 : 9 : Country[i][j].base_terrain_type = DRAGONLAIR;
46 : 9 : Country[i][j].current_terrain_type = DESERT;
47 : 9 : break;
48 : : case (MAGIC_ISLE&0xff):
49 : 9 : Country[i][j].base_terrain_type = MAGIC_ISLE;
50 : 9 : Country[i][j].current_terrain_type = CHAOS_SEA;
51 : 9 : break;
52 : : case (PALACE&0xff):
53 : 9 : Country[i][j].base_terrain_type = PALACE;
54 : 9 : Country[i][j].current_terrain_type = JUNGLE;
55 : 9 : break;
56 : : case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
57 : 54 : Country[i][j].current_terrain_type =
58 : 54 : Country[i][j].base_terrain_type = VILLAGE;
59 : 54 : Country[i][j].aux = 1+site-'a';
60 : 54 : break;
61 : : case '1': case '2': case '3': case '4': case '5': case '6':
62 : 54 : Country[i][j].current_terrain_type =
63 : 54 : Country[i][j].base_terrain_type = TEMPLE;
64 : 54 : Country[i][j].aux = site-'0';
65 : 54 : break;
66 : : case (PLAINS&0xff):
67 : 8100 : Country[i][j].current_terrain_type =
68 : 8100 : Country[i][j].base_terrain_type = PLAINS;
69 : 8100 : break;
70 : : case (TUNDRA&0xff):
71 : 0 : Country[i][j].current_terrain_type =
72 : 0 : Country[i][j].base_terrain_type = TUNDRA;
73 : 0 : break;
74 : : case (ROAD&0xff):
75 : 774 : Country[i][j].current_terrain_type =
76 : 774 : Country[i][j].base_terrain_type = ROAD;
77 : 774 : break;
78 : : case (MOUNTAINS&0xff):
79 : 6093 : Country[i][j].current_terrain_type =
80 : 6093 : Country[i][j].base_terrain_type = MOUNTAINS;
81 : 6093 : break;
82 : : case (RIVER&0xff):
83 : 1962 : Country[i][j].current_terrain_type =
84 : 1962 : Country[i][j].base_terrain_type = RIVER;
85 : 1962 : break;
86 : : case (CITY&0xff):
87 : 9 : Country[i][j].current_terrain_type =
88 : 9 : Country[i][j].base_terrain_type = CITY;
89 : 9 : break;
90 : : case (FOREST&0xff):
91 : 5607 : Country[i][j].current_terrain_type =
92 : 5607 : Country[i][j].base_terrain_type = FOREST;
93 : 5607 : break;
94 : : case (JUNGLE&0xff):
95 : 1143 : Country[i][j].current_terrain_type =
96 : 1143 : Country[i][j].base_terrain_type = JUNGLE;
97 : 1143 : break;
98 : : case (SWAMP&0xff):
99 : 2853 : Country[i][j].current_terrain_type =
100 : 2853 : Country[i][j].base_terrain_type = SWAMP;
101 : 2853 : break;
102 : : case (DESERT&0xff):
103 : 1962 : Country[i][j].current_terrain_type =
104 : 1962 : Country[i][j].base_terrain_type = DESERT;
105 : 1962 : break;
106 : : case (CHAOS_SEA&0xff):
107 : 8091 : Country[i][j].current_terrain_type =
108 : 8091 : Country[i][j].base_terrain_type = CHAOS_SEA;
109 : 8091 : break;
110 : : }
111 : : }
112 : : }
113 : 9 : map_close(side);
114 : 9 : }
115 : :
116 : :
117 : : /* loads the dragon's lair into Level*/
118 : 0 : void load_dlair (int empty, int populate)
119 : : {
120 : : int i,j;
121 : : char site;
122 : : map *lair;
123 : :
124 : : /* WDT: Wait. What if, instead of always emptying the dragon's lair after
125 : : * the first time it was entered, what if we instead changed its layout
126 : : * so that the next time you entered you'd be surrounded by irate
127 : : * dragons? (Unless you'd already killed the dragonlord, of course.)
128 : : * How cool would THAT be! */
129 : :
130 [ # # ]: 0 : if (empty)
131 : : {
132 : 0 : mprint("The Lair is now devoid of inhabitants and treasure.");
133 : 0 : morewait();
134 : : }
135 : :
136 [ # # ]: 0 : if (!populate)
137 : 0 : empty = TRUE;
138 : :
139 : 0 : TempLevel = Level;
140 [ # # ]: 0 : if (ok_to_free(TempLevel))
141 : : {
142 : : #ifndef SAVE_LEVELS
143 : 0 : free_level(TempLevel);
144 : : #endif
145 : 0 : TempLevel = NULL;
146 : : }
147 : :
148 : : #ifndef SAVE_LEVELS
149 : 0 : Level = checkmalloc(sizeof(levtype));
150 : : #else
151 : : msdos_changelevel(TempLevel,0,-1);
152 : : Level = &TheLevel;
153 : : #endif
154 : :
155 : 0 : clear_level(Level);
156 : 0 : Level->environment = E_DLAIR;
157 : 0 : lair = map_open(MAP_dlair);
158 : 0 : map_setLevel(lair,0);
159 : :
160 : 0 : Level->level_width = map_getWidth(lair);
161 : 0 : Level->level_length = map_getLength(lair);
162 : :
163 [ # # ]: 0 : for (j = 0; j < Level->level_length; ++j)
164 : : {
165 [ # # ]: 0 : for (i = 0; i < Level->level_width; ++i)
166 : : {
167 : 0 : Level->site[i][j].lstatus = 0;
168 : :
169 [ # # ]: 0 : if (i < 48)
170 : 0 : Level->site[i][j].roomnumber = RS_CAVERN;
171 : : else
172 : 0 : Level->site[i][j].roomnumber = RS_DRAGONLORD;
173 : :
174 : 0 : Level->site[i][j].p_locf = L_NO_OP;
175 : 0 : site = map_getSiteChar(lair,i,j);
176 [ # # # # : 0 : switch (site)
# # # # #
# # # # #
# ]
177 : : {
178 : : case 'D':
179 : 0 : Level->site[i][j].locchar = FLOOR;
180 [ # # ]: 0 : if (!empty)
181 : : {
182 : 0 : make_site_monster(i,j,DRAGON_LORD);
183 : 0 : Level->site[i][j].creature->specialf = M_SP_LAIR;
184 : : }
185 : 0 : break;
186 : :
187 : : case 'd':
188 : 0 : Level->site[i][j].locchar = FLOOR;
189 [ # # ]: 0 : if (!empty)
190 : : {
191 : 0 : make_site_monster(i,j,DRAGON); /* elite dragons, actually */
192 : 0 : Level->site[i][j].creature->specialf = M_SP_LAIR;
193 : 0 : Level->site[i][j].creature->hit *= 2;
194 : 0 : Level->site[i][j].creature->dmg *= 2;
195 : : }
196 : 0 : break;
197 : :
198 : : case 'W':
199 : 0 : Level->site[i][j].locchar = FLOOR;
200 [ # # ]: 0 : if (!empty) make_site_monster(i,j,KING_WYV);
201 : 0 : break;
202 : :
203 : : case 'M':
204 : 0 : Level->site[i][j].locchar = FLOOR;
205 [ # # ]: 0 : if (!empty) make_site_monster(i,j,RANDOM);
206 : 0 : break;
207 : :
208 : : case 'S':
209 : 0 : Level->site[i][j].locchar = FLOOR;
210 : 0 : Level->site[i][j].showchar = WALL;
211 [ # # ]: 0 : if (!empty) lset(i,j,SECRET);
212 : 0 : Level->site[i][j].roomnumber = RS_SECRETPASSAGE;
213 : 0 : break;
214 : :
215 : : case '$':
216 : 0 : Level->site[i][j].locchar = FLOOR;
217 [ # # ]: 0 : if (!empty) make_site_treasure(i,j,10);
218 : 0 : break;
219 : :
220 : : case 's':
221 : 0 : Level->site[i][j].locchar = FLOOR;
222 : 0 : Level->site[i][j].p_locf = L_TRAP_SIREN;
223 : 0 : break;
224 : :
225 : : case '7':
226 [ # # ]: 0 : if (!empty)
227 : 0 : Level->site[i][j].locchar = PORTCULLIS;
228 : : else
229 : 0 : Level->site[i][j].locchar = FLOOR;
230 : 0 : Level->site[i][j].p_locf = L_PORTCULLIS;
231 : 0 : break;
232 : :
233 : : case 'R':
234 : 0 : Level->site[i][j].locchar = FLOOR;
235 : 0 : Level->site[i][j].p_locf = L_RAISE_PORTCULLIS;
236 : 0 : break;
237 : :
238 : : case 'p':
239 : 0 : Level->site[i][j].locchar = FLOOR;
240 : 0 : Level->site[i][j].p_locf = L_PORTCULLIS;
241 : 0 : break;
242 : :
243 : : case 'T':
244 : 0 : Level->site[i][j].locchar = FLOOR;
245 [ # # ]: 0 : if (!empty) Level->site[i][j].p_locf = L_PORTCULLIS_TRAP;
246 : 0 : break;
247 : :
248 : : case 'X':
249 : 0 : Level->site[i][j].locchar = FLOOR;
250 : 0 : Level->site[i][j].p_locf = L_TACTICAL_EXIT;
251 : 0 : break;
252 : :
253 : : case '#':
254 : 0 : Level->site[i][j].locchar = WALL;
255 : 0 : Level->site[i][j].aux = 150;
256 : 0 : break;
257 : :
258 : : case '.':
259 : 0 : Level->site[i][j].locchar = FLOOR;
260 : 0 : break;
261 : : }
262 : : }
263 : : }
264 : 0 : map_close(lair);
265 : 0 : }
266 : :
267 : :
268 : : /* loads the star peak into Level*/
269 : 0 : void load_speak(int empty, int populate)
270 : : {
271 : 0 : int i,j,safe = Player.alignment > 0;
272 : : char site;
273 : : map *peak;
274 : :
275 [ # # ]: 0 : if (empty) {
276 : 0 : mprint("The peak is now devoid of inhabitants and treasure.");
277 : 0 : morewait();
278 : : }
279 : :
280 [ # # ]: 0 : if (!populate)
281 : 0 : empty = TRUE;
282 : :
283 : 0 : TempLevel = Level;
284 [ # # ]: 0 : if (ok_to_free(TempLevel)) {
285 : : #ifndef SAVE_LEVELS
286 : 0 : free_level(TempLevel);
287 : : #endif
288 : 0 : TempLevel = NULL;
289 : : }
290 : : #ifndef SAVE_LEVELS
291 : 0 : Level = ((plv) checkmalloc(sizeof(levtype)));
292 : : #else
293 : : msdos_changelevel(TempLevel,0,-1);
294 : : Level = &TheLevel;
295 : : #endif
296 : 0 : clear_level(Level);
297 : 0 : Level->environment = E_STARPEAK;
298 : :
299 : 0 : peak = map_open(MAP_speak);
300 : 0 : map_setLevel(peak,0);
301 : 0 : Level->level_length = map_getLength(peak);
302 : 0 : Level->level_width = map_getWidth(peak);
303 : :
304 [ # # ]: 0 : for(j=0;j<Level->level_length;j++) {
305 [ # # ]: 0 : for(i=0;i<Level->level_width;i++) {
306 : 0 : Level->site[i][j].lstatus = 0;
307 : 0 : Level->site[i][j].roomnumber = RS_STARPEAK;
308 : 0 : Level->site[i][j].p_locf = L_NO_OP;
309 : 0 : site = map_getSiteChar(peak,i,j);
310 [ # # # # : 0 : switch(site) {
# # # # #
# # # # #
# # ]
311 : : case 'S':
312 : 0 : Level->site[i][j].locchar = FLOOR;
313 : 0 : Level->site[i][j].showchar = WALL;
314 : 0 : lset(i,j,SECRET);
315 : 0 : Level->site[i][j].roomnumber = RS_SECRETPASSAGE;
316 : 0 : break;
317 : : case 'L':
318 : 0 : Level->site[i][j].locchar = FLOOR;
319 [ # # ]: 0 : if (! empty) {
320 : 0 : make_site_monster(i,j,LAWBRINGER);
321 [ # # ]: 0 : if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
322 : : }
323 : 0 : break;
324 : : case 's':
325 : 0 : Level->site[i][j].locchar = FLOOR;
326 [ # # ]: 0 : if (! empty) {
327 : 0 : make_site_monster(i,j,SERV_LAW); /* servant of law */
328 [ # # ]: 0 : if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
329 : : }
330 : 0 : break;
331 : : case 'M':
332 : 0 : Level->site[i][j].locchar = FLOOR;
333 [ # # ]: 0 : if (! empty) {
334 : 0 : make_site_monster(i,j,-1);
335 [ # # ]: 0 : if (safe) m_status_reset(Level->site[i][j].creature,HOSTILE);
336 : : }
337 : 0 : break;
338 : : case '$':
339 : 0 : Level->site[i][j].locchar = FLOOR;
340 [ # # ]: 0 : if (! empty)
341 : 0 : make_site_treasure(i,j,10);
342 : 0 : break;
343 : : case '7':
344 [ # # ]: 0 : if (! empty)
345 : 0 : Level->site[i][j].locchar = PORTCULLIS;
346 : 0 : else Level->site[i][j].locchar = FLOOR;
347 : 0 : Level->site[i][j].p_locf = L_PORTCULLIS;
348 : 0 : break;
349 : : case 'R':
350 : 0 : Level->site[i][j].locchar = FLOOR;
351 : 0 : Level->site[i][j].p_locf = L_RAISE_PORTCULLIS;
352 : 0 : break;
353 : : case '-':
354 : 0 : Level->site[i][j].locchar = CLOSED_DOOR;
355 : 0 : break;
356 : : case '|':
357 : 0 : Level->site[i][j].locchar = OPEN_DOOR;
358 : 0 : break;
359 : : case 'p':
360 : 0 : Level->site[i][j].locchar = FLOOR;
361 : 0 : Level->site[i][j].p_locf = L_PORTCULLIS;
362 : 0 : break;
363 : : case 'T':
364 : 0 : Level->site[i][j].locchar = FLOOR;
365 [ # # ]: 0 : if (! empty)
366 : 0 : Level->site[i][j].p_locf = L_PORTCULLIS_TRAP;
367 : 0 : break;
368 : : case 'X':
369 : 0 : Level->site[i][j].locchar = FLOOR;
370 : 0 : Level->site[i][j].p_locf = L_TACTICAL_EXIT;
371 : 0 : break;
372 : : case '#':
373 : 0 : Level->site[i][j].locchar = WALL;
374 : 0 : Level->site[i][j].aux = 150;
375 : 0 : break;
376 : : case '4':
377 : 0 : Level->site[i][j].locchar = RUBBLE;
378 : 0 : Level->site[i][j].p_locf = L_RUBBLE;
379 : 0 : break;
380 : : case '.':
381 : 0 : Level->site[i][j].locchar = FLOOR;
382 : 0 : break;
383 : : }
384 : : }
385 : : }
386 : 0 : map_close(peak);
387 : 0 : }
388 : :
389 : : /* loads the magic isle into Level*/
390 : 0 : void load_misle(int empty, int populate)
391 : : {
392 : : int i,j;
393 : : char site;
394 : : map *isle;
395 : :
396 [ # # ]: 0 : if (empty) {
397 : 0 : mprint("The isle is now devoid of inhabitants and treasure.");
398 : 0 : morewait();
399 : : }
400 : :
401 [ # # ]: 0 : if (!populate)
402 : 0 : empty = TRUE;
403 : :
404 : 0 : TempLevel = Level;
405 [ # # ]: 0 : if (ok_to_free(TempLevel)) {
406 : : #ifndef SAVE_LEVELS
407 : 0 : free_level(TempLevel);
408 : : #endif
409 : 0 : TempLevel = NULL;
410 : : }
411 : : #ifndef SAVE_LEVELS
412 : 0 : Level = ((plv) checkmalloc(sizeof(levtype)));
413 : : #else
414 : : msdos_changelevel(TempLevel,0,-1);
415 : : Level = &TheLevel;
416 : : #endif
417 : 0 : clear_level(Level);
418 : 0 : Level->environment = E_MAGIC_ISLE;
419 : :
420 : 0 : isle = map_open(MAP_misle);
421 : 0 : map_setLevel(isle,0);
422 : :
423 : 0 : Level->level_length = map_getLength(isle);
424 : 0 : Level->level_width = map_getWidth(isle);
425 : :
426 [ # # ]: 0 : for(j=0;j<Level->level_length;j++) {
427 [ # # ]: 0 : for(i=0;i<Level->level_width;i++) {
428 : 0 : Level->site[i][j].lstatus = 0;
429 : 0 : Level->site[i][j].roomnumber = RS_MAGIC_ISLE;
430 : 0 : Level->site[i][j].p_locf = L_NO_OP;
431 : 0 : site = map_getSiteChar(isle,i,j);
432 [ # # # # : 0 : switch(site) {
# # # # #
# # # ]
433 : : case 'E':
434 : 0 : Level->site[i][j].locchar = FLOOR;
435 [ # # ]: 0 : if (! empty)
436 : 0 : make_site_monster(i,j,EATER); /* eater of magic */
437 : 0 : break;
438 : : case 'm':
439 : 0 : Level->site[i][j].locchar = FLOOR;
440 [ # # ]: 0 : if (! empty)
441 : 0 : make_site_monster(i,j,MIL_PRIEST); /* militant priest */
442 : 0 : break;
443 : : case 'n':
444 : 0 : Level->site[i][j].locchar = FLOOR;
445 [ # # ]: 0 : if (! empty)
446 : 0 : make_site_monster(i,j,NAZGUL);
447 : 0 : break;
448 : : case 'X':
449 : 0 : Level->site[i][j].locchar = FLOOR;
450 : 0 : Level->site[i][j].p_locf = L_TACTICAL_EXIT;
451 : 0 : break;
452 : : case '#':
453 : 0 : Level->site[i][j].locchar = WALL;
454 : 0 : Level->site[i][j].aux = 150;
455 : 0 : break;
456 : : case '4':
457 : 0 : Level->site[i][j].locchar = RUBBLE;
458 : 0 : Level->site[i][j].p_locf = L_RUBBLE;
459 : 0 : break;
460 : : case '~':
461 : 0 : Level->site[i][j].locchar = WATER;
462 : 0 : Level->site[i][j].p_locf = L_CHAOS;
463 : 0 : break;
464 : : case '=':
465 : 0 : Level->site[i][j].locchar = WATER;
466 : 0 : Level->site[i][j].p_locf = L_MAGIC_POOL;
467 : 0 : break;
468 : : case '-':
469 : 0 : Level->site[i][j].locchar = CLOSED_DOOR;
470 : 0 : break;
471 : : case '|':
472 : 0 : Level->site[i][j].locchar = OPEN_DOOR;
473 : 0 : break;
474 : : case '.':
475 : 0 : Level->site[i][j].locchar = FLOOR;
476 : 0 : break;
477 : : }
478 : : }
479 : : }
480 : 0 : map_close(isle);
481 : 0 : }
482 : :
483 : :
484 : : /* loads a temple into Level*/
485 : 0 : void load_temple(int deity, int populate)
486 : : {
487 : : int i,j;
488 : : char site;
489 : : pml ml;
490 : : map *holy;
491 : :
492 : : /* initrand(Current_Environment, deity); */ /* FIXED! 12/30/98 */
493 : 0 : TempLevel = Level;
494 [ # # ]: 0 : if (ok_to_free(TempLevel)) {
495 : : #ifndef SAVE_LEVELS
496 : 0 : free_level(TempLevel);
497 : : #endif
498 : 0 : TempLevel = NULL;
499 : : }
500 : : #ifndef SAVE_LEVELS
501 : 0 : Level = ((plv) checkmalloc(sizeof(levtype)));
502 : : #else
503 : : msdos_changelevel(TempLevel,0,-1);
504 : : Level = &TheLevel;
505 : : #endif
506 : 0 : clear_level(Level);
507 : 0 : Level->environment = E_TEMPLE;
508 : 0 : holy = map_open(MAP_temple);
509 : 0 : map_setLevel(holy,0); /* WDT: possibly use different levels for different
510 : : * faiths? */
511 : :
512 : 0 : Level->level_length = map_getLength(holy);
513 : 0 : Level->level_width = map_getWidth(holy);
514 : :
515 [ # # ]: 0 : for(j=0;j<Level->level_length;j++) {
516 [ # # ]: 0 : for(i=0;i<Level->level_width;i++) {
517 [ # # # # : 0 : switch(deity) {
# # # ]
518 : 0 : case ODIN: Level->site[i][j].roomnumber = RS_ODIN; break;
519 : 0 : case SET: Level->site[i][j].roomnumber = RS_SET; break;
520 : 0 : case HECATE: Level->site[i][j].roomnumber = RS_HECATE; break;
521 : 0 : case ATHENA: Level->site[i][j].roomnumber = RS_ATHENA; break;
522 : 0 : case DRUID: Level->site[i][j].roomnumber = RS_DRUID; break;
523 : 0 : case DESTINY: Level->site[i][j].roomnumber = RS_DESTINY; break;
524 : : }
525 : 0 : site = map_getSiteChar(holy,i,j);
526 [ # # # # : 0 : switch(site) {
# # # # #
# # # #
# ]
527 : : case '8':
528 : 0 : Level->site[i][j].locchar = ALTAR;
529 : 0 : Level->site[i][j].p_locf = L_ALTAR;
530 : 0 : Level->site[i][j].aux = deity;
531 : 0 : break;
532 : : case 'H':
533 : 0 : Level->site[i][j].locchar = FLOOR;
534 [ # # ][ # # ]: 0 : if (populate && (!Player.patron ||
[ # # ]
535 [ # # ]: 0 : strcmp(Player.name,Priest[Player.patron]) ||
536 : 0 : Player.rank[PRIESTHOOD] != HIGHPRIEST))
537 : 0 : make_high_priest(i,j,deity);
538 : 0 : break;
539 : : case 'S':
540 : 0 : Level->site[i][j].locchar = FLOOR;
541 [ # # ][ # # ]: 0 : if (!Player.patron ||
542 [ # # ]: 0 : strcmp(Player.name,Priest[Player.patron]) ||
543 : 0 : Player.rank[PRIESTHOOD] != HIGHPRIEST)
544 : 0 : lset(i,j,SECRET);
545 : 0 : break;
546 : : case 'W':
547 : 0 : Level->site[i][j].locchar = FLOOR;
548 [ # # ][ # # ]: 0 : if (deity != Player.patron && deity != DRUID)
549 : 0 : Level->site[i][j].p_locf = L_TEMPLE_WARNING;
550 : 0 : break;
551 : : case 'm':
552 : 0 : Level->site[i][j].locchar = FLOOR;
553 [ # # ]: 0 : if (populate)
554 : 0 : make_site_monster(i,j,MIL_PRIEST); /* militant priest */
555 : 0 : break;
556 : : case 'd':
557 : 0 : Level->site[i][j].locchar = FLOOR;
558 [ # # ]: 0 : if (populate)
559 : 0 : make_site_monster(i,j,DOBERMAN); /* doberman death hound */
560 : 0 : break;
561 : : case 'X':
562 : 0 : Level->site[i][j].locchar = FLOOR;
563 : 0 : Level->site[i][j].p_locf = L_TACTICAL_EXIT;
564 : 0 : break;
565 : : case '#':
566 [ # # ]: 0 : if (deity != DRUID) {
567 : 0 : Level->site[i][j].locchar = WALL;
568 : 0 : Level->site[i][j].aux = 150;
569 : : }
570 : : else {
571 : 0 : Level->site[i][j].locchar = HEDGE;
572 : 0 : Level->site[i][j].p_locf = L_HEDGE;
573 : : }
574 : 0 : break;
575 : : case '.':
576 : 0 : Level->site[i][j].locchar = FLOOR;
577 : 0 : break;
578 : : case 'x':
579 : 0 : Level->site[i][j].locchar = FLOOR;
580 : 0 : random_temple_site(i,j,deity,populate);
581 : 0 : break;
582 : : case '?':
583 [ # # ]: 0 : if (deity != DESTINY)
584 : 0 : Level->site[i][j].locchar = FLOOR;
585 : : else {
586 : 0 : Level->site[i][j].locchar = ABYSS;
587 : 0 : Level->site[i][j].p_locf = L_ADEPT;
588 : : }
589 : 0 : break;
590 : : case '-':
591 : 0 : Level->site[i][j].locchar = CLOSED_DOOR;
592 : 0 : break;
593 : : case '|':
594 : 0 : Level->site[i][j].locchar = OPEN_DOOR;
595 : 0 : break;
596 : : }
597 : : }
598 : : }
599 : : /* Main Temple is peaceful for player of same sect,druids always peaceful. */
600 [ # # ][ # # ]: 0 : if ((Player.patron == deity) || (deity == DRUID))
601 [ # # ]: 0 : for(ml=Level->mlist;ml!=NULL;ml=ml->next)
602 : 0 : m_status_reset(ml->m,HOSTILE);
603 : 0 : map_close(holy);
604 : : /* initrand(-2, 0); */ /* FIXED! 12/30/98 */
605 : 0 : }
606 : :
607 : 0 : void random_temple_site(int i, int j, int deity, int populate)
608 : : {
609 [ # # # # : 0 : switch(random_range(12)) {
# # # ]
610 : : case 0:
611 [ # # ]: 0 : if (populate)
612 : 0 : make_site_monster(i,j,MEND_PRIEST);
613 : 0 : break; /* mendicant priest */
614 : : case 1:
615 : 0 : Level->site[i][j].locchar = WATER;
616 : 0 : Level->site[i][j].p_locf = L_MAGIC_POOL;
617 : : case 2:
618 [ # # ]: 0 : if (populate)
619 : 0 : make_site_monster(i,j,INNER_DEMON);
620 : 0 : break; /* inner circle demon */
621 : : case 3:
622 [ # # ]: 0 : if (populate)
623 : 0 : make_site_monster(i,j,ANGEL);
624 : 0 : break; /* angel of apropriate sect */
625 : : case 4:
626 [ # # ]: 0 : if (populate)
627 : 0 : make_site_monster(i,j,HIGH_ANGEL);
628 : 0 : break; /* high angel of apropriate sect */
629 : : case 5:
630 [ # # ]: 0 : if (populate)
631 : 0 : make_site_monster(i,j,ARCHANGEL);
632 : 0 : break; /* archangel of apropriate sect */
633 : : }
634 : 0 : }
635 : :
636 : 0 : void make_high_priest(int i, int j, int deity)
637 : : {
638 : 0 : pml ml = ((pml) checkmalloc(sizeof(mltype)));
639 : 0 : pmt m = ((pmt) checkmalloc(sizeof(montype)));
640 : 0 : make_hiscore_npc(m,deity);
641 : 0 : m->x = i;
642 : 0 : m->y = j;
643 : 0 : Level->site[i][j].creature = m;
644 : 0 : ml->m = m;
645 : 0 : ml->next = Level->mlist;
646 : 0 : Level->mlist = ml;
647 : 0 : }
|