Ticket #918: no-damage-message.patch

File no-damage-message.patch, 2.7 KB (added by rhinocesaurus, 10 years ago)

Patch. The warning is a changed verb ("You do not harm the xyz"), as a separate message would be annoying with several hits/round. Messages now come after damage calculations rather than during.

  • src/attack.c

     
    131131 * 
    132132 * Factor in weapon weight, total plusses, player level. 
    133133 */ 
    134 static int critical_norm(int weight, int plus, int dam) 
     134static int critical_norm(int weight, int plus, int dam, const char **crit_msg) 
    135135{ 
    136136        int i, k; 
    137137 
     
    146146                if (k < 400) 
    147147                { 
    148148                        sound(MSG_HIT_GOOD); 
    149                         msg_print("It was a good hit!"); 
     149                        *crit_msg = "It was a good hit!"; 
    150150                        dam = 2 * dam + 5; 
    151151                } 
    152152                else if (k < 700) 
    153153                { 
    154154                        sound(MSG_HIT_GREAT); 
    155                         msg_print("It was a great hit!"); 
     155                        *crit_msg = "It was a great hit!"; 
    156156                        dam = 2 * dam + 10; 
    157157                } 
    158158                else if (k < 900) 
    159159                { 
    160160                        sound(MSG_HIT_SUPERB); 
    161                         msg_print("It was a superb hit!"); 
     161                        *crit_msg = "It was a superb hit!"; 
    162162                        dam = 3 * dam + 15; 
    163163                } 
    164164                else if (k < 1300) 
    165165                { 
    166166                        sound(MSG_HIT_HI_GREAT); 
    167                         msg_print("It was a *GREAT* hit!"); 
     167                        *crit_msg = "It was a *GREAT* hit!"; 
    168168                        dam = 3 * dam + 20; 
    169169                } 
    170170                else 
    171171                { 
    172172                        sound(MSG_HIT_HI_SUPERB); 
    173                         msg_print("It was a *SUPERB* hit!"); 
     173                        *crit_msg = "It was a *SUPERB* hit!"; 
    174174                        dam = ((7 * dam) / 2) + 25; 
    175175                } 
    176176        } 
     
    179179                sound(MSG_HIT); 
    180180        } 
    181181 
    182         return (dam); 
     182        return dam; 
    183183} 
    184184 
    185185 
     
    283283 
    284284        bool do_quake = FALSE; 
    285285 
     286        const char *crit_msg = NULL; 
    286287 
    287288        /* Get the monster */ 
    288289        m_ptr = &mon_list[cave_m_idx[y][x]]; 
     
    357358                                                o_ptr, 
    358359                                                m_ptr, &hit_verb, FALSE, FALSE); 
    359360 
    360                                 /* Message. Need to do this after tot_dam_aux, which sets hit_verb, but before critical_norm, which may print further messages. */ 
    361                                 message_format(MSG_GENERIC, m_ptr->r_idx, "You %s %s.", hit_verb, m_name); 
    362361                                                 
    363362                                if (ring_brand_mult[0] > use_mult) 
    364363                                        use_mult = ring_brand_mult[0]; 
     
    374373                                        do_quake = TRUE; 
    375374 
    376375                                k += o_ptr->to_d; 
    377                                 k = critical_norm(o_ptr->weight, o_ptr->to_h, k); 
     376                                k = critical_norm(o_ptr->weight, o_ptr->to_h, k, &crit_msg); 
    378377 
    379378                                /* Learn by use */ 
    380379                                object_notice_attack_plusses(o_ptr); 
     
    383382                                if (do_quake) 
    384383                                        wieldeds_notice_flag(2, TR2_IMPACT); 
    385384                        } 
    386                         else 
    387                         { 
    388                                 message_format(MSG_GENERIC, m_ptr->r_idx, "You %s %s.", hit_verb, m_name); 
    389                         } 
    390385 
    391386                        /* Apply the player damage bonuses */ 
    392387                        k += p_ptr->state.to_d; 
    393388 
    394                         /* No negative damage */ 
    395                         if (k < 0) k = 0; 
     389                        /* No negative damage; change verb if no damage done */ 
     390                        if (k <= 0) 
     391                        { 
     392                                k = 0; 
     393                                hit_verb = "fail to harm"; 
     394                        } 
    396395 
     396                        /* Tell the player what happened */ 
     397                        message_format(MSG_GENERIC, m_ptr->r_idx, "You %s %s.", hit_verb, m_name); 
     398                        if (crit_msg) msg_print(crit_msg); 
     399 
    397400                        /* Complex message */ 
    398401                        if (p_ptr->wizard) 
    399402                                msg_format("You do %d (out of %d) damage.", k, m_ptr->hp);