Annotation of early-roguelike/rogue4/extern.c, Revision 1.1.1.1
1.1 rubenllo 1: /*
2: * global variable initializaton
3: *
4: * @(#)extern.c 4.32 (Berkeley) 4/1/82
5: *
6: * Rogue: Exploring the Dungeons of Doom
7: * Copyright (C) 1980, 1981, 1982 Michael Toy, Ken Arnold and Glenn Wichman
8: * All rights reserved.
9: *
10: * See the file LICENSE.TXT for full copyright and licensing information.
11: */
12:
13: #include <curses.h>
14: #include "rogue.h"
15:
16: bool after; /* True if we want after daemons */
17: bool noscore; /* Was a wizard sometime */
18: bool s_know[MAXSCROLLS]; /* Does he know what a scroll does */
19: bool p_know[MAXPOTIONS]; /* Does he know what a potion does */
20: bool r_know[MAXRINGS]; /* Does he know what a ring does */
21: bool ws_know[MAXSTICKS]; /* Does he know what a stick does */
22: bool amulet = FALSE; /* He found the amulet */
23: bool askme = TRUE; /* Ask about unidentified things */
24: bool door_stop = FALSE; /* Stop running when we pass a door */
25: bool fight_flush = FALSE; /* True if toilet input */
26: bool firstmove = FALSE; /* First move after setting door_stop */
27: bool in_shell = FALSE; /* True if executing a shell */
28: bool jump = FALSE; /* Show running as series of jumps */
29: bool passgo = FALSE; /* Follow passages */
30: bool playing = TRUE; /* True until he quits */
31: bool running = FALSE; /* True if player is running */
32: bool save_msg = TRUE; /* Remember last msg */
33: bool slow_invent = FALSE; /* Inventory one line at a time */
34: bool terse = FALSE; /* True if we should be short */
35: bool use_savedir = FALSE; /* True if using system savefile area */
36: #ifdef WIZARD
37: bool wizard = FALSE; /* True if allows wizard commands */
38: #endif
39:
40: char take; /* Thing the rogue is taking */
41: char prbuf[MAXSTR]; /* Buffer for sprintfs */
42: char outbuf[BUFSIZ]; /* Output buffer for stdout */
43: char runch; /* Direction player is running */
44: char *s_names[MAXSCROLLS]; /* Names of the scrolls */
45: const char *p_colors[MAXPOTIONS]; /* Colors of the potions */
46: const char *r_stones[MAXRINGS]; /* Stone settings of the rings */
47: const char *w_names[MAXWEAPONS + 1] = { /* Names of the various weapons */
48: "mace",
49: "long sword",
50: "short bow",
51: "arrow",
52: "dagger",
53: "two handed sword",
54: "dart",
55: "crossbow",
56: "crossbow bolt",
57: "spear",
58: NULL /* fake entry for dragon's breath */
59: };
60: const char *a_names[MAXARMORS] = { /* Names of armor types */
61: "leather armor",
62: "ring mail",
63: "studded leather armor",
64: "scale mail",
65: "chain mail",
66: "splint mail",
67: "banded mail",
68: "plate mail",
69: };
70: const char *ws_made[MAXSTICKS]; /* What sticks are made of */
71: char whoami[MAXSTR]; /* Name of player */
72: char fruit[MAXSTR]; /* Favorite fruit */
73: char huh[MAXSTR]; /* The last message printed */
74: char *s_guess[MAXSCROLLS]; /* Players guess at what scroll is */
75: char *p_guess[MAXPOTIONS]; /* Players guess at what potion is */
76: char *r_guess[MAXRINGS]; /* Players guess at what ring is */
77: char *ws_guess[MAXSTICKS]; /* Players guess at what wand is */
78: char *ws_type[MAXSTICKS]; /* Is it a wand or a staff */
79: char file_name[256]; /* Save file name */
80: char home[MAXSTR]; /* User's home directory */
81: char _level[MAXLINES*MAXCOLS]; /* Level map */
82: char _flags[MAXLINES*MAXCOLS]; /* Flags for each space on the map */
83:
84: int max_level; /* Deepest player has gone */
85: int ntraps; /* Number of traps on this level */
86: int dnum; /* Dungeon number */
87: int level = 1; /* What level rogue is on */
88: int purse = 0; /* How much gold the rogue has */
89: int mpos = 0; /* Where cursor is on top line */
90: int no_move = 0; /* Number of turns held in place */
91: int no_command = 0; /* Number of turns asleep */
92: int inpack = 0; /* Number of things in pack */
93: int total = 0; /* Total dynamic memory bytes */
94: int lastscore = -1; /* Score before this turn */
95: int no_food = 0; /* Number of levels without food */
96: int count = 0; /* Number of times to repeat command */
97: int fung_hit = 0; /* Number of time fungi has hit */
98: int quiet = 0; /* Number of quiet turns */
99: int food_left; /* Amount of food in hero's stomach */
100: int group = 2; /* Current group number */
101: int hungry_state = 0; /* How hungry is he */
102: int a_chances[MAXARMORS] = { /* Chance for each armor type */
103: 20,
104: 35,
105: 50,
106: 63,
107: 75,
108: 85,
109: 95,
110: 100
111: };
112: int a_class[MAXARMORS] = { /* Armor class for each armor type */
113: 8,
114: 7,
115: 7,
116: 6,
117: 5,
118: 4,
119: 4,
120: 3,
121: };
122:
123: long seed; /* Random number seed */
124:
125: coord oldpos; /* Position before last look() call */
126: coord delta; /* Change indicated to get_dir() */
127:
128: THING player; /* The rogue */
129: THING *cur_armor; /* What a well dresssed rogue wears */
130: THING *cur_weapon; /* Which weapon he is weilding */
131: THING *cur_ring[2]; /* Which rings are being worn */
132: THING *lvl_obj = NULL; /* List of objects on this level */
133: THING *mlist = NULL; /* List of monsters on the level */
134: THING *_monst[MAXLINES*MAXCOLS]; /* Pointers for monsters at each spot */
135:
136: FILE *score_file = NULL; /* Scoreboard */
137: FILE *log_file = NULL; /* Log file */
138:
139: WINDOW *hw; /* Used as a scratch window */
140:
141: #define INIT_STATS { 16, 0, 1, 10, 12, "1d4", 12 }
142:
143: struct stats max_stats = INIT_STATS; /* The maximum for the player */
144:
145: struct room *oldrp; /* Roomin(&oldpos) */
146: struct room rooms[MAXROOMS]; /* One for each room -- A level */
147: #define NON {0, 0}
148: #define NON12 { NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON, NON }
149: struct room passages[MAXPASS] = /* One for each passage */
150: {
151: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
152: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
153: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
154: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
155: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
156: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
157: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
158: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
159: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
160: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
161: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 },
162: { {0, 0}, {0, 0}, {0, 0}, 0, ISGONE|ISDARK, 0, NON12 }
163: };
164: #undef NON12
165: #undef NON
166:
167: #define ___ 1
168: #define XX 10
169: struct monster monsters[26] =
170: {
171: /* Name CARRY FLAG str, exp, lvl, amr, hpt, dmg */
172: { "giant ant", 0, ISMEAN, { XX, 9, 2, 3, ___, "1d6" } },
173: { "bat", 0, 0, { XX, 1, 1, 3, ___, "1d2" } },
174: { "centaur", 15, 0, { XX, 15, 4, 4, ___, "1d6/1d6" } },
175: { "dragon", 100, ISMEAN, { XX,6800, 10, -1, ___, "1d8/1d8/3d10" } },
176: { "floating eye",0, 0, { XX, 5, 1, 9, ___, "0d0" } },
177: { "violet fungi",0, ISMEAN, { XX, 80, 8, 3, ___, "0d0" } },
178: { "gnome", 10, 0, { XX, 7, 1, 5, ___, "1d6" } },
179: { "hobgoblin", 0, ISMEAN, { XX, 3, 1, 5, ___, "1d8" } },
180: { "invisible stalker",0,ISINVIS,{ XX,120, 8, 3, ___, "4d4" } },
181: { "jackal", 0, ISMEAN, { XX, 2, 1, 7, ___, "1d2" } },
182: { "kobold", 0, ISMEAN, { XX, 1, 1, 7, ___, "1d4" } },
183: { "leprechaun", 0, 0, { XX, 10, 3, 8, ___, "1d1" } },
184: { "mimic", 30, 0, { XX,100, 7, 7, ___, "3d4" } },
185: { "nymph", 100, 0, { XX, 37, 3, 9, ___, "0d0" } },
186: { "orc", 15, ISGREED,{ XX, 5, 1, 6, ___, "1d8" } },
187: { "purple worm", 70, 0, { XX,4000, 15, 6, ___, "2d12/2d4" } },
188: { "quasit", 30, ISMEAN, { XX, 32, 3, 2, ___, "1d2/1d2/1d4" } },
189: { "rust monster",0, ISMEAN, { XX, 20, 5, 2, ___, "0d0/0d0" } },
190: { "snake", 0, ISMEAN, { XX, 2, 1, 5, ___, "1d3" } },
191: { "troll", 50, ISREGEN|ISMEAN,{ XX, 120, 6, 4, ___, "1d8/1d8/2d6" } },
192: { "umber hulk", 40, ISMEAN, { XX,200, 8, 2, ___, "3d4/3d4/2d5" } },
193: { "vampire", 20, ISREGEN|ISMEAN,{ XX,350, 8, 1, ___, "1d10" } },
194: { "wraith", 0, 0, { XX, 55, 5, 4, ___, "1d6" } },
195: { "xorn", 0, ISMEAN, { XX,190, 7, -2, ___, "1d3/1d3/1d3/4d6" } },
196: { "yeti", 30, 0, { XX, 50, 4, 6, ___, "1d6/1d6" } },
197: { "zombie", 0, ISMEAN, { XX, 6, 2, 8, ___, "1d8" } }
198: };
199: #undef ___
200: #undef XX
201:
202: struct magic_item things[NUMTHINGS] = {
203: { 0, 27 }, /* potion */
204: { 0, 30 }, /* scroll */
205: { 0, 17 }, /* food */
206: { 0, 8 }, /* weapon */
207: { 0, 8 }, /* armor */
208: { 0, 5 }, /* ring */
209: { 0, 5 }, /* stick */
210: };
211:
212: struct magic_item s_magic[MAXSCROLLS] = {
213: { "monster confusion", 8, 140 },
214: { "magic mapping", 5, 150 },
215: { "hold monster", 3, 180 },
216: { "sleep", 5, 5 },
217: { "enchant armor", 8, 160 },
218: { "identify", 27, 100 },
219: { "scare monster", 4, 200 },
220: { "gold detection", 4, 50 },
221: { "teleportation", 7, 165 },
222: { "enchant weapon", 10, 150 },
223: { "create monster", 5, 75 },
224: { "remove curse", 8, 105 },
225: { "aggravate monsters", 4, 20 },
226: { "blank paper", 1, 5 },
227: { "genocide", 1, 300 },
228: };
229:
230: struct magic_item p_magic[MAXPOTIONS] = {
231: { "confusion", 8, 5 },
232: { "paralysis", 10, 5 },
233: { "poison", 8, 5 },
234: { "gain strength", 15, 150 },
235: { "see invisible", 2, 100 },
236: { "healing", 15, 130 },
237: { "monster detection", 6, 130 },
238: { "magic detection", 6, 105 },
239: { "raise level", 2, 250 },
240: { "extra healing", 5, 200 },
241: { "haste self", 4, 190 },
242: { "restore strength", 14, 130 },
243: { "blindness", 4, 5 },
244: { "thirst quenching", 1, 5 },
245: };
246:
247: struct magic_item r_magic[MAXRINGS] = {
248: { "protection", 9, 400 },
249: { "add strength", 9, 400 },
250: { "sustain strength", 5, 280 },
251: { "searching", 10, 420 },
252: { "see invisible", 10, 310 },
253: { "adornment", 1, 10 },
254: { "aggravate monster", 10, 10 },
255: { "dexterity", 8, 440 },
256: { "increase damage", 8, 400 },
257: { "regeneration", 4, 460 },
258: { "slow digestion", 9, 240 },
259: { "teleportation", 5, 30 },
260: { "stealth", 7, 470 },
261: { "maintain armor", 5, 380 },
262: };
263:
264: struct magic_item ws_magic[MAXSTICKS] = {
265: { "light", 12, 250 },
266: { "striking", 9, 75 },
267: { "lightning", 3, 330 },
268: { "fire", 3, 330 },
269: { "cold", 3, 330 },
270: { "polymorph", 15, 310 },
271: { "magic missile", 10, 170 },
272: { "haste monster", 9, 5 },
273: { "slow monster", 11, 350 },
274: { "drain life", 9, 300 },
275: { "nothing", 1, 5 },
276: { "teleport away", 5, 340 },
277: { "teleport to", 5, 50 },
278: { "cancellation", 5, 280 },
279: };
280:
281: struct h_list helpstr[] = {
282: { '?', " prints help" },
283: { '/', " identify object" },
284: { 'h', " left" },
285: { 'j', " down" },
286: { 'k', " up" },
287: { 'l', " right" },
288: { 'y', " up & left" },
289: { 'u', " up & right" },
290: { 'b', " down & left" },
291: { 'n', " down & right" },
292: { 'H', " run left" },
293: { 'J', " run down" },
294: { 'K', " run up" },
295: { 'L', " run right" },
296: { 'Y', " run up & left" },
297: { 'U', " run up & right" },
298: { 'B', " run down & left" },
299: { 'N', " run down & right" },
300: { 't', "<dir> throw something" },
301: { 'f', "<dir> forward until find something" },
302: { 'z', "<dir> zap a wand in a direction" },
303: { '^', "<dir> identify trap type" },
304: { 's', " search for trap/secret door" },
305: { '>', " go down a staircase" },
306: { '<', " go up a staircase" },
307: { '.', " rest for a while" },
308: { 'i', " inventory" },
309: { 'I', " inventory single item" },
310: { 'q', " quaff potion" },
311: { 'r', " read paper" },
312: { 'e', " eat food" },
313: { 'w', " wield a weapon" },
314: { 'W', " wear armor" },
315: { 'T', " take armor off" },
316: { 'P', " put on ring" },
317: { 'R', " remove ring" },
318: { 'd', " drop object" },
319: { 'c', " call object" },
320: { 'D', " recall what's been discovered" },
321: { 'o', " examine/set options" },
322: { CTRL('L'), " redraw screen" },
323: { CTRL('R'), " repeat last message" },
324: { ESCAPE, " cancel command" },
325: { '!', " shell escape" },
326: { 'S', " save game" },
327: { 'Q', " quit" },
328: { 0, 0 }
329: };
CVSweb