Browse Source

Merge branch 'master' of github.com:diasurgical/devilution

pull/90/head
Anders Jenbo 7 years ago
parent
commit
c7595b5241
  1. 415
      Source/drlg_l3.cpp

415
Source/drlg_l3.cpp

@ -1455,263 +1455,192 @@ void DRLG_L3PlaceRndSet(const unsigned char *miniset, int rndper)
void DRLG_L3Wood()
{
char *v0; // edi
int v1; // edx
_BYTE *v2; // eax
int v3; // edx
_BYTE *v4; // ebx
int v5; // esi
int v6; // esi
int v7; // ebx
int v8; // ebx
signed int v9; // esi
_BYTE *v10; // eax
int v11; // esi
int v12; // ebx
int v13; // eax
_BYTE *v14; // ecx
int v15; // ecx
int v16; // eax
int v17; // esi
int v18; // esi
//int v19; // eax
int v20; // edi
int v21; // esi
int i; // edx
int v23; // esi
int v24; // edi
signed int v25; // ecx
int v26; // ebx
char *v27; // esi
int v28; // ecx
int v29; // edi
int v30; // ecx
int v31; // edi
int v32; // ebx
int v33; // ebx
char *v34; // esi
signed int v35; // ecx
int v36; // [esp+Ch] [ebp-14h]
int v37; // [esp+10h] [ebp-10h]
int v38; // [esp+10h] [ebp-10h]
int v39; // [esp+10h] [ebp-10h]
int v40; // [esp+10h] [ebp-10h]
int v41; // [esp+10h] [ebp-10h]
int x; // [esp+14h] [ebp-Ch]
int xa; // [esp+14h] [ebp-Ch]
signed int v44; // [esp+18h] [ebp-8h]
signed int v45; // [esp+18h] [ebp-8h]
int y; // [esp+1Ch] [ebp-4h]
signed int ya; // [esp+1Ch] [ebp-4h]
y = 0;
do {
x = 0;
v44 = 1;
v0 = (char *)dungeon + y;
do {
if (*v0 == 10 && random(0, 2)) {
v1 = v44 - 1;
if (*v0 == 10) {
v2 = (unsigned char *)v0;
do {
v2 += 40;
++v1;
} while (*v2 == 10);
}
v3 = v1 - 1;
v37 = v3;
if (v3 - (v44 - 1) > 0) {
*v0 = 127;
if (v44 < v3) {
v4 = (unsigned char *)v0 + 40;
v5 = v3 - v44;
do {
*v4 = random(0, 2) != 0 ? 126 : -127;
v4 += 40;
--v5;
} while (v5);
int i, j, x, y, xx, yy, rt, rp, x1, y1, x2, y2;
BOOL skip;
for(j = 0; j < DMAXY - 1; j++) {
for(i = 0; i < DMAXX - 1; i++) {
if(dungeon[i][j] == 10 && random(0, 2) != 0) {
x = i;
while(dungeon[x][j] == 10) {
x++;
}
x--;
if(x - i > 0) {
dungeon[i][j] = 127;
for(xx = i + 1; xx < x; xx++) {
if(random(0, 2) != 0) {
dungeon[xx][j] = 126;
} else {
dungeon[xx][j] = 129;
}
}
dungeon[v37][y] = -128;
dungeon[x][j] = 128;
}
}
if (*v0 == 9 && random(0, 2)) {
v6 = y;
v7 = y;
if (*v0 == 9) {
do
++v7;
while (dungeon[x][v7] == 9);
}
v8 = v7 - 1;
if (v8 - y > 0) {
*v0 = 123;
while (++v6 < v8) {
if (random(0, 2))
dungeon[x][v6] = 121;
else
dungeon[x][v6] = 124;
if(dungeon[i][j] == 9 && random(0, 2) != 0) {
y = j;
while(dungeon[i][y] == 9) {
y++;
}
y--;
if(y - j > 0) {
dungeon[i][j] = 123;
for(yy = j + 1; yy < y; yy++) {
if(random(0, 2) != 0) {
dungeon[i][yy] = 121;
} else {
dungeon[i][yy] = 124;
}
}
dungeon[i][y] = 122;
}
}
if(dungeon[i][j] == 11 && dungeon[i + 1][j] == 10 && dungeon[i][j + 1] == 9 && random(0, 2) != 0) {
dungeon[i][j] = 125;
x = i + 1;
while(dungeon[x][j] == 10) {
x++;
}
x--;
for(xx = i + 1; xx < x; xx++) {
if(random(0, 2) != 0) {
dungeon[xx][j] = 126;
} else {
dungeon[xx][j] = 129;
}
}
dungeon[x][j] = 128;
y = j + 1;
while(dungeon[i][y] == 9) {
y++;
}
y--;
for(yy = j + 1; yy < y; yy++) {
if(random(0, 2) != 0) {
dungeon[i][yy] = 121;
} else {
dungeon[i][yy] = 124;
}
dungeon[x][v8] = 122;
}
dungeon[i][y] = 122;
}
if (*v0 == 11 && v0[40] == 10 && v0[1] == 9 && random(0, 2)) {
v9 = v44;
*v0 = 125;
if (v0[40] == 10) {
v10 = (unsigned char *)v0 + 40;
do {
v10 += 40;
++v9;
} while (*v10 == 10);
}
v11 = v9 - 1;
if (v44 < v11) {
v38 = (int)(v0 + 40);
v12 = v11 - v44;
do {
v13 = random(0, 2);
v14 = (_BYTE *)v38;
v38 += 40;
--v12;
*v14 = v13 != 0 ? 126 : -127;
} while (v12);
}
v15 = v11;
v16 = y + 1;
v17 = v16;
for (dungeon[v15][v16 - 1] = 128; dungeon[x][v17] == 9; ++v17) /* check *((_BYTE *)&dMonster[111][2 * v15 + 111] + v16 + 3) */
;
v18 = v17 - 1;
v39 = y + 1;
if (v16 < v18) {
do {
if (random(0, 2))
dungeon[x][v39] = 121;
else
dungeon[x][v39] = 124;
++v39;
} while (v39 < v18);
}
dungeon[x][v18] = 122;
}
}
for(j = 0; j < DMAXY; j++) {
for(i = 0; i < DMAXX; i++) {
if(dungeon[i][j] != 7 || random(0, 1) != 0 || !SkipThemeRoom(i, j)) {
continue;
}
++v44;
++x;
v0 += 40;
} while (v44 - 1 < 39);
++y;
} while (y < 39);
ya = 0;
do {
xa = 0;
v45 = 0;
do {
if (dungeon[v45][ya] != 7)
goto LABEL_112;
if (random(0, 1))
goto LABEL_112;
//_LOBYTE(v19) = SkipThemeRoom(xa, ya);
if (!SkipThemeRoom(xa, ya))
goto LABEL_112;
v36 = random(0, 2);
if (!v36) {
v20 = ya;
v21 = ya;
for (i = ya; WoodVertU(xa, i); i = v21)
--v21;
v23 = v21 + 1;
while (WoodVertD(xa, v20))
++v20;
v24 = v20 - 1;
v25 = 1;
if (dungeon[v45][v23] == 7)
v25 = 0;
if (dungeon[v45][v24] == 7)
v25 = 0;
if (v24 - v23 <= 1)
goto LABEL_112;
if (!v25)
goto LABEL_112;
v40 = random(0, v24 - v23 - 1) + v23 + 1;
v26 = v23;
if (v23 > v24)
goto LABEL_112;
do {
if (v26 != v40) {
v27 = (char *)&dungeon[v45][v26];
if (*v27 == 7)
*v27 = random(0, 2) != 0 ? -121 : -119;
if (*v27 == 10)
*v27 = -125;
if (*v27 == 126)
*v27 = -123;
if (*v27 == -127)
*v27 = -123;
if (*v27 == 2)
*v27 = -117;
if (*v27 == -122)
*v27 = -118;
if (*v27 == -120)
*v27 = -118;
rt = random(0, 2);
if(rt == 0) {
y1 = j;
while(WoodVertU(i, y1)) {
y1--;
}
y1++;
y2 = j;
while(WoodVertD(i, y2)) {
y2++;
}
y2--;
skip = TRUE;
if(dungeon[i][y1] == 7) {
skip = FALSE;
}
if(dungeon[i][y2] == 7) {
skip = FALSE;
}
if(y2 - y1 > 1 && skip) {
rp = random(0, y2 - y1 - 1) + y1 + 1;
for(y = y1; y <= y2; y++) {
if(y == rp) {
continue;
}
if(dungeon[i][y] == 7) {
if(random(0, 2) != 0) {
dungeon[i][y] = 135;
} else {
dungeon[i][y] = 137;
}
}
if(dungeon[i][y] == 10) {
dungeon[i][y] = 131;
}
if(dungeon[i][y] == 126) {
dungeon[i][y] = 133;
}
if(dungeon[i][y] == 129) {
dungeon[i][y] = 133;
}
if(dungeon[i][y] == 2) {
dungeon[i][y] = 139;
}
if(dungeon[i][y] == 134) {
dungeon[i][y] = 138;
}
if(dungeon[i][y] == 136) {
dungeon[i][y] = 138;
}
}
++v26;
} while (v26 <= v24);
}
}
if (v36 == 1) {
v28 = xa;
v29 = xa;
while (WoodHorizL(v28, ya))
v28 = --v29;
v30 = xa;
v31 = v29 + 1;
v32 = xa;
while (WoodHorizR(v30, ya))
v30 = ++v32;
v33 = v32 - 1;
v34 = (char *)&dungeon[v31][ya];
v35 = 1;
if (*v34 == 7)
v35 = 0;
if (dungeon[v33][ya] == 7)
v35 = 0;
if (v33 - v31 > 1 && v35) {
v41 = random(0, v33 - v31 - 1) + v31 + 1;
while (1) {
if (v31 > v33)
break;
if (v31 != v41) {
if (*v34 == 7) {
if (random(0, 2)) {
*v34 = -122;
goto LABEL_110;
}
*v34 = -120;
if(rt == 1) {
x1 = i;
while(WoodHorizL(x1, j)) {
x1--;
}
x1++;
x2 = i;
while(WoodHorizR(x2, j)) {
x2++;
}
x2--;
skip = TRUE;
if(dungeon[x1][j] == 7) {
skip = FALSE;
}
if(dungeon[x2][j] == 7) {
skip = FALSE;
}
if(x2 - x1 > 1 && skip) {
rp = random(0, x2 - x1 - 1) + x1 + 1;
for(x = x1; x <= x2; x++) {
if(x == rp) {
continue;
}
if(dungeon[x][j] == 7) {
if(random(0, 2) != 0) {
dungeon[x][j] = 134;
} else {
dungeon[x][j] = 136;
}
if (*v34 == 9)
*v34 = -126;
if (*v34 == 121)
*v34 = -124;
if (*v34 == 124)
*v34 = -124;
if (*v34 == 4)
*v34 = -116;
if (*v34 == -121)
*v34 = -118;
if (*v34 == -119)
*v34 = -118;
}
LABEL_110:
++v31;
v34 += 40;
if(dungeon[x][j] == 9) {
dungeon[x][j] = 130;
}
if(dungeon[x][j] == 121) {
dungeon[x][j] = 132;
}
if(dungeon[x][j] == 124) {
dungeon[x][j] = 132;
}
if(dungeon[x][j] == 4) {
dungeon[x][j] = 140;
}
if(dungeon[x][j] == 135) {
dungeon[x][j] = 138;
}
if(dungeon[x][j] == 137) {
dungeon[x][j] = 138;
}
}
}
}
LABEL_112:
++v45;
++xa;
} while (v45 < 40);
++ya;
} while (ya < 40);
}
}
AddFenceDoors();
FenceDoorFix();
}

Loading…
Cancel
Save