Changeset 1464 for trunk

Show
Ignore:
Timestamp:
07/03/09 22:14:12 (8 months ago)
Author:
takkaria
Message:
  • Stop requiring full knowledge to merge various item kinds. (Eddie Grove)
  • Stop requiring knowledge in order to activate things. (Eddie Grove)
Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/object/obj-util.c

    r1462 r1464  
    15231523bool object_similar(const object_type *o_ptr, const object_type *j_ptr) 
    15241524{ 
     1525        int i; 
    15251526        int total = o_ptr->number + j_ptr->number; 
    15261527 
     
    15641565                } 
    15651566 
    1566                 /* Weapons and Armor */ 
     1567                /* Weaponsm, armour and jewelery */ 
    15671568                case TV_BOW: 
    15681569                case TV_DIGGING: 
     
    15791580                case TV_HARD_ARMOR: 
    15801581                case TV_DRAG_ARMOR: 
    1581                 { 
    1582                         /* Fall through */ 
    1583                 } 
    1584  
    1585                 /* Rings, Amulets, Lites */ 
    15861582                case TV_RING: 
    15871583                case TV_AMULET: 
    15881584                case TV_LITE: 
    15891585                { 
    1590                         /* Require both items to be known */ 
    1591                         if (!object_known_p(o_ptr) || !object_known_p(j_ptr)) return (0); 
    1592  
    15931586                        /* Fall through */ 
    15941587                } 
     
    15991592                case TV_SHOT: 
    16001593                { 
    1601                         /* Require identical knowledge of both items */ 
    1602                         if (object_known_p(o_ptr) != object_known_p(j_ptr)) return (0); 
    1603  
    16041594                        /* Require identical "bonuses" */ 
    16051595                        if (o_ptr->to_h != j_ptr->to_h) return (FALSE); 
     
    16361626                default: 
    16371627                { 
    1638                         /* Require knowledge */ 
    1639                         if (!object_known_p(o_ptr) || !object_known_p(j_ptr)) return (0); 
    1640  
    16411628                        /* Probably okay */ 
    16421629                        break; 
     
    16541641 
    16551642        /* Different flags */ 
    1656         if (o_ptr->flags[0] != j_ptr->flags[0] || 
    1657                 o_ptr->flags[1] != j_ptr->flags[1] || 
    1658                 o_ptr->flags[2] != j_ptr->flags[2]) 
    1659                 return FALSE; 
     1643        for (i = 0; i < OBJ_FLAG_N; i++) 
     1644                if (o_ptr->flags[i] != j_ptr->flags[1]) 
     1645                        return FALSE; 
    16601646 
    16611647 
     
    16891675        object_kind *k_ptr = &k_info[o_ptr->k_idx]; 
    16901676 
     1677        int i; 
    16911678        int total = o_ptr->number + j_ptr->number; 
    16921679 
     
    16941681        o_ptr->number = ((total < MAX_STACK_SIZE) ? total : (MAX_STACK_SIZE - 1)); 
    16951682 
    1696         /* Hack -- Blend "known" status */ 
    1697         if (object_known_p(j_ptr)) object_known(o_ptr); 
    1698  
    1699         /* Hack -- Blend store status */ 
    1700         if (j_ptr->ident & (IDENT_STORE)) o_ptr->ident |= (IDENT_STORE); 
     1683        /* Blend all knowledge */ 
     1684        o_ptr->ident |= (j_ptr->ident & ~IDENT_EMPTY); 
     1685        for (i = 0; i < OBJ_FLAG_N; i++) 
     1686                o_ptr->known_flags[i] |= j_ptr->known_flags[i]; 
    17011687 
    17021688        /* Hack -- Blend "notes" */ 
     
    35933579        u32b f[OBJ_FLAG_N]; 
    35943580 
    3595         /* Not known */ 
    3596         if (!object_known_p(o_ptr)) return (FALSE); 
    3597  
    35983581        /* Extract the flags */ 
    35993582        object_flags(o_ptr, f);