diff options
author | Steve Melenchuk <smelenchuk@gmail.com> | 2012-08-13 17:50:44 -0600 |
---|---|---|
committer | Steve Melenchuk <smelenchuk@gmail.com> | 2012-08-15 09:37:49 -0600 |
commit | d9cd5ffbdc34fa1c563a270977eac63d4f783bd1 (patch) | |
tree | 33a989d8d855daf5f505b86eb90fb5eda6cd3493 /crawl-ref/source/dgn-layouts.cc | |
parent | 90730a6bcb6f2c20240f5da8d76c90a987f32344 (diff) | |
download | crawl-ref-d9cd5ffbdc34fa1c563a270977eac63d4f783bd1.tar.gz crawl-ref-d9cd5ffbdc34fa1c563a270977eac63d4f783bd1.zip |
Fix occasional crash when using layout_basic with primary vaults.
It was assigning a trap to slot 0 without checking if it had been used
already, causing a later find_trap() to fail.
Diffstat (limited to 'crawl-ref/source/dgn-layouts.cc')
-rw-r--r-- | crawl-ref/source/dgn-layouts.cc | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/crawl-ref/source/dgn-layouts.cc b/crawl-ref/source/dgn-layouts.cc index 34b9edd409..3e866f27a6 100644 --- a/crawl-ref/source/dgn-layouts.cc +++ b/crawl-ref/source/dgn-layouts.cc @@ -107,14 +107,31 @@ void dgn_build_basic_level() { if (!one_chance_in(3) && !map_masked(end, MMT_NO_TRAP)) // 2/3 chance it ends in a shaft { - trap_def& ts(env.trap[0]); - ts.type = TRAP_SHAFT; - ts.pos = end; - grd(end) = DNGN_UNDISCOVERED_TRAP; - env.tgrid(end) = 0; - if (shaft_known(level_number, false)) - ts.reveal(); - dprf("Trail ends in shaft."); + trap_def* ts = NULL; + int i = 0; + for (; i < MAX_TRAPS; i++) + { + if (env.trap[i].type != TRAP_UNASSIGNED) + continue; + + ts = &env.trap[i]; + break; + } + if (i < MAX_TRAPS) + { + ts->type = TRAP_SHAFT; + ts->pos = end; + grd(end) = DNGN_UNDISCOVERED_TRAP; + env.tgrid(end) = i; + if (shaft_known(level_number, false)) + ts->reveal(); + dprf("Trail ends in shaft."); + } + else + { + grd(end) = DNGN_FLOOR; + dprf("Trail does not end in shaft."); + } } else { |