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