This patch will generate more precise messages for dragons eating body parts. In the old way "The blah had a boring taste." could mean anything from 0 to 5.9 % chance of gaining a resistance. (Yes, including zero as (int)chance*100 will floor x < 0.01 to 0) With this patch, any "boring" food does have a chance of at least 0.01 % . I also filled the gap from "boring" to "good" with "bland". So now we have: chance | message | average amount needed for +1 x = 0 no taste {} 0.01 <= x <= 0.1 boring [1000,10000) 0.1 < x <= 1.0 bland [100,1000) 1.0 < x <= 10.0 good [10,100) 10.0 < x <= 50.0 very good [2,10) 50.0 < x delicious [1,2) With x the total chance (in %) of gaining a resistance level. I have not changed the chance to get resistances, only the feedback. Bernd Edler -------------- next part -------------- *** apply.c.old Thu Apr 17 00:30:49 2003 --- apply.c Thu Apr 17 01:49:08 2003 *************** *** 1868,1874 **** char buf[MAX_BUF]; /* tmp. string buffer */ double chance; /* improvement-chance of one resistance type */ ! double maxchance=0; /* highest chance of any type */ double bonus=0; /* level bonus (improvement is easier at lowlevel) */ double mbonus=0; /* monster bonus */ int atnr_winner[NROFATTACKS]; /* winning candidates for resistance improvement */ --- 1868,1874 ---- char buf[MAX_BUF]; /* tmp. string buffer */ double chance; /* improvement-chance of one resistance type */ ! double totalchance=1; /* total chance of gaining one resistance */ double bonus=0; /* level bonus (improvement is easier at lowlevel) */ double mbonus=0; /* monster bonus */ int atnr_winner[NROFATTACKS]; /* winning candidates for resistance improvement */ *************** *** 1941,1960 **** winners++; } ! if (chance > maxchance) maxchance = chance; /*printf(" %s: bonus %.1f, chance %.1f\n", attacks[i], bonus, chance);*/ } } ! /* print message according to maxchance */ ! if (maxchance > 50.) sprintf(buf, "Hmm! The %s tasted delicious!", meal->name); ! else if (maxchance > 10.) sprintf(buf, "The %s tasted very good.", meal->name); ! else if (maxchance > 1.) sprintf(buf, "The %s tasted good.", meal->name); ! else if (maxchance > 0.0001) sprintf(buf, "The %s had a boring taste.", meal->name); else if (meal->last_eat > 0 && atnr_is_dragon_enabled(meal->last_eat)) sprintf(buf, "The %s tasted strange.", meal->name); --- 1941,1964 ---- winners++; } ! if (chance >= 0.01 ) totalchance *= 1 - chance; /*printf(" %s: bonus %.1f, chance %.1f\n", attacks[i], bonus, chance);*/ } } ! /* inverse totalchance as until now we have the failure-chance */ ! totalchance = 1 - totalchance; ! /* print message according to totalchance */ ! if (totalchance > 50.) sprintf(buf, "Hmm! The %s tasted delicious!", meal->name); ! else if (totalchance > 10.) sprintf(buf, "The %s tasted very good.", meal->name); ! else if (totalchance > 1.) sprintf(buf, "The %s tasted good.", meal->name); ! else if (totalchance > 0.1) ! sprintf(buf, "The %s tasted bland.", meal->name); ! else if (totalchance >= 0.01) sprintf(buf, "The %s had a boring taste.", meal->name); else if (meal->last_eat > 0 && atnr_is_dragon_enabled(meal->last_eat)) sprintf(buf, "The %s tasted strange.", meal->name);