Ticket #1016: md_1016.patch

File md_1016.patch, 2.2 KB (added by MarbleDice, 9 years ago)

This version of a fix is a little less hackish, still learning some of the identify machinery before committing.

  • src/object/identify.c

     
    629629        if (obj_is_lite(o_ptr) && ego_item_p(o_ptr)) 
    630630                object_notice_ego(o_ptr); 
    631631 
    632         if (object_flavor_is_aware(o_ptr)) 
     632        if (object_flavor_is_aware(o_ptr) && easy_know(o_ptr)) 
    633633        { 
    634                 if (easy_know(o_ptr)) 
    635                 { 
    636                         object_notice_everything(o_ptr); 
    637                         return; 
    638                 } 
    639  
    640                 /* We currently always know all flags on aware jewelry */ 
    641                 else if (object_is_jewelry(o_ptr)) 
    642                 { 
    643                         object_know_all_flags(o_ptr); 
    644                 } 
     634                object_notice_everything(o_ptr); 
     635                return; 
    645636        } 
    646637 
    647638        /* notice all artifacts upon wield */ 
     
    667658        o_ptr->known_flags[0] |= TR0_OBVIOUS_MASK; 
    668659        o_ptr->known_flags[2] |= TR2_OBVIOUS_MASK; 
    669660 
     661        /* XXX Eddie this is a small hack, but jewelry with anything noticeable really is obvious */ 
     662        /* XXX Eddie learn =soulkeeping vs =bodykeeping when notice sustain_str */ 
     663        if (object_is_jewelry(o_ptr)) 
     664        { 
     665                /* Learn the flavor of jewelry with obvious flags */ 
     666                if (EASY_LEARN && obvious_without_activate) 
     667                        object_flavor_aware(o_ptr); 
     668 
     669                /* Learn all flags on any aware jewelry */ 
     670                if (object_flavor_is_aware(o_ptr)) 
     671                        object_know_all_flags(o_ptr); 
     672        } 
     673 
    670674        object_check_for_ident(o_ptr); 
    671675 
    672676        if (!obvious) return; 
     
    676680                object_notice_sensing(o_ptr); 
    677681        /* XXX Eddie is above necessary here?  done again at end of function */ 
    678682 
    679         if (EASY_LEARN && object_is_jewelry(o_ptr) && obvious_without_activate) 
    680         { 
    681                 /* XXX Eddie this is a small hack, but jewelry with anything noticeable really is obvious */ 
    682                 /* XXX Eddie learn =soulkeeping vs =bodykeeping when notice sustain_str */ 
    683                 object_flavor_aware(o_ptr); 
    684                 object_check_for_ident(o_ptr); 
    685         } 
    686  
    687683        /* Messages */ 
    688684        for (s_ptr = slay_table; s_ptr->slay_flag; s_ptr++) 
    689685        { 
    690686                if ((f[0] & s_ptr->slay_flag) && s_ptr->brand) 
    691                 { 
    692                         char o_name[40]; 
    693                         object_desc(o_name, sizeof(o_name), o_ptr, ODESC_BASE); 
    694                         msg_format("Your %s %s!", o_name, s_ptr->active_verb); 
     687                { 
     688                        char o_name[40]; 
     689                        object_desc(o_name, sizeof(o_name), o_ptr, ODESC_BASE); 
     690                        msg_format("Your %s %s!", o_name, s_ptr->active_verb); 
    695691                } 
    696692        } 
    697693