Browse Source

Merge pull request #2555 from bcko/2348_bcko_refactor_FindTransparencyValues_2

pull/2562/head
BC Ko 5 years ago committed by GitHub
parent
commit
c85d3f4b21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      Source/drlg_l1.cpp
  2. 19
      Source/drlg_l2.cpp
  3. 19
      Source/drlg_l4.cpp
  4. 103
      Source/gendung.cpp
  5. 2
      Source/gendung.h

19
Source/drlg_l1.cpp

@ -1952,23 +1952,6 @@ void FillChambers()
} }
} }
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] == tileID && dTransVal[xx][yy] == 0) {
FindTransparencyValues(tileID, i, j, xx, yy, 0);
TransVal++;
}
xx += 2;
}
yy += 2;
}
}
void FixTransparency() void FixTransparency()
{ {
int yy = 16; int yy = 16;
@ -2215,7 +2198,7 @@ void GenerateLevel(lvl_entry entry)
FixTilesPatterns(); FixTilesPatterns();
AddWall(); AddWall();
ClearFlags(); ClearFlags();
FloodTransparancyValues(); FloodTransparencyValues(13);
doneflag = true; doneflag = true;

19
Source/drlg_l2.cpp

@ -2762,23 +2762,6 @@ bool CreateDungeon()
return true; return true;
} }
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] == tileID && dTransVal[xx][yy] == 0) {
FindTransparencyValues(tileID, i, j, xx, yy, 0);
TransVal++;
}
xx += 2;
}
yy += 2;
}
}
void FixTransparency() void FixTransparency()
{ {
int yy = 16; int yy = 16;
@ -2932,7 +2915,7 @@ void GenerateLevel(lvl_entry entry)
if (setloadflag) { if (setloadflag) {
SetRoom(nSx1, nSy1); SetRoom(nSx1, nSy1);
} }
FloodTransparancyValues(); FloodTransparencyValues(3);
FixTransparency(); FixTransparency();
if (entry == ENTRY_MAIN) { if (entry == ENTRY_MAIN) {
doneflag = PlaceMiniSet(USTAIRS, 1, 1, -1, -1, true); doneflag = PlaceMiniSet(USTAIRS, 1, 1, -1, -1, true);

19
Source/drlg_l4.cpp

@ -1190,23 +1190,6 @@ void LoadDiabQuads(bool preflag)
#pragma GCC optimize("O0") #pragma GCC optimize("O0")
#endif #endif
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] == tileID && dTransVal[xx][yy] == 0) {
FindTransparencyValues(tileID, i, j, xx, yy, 0);
TransVal++;
}
xx += 2;
}
yy += 2;
}
}
#if defined(__3DS__) #if defined(__3DS__)
#pragma GCC pop_options #pragma GCC pop_options
#endif #endif
@ -1350,7 +1333,7 @@ void GenerateLevel(lvl_entry entry)
} }
} }
AddWall(); AddWall();
FloodTransparancyValues(); FloodTransparencyValues(6);
FixTransparency(); FixTransparency();
if (setloadflag) { if (setloadflag) {
SetSetPiecesRoom(SP4x1, SP4y1); SetSetPiecesRoom(SP4x1, SP4y1);

103
Source/gendung.cpp

@ -269,6 +269,54 @@ void CreateThemeRoom(int themeIndex)
} }
} }
void FindTransparencyValues(int i, int j, int x, int y, int d, uint8_t floorID)
{
if (dTransVal[x][y] != 0 || dungeon[i][j] != floorID) {
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, floorID);
FindTransparencyValues(i - 1, j, x - 2, y, 2, floorID);
FindTransparencyValues(i, j + 1, x, y + 2, 3, floorID);
FindTransparencyValues(i, j - 1, x, y - 2, 4, floorID);
FindTransparencyValues(i - 1, j - 1, x - 2, y - 2, 5, floorID);
FindTransparencyValues(i + 1, j - 1, x + 2, y - 2, 6, floorID);
FindTransparencyValues(i - 1, j + 1, x - 2, y + 2, 7, floorID);
FindTransparencyValues(i + 1, j + 1, x + 2, y + 2, 8, floorID);
}
} // namespace } // namespace
void FillSolidBlockTbls() void FillSolidBlockTbls()
@ -549,52 +597,21 @@ void InitLevels()
setlevel = false; setlevel = false;
} }
void FindTransparencyValues(uint8_t tileID, int i, int j, int x, int y, int d) void FloodTransparencyValues(uint8_t floorID)
{ {
if (dTransVal[x][y] != 0 || dungeon[i][j] != tileID) { int yy = 16;
if (d == 1) { for (int j = 0; j < DMAXY; j++) {
dTransVal[x][y] = TransVal; int xx = 16;
dTransVal[x][y + 1] = TransVal; for (int i = 0; i < DMAXX; i++) {
} if (dungeon[i][j] == floorID && dTransVal[xx][yy] == 0) {
if (d == 2) { FindTransparencyValues(i, j, xx, yy, 0, floorID);
dTransVal[x + 1][y] = TransVal; TransVal++;
dTransVal[x + 1][y + 1] = TransVal; }
} xx += 2;
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; yy += 2;
} }
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 } // namespace devilution

2
Source/gendung.h

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

Loading…
Cancel
Save