Annotation of early-roguelike/rogue3/potions.c, Revision 1.1.1.1
1.1 rubenllo 1: /*
2: * @(#)potions.c 3.1 3.1 5/7/81
3: * Function(s) for dealing with potions
4: *
5: * Rogue: Exploring the Dungeons of Doom
6: * Copyright (C) 1980, 1981 Michael Toy, Ken Arnold and Glenn Wichman
7: * All rights reserved.
8: *
9: * See the file LICENSE.TXT for full copyright and licensing information.
10: */
11:
12: #include "curses.h"
13: #include <stdlib.h>
14: #include <string.h>
15: #include "rogue.h"
16:
17: void
18: quaff()
19: {
20: struct object *obj;
21: struct linked_list *item, *titem;
22: struct thing *th;
23: char buf[80];
24:
25: item = get_item("quaff", POTION);
26: /*
27: * Make certain that it is somethings that we want to drink
28: */
29: if (item == NULL)
30: return;
31: obj = (struct object *) ldata(item);
32: if (obj->o_type != POTION)
33: {
34: if (!terse)
35: msg("Yuk! Why would you want to drink that?");
36: else
37: msg("That's undrinkable");
38: return;
39: }
40: if (obj == cur_weapon)
41: cur_weapon = NULL;
42:
43: /*
44: * Calculate the effect it has on the poor guy.
45: */
46: switch(obj->o_which)
47: {
48: case P_CONFUSE:
49: if (off(player, ISHUH))
50: msg("Wait, what's going on here. Huh? What? Who?");
51:
52: if (on(player, ISHUH))
53: lengthen(unconfuse, rnd(8)+HUHDURATION);
54: else
55: fuse(unconfuse, 0, rnd(8)+HUHDURATION, AFTER);
56:
57: player.t_flags |= ISHUH;
58: p_know[P_CONFUSE] = TRUE;
59: when P_POISON:
60: if (!ISWEARING(R_SUSTSTR))
61: {
62: chg_str(-(rnd(3)+1));
63: msg("You feel very sick now.");
64: }
65: else
66: msg("You feel momentarily sick");
67: p_know[P_POISON] = TRUE;
68: when P_HEALING:
69: if ((pstats.s_hpt += roll(pstats.s_lvl, 4)) > max_hp)
70: pstats.s_hpt = ++max_hp;
71: msg("You begin to feel better.");
72: sight();
73: p_know[P_HEALING] = TRUE;
74: when P_STRENGTH:
75: msg("You feel stronger, now. What bulging muscles!");
76: chg_str(1);
77: p_know[P_STRENGTH] = TRUE;
78: when P_MFIND:
79: /*
80: * Potion of monster detection, if there are monters, detect them
81: */
82: if (mlist != NULL)
83: {
84: wclear(hw);
85: overwrite(mw, hw);
86: show_win(hw,
87: "You begin to sense the presence of monsters.--More--");
88: p_know[P_MFIND] = TRUE;
89: }
90: else
91: msg("You have a strange feeling for a moment, then it passes.");
92: when P_TFIND:
93: /*
94: * Potion of magic detection. Show the potions and scrolls
95: */
96: if (lvl_obj != NULL)
97: {
98: struct linked_list *mobj;
99: struct object *tp;
100: int show;
101:
102: show = FALSE;
103: wclear(hw);
104: for (mobj = lvl_obj; mobj != NULL; mobj = next(mobj))
105: {
106: tp = (struct object *) ldata(mobj);
107: if (is_magic(tp))
108: {
109: show = TRUE;
110: mvwaddch(hw, tp->o_pos.y, tp->o_pos.x, MAGIC);
111: }
112: p_know[P_TFIND] = TRUE;
113: }
114: for (titem = mlist; titem != NULL; titem = next(titem))
115: {
116: struct linked_list *pitem;
117:
118: th = (struct thing *) ldata(titem);
119: for (pitem = th->t_pack; pitem != NULL; pitem = next(pitem))
120: {
121: if (is_magic(OBJPTR(pitem)))
122: {
123: show = TRUE;
124: mvwaddch(hw, th->t_pos.y, th->t_pos.x, MAGIC);
125: }
126: p_know[P_TFIND] = TRUE;
127: }
128: }
129: if (show)
130: {
131: show_win(hw,
132: "You sense the presence of magic on this level.--More--");
133: break;
134: }
135: }
136: msg("You have a strange feeling for a moment, then it passes.");
137: when P_PARALYZE:
138: msg("You can't move.");
139: no_command = HOLDTIME;
140: p_know[P_PARALYZE] = TRUE;
141: when P_SEEINVIS:
142: msg("This potion tastes like %s juice.", fruit);
143: if (off(player, CANSEE))
144: {
145: player.t_flags |= CANSEE;
146: fuse(unsee, 0, SEEDURATION, AFTER);
147: light(&hero);
148: }
149: sight();
150: when P_RAISE:
151: msg("You suddenly feel much more skillful");
152: p_know[P_RAISE] = TRUE;
153: raise_level();
154: when P_XHEAL:
155: if ((pstats.s_hpt += roll(pstats.s_lvl, 8)) > max_hp)
156: pstats.s_hpt = ++max_hp;
157: msg("You begin to feel much better.");
158: p_know[P_XHEAL] = TRUE;
159: sight();
160: when P_HASTE:
161: if (add_haste(TRUE))
162: msg("You feel yourself moving much faster.");
163: p_know[P_HASTE] = TRUE;
164: when P_RESTORE:
165: msg("Hey, this tastes great. It make you feel warm all over.");
166: if (pstats.s_str.st_str < max_stats.s_str.st_str ||
167: (pstats.s_str.st_str == 18 &&
168: pstats.s_str.st_add < max_stats.s_str.st_add))
169: pstats.s_str = max_stats.s_str;
170: when P_BLIND:
171: msg("A cloak of darkness falls around you.");
172: if (off(player, ISBLIND))
173: {
174: player.t_flags |= ISBLIND;
175: fuse(sight, 0, SEEDURATION, AFTER);
176: look(FALSE);
177: }
178: p_know[P_BLIND] = TRUE;
179: when P_NOP:
180: msg("This potion tastes extremely dull.");
181: otherwise:
182: msg("What an odd tasting potion!");
183: return;
184: }
185: status();
186: if (p_know[obj->o_which] && p_guess[obj->o_which])
187: {
188: free(p_guess[obj->o_which]);
189: p_guess[obj->o_which] = NULL;
190: }
191: else if (!p_know[obj->o_which] && askme && p_guess[obj->o_which] == NULL)
192: {
193: msg(terse ? "Call it: " : "What do you want to call it? ");
194: if (get_str(buf, cw) == NORM)
195: {
196: p_guess[obj->o_which] = malloc((unsigned int) strlen(buf) + 1);
197: if (p_guess[obj->o_which] != NULL)
198: strcpy(p_guess[obj->o_which], buf);
199: }
200: }
201: /*
202: * Throw the item away
203: */
204: inpack--;
205: if (obj->o_count > 1)
206: obj->o_count--;
207: else
208: {
209: detach(pack, item);
210: discard(item);
211: }
212: }
CVSweb