refactor 3 versions of FindTransparencyValues in: drlg_l1.cpp, drlg_l2.cpp, drlg_l4.cpp (#2554)

This commit is contained in:
BC Ko 2021-08-09 23:50:51 -07:00 committed by GitHub
commit bcd60ea0b4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 58 additions and 150 deletions

View file

@ -1952,62 +1952,15 @@ void FillChambers()
}
}
void FindTransparencyValues(int i, int j, int x, int y, int d)
{
if (dTransVal[x][y] != 0 || dungeon[i][j] != 13) {
if (d == 1) {
dTransVal[x][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
}
if (d == 2) {
dTransVal[x + 1][y] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 3) {
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
}
if (d == 4) {
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 5) {
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 6) {
dTransVal[x][y + 1] = TransVal;
}
if (d == 7) {
dTransVal[x + 1][y] = TransVal;
}
if (d == 8) {
dTransVal[x][y] = TransVal;
}
return;
}
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
FindTransparencyValues(i + 1, j, x + 2, y, 1);
FindTransparencyValues(i - 1, j, x - 2, y, 2);
FindTransparencyValues(i, j + 1, x, y + 2, 3);
FindTransparencyValues(i, j - 1, x, y - 2, 4);
FindTransparencyValues(i - 1, j - 1, x - 2, y - 2, 5);
FindTransparencyValues(i + 1, j - 1, x + 2, y - 2, 6);
FindTransparencyValues(i - 1, j + 1, x - 2, y + 2, 7);
FindTransparencyValues(i + 1, j + 1, x + 2, y + 2, 8);
}
void FloodTransparancyValues()
{
int yy = 16;
uint8_t tileID = 13;
for (int j = 0; j < DMAXY; j++) {
int xx = 16;
for (int i = 0; i < DMAXX; i++) {
if (dungeon[i][j] == 13 && dTransVal[xx][yy] == 0) {
FindTransparencyValues(i, j, xx, yy, 0);
if (dungeon[i][j] == tileID && dTransVal[xx][yy] == 0) {
FindTransparencyValues(tileID, i, j, xx, yy, 0);
TransVal++;
}
xx += 2;

View file

@ -2762,62 +2762,15 @@ bool CreateDungeon()
return true;
}
void FindTransparencyValues(int i, int j, int x, int y, int d)
{
if (dTransVal[x][y] != 0 || dungeon[i][j] != 3) {
if (d == 1) {
dTransVal[x][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
}
if (d == 2) {
dTransVal[x + 1][y] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 3) {
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
}
if (d == 4) {
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 5) {
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 6) {
dTransVal[x][y + 1] = TransVal;
}
if (d == 7) {
dTransVal[x + 1][y] = TransVal;
}
if (d == 8) {
dTransVal[x][y] = TransVal;
}
return;
}
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
FindTransparencyValues(i + 1, j, x + 2, y, 1);
FindTransparencyValues(i - 1, j, x - 2, y, 2);
FindTransparencyValues(i, j + 1, x, y + 2, 3);
FindTransparencyValues(i, j - 1, x, y - 2, 4);
FindTransparencyValues(i - 1, j - 1, x - 2, y - 2, 5);
FindTransparencyValues(i + 1, j - 1, x + 2, y - 2, 6);
FindTransparencyValues(i - 1, j + 1, x - 2, y + 2, 7);
FindTransparencyValues(i + 1, j + 1, x + 2, y + 2, 8);
}
void FloodTransparancyValues()
{
int yy = 16;
uint8_t tileID = 3;
for (int j = 0; j < DMAXY; j++) {
int xx = 16;
for (int i = 0; i < DMAXX; i++) {
if (dungeon[i][j] == 3 && dTransVal[xx][yy] == 0) {
FindTransparencyValues(i, j, xx, yy, 0);
if (dungeon[i][j] == tileID && dTransVal[xx][yy] == 0) {
FindTransparencyValues(tileID, i, j, xx, yy, 0);
TransVal++;
}
xx += 2;

View file

@ -1190,62 +1190,15 @@ void LoadDiabQuads(bool preflag)
#pragma GCC optimize("O0")
#endif
void FindTransparencyValues(int i, int j, int x, int y, int d)
{
if (dTransVal[x][y] != 0 || dungeon[i][j] != 6) {
if (d == 1) {
dTransVal[x][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
}
if (d == 2) {
dTransVal[x + 1][y] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 3) {
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
}
if (d == 4) {
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 5) {
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 6) {
dTransVal[x][y + 1] = TransVal;
}
if (d == 7) {
dTransVal[x + 1][y] = TransVal;
}
if (d == 8) {
dTransVal[x][y] = TransVal;
}
return;
}
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
FindTransparencyValues(i + 1, j, x + 2, y, 1);
FindTransparencyValues(i - 1, j, x - 2, y, 2);
FindTransparencyValues(i, j + 1, x, y + 2, 3);
FindTransparencyValues(i, j - 1, x, y - 2, 4);
FindTransparencyValues(i - 1, j - 1, x - 2, y - 2, 5);
FindTransparencyValues(i + 1, j - 1, x + 2, y - 2, 6);
FindTransparencyValues(i - 1, j + 1, x - 2, y + 2, 7);
FindTransparencyValues(i + 1, j + 1, x + 2, y + 2, 8);
}
void FloodTransparancyValues()
{
int yy = 16;
uint8_t tileID = 6;
for (int j = 0; j < DMAXY; j++) {
int xx = 16;
for (int i = 0; i < DMAXX; i++) {
if (dungeon[i][j] == 6 && dTransVal[xx][yy] == 0) {
FindTransparencyValues(i, j, xx, yy, 0);
if (dungeon[i][j] == tileID && dTransVal[xx][yy] == 0) {
FindTransparencyValues(tileID, i, j, xx, yy, 0);
TransVal++;
}
xx += 2;

View file

@ -549,4 +549,52 @@ void InitLevels()
setlevel = false;
}
void FindTransparencyValues(uint8_t tileID, int i, int j, int x, int y, int d)
{
if (dTransVal[x][y] != 0 || dungeon[i][j] != tileID) {
if (d == 1) {
dTransVal[x][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
}
if (d == 2) {
dTransVal[x + 1][y] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 3) {
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
}
if (d == 4) {
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 5) {
dTransVal[x + 1][y + 1] = TransVal;
}
if (d == 6) {
dTransVal[x][y + 1] = TransVal;
}
if (d == 7) {
dTransVal[x + 1][y] = TransVal;
}
if (d == 8) {
dTransVal[x][y] = TransVal;
}
return;
}
dTransVal[x][y] = TransVal;
dTransVal[x + 1][y] = TransVal;
dTransVal[x][y + 1] = TransVal;
dTransVal[x + 1][y + 1] = TransVal;
FindTransparencyValues(tileID, i + 1, j, x + 2, y, 1);
FindTransparencyValues(tileID, i - 1, j, x - 2, y, 2);
FindTransparencyValues(tileID, i, j + 1, x, y + 2, 3);
FindTransparencyValues(tileID, i, j - 1, x, y - 2, 4);
FindTransparencyValues(tileID, i - 1, j - 1, x - 2, y - 2, 5);
FindTransparencyValues(tileID, i + 1, j - 1, x + 2, y - 2, 6);
FindTransparencyValues(tileID, i - 1, j + 1, x - 2, y + 2, 7);
FindTransparencyValues(tileID, i + 1, j + 1, x + 2, y + 2, 8);
}
} // namespace devilution

View file

@ -247,5 +247,6 @@ void DRLG_LPass3(int lv);
void DRLG_Init_Globals();
bool SkipThemeRoom(int x, int y);
void InitLevels();
void FindTransparencyValues(uint8_t tileID, int i, int j, int x, int y, int d);
} // namespace devilution