summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/mutation.cc
diff options
context:
space:
mode:
Diffstat (limited to 'crawl-ref/source/mutation.cc')
-rw-r--r--crawl-ref/source/mutation.cc38
1 files changed, 20 insertions, 18 deletions
diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc
index ee902d24c2..f531d437f1 100644
--- a/crawl-ref/source/mutation.cc
+++ b/crawl-ref/source/mutation.cc
@@ -2984,27 +2984,29 @@ int how_mutated(bool all, bool levels)
return (j);
}
-bool give_bad_mutation(bool failMsg, bool force_mutation)
+bool give_bad_mutation(bool failMsg, bool force_mutation, bool non_fatal)
{
mutation_type mutat = NUM_MUTATIONS;
- switch (random2(13))
- {
- case 0: mutat = MUT_CARNIVOROUS; break;
- case 1: mutat = MUT_HERBIVOROUS; break;
- case 2: mutat = MUT_FAST_METABOLISM; break;
- case 3: mutat = MUT_WEAK; break;
- case 4: mutat = MUT_DOPEY; break;
- case 5: mutat = MUT_CLUMSY; break;
- case 6: mutat = MUT_TELEPORT; break;
- case 7: mutat = MUT_DEFORMED; break;
- case 8: mutat = MUT_SCREAM; break;
- case 9: mutat = MUT_DETERIORATION; break;
- case 10: mutat = MUT_BLURRY_VISION; break;
- case 11: mutat = MUT_FRAIL; break;
- case 12: mutat = MUT_LOW_MAGIC; break;
- }
-
+ do {
+ switch (random2(13))
+ {
+ case 0: mutat = MUT_CARNIVOROUS; break;
+ case 1: mutat = MUT_HERBIVOROUS; break;
+ case 2: mutat = MUT_FAST_METABOLISM; break;
+ case 3: mutat = MUT_WEAK; break;
+ case 4: mutat = MUT_DOPEY; break;
+ case 5: mutat = MUT_CLUMSY; break;
+ case 6: mutat = MUT_TELEPORT; break;
+ case 7: mutat = MUT_DEFORMED; break;
+ case 8: mutat = MUT_SCREAM; break;
+ case 9: mutat = MUT_DETERIORATION; break;
+ case 10: mutat = MUT_BLURRY_VISION; break;
+ case 11: mutat = MUT_FRAIL; break;
+ case 12: mutat = MUT_LOW_MAGIC; break;
+ }
+ } while (non_fatal && !accept_mutation(mutat, true, true));
+
const bool result = mutate(mutat, failMsg, force_mutation);
if (result)
learned_something_new(TUT_YOU_MUTATED);