Ticket #984: aptr-alloc.patch

File aptr-alloc.patch, 7.2 KB (added by magnate, 10 years ago)

patch to move artifact generation to a_ptr->alloc_*

  • src/object/obj-make.c

     
    403403 * Note -- see "make_artifact()" and "apply_magic()". 
    404404 * 
    405405 * We *prefer* to create the special artifacts in order, but this is 
    406  * normally outweighed by the "rarity" rolls for those artifacts.  The 
    407  * only major effect of this logic is that the Phial (with rarity one) 
    408  * is always the first special artifact created. 
     406 * normally outweighed by the "rarity" rolls for those artifacts. 
    409407 */ 
    410408static bool make_artifact_special(object_type *o_ptr, int level) 
    411409{ 
     
    432430                if (a_ptr->created) continue; 
    433431 
    434432                /* Enforce minimum "depth" (loosely) */ 
    435                 if (a_ptr->level > p_ptr->depth) 
     433                if (a_ptr->alloc_min > p_ptr->depth) 
    436434                { 
    437435                        /* Get the "out-of-depth factor" */ 
    438                         int d = (a_ptr->level - p_ptr->depth) * 2; 
     436                        int d = (a_ptr->alloc_min - p_ptr->depth) * 2; 
    439437 
    440438                        /* Roll for out-of-depth creation */ 
    441439                        if (randint0(d) != 0) continue; 
    442440                } 
    443441 
     442                /* Enforce maximum depth (strictly) */ 
     443                if (a_ptr->alloc_max < p_ptr->depth) continue; 
     444 
    444445                /* Artifact "rarity roll" */ 
    445                 if (randint0(a_ptr->rarity) != 0) continue; 
     446                if (randint1(100) > a_ptr->alloc_prob) continue; 
    446447 
    447448                /* Find the base object */ 
    448449                k_idx = lookup_kind(a_ptr->tval, a_ptr->sval); 
     
    515516                if (a_ptr->sval != o_ptr->sval) continue; 
    516517 
    517518                /* XXX XXX Enforce minimum "depth" (loosely) */ 
    518                 if (a_ptr->level > p_ptr->depth) 
     519                if (a_ptr->alloc_min > p_ptr->depth) 
    519520                { 
    520521                        /* Get the "out-of-depth factor" */ 
    521                         int d = (a_ptr->level - p_ptr->depth) * 2; 
     522                        int d = (a_ptr->alloc_min - p_ptr->depth) * 2; 
    522523 
    523524                        /* Roll for out-of-depth creation */ 
    524525                        if (randint0(d) != 0) continue; 
    525526                } 
    526527 
     528                /* Enforce maximum depth (strictly) */ 
     529                if (a_ptr->alloc_max < p_ptr->depth) continue; 
     530 
    527531                /* We must make the "rarity roll" */ 
    528                 if (randint0(a_ptr->rarity) != 0) continue; 
     532                if (randint1(100) > a_ptr->alloc_prob) continue; 
    529533 
    530534                /* Mark the item as an artifact */ 
    531535                o_ptr->name1 = i; 
  • src/object/types.h

     
    106106 
    107107        u32b flags[OBJ_FLAG_N];         /**< Flags */ 
    108108 
    109         byte level;   /**< Minimum depth artifact can appear at */ 
    110         byte rarity;  /**< Artifact rarity */ 
     109        byte level;   /** Unused */ 
     110        byte rarity;  /** Unused */ 
     111        byte alloc_prob; /** Chance of being generated (i.e. rarity) */ 
     112        byte alloc_min;  /** Minimum depth (can appear earlier) */ 
     113        byte alloc_max;  /** Maximum depth (will NEVER appear deeper) */ 
    111114 
    112115        bool created;   /**< Whether this artifact has been created */ 
    113116        bool seen;      /**< Whether this artifact has been seen as an artifact */ 
  • src/load.c

     
    10391039 
    10401040                                rd_byte(&a_ptr->level); 
    10411041                                rd_byte(&a_ptr->rarity); 
     1042                                rd_byte(&a_ptr->alloc_prob); 
     1043                                rd_byte(&a_ptr->alloc_min); 
     1044                                rd_byte(&a_ptr->alloc_max); 
    10421045 
    10431046                                rd_u16b(&a_ptr->effect); 
    10441047                                rd_u16b(&a_ptr->time_base); 
     
    10761079 
    10771080                                rd_byte(&tmp8u); /* a_ptr->level */ 
    10781081                                rd_byte(&tmp8u); /* a_ptr->rarity */ 
     1082                                rd_byte(&tmp8u); /* a_ptr->alloc_prob */ 
     1083                                rd_byte(&tmp8u); /* a_ptr->alloc_min */ 
     1084                                rd_byte(&tmp8u); /* a_ptr->alloc_max */ 
    10791085 
    10801086                                rd_u16b(&tmp16u); /* a_ptr->effect */ 
    10811087                                rd_u16b(&tmp16u); /* a_ptr->time_base */ 
  • src/load-old.c

     
    11521152 
    11531153                                rd_byte(&a_ptr->level); 
    11541154                                rd_byte(&a_ptr->rarity); 
     1155                                rd_byte(&a_ptr->alloc_prob); 
     1156                                rd_byte(&a_ptr->alloc_min); 
     1157                                rd_byte(&a_ptr->alloc_max); 
    11551158 
    11561159                                rd_u16b(&a_ptr->effect); 
    11571160                                rd_u16b(&a_ptr->time_base); 
    11581161                                rd_u16b(&a_ptr->time_dice); 
    11591162                                rd_u16b(&a_ptr->time_sides); 
    11601163                        } 
    1161                  
     1164 
    11621165                /* Initialize only the randart names */ 
    11631166                do_randart(seed_randart, FALSE); 
    11641167                } 
     
    11891192 
    11901193                                rd_byte(&tmp8u); /* a_ptr->level */ 
    11911194                                rd_byte(&tmp8u); /* a_ptr->rarity */ 
     1195                                rd_byte(&tmp8u); /* a_ptr->alloc_prob */ 
     1196                                rd_byte(&tmp8u); /* a_ptr->alloc_min */ 
     1197                                rd_byte(&tmp8u); /* a_ptr->alloc_max */ 
    11921198 
    11931199                                rd_u16b(&tmp16u); /* a_ptr->effect */ 
    11941200                                rd_u16b(&tmp16u); /* a_ptr->time_base */ 
  • src/wiz-spoil.c

     
    509509                         * Determine the minimum depth an artifact can appear, its rarity, 
    510510                         * its weight, and its value in gold pieces. 
    511511                         */ 
    512                         text_out("\nLevel %u, Rarity %u, %d.%d lbs, %ld AU\n", 
    513                                          a_ptr->level, a_ptr->rarity, (a_ptr->weight / 10), 
    514                                          (a_ptr->weight % 10), ((long)a_ptr->cost)); 
     512                        text_out("\nMin Level %u, Max Level %u, Generation chance %u, %d.%d lbs, %ld AU\n", 
     513                                a_ptr->alloc_min, a_ptr->alloc_max, 
     514                                a_ptr->alloc_prob, (a_ptr->weight / 10), 
     515                                (a_ptr->weight % 10), ((long)a_ptr->cost)); 
    515516 
    516517                        /* Terminate the entry */ 
    517518                        spoiler_blanklines(2); 
  • src/save.c

     
    518518                wr_byte(a_ptr->tval); 
    519519                wr_byte(a_ptr->sval); 
    520520                wr_s16b(a_ptr->pval); 
    521                  
     521 
    522522                wr_s16b(a_ptr->to_h); 
    523523                wr_s16b(a_ptr->to_d); 
    524524                wr_s16b(a_ptr->to_a); 
    525525                wr_s16b(a_ptr->ac); 
    526                  
     526 
    527527                wr_byte(a_ptr->dd); 
    528528                wr_byte(a_ptr->ds); 
    529                  
     529 
    530530                wr_s16b(a_ptr->weight); 
    531                  
     531 
    532532                wr_s32b(a_ptr->cost); 
    533                  
     533 
    534534                wr_u32b(a_ptr->flags[0]); 
    535535                wr_u32b(a_ptr->flags[1]); 
    536536                wr_u32b(a_ptr->flags[2]); 
    537                  
     537 
    538538                wr_byte(a_ptr->level); 
    539539                wr_byte(a_ptr->rarity); 
    540                  
     540                wr_byte(a_ptr->alloc_prob); 
     541                wr_byte(a_ptr->alloc_min); 
     542                wr_byte(a_ptr->alloc_max); 
     543 
    541544                wr_u16b(a_ptr->effect); 
    542545                wr_u16b(a_ptr->time_base); 
    543546                wr_u16b(a_ptr->time_dice); 
     
    549552void wr_inventory(void) 
    550553{ 
    551554        int i; 
    552          
     555 
    553556        /* Write the inventory */ 
    554557        for (i = 0; i < ALL_INVEN_TOTAL; i++) 
    555558        { 
    556559                object_type *o_ptr = &inventory[i]; 
    557                  
     560 
    558561                /* Skip non-objects */ 
    559562                if (!o_ptr->k_idx) continue; 
    560563                 
  • src/init1.c

     
    19291929                a_ptr->cost = cost; 
    19301930        } 
    19311931 
     1932        /* Process 'A' for "Allocation" (one line only) */ 
     1933        else if (buf[0] == 'A') 
     1934        { 
     1935                int common, min, max; 
     1936 
     1937                /* Format is "A:<common>:<min> to <max>" */ 
     1938                if (3 != sscanf(buf+2, "%d:%d to %d", &common, &min, &max)) 
     1939                        return (PARSE_ERROR_GENERIC); 
     1940 
     1941 
     1942                /* Limit to size a byte */ 
     1943                if (common < 0 || common > 255) return (PARSE_ERROR_GENERIC); 
     1944                if (min < 0 || min > 255) return (PARSE_ERROR_GENERIC); 
     1945                if (max < 0 || max > 255) return (PARSE_ERROR_GENERIC); 
     1946 
     1947 
     1948                /* Set up data */ 
     1949                a_ptr->alloc_prob = common; 
     1950                a_ptr->alloc_min = min; 
     1951                a_ptr->alloc_max = max; 
     1952        } 
     1953 
    19321954        /* Process 'P' for "power" and such */ 
    19331955        else if (buf[0] == 'P') 
    19341956        { 
     
    19711993                } 
    19721994        } 
    19731995 
    1974         /* Process 'A' for "Activation & time" */ 
    1975         else if (buf[0] == 'A') 
     1996        /* Process 'E' for Effect (Activation) & time */ 
     1997        else if (buf[0] == 'E') 
    19761998        { 
    19771999                /* Find the colon after the name */ 
    19782000                s = strchr(buf + 2, ':');