Mercurial > hg > early-roguelike
annotate rogue4/new_level.c @ 32:2dcd75e6a736
Fix the playback bug which was caused by CR/LF confusion
| author | elwin | 
|---|---|
| date | Tue, 16 Feb 2010 00:03:06 +0000 | 
| parents | 9535a08ddc39 | 
| children | 1b73a8641b37 | 
| rev | line source | 
|---|---|
| 12 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 1 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 2 * new_level: | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 3 * Dig and draw a new level | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 4 * | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 5 * @(#)new_level.c 4.19 (Berkeley) 1/12/82 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 6 * | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 7 * Rogue: Exploring the Dungeons of Doom | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 8 * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 9 * All rights reserved. | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 10 * | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 11 * See the file LICENSE.TXT for full copyright and licensing information. | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 12 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 13 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 14 #include <time.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 15 #include <curses.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 16 #include <string.h> | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 17 #include "rogue.h" | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 18 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 19 #define TREAS_ROOM 20 /* one chance in TREAS_ROOM for a treasure room */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 20 #define MAXTREAS 10 /* maximum number of treasures in a treasure room */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 21 #define MINTREAS 2 /* minimum number of treasures in a treasure room */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 22 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 23 new_level() | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 24 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 25 register int rm, i; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 26 register THING *tp; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 27 register char *sp; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 28 register THING **mp; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 29 register int index; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 30 coord stairs; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 31 | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 32 player.t_flags &= ~ISHELD; /* unhold when you go down just in case */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 33 if (level > max_level) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 34 max_level = level; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 35 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 36 * Clean things off from last level | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 37 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 38 clear(); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 39 for (sp = _level; sp < &_level[MAXCOLS*MAXLINES]; ) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 40 *sp++ = ' '; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 41 for (sp = _flags; sp < &_flags[MAXCOLS*MAXLINES]; ) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 42 *sp++ = F_REAL; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 43 for (mp = _monst; mp < &_monst[MAXCOLS*MAXLINES]; ) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 44 *mp++ = NULL; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 45 clear(); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 46 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 47 * Free up the monsters on the last level | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 48 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 49 for (tp = mlist; tp != NULL; tp = next(tp)) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 50 free_list(tp->t_pack); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 51 free_list(mlist); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 52 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 53 * Throw away stuff left on the previous level (if anything) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 54 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 55 free_list(lvl_obj); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 56 do_rooms(); /* Draw rooms */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 57 do_passages(); /* Draw passages */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 58 no_food++; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 59 put_things(); /* Place objects (if any) */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 60 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 61 * Place the staircase down. | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 62 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 63 i = 0; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 64 do { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 65 rm = rnd_room(); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 66 rnd_pos(&rooms[rm], &stairs); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 67 index = INDEX(stairs.y, stairs.x); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 68 if (i++ > 100) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 69 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 70 i = 0; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 71 srand(getpid() + (int) time((time_t *) NULL)); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 72 } | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 73 } until (_level[index] == FLOOR); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 74 _level[index] = STAIRS; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 75 /* | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 76 * Place the traps | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 77 */ | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 78 if (rnd(10) < level) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 79 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 80 ntraps = rnd(level / 4) + 1; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 81 if (ntraps > MAXTRAPS) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 82 ntraps = MAXTRAPS; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 83 i = ntraps; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 84 while (i--) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 85 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 86 do | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 87 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 88 rm = rnd_room(); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 89 rnd_pos(&rooms[rm], &stairs); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 90 index = INDEX(stairs.y, stairs.x); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 91 } until (_level[index] == FLOOR && (_flags[index] & F_REAL)); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 92 sp = &_flags[index]; | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 93 *sp &= ~(F_REAL | F_TMASK); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 94 *sp |= rnd(NTRAPS); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 95 } | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 96 } | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 97 do | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 98 { | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 99 rm = rnd_room(); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 100 rnd_pos(&rooms[rm], &hero); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 101 index = INDEX(hero.y, hero.x); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 102 } until (_level[index] == FLOOR && (_flags[index] & F_REAL) | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 103 && _monst[index] == NULL); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 parents: diff
changeset | 104 enter_room(&hero); | 
| 
9535a08ddc39
Import Rogue 5.2 from the Roguelike Restoration Project (r1490)
 edwarj4 | 
