From 1573af5e8fdd2910d32c99873e004c1718dedd1b Mon Sep 17 00:00:00 2001 From: iks Date: Sun, 8 Nov 2020 00:21:15 +0900 Subject: [PATCH] [Fix] #39604 Display launching information right on recalls of monsters which have their blows fully. --- src/view/display-lore.c | 49 +++++++++++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/src/view/display-lore.c b/src/view/display-lore.c index 1f5404b9c..7960fe30a 100644 --- a/src/view/display-lore.c +++ b/src/view/display-lore.c @@ -490,6 +490,17 @@ void display_monster_collective(lore_type *lore_ptr) } } + +/*! + * @brief モンスターの発射に関する情報を表示するルーチン + * Hack -- display monster launching information + * @param player_ptr プレイヤーへの参照ポインタ + * @param lore_ptr モンスターの思い出構造体への参照ポインタ + * @return なし + * @details + * This function should only be called when display/dump a recall of + * a monster. + */ void display_monster_launching(player_type *player_ptr, lore_type *lore_ptr) { if (lore_ptr->flags4 & RF4_ROCKET) { @@ -498,21 +509,31 @@ void display_monster_launching(player_type *player_ptr, lore_type *lore_ptr) lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; } - if ((lore_ptr->flags4 & RF4_SHOOT) == 0) - return; - - for (int m = 0; m < 4; m++) { - if (lore_ptr->r_ptr->blow[m].method != RBM_SHOOT) - continue; + if ((lore_ptr->flags4 & RF4_SHOOT) != 0) + { + int p = -1; /* Position of SHOOT */ + int n = 0; /* Number of blows */ + for (int m = 0; m < 4; m++) { + if (lore_ptr->r_ptr->blow[m].method != RBM_NONE) n++; /* Count blows */ + if (lore_ptr->r_ptr->blow[m].method == RBM_SHOOT) { + p = m; /* Remember position */ + break; + } + } - if (know_armour(lore_ptr->r_idx)) - sprintf(lore_ptr->tmp_msg[lore_ptr->vn], _("威力 %dd%d の射撃をする", "fire an arrow (Power:%dd%d)"), lore_ptr->r_ptr->blow[m].d_side, - lore_ptr->r_ptr->blow[m].d_dice); - else - sprintf(lore_ptr->tmp_msg[lore_ptr->vn], _("射撃をする", "fire an arrow")); - lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn]; - lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; - break; + if (n == 4) p = 0; /* When full blows, use a first damage */ + if (p >= 0) + { + if (know_armour(lore_ptr->r_idx)) + sprintf(lore_ptr->tmp_msg[lore_ptr->vn], + _("威力 %dd%d の射撃をする", "fire an arrow (Power:%dd%d)"), + lore_ptr->r_ptr->blow[p].d_side, + lore_ptr->r_ptr->blow[p].d_dice); + else + sprintf(lore_ptr->tmp_msg[lore_ptr->vn], _("射撃をする", "fire an arrow")); + lore_ptr->vp[lore_ptr->vn] = lore_ptr->tmp_msg[lore_ptr->vn]; + lore_ptr->color[lore_ptr->vn++] = TERM_UMBER; + } } } -- 2.11.0