Changeset 531

Show
Ignore:
Timestamp:
08/18/07 18:30:19 (1 year ago)
Author:
takkaria
Message:

Add "flags" back to object_type, removing the need for the hacky "xtra" bytes. More to come. (#120)

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/defines.h

    r523 r531  
    4646#define VERSION_MAJOR   3 
    4747#define VERSION_MINOR   0 
    48 #define VERSION_PATCH   11 
     48#define VERSION_PATCH   12 
    4949#define VERSION_EXTRA   0 
    5050 
     
    16931693#define IDENT_STORE     0x10    /* Item is in the inventory of a store */ 
    16941694#define IDENT_MENTAL    0x20    /* Item information is known */ 
    1695 #define IDENT_CURSED    0x40   /* Item is temporarily cursed */ 
     1695/* ... */ 
    16961696#define IDENT_BROKEN    0x80    /* Item is permanently worthless */ 
    16971697 
     
    17581758 
    17591759/* 
    1760  * As of 2.7.8, the "object flags" are valid for all objects, and as 
    1761  * of 2.7.9, these flags are not actually stored with the object, but 
    1762  * rather in the object_kind, ego_item, and artifact structures. 
     1760 * flags1 contains all flags dependant on "pval" (e.g. stat bonuses), 
     1761 * plus all "extra attack damage" flags (SLAY_XXX and BRAND_XXX). 
    17631762 * 
    1764  * Note that "flags1" contains all flags dependant on "pval" (including 
    1765  * stat bonuses, but NOT stat sustainers), plus all "extra attack damage" 
    1766  * flags (SLAY_XXX and BRAND_XXX). 
     1763 * flags2 contains all "resistances" (including "sustain" flags, immunity 
     1764 * flags, and resistance flags). 
    17671765 * 
    1768  * Note that "flags2" contains all "resistances" (including "sustain" flags, 
    1769  * immunity flags, and resistance flags).  Note that "free action" and "hold 
    1770  * life" are no longer considered to be "immunities". 
    1771  * 
    1772  * Note that "flags3" contains everything else (including eight good flags, 
    1773  * seven unused flags, four bad flags, four damage ignoring flags, six weird 
    1774  * flags, and three cursed flags). 
     1766 * flags3 contains everything else. 
    17751767 */ 
    17761768 
     
    18921884         TR3_IGNORE_COLD ) 
    18931885 
    1894  
    18951886/* 
    18961887 * Hack -- special "xtra" object flag info (type) 
     
    18991890#define OBJECT_XTRA_TYPE_RESIST         2 
    19001891#define OBJECT_XTRA_TYPE_POWER          3 
    1901  
    1902 /* 
    1903  * Hack -- special "xtra" object flag info (what flag set) 
    1904  */ 
    1905 #define OBJECT_XTRA_WHAT_SUSTAIN        2 
    1906 #define OBJECT_XTRA_WHAT_RESIST         2 
    1907 #define OBJECT_XTRA_WHAT_POWER          3 
    1908  
    1909 /* 
    1910  * Hack -- special "xtra" object flag info (base flag value) 
    1911  */ 
    1912 #define OBJECT_XTRA_BASE_SUSTAIN        TR2_SUST_STR 
    1913 #define OBJECT_XTRA_BASE_RESIST         TR2_RES_POIS 
    1914 #define OBJECT_XTRA_BASE_POWER          TR3_SLOW_DIGEST 
    1915  
    1916 /* 
    1917  * Hack -- special "xtra" object flag info (number of flags) 
    1918  */ 
    1919 #define OBJECT_XTRA_SIZE_SUSTAIN        6 
    1920 #define OBJECT_XTRA_SIZE_RESIST         12 
    1921 #define OBJECT_XTRA_SIZE_POWER          8 
    19221892 
    19231893 
     
    24922462 */ 
    24932463#define cursed_p(T) \ 
    2494         ((T)->ident & (IDENT_CURSED)) 
     2464        ((T)->flags3 & (TR3_LIGHT_CURSE)) 
    24952465 
    24962466 
  • trunk/src/init1.c

    r489 r531  
    572572                                (v3 != head->v_patch)) 
    573573                        { 
     574#if 0 
    574575                                return (PARSE_ERROR_OBSOLETE_FILE); 
     576#endif 
    575577                        } 
    576578 
  • trunk/src/load.c

    r522 r531  
    4747 
    4848 
     49/* XXX Taken from object2.c */ 
     50static const u32b ego_sustains[] = 
     51{ 
     52        TR2_SUST_STR, 
     53        TR2_SUST_INT, 
     54        TR2_SUST_WIS, 
     55        TR2_SUST_DEX, 
     56        TR2_SUST_CON, 
     57        TR2_SUST_CHR, 
     58}; 
     59 
     60static const u32b ego_resists[] = 
     61{ 
     62        TR2_RES_ACID, 
     63        TR2_RES_ELEC, 
     64        TR2_RES_FIRE, 
     65        TR2_RES_COLD, 
     66        TR2_RES_POIS, 
     67        TR2_RES_FEAR, 
     68        TR2_RES_LITE, 
     69        TR2_RES_DARK, 
     70        TR2_RES_BLIND, 
     71        TR2_RES_CONFU, 
     72        TR2_RES_SOUND, 
     73        TR2_RES_SHARD, 
     74}; 
     75 
     76static const u32b ego_powers[] = 
     77{ 
     78        TR3_SLOW_DIGEST, 
     79        TR3_FEATHER, 
     80        TR3_LITE, 
     81        TR3_REGEN, 
     82        TR3_TELEPATHY, 
     83        TR3_SEE_INVIS, 
     84        TR3_FREE_ACT, 
     85        TR3_HOLD_LIFE, 
     86}; 
     87 
     88 
    4989 
    5090/* 
     
    304344        byte old_dd; 
    305345        byte old_ds; 
     346        byte tmp8u; 
    306347 
    307348        u32b f1, f2, f3; 
     
    353394 
    354395        rd_byte(&o_ptr->ident); 
     396        if (o_ptr->ident & 0x40) 
     397                o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    355398 
    356399        rd_byte(&o_ptr->marked); 
     
    361404 
    362405        /* Old flags */ 
    363         strip_bytes(8); 
     406        if (older_than(3, 0, 12)) 
     407        { 
     408                strip_bytes(8); 
     409        } 
     410        else 
     411        { 
     412                rd_u32b(&o_ptr->flags1); 
     413                rd_u32b(&o_ptr->flags2); 
     414                rd_u32b(&o_ptr->flags3); 
     415        } 
    364416 
    365417        /* Monster holding object */ 
    366418        rd_s16b(&o_ptr->held_m_idx); 
    367419 
    368         /* Special powers */ 
    369         rd_byte(&o_ptr->xtra1); 
    370         rd_byte(&o_ptr->xtra2); 
     420        /* (Old) special powers */ 
     421        if (older_than(3, 0, 12)) 
     422        { 
     423                byte xtra1; 
     424                byte xtra2; 
     425                ego_item_type *e_ptr = NULL; 
     426 
     427                if (o_ptr->name2) e_ptr = &e_info[o_ptr->name2]; 
     428 
     429                rd_byte(&xtra1); 
     430                rd_byte(&xtra2); 
     431 
     432                /* Extra powers */ 
     433                switch (xtra1) 
     434                { 
     435                        case OBJECT_XTRA_TYPE_SUSTAIN: 
     436                        { 
     437                                o_ptr->flags2 |= ego_sustains[xtra2]; 
     438                                break; 
     439                        } 
     440 
     441                        case OBJECT_XTRA_TYPE_RESIST: 
     442                        { 
     443                                o_ptr->flags2 |= ego_resists[xtra2]; 
     444                                break; 
     445                        } 
     446 
     447                        case OBJECT_XTRA_TYPE_POWER: 
     448                        { 
     449                                o_ptr->flags3 |= ego_powers[xtra2]; 
     450                                break; 
     451                        } 
     452                } 
     453        } 
    371454 
    372455        /* Inscription */ 
     
    622705        rd_byte(&l_ptr->ignore); 
    623706 
    624         /* Extra stuff */ 
    625         rd_byte(&l_ptr->xtra1); 
    626         rd_byte(&l_ptr->xtra2); 
     707        if (older_than(3, 0, 12)) strip_bytes(2); 
    627708 
    628709        /* Count drops */ 
  • trunk/src/loadsave.c

    r522 r531  
    12691269 
    12701270        smap_put_s16b(s, "held_m_idx", o_ptr->held_m_idx); 
    1271         smap_put_byte(s, "xtra1", o_ptr->xtra1); 
    1272         smap_put_byte(s, "xtra2", o_ptr->xtra2); 
     1271 
     1272        smap_put_u32b(s, "flags1", o_ptr->flags1); 
     1273        smap_put_u32b(s, "flags2", o_ptr->flags2); 
     1274        smap_put_u32b(s, "flags3", o_ptr->flags3); 
    12731275 
    12741276        if (o_ptr->note) 
     
    13131315 
    13141316        o_ptr->held_m_idx = smap_get_s16b(s, "held_m_idx"); 
    1315         o_ptr->xtra1 = smap_get_byte(s, "xtra1"); 
    1316         o_ptr->xtra2 = smap_get_byte(s, "xtra2"); 
     1317        o_ptr->flags1 = smap_get_u32b(s, "flags1"); 
     1318        o_ptr->flags2 = smap_get_u32b(s, "flags2"); 
     1319        o_ptr->flags3 = smap_get_u32b(s, "flags3"); 
    13171320 
    13181321        inscrip = smap_get_str(s, "note"); 
     
    13821385        smap_put_byte(s, "wake", l_ptr->wake); 
    13831386        smap_put_byte(s, "ignore", l_ptr->ignore); 
    1384          
    1385         smap_put_byte(s, "xtra1", l_ptr->xtra1); 
    1386         smap_put_byte(s, "xtra2", l_ptr->xtra2); 
    13871387 
    13881388        smap_put_byte(s, "drop_gold", l_ptr->drop_gold); 
     
    14231423        l_ptr->wake = smap_get_byte(s, "wake"); 
    14241424        l_ptr->ignore = smap_get_byte(s, "ignore"); 
    1425  
    1426         l_ptr->xtra1 = smap_get_byte(s, "xtra1"); 
    1427         l_ptr->xtra2 = smap_get_byte(s, "xtra2"); 
    14281425 
    14291426        l_ptr->drop_gold = smap_get_byte(s, "drop_gold"); 
  • trunk/src/obj-info.c

    r512 r531  
    717717        /* Unknown extra powers (ego-item with random extras or artifact) */ 
    718718        if (object_known_p(o_ptr) && (!(o_ptr->ident & IDENT_MENTAL)) && 
    719             ((o_ptr->xtra1) || artifact_p(o_ptr))) 
     719            (o_ptr->flags2 || o_ptr->flags3 || artifact_p(o_ptr))) 
    720720        { 
    721721                /* Hack -- Put this in a separate paragraph if screen dump */ 
  • trunk/src/object1.c

    r522 r531  
    429429        } 
    430430 
    431         /* Extra powers */ 
    432         switch (o_ptr->xtra1) 
    433         { 
    434                 case OBJECT_XTRA_TYPE_SUSTAIN: 
    435                 { 
    436                         /* OBJECT_XTRA_WHAT_SUSTAIN == 2 */ 
    437                         (*f2) |= (OBJECT_XTRA_BASE_SUSTAIN << o_ptr->xtra2); 
    438                         break; 
    439                 } 
    440  
    441                 case OBJECT_XTRA_TYPE_RESIST: 
    442                 { 
    443                         /* OBJECT_XTRA_WHAT_RESIST == 2 */ 
    444                         (*f2) |= (OBJECT_XTRA_BASE_RESIST << o_ptr->xtra2); 
    445                         break; 
    446                 } 
    447  
    448                 case OBJECT_XTRA_TYPE_POWER: 
    449                 { 
    450                         /* OBJECT_XTRA_WHAT_POWER == 3 */ 
    451                         (*f3) |= (OBJECT_XTRA_BASE_POWER << o_ptr->xtra2); 
    452                         break; 
    453                 } 
    454         } 
     431        (*f1) |= o_ptr->flags1; 
     432        (*f2) |= o_ptr->flags2; 
     433        (*f3) |= o_ptr->flags3; 
    455434} 
    456435 
  • trunk/src/object2.c

    r523 r531  
    12121212                        if (o_ptr->name2 != j_ptr->name2) return (FALSE); 
    12131213 
    1214                         /* Hack -- Never stack "powerful" items */ 
    1215                         if (o_ptr->xtra1 || j_ptr->xtra1) return (FALSE); 
    1216  
    12171214                        /* Hack - Never stack recharging items */ 
    12181215                        if ((o_ptr->timeout || j_ptr->timeout) && o_ptr->tval != TV_LITE)  
     
    12441241 
    12451242 
    1246         /* Hack -- Require identical "cursed" and "broken" status */ 
    1247         if (((o_ptr->ident & (IDENT_CURSED)) != (j_ptr->ident & (IDENT_CURSED))) || 
    1248             ((o_ptr->ident & (IDENT_BROKEN)) != (j_ptr->ident & (IDENT_BROKEN)))) 
     1243        /* Hack -- Require identical "broken" status */ 
     1244        if ((o_ptr->ident & IDENT_BROKEN) != (j_ptr->ident & IDENT_BROKEN)) 
    12491245        { 
    12501246                return (0); 
     
    12631259        if (o_ptr->pseudo != j_ptr->pseudo) 
    12641260                return (0); 
     1261 
     1262 
     1263        /* Different flags */ 
     1264        if (o_ptr->flags1 != j_ptr->flags1 || 
     1265                o_ptr->flags2 != j_ptr->flags2 || 
     1266                o_ptr->flags3 != j_ptr->flags3) 
     1267                return FALSE; 
    12651268 
    12661269 
     
    14541457 
    14551458        /* Hack -- cursed items are always "cursed" */ 
    1456         if (k_ptr->flags3 & (TR3_LIGHT_CURSE)) o_ptr->ident |= (IDENT_CURSED); 
     1459        if (k_ptr->flags3 & (TR3_LIGHT_CURSE)) 
     1460            o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    14571461} 
    14581462 
     
    18691873 
    18701874                /* Cursed (if "bad") */ 
    1871                 if (o_ptr->to_h + o_ptr->to_d < 0) o_ptr->ident |= (IDENT_CURSED); 
     1875                if (o_ptr->to_h + o_ptr->to_d < 0) 
     1876                        o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    18721877        } 
    18731878 
     
    19831988 
    19841989                /* Cursed (if "bad") */ 
    1985                 if (o_ptr->to_a < 0) o_ptr->ident |= (IDENT_CURSED); 
     1990                if (o_ptr->to_a < 0) 
     1991                    o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    19861992        } 
    19871993 
     
    20392045 
    20402046                                                /* Cursed */ 
    2041                                                 o_ptr->ident |= (IDENT_CURSED)
     2047                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    20422048 
    20432049                                                /* Reverse pval */ 
     
    20642070 
    20652071                                                /* Cursed */ 
    2066                                                 o_ptr->ident |= (IDENT_CURSED)
     2072                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    20672073 
    20682074                                                /* Reverse pval */ 
     
    20962102 
    20972103                                                /* Cursed */ 
    2098                                                 o_ptr->ident |= (IDENT_CURSED); 
    2099  
     2104                                                o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    21002105                                                /* Reverse pval */ 
    21012106                                                o_ptr->pval = 0 - (o_ptr->pval); 
     
    21242129 
    21252130                                        /* Cursed */ 
    2126                                         o_ptr->ident |= (IDENT_CURSED)
     2131                                        o_ptr->flags3 |= TR3_LIGHT_CURSE
    21272132 
    21282133                                        /* Penalize */ 
     
    21392144 
    21402145                                        /* Cursed */ 
    2141                                         o_ptr->ident |= (IDENT_CURSED)
     2146                                        o_ptr->flags3 |= TR3_LIGHT_CURSE
    21422147 
    21432148                                        /* Penalize */ 
     
    21612166 
    21622167                                                /* Cursed */ 
    2163                                                 o_ptr->ident |= (IDENT_CURSED)
     2168                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    21642169 
    21652170                                                /* Reverse bonus */ 
     
    21832188 
    21842189                                                /* Cursed */ 
    2185                                                 o_ptr->ident |= (IDENT_CURSED)
     2190                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    21862191 
    21872192                                                /* Reverse tohit */ 
     
    22052210 
    22062211                                                /* Cursed */ 
    2207                                                 o_ptr->ident |= (IDENT_CURSED)
     2212                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    22082213 
    22092214                                                /* Reverse toac */ 
     
    22282233 
    22292234                                                /* Cursed */ 
    2230                                                 o_ptr->ident |= (IDENT_CURSED)
     2235                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    22312236 
    22322237                                                /* Reverse bonuses */ 
     
    22612266 
    22622267                                                /* Cursed */ 
    2263                                                 o_ptr->ident |= (IDENT_CURSED)
     2268                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    22642269 
    22652270                                                /* Reverse bonuses */ 
     
    22822287 
    22832288                                                /* Cursed */ 
    2284                                                 o_ptr->ident |= (IDENT_CURSED)
     2289                                                o_ptr->flags3 |= TR3_LIGHT_CURSE
    22852290 
    22862291                                                /* Reverse bonuses */ 
     
    23652370 
    23662371                                        /* Cursed */ 
    2367                                         o_ptr->ident |= (IDENT_CURSED)
     2372                                        o_ptr->flags3 |= TR3_LIGHT_CURSE
    23682373 
    23692374                                        /* Penalize */ 
     
    24502455        } 
    24512456} 
     2457 
     2458static const u32b ego_sustains[] = 
     2459{ 
     2460        TR2_SUST_STR, 
     2461        TR2_SUST_INT, 
     2462        TR2_SUST_WIS, 
     2463        TR2_SUST_DEX, 
     2464        TR2_SUST_CON, 
     2465        TR2_SUST_CHR, 
     2466}; 
     2467 
     2468static const u32b ego_resists[] = 
     2469{ 
     2470        TR2_RES_ACID, 
     2471        TR2_RES_ELEC, 
     2472        TR2_RES_FIRE, 
     2473        TR2_RES_COLD, 
     2474        TR2_RES_POIS, 
     2475        TR2_RES_FEAR, 
     2476        TR2_RES_LITE, 
     2477        TR2_RES_DARK, 
     2478        TR2_RES_BLIND, 
     2479        TR2_RES_CONFU, 
     2480        TR2_RES_SOUND, 
     2481        TR2_RES_SHARD, 
     2482}; 
     2483 
     2484static const u32b ego_powers[] = 
     2485{ 
     2486        TR3_SLOW_DIGEST, 
     2487        TR3_FEATHER, 
     2488        TR3_LITE, 
     2489        TR3_REGEN, 
     2490        TR3_TELEPATHY, 
     2491        TR3_SEE_INVIS, 
     2492        TR3_FREE_ACT, 
     2493        TR3_HOLD_LIFE, 
     2494}; 
    24522495 
    24532496 
     
    25712614 
    25722615                /* Hack -- extract the "cursed" flag */ 
    2573                 if (a_ptr->flags3 & (TR3_LIGHT_CURSE)) o_ptr->ident |= (IDENT_CURSED); 
     2616                if (a_ptr->flags3 & TR3_LIGHT_CURSE) 
     2617                        o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    25742618 
    25752619                /* Mega-Hack -- increase the rating */ 
     
    26742718 
    26752719                /* Extra powers */ 
    2676                 if (e_ptr->xtra) 
    2677                 { 
    2678                         o_ptr->xtra1 = e_ptr->xtra; 
    2679                         switch (o_ptr->xtra1) 
     2720                switch (e_ptr->xtra) 
     2721                { 
     2722                        case OBJECT_XTRA_TYPE_SUSTAIN: 
    26802723                        { 
    2681                                 case OBJECT_XTRA_TYPE_SUSTAIN: 
    2682                                 { 
    2683                                         o_ptr->xtra2 = (byte)rand_int(OBJECT_XTRA_SIZE_SUSTAIN); 
    2684                                         break; 
    2685                                 } 
    2686  
    2687                                 case OBJECT_XTRA_TYPE_RESIST: 
    2688                                 { 
    2689                                         o_ptr->xtra2 = (byte)rand_int(OBJECT_XTRA_SIZE_RESIST); 
    2690                                         break; 
    2691                                 } 
    2692  
    2693                                 case OBJECT_XTRA_TYPE_POWER: 
    2694                                 { 
    2695                                         o_ptr->xtra2 = (byte)rand_int(OBJECT_XTRA_SIZE_POWER); 
    2696                                         break; 
    2697                                 } 
     2724                                o_ptr->flags2 |= ego_sustains[rand_int(N_ELEMENTS(ego_sustains))]; 
     2725                                break; 
     2726                        } 
     2727 
     2728                        case OBJECT_XTRA_TYPE_RESIST: 
     2729                        { 
     2730                                o_ptr->flags2 |= ego_resists[rand_int(N_ELEMENTS(ego_resists))]; 
     2731                                break; 
     2732                        } 
     2733 
     2734                        case OBJECT_XTRA_TYPE_POWER: 
     2735                        { 
     2736                                o_ptr->flags3 |= ego_powers[rand_int(N_ELEMENTS(ego_powers))]; 
     2737                                break; 
    26982738                        } 
    26992739                } 
     
    27032743 
    27042744                /* Hack -- acquire "cursed" flag */ 
    2705                 if (e_ptr->flags3 & (TR3_LIGHT_CURSE)) o_ptr->ident |= (IDENT_CURSED); 
     2745                if (e_ptr->flags3 & (TR3_LIGHT_CURSE)) 
     2746                    o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    27062747 
    27072748                /* Hack -- apply extra penalties if needed */ 
     
    27492790 
    27502791                /* Hack -- acquire "cursed" flag */ 
    2751                 if (k_ptr->flags3 & (TR3_LIGHT_CURSE)) o_ptr->ident |= (IDENT_CURSED); 
     2792                if (k_ptr->flags3 & (TR3_LIGHT_CURSE)) 
     2793                    o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    27522794        } 
    27532795} 
  • trunk/src/save.c

    r509 r531  
    135135        wr_u16b(o_ptr->origin_xtra); 
    136136 
    137         /* Old flags */ 
    138         wr_u32b(0L); 
    139         wr_u32b(0L); 
     137        wr_u32b(o_ptr->flags1); 
     138        wr_u32b(o_ptr->flags2); 
     139        wr_u32b(o_ptr->flags3); 
    140140 
    141141        /* Held by monster index */ 
    142142        wr_s16b(o_ptr->held_m_idx); 
    143  
    144         /* Extra information */ 
    145         wr_byte(o_ptr->xtra1); 
    146         wr_byte(o_ptr->xtra2); 
    147143 
    148144        /* Save the inscription (if any) */ 
     
    198194        wr_byte(l_ptr->ignore); 
    199195 
    200         /* Extra stuff */ 
    201         wr_byte(l_ptr->xtra1); 
    202         wr_byte(l_ptr->xtra2); 
    203  
    204196        /* Count drops */ 
    205197        wr_byte(l_ptr->drop_gold); 
  • trunk/src/spells2.c

    r523 r531  
    302302{ 
    303303        /* Uncurse it */ 
    304         o_ptr->ident &= ~(IDENT_CURSED); 
     304        o_ptr->flags3 &= ~(TR3_LIGHT_CURSE); 
    305305 
    306306        /* Mark as uncursed */ 
     
    35263526 
    35273527                /* Curse it */ 
    3528                 o_ptr->ident |= (IDENT_CURSED)
     3528                o_ptr->flags3 |= TR3_LIGHT_CURSE
    35293529 
    35303530                /* Break it */ 
     
    35903590 
    35913591                /* Curse it */ 
    3592                 o_ptr->ident |= (IDENT_CURSED)
     3592                o_ptr->flags3 |= TR3_LIGHT_CURSE
    35933593 
    35943594                /* Break it */ 
  • trunk/src/store.c

    r522 r531  
    612612        if (o_ptr->name2 != j_ptr->name2) return (0); 
    613613 
    614         /* Hack -- Never stack "powerful" items */ 
    615         if (o_ptr->xtra1 || j_ptr->xtra1) return (0); 
    616  
    617614        /* Hack -- Never stack recharging items */ 
    618615        if ((o_ptr->timeout || j_ptr->timeout) && o_ptr->tval != TV_LITE) 
     
    630627        /* Hack -- Never stack chests */ 
    631628        if (o_ptr->tval == TV_CHEST) return (0); 
     629 
     630        /* Different flags */ 
     631        if (o_ptr->flags1 != j_ptr->flags1 || 
     632                o_ptr->flags2 != j_ptr->flags2 || 
     633                o_ptr->flags3 != j_ptr->flags3) return FALSE; 
    632634 
    633635        /* They match, so they must be similar */ 
  • trunk/src/types.h

    r522 r531  
    403403        byte ignore;                    /* Number of times ignored (?) */ 
    404404 
    405         byte xtra1;                             /* Something (unused) */ 
    406         byte xtra2;                             /* Something (unused) */ 
    407  
    408405        byte drop_gold;                 /* Max number of gold dropped at once */ 
    409406        byte drop_item;                 /* Max number of item dropped at once */ 
     
    481478        s16b pval;                      /* Item extra-parameter */ 
    482479 
    483         byte pseudo;            /* Pseudo-ID marker */ 
    484  
    485         byte number;            /* Number of items */ 
    486  
    487480        s16b weight;            /* Item weight */ 
    488481 
     
    490483        byte name2;                     /* Ego-Item type, if any */ 
    491484 
    492         byte xtra1;                     /* Extra info type */ 
    493         byte xtra2;                     /* Extra info index */ 
     485        u32b flags1;            /* Flags, set 1 */ 
     486        u32b flags2;            /* Flags, set 2 */ 
     487        u32b flags3;            /* Flags, set 3 */ 
    494488 
    495489        s16b ac;                        /* Normal AC */ 
     
    502496        s16b timeout;           /* Timeout Counter */ 
    503497 
     498        byte number;            /* Number of items */ 
     499 
     500        byte pseudo;            /* Pseudo-ID marker */ 
    504501        byte ident;                     /* Special flags */ 
    505502        byte marked;            /* Object is marked */ 
    506  
    507         quark_t note;                   /* Inscription index */ 
    508503 
    509504        s16b next_o_idx;        /* Next object in stack (if any) */ 
     
    513508        byte origin_depth;  /* What depth the item was found at */ 
    514509        u16b origin_xtra;   /* Extra information about origin */ 
     510 
     511        quark_t note;                   /* Inscription index */ 
    515512}; 
    516513 
  • trunk/src/wizard1.c

    r507 r531  
    417417 
    418418        /* Hack -- extract the "cursed" flag */ 
    419         if (a_ptr->flags3 & (TR3_LIGHT_CURSE)) o_ptr->ident |= (IDENT_CURSED); 
     419        if (a_ptr->flags3 & (TR3_LIGHT_CURSE)) 
     420                o_ptr->flags3 |= TR3_LIGHT_CURSE; 
    420421 
    421422        /* Success */ 
  • trunk/src/xtra1.c

    r523 r531  
    502502 
    503503                /* Cursed objects emit no light */ 
    504                 if (o_ptr->ident & IDENT_CURSED
     504                if (f3 & TR3_LIGHT_CURSE
    505505                { 
    506506                        amt = 0;