1 #include "racial/racial-vampire.h"
2 #include "dungeon/dungeon-flag-types.h"
3 #include "dungeon/dungeon.h"
4 #include "floor/geometry.h"
5 #include "hpmp/hp-mp-processor.h"
6 #include "player/digestion-processor.h"
7 #include "player/player-status.h"
8 #include "spell-kind/spells-specific-bolt.h"
9 #include "system/floor-type-definition.h"
10 #include "system/grid-type-definition.h"
11 #include "system/player-type-definition.h"
12 #include "target/target-getter.h"
13 #include "view/display-messages.h"
15 bool vampirism(player_type *player_ptr)
17 if (d_info[player_ptr->dungeon_idx].flags.has(DungeonFeatureType::NO_MELEE)) {
18 msg_print(_("なぜか攻撃することができない。", "Something prevents you from attacking."));
23 if (!get_direction(player_ptr, &dir, false, false))
26 POSITION y = player_ptr->y + ddy[dir];
27 POSITION x = player_ptr->x + ddx[dir];
29 g_ptr = &player_ptr->current_floor_ptr->grid_array[y][x];
30 stop_mouth(player_ptr);
31 if (!(g_ptr->m_idx)) {
32 msg_print(_("何もない場所に噛みついた!", "You bite into thin air!"));
36 msg_print(_("あなたはニヤリとして牙をむいた...", "You grin and bare your fangs..."));
38 int dummy = player_ptr->lev * 2;
39 if (!hypodynamic_bolt(player_ptr, dir, dummy)) {
40 msg_print(_("げぇ!ひどい味だ。", "Yechh. That tastes foul."));
44 if (player_ptr->food < PY_FOOD_FULL)
45 (void)hp_player(player_ptr, dummy);
47 msg_print(_("あなたは空腹ではありません。", "You were not hungry."));
49 /* Gain nutritional sustenance: 150/hp drained */
50 /* A Food ration gives 5000 food points (by contrast) */
51 /* Don't ever get more than "Full" this way */
52 /* But if we ARE Gorged, it won't cure us */
53 dummy = player_ptr->food + std::min(5000, 100 * dummy);
54 if (player_ptr->food < PY_FOOD_MAX) /* Not gorged already */
55 (void)set_food(player_ptr, dummy >= PY_FOOD_MAX ? PY_FOOD_MAX - 1 : dummy);