Changeset 274

Show
Ignore:
Timestamp:
07/04/07 17:12:31 (1 year ago)
Author:
ajps
Message:

Improvements to object knowledge screen, including preventing autoinscriptions giving an unfair advantage. Closes #189.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/cmd1.c

    r265 r274  
    579579 
    580580                        /* Get the object name */ 
    581                         strip_name(tmp, k_idx, TRUE); 
     581                        object_kind_name(tmp, sizeof tmp, k_idx, TRUE); 
    582582 
    583583                        /* Build up the pickup string */ 
  • trunk/src/cmd4.c

    r266 r274  
    14451445        char o_name[80]; 
    14461446 
    1447  
    14481447        /* Choose a color */ 
    14491448        bool aware = (k_ptr->flavor == 0) || (k_ptr->aware); 
     
    14621461 
    14631462        /* Tidy name */ 
    1464         strip_name(o_name, k_idx, cheat_know); 
    1465  
     1463        object_kind_name(o_name, sizeof o_name, k_idx, cheat_know); 
    14661464 
    14671465        /* Display the name */ 
     
    14691467 
    14701468        /* Show autoinscription if around */ 
    1471         if (inscrip) 
     1469        if (aware && inscrip) 
    14721470                c_put_str(TERM_YELLOW, inscrip, row, 55); 
    14731471 
     
    15761574 
    15771575        /* Forget it if we've never seen the thing */ 
    1578         if (!k_ptr->everseen
     1576        if (k_ptr->flavor && !k_ptr->aware
    15791577                return ""; 
    15801578 
     
    15951593 
    15961594        /* Forget it if we've never seen the thing */ 
    1597         if (!k_ptr->everseen
     1595        if (k_ptr->flavor && !k_ptr->aware
    15981596                return; 
    15991597 
  • trunk/src/externs.h

    r265 r274  
    393393extern void flavor_init(void); 
    394394extern void reset_visuals(bool prefs); 
     395extern void object_kind_name(char *buf, size_t max, int k_idx, bool easy_know); 
    395396extern void object_flags(const object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3); 
    396397extern void object_flags_known(const object_type *o_ptr, u32b *f1, u32b *f2, u32b *f3); 
     
    767768 
    768769bool make_fake_artifact(object_type *o_ptr, byte name1); 
    769 extern void strip_name(char *buf, int k_idx, bool easy_know); 
  • trunk/src/object1.c

    r270 r274  
    178178                } 
    179179                buf[titlelen - 1] = '\0'; 
    180            
     180 
    181181                /* Check the scroll name hasn't already been generated */ 
    182182                for (j = 0; j < i; j++) 
     
    188188                        } 
    189189                } 
    190            
     190 
    191191                if (okay) 
    192192                { 
     
    448448} 
    449449 
     450 
     451 
     452/* 
     453 * Puts a very stripped-down version of an object's name into buf. 
     454 * If easy_know is TRUE, then the IDed names are used, otherwise 
     455 * flavours, scroll names, etc will be used. 
     456 * 
     457 * Just truncates if the buffer isn't big enough. 
     458 */ 
     459void object_kind_name(char *buf, size_t max, int k_idx, bool easy_know) 
     460{ 
     461        char *t; 
     462 
     463        object_kind *k_ptr = &k_info[k_idx]; 
     464 
     465        /* If not aware, use flavor */ 
     466        if (!easy_know && !k_ptr->aware && k_ptr->flavor) 
     467        { 
     468                if (k_ptr->tval == TV_SCROLL) 
     469                { 
     470                        strnfmt(buf, max, "\"%s\"", scroll_adj[k_ptr->sval]); 
     471                } 
     472                else if (k_ptr->tval == TV_FOOD && k_ptr->sval < SV_FOOD_MIN_FOOD) 
     473                { 
     474                        strnfmt(buf, max, "%s Mushroom", flavor_text + flavor_info[k_ptr->flavor].text); 
     475                } 
     476                else 
     477                { 
     478                        /* Plain flavour (e.g. Copper) will do. */ 
     479                        my_strcpy(buf, flavor_text + flavor_info[k_ptr->flavor].text, max); 
     480                } 
     481        } 
     482        else 
     483        /* Use proper name (Healing, or whatever) */ 
     484        { 
     485                cptr str = (k_name + k_ptr->name); 
     486 
     487                if (k_ptr->tval == TV_FOOD && k_ptr->sval < SV_FOOD_MIN_FOOD) 
     488                { 
     489                        my_strcpy(buf, "Mushroom of ", max); 
     490                        max -= strlen(buf); 
     491                        t = buf + strlen(buf); 
     492                } 
     493                else 
     494                { 
     495                        t = buf; 
     496                } 
     497 
     498                /* Skip past leading characters */ 
     499                while ((*str == ' ') || (*str == '&')) str++; 
     500 
     501                /* Copy useful chars */ 
     502                for (; *str && max > 1; str++) 
     503                { 
     504                        /* Pluralizer for irregular plurals */ 
     505                        /* Useful for languages where adjective changes for plural */ 
     506                        if (*str == '|') 
     507                        { 
     508                                /* Process singular part */ 
     509                                for (str++; *str != '|' && max > 1; str++)  
     510                                { 
     511                                        *t++ = *str; 
     512                                        max--; 
     513                                } 
     514 
     515                                /* Process plural part */ 
     516                                for (str++; *str != '|'; str++) ; 
     517                        } 
     518 
     519                        /* English plural indicator can simply be skipped */ 
     520                        else if (*str != '~') 
     521                        { 
     522                                *t++ = *str; 
     523                                max--; 
     524                        } 
     525                } 
     526 
     527                /* Terminate the new name */ 
     528                *t = '\0'; 
     529        } 
     530} 
    450531 
    451532 
  • trunk/src/squelch.c

    r270 r274  
    656656 
    657657        /* Acquire the "name" of object "i" */ 
    658         strip_name(buf, idx, TRUE); 
     658        object_kind_name(buf, sizeof(buf), idx, TRUE); 
    659659 
    660660        /* Print it */ 
  • trunk/src/wizard2.c

    r250 r274  
    413413 
    414414 
    415 /* 
    416  * Strip an "object name" into a buffer 
    417  */ 
    418 void strip_name(char *buf, int k_idx, bool easy_know) 
    419 { 
    420         char *t; 
    421  
    422         object_kind *k_ptr = &k_info[k_idx]; 
    423  
    424         cptr str = (k_name + k_ptr->name); 
    425  
    426     /* If not aware, use flavor */ 
    427     if (!easy_know && !k_ptr->aware && k_ptr->flavor) 
    428                         str = flavor_text + flavor_info[k_ptr->flavor].text; 
    429  
    430  
    431  
    432         /* Skip past leading characters */ 
    433         while ((*str == ' ') || (*str == '&')) str++; 
    434  
    435         /* Copy useful chars */ 
    436         for (t = buf; *str; str++) 
    437         { 
    438                 /* Pluralizer for irregular plurals */ 
    439                 /* Useful for languages where adjective changes for plural */ 
    440                 if (*str == '|') 
    441                 { 
    442                         /* Process singular part */ 
    443                         for (str++; *str != '|'; str++) *t++ = *str; 
    444  
    445                         /* Process plural part */ 
    446                         for (str++; *str != '|'; str++) ; 
    447                 } 
    448  
    449                 /* English plural indicator can simply be skipped */ 
    450                 else if (*str != '~') *t++ = *str; 
    451         } 
    452  
    453         /* Terminate the new name */ 
    454         *t = '\0'; 
    455 } 
    456  
    457415 
    458416/* 
     
    532490 
    533491                        /* Get the "name" of object "i" */ 
    534                         strip_name(buf, i, TRUE); 
     492                        object_kind_name(buf, sizeof buf, i, TRUE); 
    535493 
    536494                        /* Print it */