Changeset 1463

Show
Ignore:
Timestamp:
07/03/09 22:03:25 (14 months ago)
Author:
takkaria
Message:

Add some more object knowledge accessor functions. (Eddie Grove)

Location:
trunk/src/object
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • trunk/src/object/identify.c

    r1462 r1463  
    2323/** Time last item was wielded */ 
    2424s32b object_last_wield; 
     25 
     26 
     27/** 
     28 * Whether an object counts as "known" due to EASY_KNOW status 
     29 */ 
     30/* XXX Eddie should have a different name */ 
     31static bool easy_know(const object_type *o_ptr) 
     32{ 
     33        object_kind *k_ptr = &k_info[o_ptr->k_idx]; 
     34 
     35        /* XXX Eddie should I really access k_ptr->aware directly? */ 
     36        if (k_ptr->aware && k_ptr->flags[2] & TR2_EASY_KNOW) 
     37                return TRUE; 
     38        else 
     39                return FALSE; 
     40} 
    2541 
    2642 
     
    126142} 
    127143 
     144 
     145bool object_activation_is_visible(const object_type *o_ptr) 
     146{ 
     147        if (!obj_can_wear(o_ptr)) 
     148        { 
     149                /* XXX Eddie need function _if_charges ? or maybe the activation code should use something else */ 
     150                switch(o_ptr->tval) 
     151                { 
     152                        case TV_WAND: 
     153                        case TV_STAFF: 
     154                        case TV_ROD: 
     155                                break; 
     156                        default: 
     157                                return FALSE; 
     158                } 
     159 
     160                if (object_aware_p(o_ptr)) 
     161                        return TRUE; 
     162                /* This would work now, but could fail if we add artifact rods 
     163                else 
     164                        return FALSE; 
     165                */ 
     166        } 
     167 
     168        u32b f[OBJ_FLAG_N]; 
     169        object_flags(o_ptr, f); 
     170 
     171        if ((f[2] & TR2_ACTIVATE) && (easy_know(o_ptr) || o_ptr->known_flags[2] & TR2_ACTIVATE)) 
     172                return TRUE; 
     173        else 
     174                return FALSE; 
     175} 
     176 
     177bool object_effect_is_known(const object_type *o_ptr) 
     178{ 
     179        if (easy_know(o_ptr) || o_ptr->ident & IDENT_EFFECT) 
     180                return TRUE; 
     181        else 
     182                return FALSE; 
     183} 
     184 
     185bool object_ego_is_visible(const object_type *o_ptr) 
     186{ 
     187        if ((o_ptr->tval == TV_LITE) && (ego_item_p(o_ptr))) 
     188                return TRUE; 
     189        if (((o_ptr->ident & IDENT_KNOWN) && ego_item_p(o_ptr)) || /* XXX Eddie this should go, but necessary to use savefiles with IDENT_KNOWN before IDENT_EGO was added */ 
     190                        ((o_ptr->ident & IDENT_STORE) && ego_item_p(o_ptr))) 
     191                return TRUE; 
     192        else 
     193                return FALSE; 
     194} 
    128195 
    129196bool object_attack_plusses_are_visible(const object_type *o_ptr) 
  • trunk/src/object/obj-desc.c

    r1462 r1463  
    398398                strnfcat(buf, max, &end, " %s", a_name + a_info[o_ptr->name1].name); 
    399399 
    400         else if (known && o_ptr->name2) 
     400        else if ((spoil && o_ptr->name2) || object_ego_is_visible(o_ptr)) 
    401401                strnfcat(buf, max, &end, " %s", e_name + e_info[o_ptr->name2].name); 
    402402 
  • trunk/src/object/obj-info.c

    r1462 r1463  
    831831 * Describe an object's activation, if any. 
    832832 */ 
    833 static bool describe_activation(const object_type *o_ptr, u32b f3, bool full, 
     833static bool describe_effect(const object_type *o_ptr, u32b f3, bool full, 
    834834                bool only_artifacts, bool subjective) 
    835835{ 
     
    837837        const char *desc; 
    838838 
    839         int effect, base, dice, sides; 
     839        int effect = 0, base, dice, sides; 
    840840 
    841841        if (o_ptr->name1) 
    842842        { 
    843843                const artifact_type *a_ptr = &a_info[o_ptr->name1]; 
    844                 if (!object_known_p(o_ptr) && !full) return FALSE; 
    845  
    846                 effect = a_ptr->effect; 
    847                 base = a_ptr->time_base; 
    848                 dice = a_ptr->time_dice; 
    849                 sides = a_ptr->time_sides; 
     844                if (!object_activation_is_visible(o_ptr) && !full) return FALSE; 
     845 
     846                if (object_effect_is_known(o_ptr) || full) 
     847                { 
     848                        effect = a_ptr->effect; 
     849                        base = a_ptr->time_base; 
     850                        dice = a_ptr->time_dice; 
     851                        sides = a_ptr->time_sides; 
     852                } 
     853                else 
     854                { 
     855                        text_out("It can be activated.\n"); 
     856                        return TRUE; 
     857                } 
    850858        } 
    851859        else 
    852860        { 
    853                 if (!object_aware_p(o_ptr) && !full) return FALSE; 
    854  
    855                 effect = k_ptr->effect; 
    856                 base = k_ptr->time_base; 
    857                 dice = k_ptr->time_dice; 
    858                 sides = k_ptr->time_sides; 
     861                if (object_effect_is_known(o_ptr) || full) 
     862                { 
     863                        effect = k_ptr->effect; 
     864                        base = k_ptr->time_base; 
     865                        dice = k_ptr->time_dice; 
     866                        sides = k_ptr->time_sides; 
     867                } 
     868                else if (object_activation_is_visible(o_ptr)) 
     869                { 
     870                        text_out("It can be activated.\n"); 
     871                        return TRUE; 
     872                } 
    859873        } 
    860874 
     
    10221036 
    10231037                /* Display an additional ego-item description */ 
    1024                 if (o_ptr->name2 && object_known_p(o_ptr) && e_info[o_ptr->name2].text) 
     1038                if (object_ego_is_visible(o_ptr) && e_info[o_ptr->name2].text) 
    10251039                { 
    10261040                        if (did_desc) text_out("  "); 
     
    10701084        if (something) text_out("\n"); 
    10711085         
    1072         if (describe_activation(o_ptr, f[2], full, terse, subjective)) 
     1086        if (describe_effect(o_ptr, f[2], full, terse, subjective)) 
    10731087        { 
    10741088                something = TRUE; 
  • trunk/src/object/object.h

    r1462 r1463  
    5656extern s32b object_last_wield; 
    5757 
     58bool object_activation_is_visible(const object_type *o_ptr); 
     59bool object_effect_is_known(const object_type *o_ptr); 
     60bool object_ego_is_visible(const object_type *o_ptr); 
    5861bool object_attack_plusses_are_visible(const object_type *o_ptr); 
    5962bool object_defence_plusses_are_visible(const object_type *o_ptr); 
     63 
    6064void object_known(object_type *o_ptr); 
    6165void object_aware(object_type *o_ptr);