Browse Source

Fix single room cathedral with quest piece (#5321)

pull/5391/head
Anders Jenbo 4 years ago committed by GitHub
parent
commit
715926e751
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 20
      Source/levels/drlg_l1.cpp
  2. 1
      test/Fixtures.cmake
  3. 16
      test/drlg_l1_test.cpp
  4. BIN
      test/fixtures/hellfire/3-1369955278.dun

20
Source/levels/drlg_l1.cpp

@ -1259,14 +1259,20 @@ void PlaceMiniSetRandom(const Miniset &miniset, int rndper)
Point SelectChamber()
{
int chamber;
if (!HasChamber1)
chamber = PickRandomlyAmong({ 2, 3 });
else if (!HasChamber2)
chamber = PickRandomlyAmong({ 3, 1 });
else if (!HasChamber3)
chamber = PickRandomlyAmong({ 2, 1 });
else
if (HasChamber1 && HasChamber2 && HasChamber3) {
chamber = GenerateRnd(3) + 1;
} else if (HasChamber1 && HasChamber2) {
chamber = PickRandomlyAmong({ 2, 1 }); // Reverse order to match vanilla
} else if (HasChamber1 && HasChamber3) {
chamber = PickRandomlyAmong({ 3, 1 }); // Reverse order to match vanilla
} else if (HasChamber2 && HasChamber3) {
chamber = PickRandomlyAmong({ 2, 3 });
} else {
// The dungeon generation logic ensures that chamber 2 is available if
// either (or both of) 1 or 3 aren't, so if we ever end up with a single
// chamber layout it's always chamber 2.
chamber = 2;
}
switch (chamber) {
case 1:

1
test/Fixtures.cmake

@ -32,6 +32,7 @@ set(devilutionx_fixtures
hellfire/1-536340718.dun
hellfire/2-128964898.dun
hellfire/2-1180526547.dun
hellfire/3-1369955278.dun
hellfire/3-1512491184.dun
hellfire/3-1799396623.dun
hellfire/4-1190318991.dun

16
test/drlg_l1_test.cpp

@ -148,6 +148,22 @@ TEST(Drlg_l1, CreateL5Dungeon_hellfire_2_1180526547)
EXPECT_EQ(ViewPosition, Point(81, 45));
}
TEST(Drlg_l1, CreateL5Dungeon_hellfire_3_1369955278)
{
LoadExpectedLevelData("hellfire/3-1369955278.dun");
Players.resize(1);
MyPlayer = &Players[0];
MyPlayer->pOriginalCathedral = false;
InitQuests();
Quests[Q_SKELKING]._qactive = QUEST_INIT;
TestCreateDungeon(3, 1369955278, ENTRY_MAIN);
EXPECT_EQ(ViewPosition, Point(63, 86));
TestCreateDungeon(3, 1369955278, ENTRY_PREV);
EXPECT_EQ(ViewPosition, Point(75, 69));
}
TEST(Drlg_l1, CreateL5Dungeon_hellfire_3_1799396623)
{
LoadExpectedLevelData("hellfire/3-1799396623.dun");

BIN
test/fixtures/hellfire/3-1369955278.dun vendored

Binary file not shown.
Loading…
Cancel
Save