static bool quaff_potion(object_type *o_ptr, bool *ident) { /* Analyze the potion */ switch (o_ptr->sval) { case SV_POTION_WATER: case SV_POTION_APPLE_JUICE: case SV_POTION_SLIME_MOLD: { msg_print("You feel less thirsty."); *ident = TRUE; break; } case SV_POTION_SLOWNESS: { if (set_slow(p_ptr->slow + randint(25) + 15)) *ident = TRUE; break; } case SV_POTION_SALT_WATER: { msg_print("The potion makes you vomit!"); (void)set_food(PY_FOOD_STARVE - 1); (void)set_poisoned(0); (void)set_paralyzed(p_ptr->paralyzed + 4); *ident = TRUE; break; } case SV_POTION_POISON: { if (!(p_ptr->resist_pois || p_ptr->oppose_pois)) { if (set_poisoned(p_ptr->poisoned + rand_int(15) + 10)) { *ident = TRUE; } } break; } case SV_POTION_BLINDNESS: { if (!p_ptr->resist_blind) { if (set_blind(p_ptr->blind + rand_int(100) + 100)) { *ident = TRUE; } } break; } case SV_POTION_CONFUSION: { if (!p_ptr->resist_confu) { if (set_confused(p_ptr->confused + rand_int(20) + 15)) { *ident = TRUE; } } break; } case SV_POTION_SLEEP: { if (!p_ptr->free_act) { if (set_paralyzed(p_ptr->paralyzed + rand_int(4) + 4)) { *ident = TRUE; } } break; } case SV_POTION_LOSE_MEMORIES: { if (!p_ptr->hold_life && (p_ptr->exp > 0)) { msg_print("You feel your memories fade."); lose_exp(p_ptr->exp / 4); *ident = TRUE; } break; } case SV_POTION_RUINATION: { msg_print("Your nerves and muscles feel weak and lifeless!"); take_hit(damroll(10, 10), "a potion of Ruination"); (void)dec_stat(A_DEX, 25, TRUE); (void)dec_stat(A_WIS, 25, TRUE); (void)dec_stat(A_CON, 25, TRUE); (void)dec_stat(A_STR, 25, TRUE); (void)dec_stat(A_CHR, 25, TRUE); (void)dec_stat(A_INT, 25, TRUE); *ident = TRUE; break; } case SV_POTION_DEC_STR: { if (do_dec_stat(A_STR)) *ident = TRUE; break; } case SV_POTION_DEC_INT: { if (do_dec_stat(A_INT)) *ident = TRUE; break; } case SV_POTION_DEC_WIS: { if (do_dec_stat(A_WIS)) *ident = TRUE; break; } case SV_POTION_DEC_DEX: { if (do_dec_stat(A_DEX)) *ident = TRUE; break; } case SV_POTION_DEC_CON: { if (do_dec_stat(A_CON)) *ident = TRUE; break; } case SV_POTION_DEC_CHR: { if (do_dec_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_DETONATIONS: { msg_print("Massive explosions rupture your body!"); take_hit(damroll(50, 20), "a potion of Detonation"); (void)set_stun(p_ptr->stun + 75); (void)set_cut(p_ptr->cut + 5000); *ident = TRUE; break; } case SV_POTION_DEATH: { msg_print("A feeling of Death flows through your body."); take_hit(5000, "a potion of Death"); *ident = TRUE; break; } case SV_POTION_INFRAVISION: { if (set_tim_infra(p_ptr->tim_infra + 100 + randint(100))) { *ident = TRUE; } break; } case SV_POTION_DETECT_INVIS: { if (set_tim_invis(p_ptr->tim_invis + 12 + randint(12))) { *ident = TRUE; } break; } case SV_POTION_SLOW_POISON: { if (set_poisoned(p_ptr->poisoned / 2)) *ident = TRUE; break; } case SV_POTION_CURE_POISON: { if (set_poisoned(0)) *ident = TRUE; break; } case SV_POTION_BOLDNESS: { if (set_afraid(0)) *ident = TRUE; break; } case SV_POTION_SPEED: { if (!p_ptr->fast) { if (set_fast(randint(25) + 15)) *ident = TRUE; } else { (void)set_fast(p_ptr->fast + 5); } break; } case SV_POTION_RESIST_HEAT: { if (set_oppose_fire(p_ptr->oppose_fire + randint(10) + 10)) { *ident = TRUE; } break; } case SV_POTION_RESIST_COLD: { if (set_oppose_cold(p_ptr->oppose_cold + randint(10) + 10)) { *ident = TRUE; } break; } case SV_POTION_HEROISM: { if (hp_player(10)) *ident = TRUE; if (set_afraid(0)) *ident = TRUE; if (set_hero(p_ptr->hero + randint(25) + 25)) *ident = TRUE; break; } case SV_POTION_BERSERK_STRENGTH: { if (hp_player(30)) *ident = TRUE; if (set_afraid(0)) *ident = TRUE; if (set_shero(p_ptr->shero + randint(25) + 25)) *ident = TRUE; break; } case SV_POTION_CURE_LIGHT: { if (hp_player(damroll(2, 8))) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_cut(p_ptr->cut - 10)) *ident = TRUE; break; } case SV_POTION_CURE_SERIOUS: { if (hp_player(damroll(4, 8))) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_cut((p_ptr->cut / 2) - 50)) *ident = TRUE; break; } case SV_POTION_CURE_CRITICAL: { if (hp_player(damroll(6, 8))) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_poisoned(0)) *ident = TRUE; if (set_stun(0)) *ident = TRUE; if (set_cut(0)) *ident = TRUE; break; } case SV_POTION_HEALING: { if (hp_player(300)) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_poisoned(0)) *ident = TRUE; if (set_stun(0)) *ident = TRUE; if (set_cut(0)) *ident = TRUE; break; } case SV_POTION_STAR_HEALING: { if (hp_player(1200)) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_poisoned(0)) *ident = TRUE; if (set_stun(0)) *ident = TRUE; if (set_cut(0)) *ident = TRUE; break; } case SV_POTION_LIFE: { msg_print("You feel life flow through your body!"); restore_level(); (void)set_poisoned(0); (void)set_blind(0); (void)set_confused(0); (void)set_image(0); (void)set_stun(0); (void)set_cut(0); (void)do_res_stat(A_STR); (void)do_res_stat(A_CON); (void)do_res_stat(A_DEX); (void)do_res_stat(A_WIS); (void)do_res_stat(A_INT); (void)do_res_stat(A_CHR); /* Recalculate max. hitpoints */ update_stuff(); hp_player(5000); *ident = TRUE; break; } case SV_POTION_RESTORE_MANA: { if (p_ptr->csp < p_ptr->msp) { p_ptr->csp = p_ptr->msp; p_ptr->csp_frac = 0; msg_print("Your feel your head clear."); p_ptr->redraw |= (PR_MANA); p_ptr->window |= (PW_PLAYER_0 | PW_PLAYER_1); *ident = TRUE; } break; } case SV_POTION_RESTORE_EXP: { if (restore_level()) *ident = TRUE; break; } case SV_POTION_RES_STR: { if (do_res_stat(A_STR)) *ident = TRUE; break; } case SV_POTION_RES_INT: { if (do_res_stat(A_INT)) *ident = TRUE; break; } case SV_POTION_RES_WIS: { if (do_res_stat(A_WIS)) *ident = TRUE; break; } case SV_POTION_RES_DEX: { if (do_res_stat(A_DEX)) *ident = TRUE; break; } case SV_POTION_RES_CON: { if (do_res_stat(A_CON)) *ident = TRUE; break; } case SV_POTION_RES_CHR: { if (do_res_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_INC_STR: { if (do_inc_stat(A_STR)) *ident = TRUE; break; } case SV_POTION_INC_INT: { if (do_inc_stat(A_INT)) *ident = TRUE; break; } case SV_POTION_INC_WIS: { if (do_inc_stat(A_WIS)) *ident = TRUE; break; } case SV_POTION_INC_DEX: { if (do_inc_stat(A_DEX)) *ident = TRUE; break; } case SV_POTION_INC_CON: { if (do_inc_stat(A_CON)) *ident = TRUE; break; } case SV_POTION_INC_CHR: { if (do_inc_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_AUGMENTATION: { if (do_inc_stat(A_STR)) *ident = TRUE; if (do_inc_stat(A_INT)) *ident = TRUE; if (do_inc_stat(A_WIS)) *ident = TRUE; if (do_inc_stat(A_DEX)) *ident = TRUE; if (do_inc_stat(A_CON)) *ident = TRUE; if (do_inc_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_ENLIGHTENMENT: { msg_print("An image of your surroundings forms in your mind..."); wiz_lite(); *ident = TRUE; break; } case SV_POTION_STAR_ENLIGHTENMENT: { msg_print("You begin to feel more enlightened..."); message_flush(); wiz_lite(); (void)do_inc_stat(A_INT); (void)do_inc_stat(A_WIS); (void)detect_traps(); (void)detect_doors(); (void)detect_stairs(); (void)detect_treasure(); (void)detect_objects_gold(); (void)detect_objects_normal(); identify_pack(); self_knowledge(); *ident = TRUE; break; } case SV_POTION_SELF_KNOWLEDGE: { msg_print("You begin to know yourself a little better..."); message_flush(); self_knowledge(); *ident = TRUE; break; } case SV_POTION_EXPERIENCE: { if (p_ptr->exp < PY_MAX_EXP) { s32b ee = (p_ptr->exp / 2) + 10; if (ee > 100000L) ee = 100000L; msg_print("You feel more experienced."); gain_exp(ee); *ident = TRUE; } break; } } return (TRUE); }
static bool cast_priest_spell(int Ind, int spell) { player_type *p_ptr = Players[Ind]; object_type *o_ptr; int py = p_ptr->py; int px = p_ptr->px; int Depth = p_ptr->dun_depth; int dir; int plev = p_ptr->lev; switch (spell) { case PRAYER_DETECT_EVIL: { (void)detect_evil(Ind); break; } case PRAYER_CURE_LIGHT_WOUNDS: { (void)hp_player(Ind, damroll(2, 10)); (void)set_cut(Ind, p_ptr->cut - 10); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_CURE_LIGHT_WOUNDS + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, damroll(2, 8)); break; } case PRAYER_BLESS: { (void)set_blessed(Ind, p_ptr->blessed + randint(12) + 12); break; } case PRAYER_REMOVE_FEAR: { (void)set_afraid(Ind, 0); break; } case PRAYER_CALL_LIGHT: { msg_prayer("%s calls light."); (void)lite_area(Ind, damroll(2, (plev / 2)), (plev / 10) + 1); break; } case PRAYER_FIND_TRAPS: { (void)detect_trap(Ind);//detect_traps(Ind) break; } case PRAYER_DETECT_DOORS_STAIRS: { (void)detect_sdoor(Ind);//detect_doors(Ind); //(void)detect_stairs(); break; } case PRAYER_SLOW_POISON: { (void)set_poisoned(Ind, p_ptr->poisoned / 2); break; } case PRAYER_SCARE_MONSTER: { if (!get_aim_dir(Ind, &dir)) return (FALSE); (void)fear_monster(Ind, dir, plev); break; } case PRAYER_PORTAL: { msg_prayer("%s blinks away!"); teleport_player(Ind, plev * 3); break; } case PRAYER_CURE_SERIOUS_WOUNDS: { (void)hp_player(Ind, damroll(4, 10)); (void)set_cut(Ind, (p_ptr->cut / 2) - 20); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_CURE_SERIOUS_WOUNDS + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, damroll(4, 10)); break; } case PRAYER_CHANT: { (void)set_blessed(Ind, p_ptr->blessed + randint(24) + 24); break; } case PRAYER_SANCTUARY: { msg_prayer("For a brief moment, %s is enclosed by a deep blue aura."); (void)sleep_monsters_touch(Ind); break; } case PRAYER_SATISFY_HUNGER: { (void)set_food(Ind, PY_FOOD_MAX - 1); break; } case PRAYER_REMOVE_CURSE: { remove_curse(Ind); break; } case PRAYER_RESIST_HEAT_COLD: { (void)set_oppose_fire(Ind, p_ptr->oppose_fire + randint(10) + 10); (void)set_oppose_cold(Ind, p_ptr->oppose_cold + randint(10) + 10); break; } case PRAYER_NEUTRALIZE_POISON: { (void)set_poisoned(Ind, 0); break; } case PRAYER_ORB_OF_DRAINING: { if (!get_aim_dir(Ind, &dir)) return (FALSE); msg_prayer("%s fires a holy orb!"); fire_ball(Ind, GF_HOLY_ORB, dir, (damroll(3, 6) + plev + (plev / ((p_ptr->cp_ptr->flags & CF_BLESS_WEAPON) ? 2 : 4))), ((plev < 30) ? 2 : 3)); break; } case PRAYER_CURE_CRITICAL_WOUNDS: { (void)hp_player(Ind, damroll(6, 10)); (void)set_cut(Ind, 0); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_CURE_CRITICAL_WOUNDS + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, damroll(6, 10)); break; } case PRAYER_SENSE_INVISIBLE: { (void)set_tim_invis(Ind, p_ptr->tim_invis + randint(24) + 24); break; } case PRAYER_PROTECTION_FROM_EVIL: { (void)set_protevil(Ind, p_ptr->protevil + randint(25) + 3 * p_ptr->lev); break; } case PRAYER_EARTHQUAKE: { msg_prayer("%s murmurs, and the ground shakes!"); earthquake(Depth, py, px, 10); break; } case PRAYER_SENSE_SURROUNDINGS: { map_area(Ind); break; } case PRAYER_CURE_MORTAL_WOUNDS: { (void)hp_player(Ind, damroll(8, 10)); (void)set_stun(Ind, 0); (void)set_cut(Ind, 0); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_CURE_MORTAL_WOUNDS + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, damroll(8, 10)); break; } case PRAYER_TURN_UNDEAD: { msg_prayer("%s tries to turn undead."); (void)turn_undead(Ind); break; } case PRAYER_PRAYER: { (void)set_blessed(Ind, p_ptr->blessed + randint(48) + 48); break; } case PRAYER_DISPEL_UNDEAD: { msg_prayer("%s dispells undead."); (void)dispel_undead(Ind, randint(plev * 3)); break; } case PRAYER_HEAL: { (void)hp_player(Ind, 300); (void)set_stun(Ind, 0); (void)set_cut(Ind, 0); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_HEAL + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, 300); break; } case PRAYER_DISPEL_EVIL: { msg_prayer("%s dispells evil."); (void)dispel_evil(Ind, randint(plev * 3)); break; } case PRAYER_GLYPH_OF_WARDING: { if (warding_glyph(Ind)) { msg_prayer("%s lays down a glyph of warding."); } break; } case PRAYER_HOLY_WORD: { msg_prayer("%s shouts the holy word."); (void)dispel_evil(Ind, randint(plev * 4)); (void)hp_player(Ind, 1000); (void)set_afraid(Ind, 0); (void)set_poisoned(Ind, 0); (void)set_stun(Ind, 0); (void)set_cut(Ind, 0); break; } case PRAYER_DETECT_MONSTERS: { (void)detect_creatures(Ind, TRUE); break; } case PRAYER_DETECTION: { (void)detection(Ind);//detect_all(Ind) break; } case PRAYER_PERCEPTION: { return ident_spell(Ind); } case PRAYER_PROBING: { (void)probing(Ind); break; } case PRAYER_CLAIRVOYANCE: { msg_prayer("An image of your surroundings forms in your mind..."); wiz_lite(Ind); break; } case PRAYER_CURE_SERIOUS_WOUNDS2: { (void)hp_player(Ind, damroll(4, 10)); (void)set_cut(Ind, 0); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_CURE_SERIOUS_WOUNDS2 + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, damroll(4, 10)); break; } case PRAYER_CURE_MORTAL_WOUNDS2: { (void)hp_player(Ind, damroll(8, 10)); (void)set_stun(Ind, 0); (void)set_cut(Ind, 0); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_CURE_MORTAL_WOUNDS2 + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, damroll(8, 10)); break; } case PRAYER_HEALING: { (void)hp_player(Ind, 2000); (void)set_stun(Ind, 0); (void)set_cut(Ind, 0); break; } /* MAngband-specific: Heal Projectile */ case PRAYER_HEALING + SPELL_PROJECTED: { if (!get_aim_dir(Ind, &dir)) return FALSE; (void)heal_player_ball(Ind, dir, 2000); break; } /* With MAngband-specific addon: ressurect ghosts */ case PRAYER_RESTORATION: { if (!do_scroll_life(Ind)) { (void)do_res_stat(Ind, A_STR); (void)do_res_stat(Ind, A_INT); (void)do_res_stat(Ind, A_WIS); (void)do_res_stat(Ind, A_DEX); (void)do_res_stat(Ind, A_CON); (void)do_res_stat(Ind, A_CHR); } break; } /* With Mangband-sepcific addon: restore others */ case PRAYER_REMEMBRANCE: { if (!do_restoreXP_other(Ind)) { (void)restore_level(Ind); } break; } case PRAYER_DISPEL_UNDEAD2: { msg_prayer("%s dispells undead."); (void)dispel_undead(Ind, randint(plev * 4)); break; } case PRAYER_DISPEL_EVIL2: { msg_prayer("%s dispells evil."); (void)dispel_evil(Ind, randint(plev * 4)); break; } case PRAYER_BANISH_EVIL: { msg_prayer("%s speaks a holy curse on nearby evil!"); if (banish_evil(Ind, 100)) { msg_print(Ind, "The power of your god banishes evil!"); } break; } case PRAYER_WORD_OF_DESTRUCTION: { msg_prayer("%s unleashes a spell of great power!"); destroy_area(Depth, py, px, 15, TRUE); break; } case PRAYER_ANNIHILATION: { if (!get_aim_dir(Ind, &dir)) return (FALSE); msg_prayer("%s fires a massive bolt filled with pure energy!"); drain_life(Ind, dir, 200); break; } case PRAYER_UNBARRING_WAYS: { msg_prayer("%s sways his hands."); (void)destroy_doors_touch(Ind); break; } case PRAYER_RECHARGING: { return recharge(Ind, 15); } case PRAYER_DISPEL_CURSE: { (void)remove_all_curse(Ind); break; } case PRAYER_ENCHANT_WEAPON: { return enchant_spell(Ind, rand_int(4) + 1, rand_int(4) + 1, 0); } case PRAYER_ENCHANT_ARMOUR: { return enchant_spell(Ind, 0, 0, rand_int(3) + 2); } case PRAYER_ELEMENTAL_BRAND: { brand_weapon(Ind); break; } case PRAYER_BLINK: { msg_prayer("%s blinks away!"); teleport_player(Ind, 10); break; } case PRAYER_TELEPORT_SELF: { msg_prayer("%s teleports away!"); teleport_player(Ind, plev * 8); break; } case PRAYER_TELEPORT_OTHER: { if (!get_aim_dir(Ind, &dir)) return (FALSE); msg_prayer("%s prays for divine intervention."); (void)teleport_monster(Ind, dir); break; } case PRAYER_TELEPORT_LEVEL: { (void)teleport_player_level(Ind); break; } case PRAYER_WORD_OF_RECALL: { o_ptr = &p_ptr->inventory[get_spell_book(Ind, spell)]; set_recall(Ind, o_ptr); break; } case PRAYER_ALTER_REALITY: { (void)alter_reality(Ind, FALSE); break; } /* Paranoia: shouldn't happen with safe clients */ default: { msg_print(Ind, "You cannot project that spell on other players."); return (FALSE); } } /* Success */ return (TRUE); }
static bool quaff_potion(object_type *o_ptr, bool *ident) { /* Analyze the potion */ switch (o_ptr->sval) { case SV_POTION_WATER: case SV_POTION_APPLE_JUICE: case SV_POTION_SLIME_MOLD: { msg_print("Вы утолили жажду."); *ident = TRUE; break; } case SV_POTION_SLOWNESS: { if (set_slow(p_ptr->slow + randint(25) + 15)) *ident = TRUE; break; } case SV_POTION_SALT_WATER: { msg_print("Вя-а-а! Вас стошнило!"); (void)set_food(PY_FOOD_STARVE - 1); (void)set_poisoned(0); (void)set_paralyzed(p_ptr->paralyzed + 4); *ident = TRUE; break; } case SV_POTION_POISON: { if (!(p_ptr->resist_pois || p_ptr->oppose_pois)) { if (set_poisoned(p_ptr->poisoned + rand_int(15) + 10)) { *ident = TRUE; } } break; } case SV_POTION_BLINDNESS: { if (!p_ptr->resist_blind) { if (set_blind(p_ptr->blind + rand_int(100) + 100)) { *ident = TRUE; } } break; } case SV_POTION_CONFUSION: { if (!p_ptr->resist_confu) { if (set_confused(p_ptr->confused + rand_int(20) + 15)) { *ident = TRUE; } } break; } case SV_POTION_SLEEP: { if (!p_ptr->free_act) { if (set_paralyzed(p_ptr->paralyzed + rand_int(4) + 4)) { *ident = TRUE; } } break; } case SV_POTION_LOSE_MEMORIES: { if (!p_ptr->hold_life && (p_ptr->exp > 0)) { msg_print("Ваша жизнь меркнет."); lose_exp(p_ptr->exp / 4); *ident = TRUE; } break; } case SV_POTION_RUINATION: { msg_print("Ваши нервы и мускулы кажутся слабыми и безжизненными!"); take_hit(damroll(10, 10), "зельем Ослабевания"); (void)dec_stat(A_DEX, 25, TRUE); (void)dec_stat(A_WIS, 25, TRUE); (void)dec_stat(A_CON, 25, TRUE); (void)dec_stat(A_STR, 25, TRUE); (void)dec_stat(A_CHR, 25, TRUE); (void)dec_stat(A_INT, 25, TRUE); *ident = TRUE; break; } case SV_POTION_DEC_STR: { if (do_dec_stat(A_STR)) *ident = TRUE; break; } case SV_POTION_DEC_INT: { if (do_dec_stat(A_INT)) *ident = TRUE; break; } case SV_POTION_DEC_WIS: { if (do_dec_stat(A_WIS)) *ident = TRUE; break; } case SV_POTION_DEC_DEX: { if (do_dec_stat(A_DEX)) *ident = TRUE; break; } case SV_POTION_DEC_CON: { if (do_dec_stat(A_CON)) *ident = TRUE; break; } case SV_POTION_DEC_CHR: { if (do_dec_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_DETONATIONS: { msg_print("Массивные взрывы сотрясают ваше тело!"); take_hit(damroll(50, 20), "зельем взрыва"); (void)set_stun(p_ptr->stun + 75); (void)set_cut(p_ptr->cut + 5000); *ident = TRUE; break; } case SV_POTION_DEATH: { msg_print("Чувство Смерти протекает сквозь вас..."); take_hit(5000, "зельем Смерти"); *ident = TRUE; break; } case SV_POTION_INFRAVISION: { if (set_tim_infra(p_ptr->tim_infra + 100 + randint(100))) { *ident = TRUE; } break; } case SV_POTION_DETECT_INVIS: { if (set_tim_invis(p_ptr->tim_invis + 12 + randint(12))) { *ident = TRUE; } break; } case SV_POTION_SLOW_POISON: { if (set_poisoned(p_ptr->poisoned / 2)) *ident = TRUE; break; } case SV_POTION_CURE_POISON: { if (set_poisoned(0)) *ident = TRUE; break; } case SV_POTION_BOLDNESS: { if (set_afraid(0)) *ident = TRUE; break; } case SV_POTION_SPEED: { if (!p_ptr->fast) { if (set_fast(randint(25) + 15)) *ident = TRUE; } else { (void)set_fast(p_ptr->fast + 5); } break; } case SV_POTION_RESIST_HEAT: { if (set_oppose_fire(p_ptr->oppose_fire + randint(10) + 10)) { *ident = TRUE; } break; } case SV_POTION_RESIST_COLD: { if (set_oppose_cold(p_ptr->oppose_cold + randint(10) + 10)) { *ident = TRUE; } break; } case SV_POTION_HEROISM: { if (hp_player(10)) *ident = TRUE; if (set_afraid(0)) *ident = TRUE; if (set_hero(p_ptr->hero + randint(25) + 25)) *ident = TRUE; break; } case SV_POTION_BERSERK_STRENGTH: { if (hp_player(30)) *ident = TRUE; if (set_afraid(0)) *ident = TRUE; if (set_shero(p_ptr->shero + randint(25) + 25)) *ident = TRUE; break; } case SV_POTION_CURE_LIGHT: { if (hp_player(damroll(2, 8))) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_cut(p_ptr->cut - 10)) *ident = TRUE; break; } case SV_POTION_CURE_SERIOUS: { if (hp_player(damroll(4, 8))) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_cut((p_ptr->cut / 2) - 50)) *ident = TRUE; break; } case SV_POTION_CURE_CRITICAL: { if (hp_player(damroll(6, 8))) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_poisoned(0)) *ident = TRUE; if (set_stun(0)) *ident = TRUE; if (set_cut(0)) *ident = TRUE; break; } case SV_POTION_HEALING: { if (hp_player(300)) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_poisoned(0)) *ident = TRUE; if (set_stun(0)) *ident = TRUE; if (set_cut(0)) *ident = TRUE; break; } case SV_POTION_STAR_HEALING: { if (hp_player(1200)) *ident = TRUE; if (set_blind(0)) *ident = TRUE; if (set_confused(0)) *ident = TRUE; if (set_poisoned(0)) *ident = TRUE; if (set_stun(0)) *ident = TRUE; if (set_cut(0)) *ident = TRUE; break; } case SV_POTION_LIFE: { msg_print("Чуство Жизни протекает в вас!"); restore_level(); (void)set_poisoned(0); (void)set_blind(0); (void)set_confused(0); (void)set_image(0); (void)set_stun(0); (void)set_cut(0); (void)do_res_stat(A_STR); (void)do_res_stat(A_CON); (void)do_res_stat(A_DEX); (void)do_res_stat(A_WIS); (void)do_res_stat(A_INT); (void)do_res_stat(A_CHR); /* Recalculate max. hitpoints */ update_stuff(); hp_player(5000); *ident = TRUE; break; } case SV_POTION_RESTORE_MANA: { if (p_ptr->csp < p_ptr->msp) { p_ptr->csp = p_ptr->msp; p_ptr->csp_frac = 0; msg_print("Ваша голова проясняется."); p_ptr->redraw |= (PR_MANA); p_ptr->window |= (PW_PLAYER_0 | PW_PLAYER_1); *ident = TRUE; } break; } case SV_POTION_RESTORE_EXP: { if (restore_level()) *ident = TRUE; break; } case SV_POTION_RES_STR: { if (do_res_stat(A_STR)) *ident = TRUE; break; } case SV_POTION_RES_INT: { if (do_res_stat(A_INT)) *ident = TRUE; break; } case SV_POTION_RES_WIS: { if (do_res_stat(A_WIS)) *ident = TRUE; break; } case SV_POTION_RES_DEX: { if (do_res_stat(A_DEX)) *ident = TRUE; break; } case SV_POTION_RES_CON: { if (do_res_stat(A_CON)) *ident = TRUE; break; } case SV_POTION_RES_CHR: { if (do_res_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_INC_STR: { if (do_inc_stat(A_STR)) *ident = TRUE; break; } case SV_POTION_INC_INT: { if (do_inc_stat(A_INT)) *ident = TRUE; break; } case SV_POTION_INC_WIS: { if (do_inc_stat(A_WIS)) *ident = TRUE; break; } case SV_POTION_INC_DEX: { if (do_inc_stat(A_DEX)) *ident = TRUE; break; } case SV_POTION_INC_CON: { if (do_inc_stat(A_CON)) *ident = TRUE; break; } case SV_POTION_INC_CHR: { if (do_inc_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_AUGMENTATION: { if (do_inc_stat(A_STR)) *ident = TRUE; if (do_inc_stat(A_INT)) *ident = TRUE; if (do_inc_stat(A_WIS)) *ident = TRUE; if (do_inc_stat(A_DEX)) *ident = TRUE; if (do_inc_stat(A_CON)) *ident = TRUE; if (do_inc_stat(A_CHR)) *ident = TRUE; break; } case SV_POTION_ENLIGHTENMENT: { msg_print("Изображение подземелья формируется у вас в голове..."); wiz_lite(); *ident = TRUE; break; } case SV_POTION_STAR_ENLIGHTENMENT: { msg_print("Вы чувствуете себя просвещенным..."); message_flush(); wiz_lite(); (void)do_inc_stat(A_INT); (void)do_inc_stat(A_WIS); (void)detect_traps(); (void)detect_doors(); (void)detect_stairs(); (void)detect_treasure(); (void)detect_objects_gold(); (void)detect_objects_normal(); identify_pack(); self_knowledge(); *ident = TRUE; break; } case SV_POTION_SELF_KNOWLEDGE: { msg_print("Вы познаете себя немного лучше..."); message_flush(); self_knowledge(); *ident = TRUE; break; } case SV_POTION_EXPERIENCE: { if (p_ptr->exp < PY_MAX_EXP) { s32b ee = (p_ptr->exp / 2) + 10; if (ee > 100000L) ee = 100000L; msg_print("Вы чувствуете себя более опытным."); gain_exp(ee); *ident = TRUE; } break; } } return (TRUE); }