diff --git a/Source/drlg_l1.cpp b/Source/drlg_l1.cpp index 3349e2f8b..665e287c1 100644 --- a/Source/drlg_l1.cpp +++ b/Source/drlg_l1.cpp @@ -422,15 +422,28 @@ enum Tile : uint8_t { HDoor = 26, HFenceVWall = 27, HDoorVDoor = 28, + DFence = 29, VDoorEnd = 30, HDoorEnd = 31, + VFenceEnd = 32, VFence = 35, HFence = 36, HWallVFence = 37, + HArchVFence = 38, + HArchVDoor = 39, EntranceStairs = 64, // clang-format on }; +enum CathedralTile : uint8_t { + // clang-format off + HWallShadow = 148, + HArchShadow = 149, + HArchShadow2 = 153, + HWallShadow2 = 154, + // clang-format on +}; + enum CryptTile : uint8_t { // clang-format off VWall5 = 89, @@ -501,6 +514,7 @@ enum CryptTile : uint8_t { Floor12 = 164, Floor13 = 165, Floor14 = 166, + PillarHalf = 167, VWall8 = 173, VWall9 = 174, VWall10 = 175, @@ -531,6 +545,21 @@ enum CryptTile : uint8_t { HDemon = 200, VSuccubus = 201, HSuccubus = 202, + Shadow1 = 203, + Shadow2 = 204, + Shadow3 = 205, + Shadow4 = 206, + Shadow5 = 207, + Shadow6 = 208, + Shadow7 = 209, + Shadow8 = 210, + Shadow9 = 211, + Shadow10 = 212, + Shadow11 = 213, + Shadow12 = 214, + Shadow13 = 215, + Shadow14 = 216, + Shadow15 = 217, // clang-format on }; @@ -547,124 +576,124 @@ void InitCryptPieces() } } -void CryptLavafloor() +void ApplyCryptShadowsPatterns() { - for (int j = 1; j < 40; j++) { - for (int i = 1; i < 40; i++) { + for (int j = 1; j < DMAXY; j++) { + for (int i = 1; i < DMAXX; i++) { switch (dungeon[i][j]) { - case 5: - case 116: - case 133: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 203; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 204; - if (dungeon[i][j - 1] == 13) - dungeon[i][j - 1] = 205; + case DArch: + case DArch2: + case DArch3: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow1; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow2; + if (dungeon[i][j - 1] == Floor) + dungeon[i][j - 1] = Shadow3; break; - case 7: - case 15: - case 17: - case 118: - case 126: - case 128: - case 135: - case 152: - case 160: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 206; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 207; + case HWallEnd: + case HWallEnd2: + case HWallEnd3: + case HWallEnd4: + case Pillar: + case Pillar2: + case Pillar3: + case Pillar5: + case Pillar9: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow4; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow5; break; - case 8: - case 11: - case 14: - case 95: - case 119: - case 125: - case 136: - case 142: - case 153: - case 156: - case 159: - case 185: - case 186: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 203; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 204; + case HArchEnd: + case HArchEnd2: + case HArchEnd3: + case HArchEnd4: + case HWallVArch: + case HWallVArch2: + case HWallVArch3: + case HWallVArch4: + case VArch: + case VArch4: + case VArch5: + case VArch6: + case VArch7: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow1; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow2; break; - case 9: - case 120: - case 154: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 206; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 207; - if (dungeon[i][j - 1] == 13) - dungeon[i][j - 1] = 205; + case VArchEnd: + case VArchEnd2: + case VArchEnd4: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow4; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow5; + if (dungeon[i][j - 1] == Floor) + dungeon[i][j - 1] = Shadow3; break; - case 10: - case 12: - case 121: - case 123: - case 138: - case 155: - if (dungeon[i][j - 1] == 13) - dungeon[i][j - 1] = 205; + case HArch: + case HArch2: + case HArchVWall: + case HArchVWall2: + case HArchVWall3: + case HArchVWall4: + if (dungeon[i][j - 1] == Floor) + dungeon[i][j - 1] = Shadow3; break; - case 96: - case 187: - if (dungeon[i][j - 1] == 13) - dungeon[i][j - 1] = 208; + case HArch5: + case HArch6: + if (dungeon[i][j - 1] == Floor) + dungeon[i][j - 1] = Shadow6; break; - case 122: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 211; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 212; + case VArch2: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow9; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow10; break; - case 137: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 213; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 214; - if (dungeon[i][j - 1] == 13) - dungeon[i][j - 1] = 205; + case VArchEnd3: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = CryptTile::Shadow11; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = CryptTile::Shadow12; + if (dungeon[i][j - 1] == Floor) + dungeon[i][j - 1] = Shadow3; break; - case 139: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 215; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 216; + case VArch3: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow13; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow14; break; - case 140: - case 157: - if (dungeon[i][j - 1] == 13) - dungeon[i][j - 1] = 217; + case HArch3: + case HArch4: + if (dungeon[i][j - 1] == Floor) + dungeon[i][j - 1] = Shadow15; break; - case 143: - case 145: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 213; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 214; + case Pillar6: + case Pillar8: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = CryptTile::Shadow11; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = CryptTile::Shadow12; break; - case 150: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 203; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 204; - if (dungeon[i][j - 1] == 13) - dungeon[i][j - 1] = 217; + case DArch4: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow1; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow2; + if (dungeon[i][j - 1] == Floor) + dungeon[i][j - 1] = Shadow15; break; - case 162: - case 167: - case 192: - if (dungeon[i - 1][j] == 13) - dungeon[i - 1][j] = 209; - if (dungeon[i - 1][j - 1] == 13) - dungeon[i - 1][j - 1] = 210; + case Pillar11: + case Pillar12: + case PillarHalf: + if (dungeon[i - 1][j] == Floor) + dungeon[i - 1][j] = Shadow7; + if (dungeon[i - 1][j - 1] == Floor) + dungeon[i - 1][j - 1] = Shadow8; break; } } @@ -707,24 +736,27 @@ void ApplyShadowsPatterns() for (int y = 1; y < DMAXY; y++) { for (int x = 1; x < DMAXX; x++) { - if (dungeon[x - 1][y] == 139 && !Protected[x - 1][y]) { + if (Protected[x - 1][y]) + continue; + + if (dungeon[x - 1][y] == 139) { uint8_t tnv3 = 139; - if (IsAnyOf(dungeon[x][y], 29, 32, 35, 37, 38, 39)) { + if (IsAnyOf(dungeon[x][y], DFence, VFenceEnd, VFence, HWallVFence, HArchVFence, HArchVDoor)) { tnv3 = 141; } dungeon[x - 1][y] = tnv3; } - if (dungeon[x - 1][y] == 149 && !Protected[x - 1][y]) { - uint8_t tnv3 = 149; - if (IsAnyOf(dungeon[x][y], 29, 32, 35, 37, 38, 39)) { - tnv3 = 153; + if (dungeon[x - 1][y] == HArchShadow) { + uint8_t tnv3 = HArchShadow; + if (IsAnyOf(dungeon[x][y], DFence, VFenceEnd, VFence, HWallVFence, HArchVFence, HArchVDoor)) { + tnv3 = HArchShadow2; } dungeon[x - 1][y] = tnv3; } - if (dungeon[x - 1][y] == 148 && !Protected[x - 1][y]) { - uint8_t tnv3 = 148; - if (IsAnyOf(dungeon[x][y], 29, 32, 35, 37, 38, 39)) { - tnv3 = 154; + if (dungeon[x - 1][y] == HWallShadow) { + uint8_t tnv3 = HWallShadow; + if (IsAnyOf(dungeon[x][y], DFence, VFenceEnd, VFence, HWallVFence, HArchVFence, HArchVDoor)) { + tnv3 = HWallShadow2; } dungeon[x - 1][y] = tnv3; } @@ -1929,13 +1961,13 @@ void GenerateLevel(lvl_entry entry) PlaceMiniSetRandom(VWallSection, 100); PlaceMiniSetRandom(HWallSection, 100); PlaceMiniSetRandom(CryptFloorLave, 60); - CryptLavafloor(); + ApplyCryptShadowsPatterns(); switch (currlevel) { case 21: CryptCracked(30); CryptBroken(15); CryptLeaking(5); - CryptLavafloor(); + ApplyCryptShadowsPatterns(); CryptFloor(10); CryptSubstitions1(5); CryptSubstitions2(20); @@ -1947,7 +1979,7 @@ void GenerateLevel(lvl_entry entry) CryptCracked(30); CryptBroken(20); CryptLeaking(10); - CryptLavafloor(); + ApplyCryptShadowsPatterns(); break; case 23: CryptFloor(10); @@ -1956,7 +1988,7 @@ void GenerateLevel(lvl_entry entry) CryptCracked(30); CryptBroken(20); CryptLeaking(15); - CryptLavafloor(); + ApplyCryptShadowsPatterns(); break; default: CryptFloor(10); @@ -1965,7 +1997,7 @@ void GenerateLevel(lvl_entry entry) CryptCracked(30); CryptBroken(20); CryptLeaking(20); - CryptLavafloor(); + ApplyCryptShadowsPatterns(); break; } } else {