summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/dgn-layouts.cc
diff options
context:
space:
mode:
authorSteve Melenchuk <smelenchuk@gmail.com>2012-08-13 17:50:44 -0600
committerSteve Melenchuk <smelenchuk@gmail.com>2012-08-15 09:37:49 -0600
commitd9cd5ffbdc34fa1c563a270977eac63d4f783bd1 (patch)
tree33a989d8d855daf5f505b86eb90fb5eda6cd3493 /crawl-ref/source/dgn-layouts.cc
parent90730a6bcb6f2c20240f5da8d76c90a987f32344 (diff)
downloadcrawl-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.cc33
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
{