Annotation of early-roguelike/rogue3/potions.c, Revision 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