Annotation of early-roguelike/rogue4/wizard.c, Revision 1.1.1.1
1.1 rubenllo 1:
2: /*
3: * Special wizard commands (some of which are also non-wizard commands
4: * under strange circumstances)
5: *
6: * @(#)wizard.c 4.14 (Berkeley) 1/26/82
7: */
8:
9: #include <curses.h>
10: #include <ctype.h>
11: #include <stdlib.h>
12: #include <string.h>
13: #include "rogue.h"
14:
15: /*
16: * whatis:
17: * What a certin object is
18: */
19: void
20: whatis(bool insist)
21: {
22: register THING *obj;
23:
24: if (pack == NULL)
25: {
26: msg("You don't have anything in your pack to identify");
27: return;
28: }
29:
30: for (;;)
31: if ((obj = get_item("identify", 0)) == NULL && insist)
32: msg("You must identify something");
33: else
34: break;
35:
36: if (!insist && obj == NULL)
37: return;
38:
39: switch (obj->o_type)
40: {
41: case SCROLL:
42: s_know[obj->o_which] = TRUE;
43: if (s_guess[obj->o_which])
44: {
45: free(s_guess[obj->o_which]);
46: s_guess[obj->o_which] = NULL;
47: }
48: when POTION:
49: p_know[obj->o_which] = TRUE;
50: if (p_guess[obj->o_which])
51: {
52: free(p_guess[obj->o_which]);
53: p_guess[obj->o_which] = NULL;
54: }
55: when STICK:
56: ws_know[obj->o_which] = TRUE;
57: obj->o_flags |= ISKNOW;
58: if (ws_guess[obj->o_which])
59: {
60: free(ws_guess[obj->o_which]);
61: ws_guess[obj->o_which] = NULL;
62: }
63: when WEAPON:
64: case ARMOR:
65: obj->o_flags |= ISKNOW;
66: when RING:
67: r_know[obj->o_which] = TRUE;
68: obj->o_flags |= ISKNOW;
69: if (r_guess[obj->o_which])
70: {
71: free(r_guess[obj->o_which]);
72: r_guess[obj->o_which] = NULL;
73: }
74: }
75: msg(inv_name(obj, FALSE));
76: }
77:
78: #ifdef WIZARD
79: /*
80: * create_obj:
81: * Wizard command for getting anything he wants
82: */
83: void
84: create_obj(void)
85: {
86: register THING *obj;
87: register char ch, bless;
88:
89: obj = new_item();
90: msg("type of item: ");
91: obj->o_type = readchar();
92: mpos = 0;
93: msg("which %c do you want? (0-f)", obj->o_type);
94: obj->o_which = (isdigit((ch = readchar())) ? ch - '0' : ch - 'a' + 10);
95: obj->o_group = 0;
96: obj->o_count = 1;
97: mpos = 0;
98: if (obj->o_type == WEAPON || obj->o_type == ARMOR)
99: {
100: msg("blessing? (+,-,n)");
101: bless = readchar();
102: mpos = 0;
103: if (bless == '-')
104: obj->o_flags |= ISCURSED;
105: if (obj->o_type == WEAPON)
106: {
107: init_weapon(obj, obj->o_which);
108: if (bless == '-')
109: obj->o_hplus -= rnd(3)+1;
110: if (bless == '+')
111: obj->o_hplus += rnd(3)+1;
112: }
113: else
114: {
115: obj->o_ac = a_class[obj->o_which];
116: if (bless == '-')
117: obj->o_ac += rnd(3)+1;
118: if (bless == '+')
119: obj->o_ac -= rnd(3)+1;
120: }
121: }
122: else if (obj->o_type == RING)
123: switch (obj->o_which)
124: {
125: case R_PROTECT:
126: case R_ADDSTR:
127: case R_ADDHIT:
128: case R_ADDDAM:
129: msg("blessing? (+,-,n)");
130: bless = readchar();
131: mpos = 0;
132: if (bless == '-')
133: obj->o_flags |= ISCURSED;
134: obj->o_ac = (bless == '-' ? -1 : rnd(2) + 1);
135: when R_AGGR:
136: case R_TELEPORT:
137: obj->o_flags |= ISCURSED;
138: }
139: else if (obj->o_type == STICK)
140: fix_stick(obj);
141: else if (obj->o_type == GOLD)
142: {
143: msg("how much?");
144: get_num(&obj->o_goldval, stdscr);
145: }
146: add_pack(obj, FALSE);
147: }
148: #endif
149:
150: /*
151: * telport:
152: * Bamf the hero someplace else
153: */
154: int
155: teleport(void)
156: {
157: register int rm;
158: coord c;
159:
160: mvaddch(hero.y, hero.x, chat(hero.y, hero.x));
161: do
162: {
163: rm = rnd_room();
164: rnd_pos(&rooms[rm], &c);
165: } until (step_ok(winat(c.y, c.x)));
166: if (&rooms[rm] != proom)
167: {
168: leave_room(&hero);
169: hero = c;
170: enter_room(&hero);
171: }
172: else
173: {
174: hero = c;
175: look(TRUE);
176: }
177: mvaddch(hero.y, hero.x, PLAYER);
178: /*
179: * turn off ISHELD in case teleportation was done while fighting
180: * a Fungi
181: */
182: if (on(player, ISHELD)) {
183: THING *mon;
184:
185: player.t_flags &= ~ISHELD;
186: fung_hit = 0;
187: for (mon = mlist; mon != NULL; mon = next(mon)) {
188: if (mon->t_type == 'F')
189: strcpy(mon->t_stats.s_dmg, "0d0");
190: }
191: }
192: no_move = 0;
193: count = 0;
194: running = FALSE;
195: flush_type();
196: return rm;
197: }
198:
199: #ifdef WIZARD
200: /*
201: * passwd:
202: * See if user knows password
203: */
204: bool
205: passwd(void)
206: {
207: register char *sp, c;
208: char buf[MAXSTR], *xcrypt();
209:
210: msg("wizard's Password:");
211: mpos = 0;
212: sp = buf;
213: while ((c = readchar()) != '\n' && c != '\r' && c != ESCAPE)
214: if (c == md_killchar())
215: sp = buf;
216: else if (c == md_erasechar() && sp > buf)
217: sp--;
218: else
219: *sp++ = c;
220: if (sp == buf)
221: return FALSE;
222: *sp = '\0';
223: return (strcmp(PASSWD, xcrypt(buf, "mT")) == 0);
224: }
225:
226: /*
227: * show_map:
228: * Print out the map for the wizard
229: */
230: void
231: show_map(void)
232: {
233: register int y, x, real;
234:
235: wclear(hw);
236: for (y = 1; y < LINES - 1; y++)
237: for (x = 0; x < COLS; x++)
238: {
239: if (!(real = flat(y, x) & F_REAL))
240: wstandout(hw);
241: wmove(hw, y, x);
242: waddch(hw, chat(y, x));
243: if (!real)
244: wstandend(hw);
245: }
246: show_win(hw, "---More (level map)---");
247: }
248: #endif
CVSweb