|
|
1.1 root 1:
2: /*
3: * Special wizard commands (some of which are also non-wizard commands
4: * under strange circumstances)
5: *
6: * @(#)wizard.c 3.8 (Berkeley) 6/3/81
7: */
8:
9: #include <curses.h>
10: #include <ctype.h>
11: #include "rogue.h"
12:
13: /*
14: * whatis:
15: * What a certin object is
16: */
17:
18: whatis()
19: {
20: register struct object *obj;
21: register struct linked_list *item;
22:
23: if ((item = get_item("identify", 0)) == NULL)
24: return;
25: obj = (struct object *) ldata(item);
26: switch (obj->o_type)
27: {
28: when SCROLL:
29: s_know[obj->o_which] = TRUE;
30: if (s_guess[obj->o_which])
31: {
32: cfree(s_guess[obj->o_which]);
33: s_guess[obj->o_which] = NULL;
34: }
35: when POTION:
36: p_know[obj->o_which] = TRUE;
37: if (p_guess[obj->o_which])
38: {
39: cfree(p_guess[obj->o_which]);
40: p_guess[obj->o_which] = NULL;
41: }
42: when STICK:
43: ws_know[obj->o_which] = TRUE;
44: obj->o_flags |= ISKNOW;
45: if (ws_guess[obj->o_which])
46: {
47: cfree(ws_guess[obj->o_which]);
48: ws_guess[obj->o_which] = NULL;
49: }
50: when WEAPON:
51: case ARMOR:
52: obj->o_flags |= ISKNOW;
53: when RING:
54: r_know[obj->o_which] = TRUE;
55: obj->o_flags |= ISKNOW;
56: if (r_guess[obj->o_which])
57: {
58: cfree(r_guess[obj->o_which]);
59: r_guess[obj->o_which] = NULL;
60: }
61: }
62: msg(inv_name(obj, FALSE));
63: }
64:
65: /*
66: * create_obj:
67: * Wizard command for getting anything he wants
68: */
69:
70: create_obj()
71: {
72: register struct linked_list *item;
73: register struct object *obj;
74: register char ch, bless;
75:
76: item = new_item(sizeof *obj);
77: obj = (struct object *) ldata(item);
78: msg("Type of item: ");
79: obj->o_type = readchar();
80: mpos = 0;
81: msg("Which %c do you want? (0-f)", obj->o_type);
82: obj->o_which = (isdigit((ch = readchar())) ? ch - '0' : ch - 'a' + 10);
83: obj->o_group = 0;
84: obj->o_count = 1;
85: mpos = 0;
86: if (obj->o_type == WEAPON || obj->o_type == ARMOR)
87: {
88: msg("Blessing? (+,-,n)");
89: bless = readchar();
90: mpos = 0;
91: if (bless == '-')
92: obj->o_flags |= ISCURSED;
93: if (obj->o_type == WEAPON)
94: {
95: init_weapon(obj, obj->o_which);
96: if (bless == '-')
97: obj->o_hplus -= rnd(3)+1;
98: if (bless == '+')
99: obj->o_hplus += rnd(3)+1;
100: }
101: else
102: {
103: obj->o_ac = a_class[obj->o_which];
104: if (bless == '-')
105: obj->o_ac += rnd(3)+1;
106: if (bless == '+')
107: obj->o_ac -= rnd(3)+1;
108: }
109: }
110: else if (obj->o_type == RING)
111: switch (obj->o_which)
112: {
113: case R_PROTECT:
114: case R_ADDSTR:
115: case R_ADDHIT:
116: case R_ADDDAM:
117: msg("Blessing? (+,-,n)");
118: bless = readchar();
119: mpos = 0;
120: if (bless == '-')
121: obj->o_flags |= ISCURSED;
122: obj->o_ac = (bless == '-' ? -1 : rnd(2) + 1);
123: }
124: else if (obj->o_type == STICK)
125: fix_stick(obj);
126: add_pack(item, FALSE);
127: }
128:
129: /*
130: * telport:
131: * Bamf the hero someplace else
132: */
133:
134: teleport()
135: {
136: register int rm;
137: coord c;
138:
139: c = hero;
140: mvwaddch(cw, hero.y, hero.x, mvwinch(stdscr, hero.y, hero.x));
141: do
142: {
143: rm = rnd_room();
144: rnd_pos(&rooms[rm], &hero);
145: } until(winat(hero.y, hero.x) == FLOOR);
146: light(&c);
147: light(&hero);
148: mvwaddch(cw, hero.y, hero.x, PLAYER);
149: /*
150: * turn off ISHELD in case teleportation was done while fighting
151: * a Fungi
152: */
153: if (on(player, ISHELD)) {
154: player.t_flags &= ~ISHELD;
155: fung_hit = 0;
156: strcpy(monsters['F'-'A'].m_stats.s_dmg, "000d0");
157: }
158: count = 0;
159: running = FALSE;
160: #if USG==1
161: ioctl(_tty_ch, TCFLSH, 0);
162: #else
163: raw(); /* flush typeahead */
164: noraw();
165: #endif
166: return rm;
167: }
168:
169: /*
170: * passwd:
171: * see if user knows password
172: */
173:
174: passwd()
175: {
176: register char *sp, c;
177: char buf[80], *crypt();
178:
179: msg("Wizard's Password:");
180: mpos = 0;
181: sp = buf;
182: while ((c = getchar()) != '\n' && c != '\r' && c != '\033')
183: #if USG==1
184: if (c == _tty.c_cc[VKILL])
185: #else
186: if (c == _tty.sg_kill)
187: #endif
188: sp = buf;
189: #if USG==1
190: else if (c == _tty.c_cc[VERASE] && sp > buf)
191: #else
192: else if (c == _tty.sg_erase && sp > buf)
193: #endif
194: sp--;
195: else
196: *sp++ = c;
197: if (sp == buf)
198: return FALSE;
199: *sp = '\0';
200: return (strcmp(PASSWD, crypt(buf, "mT")) == 0);
201: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.