From 61ff4279a67dfa59acbd17b424ab06ae963858ea Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 31 Jul 2022 19:43:34 +0200 Subject: [PATCH] Clean up DRLG_L1 Substitution() --- Source/levels/drlg_l1.cpp | 50 +++++++++++++++++++++------------------ 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/Source/levels/drlg_l1.cpp b/Source/levels/drlg_l1.cpp index b7b87bd56..329773d9c 100644 --- a/Source/levels/drlg_l1.cpp +++ b/Source/levels/drlg_l1.cpp @@ -214,7 +214,7 @@ const ShadowStruct ShadowPatterns[37] = { }; /** Maps tile IDs to their corresponding base tile ID. */ -const uint8_t BaseTypes[207] = { +const uint8_t ShadowBaseTiles[207] = { 0, VWall, HWall, Corner, DWall, DArch, VWallEnd, HWallEnd, HArchEnd, VArchEnd, HArchVWall, VArch, HArch, Floor, HWallVArch, Pillar, VCorner, HCorner, @@ -242,7 +242,7 @@ const uint8_t BaseTypes[207] = { }; /** Maps tile IDs to their corresponding undecorated tile ID. */ -const uint8_t TileDecorations[207] = { +const uint8_t DecorationBaseTiles[207] = { 0, VWall, HWall, Corner, DWall, DArch, VWallEnd, HWallEnd, HArchEnd, VArchEnd, HArchVWall, VArch, HArch, Floor, HWallVArch, Pillar, VCorner, HCorner, @@ -283,10 +283,10 @@ void ApplyShadowsPatterns() for (int y = 1; y < DMAXY; y++) { for (int x = 1; x < DMAXX; x++) { - slice[0][0] = BaseTypes[dungeon[x][y]]; - slice[1][0] = BaseTypes[dungeon[x - 1][y]]; - slice[0][1] = BaseTypes[dungeon[x][y - 1]]; - slice[1][1] = BaseTypes[dungeon[x - 1][y - 1]]; + slice[0][0] = ShadowBaseTiles[dungeon[x][y]]; + slice[1][0] = ShadowBaseTiles[dungeon[x - 1][y]]; + slice[0][1] = ShadowBaseTiles[dungeon[x][y - 1]]; + slice[1][1] = ShadowBaseTiles[dungeon[x - 1][y - 1]]; for (const auto &shadow : ShadowPatterns) { if (shadow.strig != slice[0][0]) @@ -940,24 +940,28 @@ void Substitution() { for (int y = 0; y < DMAXY; y++) { for (int x = 0; x < DMAXX; x++) { - if (FlipCoin(4)) { - uint8_t c = TileDecorations[dungeon[x][y]]; - if (c != 0 && !Protected.test(x, y)) { - int rv = GenerateRnd(16); - int i = -1; - while (rv >= 0) { - i++; - if (i == sizeof(TileDecorations)) { - i = 0; - } - if (c == TileDecorations[i]) { - rv--; - } - } - - dungeon[x][y] = i; - } + if (!FlipCoin(4)) + continue; + + if (Protected.test(x, y)) + continue; + + uint8_t base = DecorationBaseTiles[dungeon[x][y]]; + if (base == 0) + continue; + + int variant = GenerateRnd(16); + + int decoration = -1; + while (variant >= 0) { + decoration++; + if (decoration == sizeof(DecorationBaseTiles)) + decoration = 0; + if (base == DecorationBaseTiles[decoration]) + variant--; } + + dungeon[x][y] = decoration; } } }