… | |
… | |
574 | * danger. Note that we assume that we have had the caster ready the alchemy |
574 | * danger. Note that we assume that we have had the caster ready the alchemy |
575 | * skill *before* this routine is called. (no longer auto-readies that skill) |
575 | * skill *before* this routine is called. (no longer auto-readies that skill) |
576 | * -b.t. |
576 | * -b.t. |
577 | */ |
577 | */ |
578 | static int |
578 | static int |
579 | calc_alch_danger (object *caster, object *cauldron, recipe *rp) |
579 | calc_alch_danger (object *caster, object *cauldron, object *skill, recipe *rp) |
580 | { |
580 | { |
581 | object *item; |
|
|
582 | char name[MAX_BUF]; |
|
|
583 | int danger = 0, nrofi = 0; |
581 | int danger = 0; |
584 | |
582 | |
585 | /* Knowing alchemy skill reduces yer risk */ |
583 | /* Knowing alchemy skill reduces yer risk */ |
586 | danger -= caster->chosen_skill ? caster->chosen_skill->level : caster->level; |
584 | danger -= skill->level; |
587 | |
|
|
588 | if (!caster->chosen_skill) |
|
|
589 | LOG (llevError | logBacktrace, "calc_alch_danger called without a chosen skill, caster %s, cauldron %s\n", |
|
|
590 | caster->debug_desc (), cauldron->debug_desc ()); |
|
|
591 | |
585 | |
592 | /* better cauldrons reduce risk */ |
586 | /* better cauldrons reduce risk */ |
593 | danger -= cauldron->magic; |
587 | danger -= cauldron->magic; |
594 | |
588 | |
595 | /* Higher Int, lower the risk */ |
589 | /* Higher Int, lower the risk */ |
… | |
… | |
597 | |
591 | |
598 | /* Ingredients. Longer names usually mean rarer stuff. |
592 | /* Ingredients. Longer names usually mean rarer stuff. |
599 | * Thus the backfire is worse. Also, more ingredients |
593 | * Thus the backfire is worse. Also, more ingredients |
600 | * means we are attempting a more powerfull potion, |
594 | * means we are attempting a more powerfull potion, |
601 | * and thus the backfire will be worse. */ |
595 | * and thus the backfire will be worse. */ |
602 | for (item = cauldron->inv; item; item = item->below) |
596 | for (object *item = cauldron->inv; item; item = item->below) |
603 | { |
597 | { |
604 | assign (name, item->name); |
598 | const char *name = item->title |
605 | if (item->title) |
|
|
606 | sprintf (name, "%s %s", &item->name, &item->title); |
599 | ? format ("%s %s", &item->name, &item->title) |
|
|
600 | : &item->name; |
|
|
601 | |
607 | danger += (strtoint (name) / 1000) + 3; |
602 | danger += strtoint (name) / 1000 + 3; |
608 | nrofi++; |
|
|
609 | } |
603 | } |
610 | |
604 | |
611 | if (rp == NULL) |
605 | if (!rp) |
612 | danger += 110; |
606 | danger += 110; |
613 | else |
607 | else |
614 | danger += rp->diff * 3; |
608 | danger += rp->diff * 3; |
615 | |
609 | |
616 | /* Using a bad device is *majorly* stupid */ |
610 | /* Using a bad device is *majorly* stupid */ |
617 | if (cauldron->flag [FLAG_CURSED]) |
611 | if (cauldron->flag [FLAG_CURSED]) danger += 80; |
618 | danger += 80; |
|
|
619 | if (cauldron->flag [FLAG_DAMNED]) |
612 | if (cauldron->flag [FLAG_DAMNED]) danger += 200; |
620 | danger += 200; |
|
|
621 | |
613 | |
622 | #ifdef ALCHEMY_DEBUG |
614 | #ifdef ALCHEMY_DEBUG |
623 | LOG (llevDebug, "calc_alch_danger() returned danger=%d\n", danger); |
615 | LOG (llevDebug, "calc_alch_danger() returned danger=%d\n", danger); |
624 | #endif |
616 | #endif |
625 | |
617 | |
… | |
… | |
928 | } |
920 | } |
929 | } |
921 | } |
930 | } |
922 | } |
931 | |
923 | |
932 | /* if we get here, we failed!! */ |
924 | /* if we get here, we failed!! */ |
933 | alchemy_failure_effect (caster, cauldron, rp, calc_alch_danger (caster, cauldron, rp)); |
925 | alchemy_failure_effect (caster, cauldron, rp, calc_alch_danger (caster, cauldron, skill, rp)); |
934 | } |
926 | } |
935 | |
927 | |