From 2a7f2b1d2dc4090102ebdcc4fc305f8f0b9bcf48 Mon Sep 17 00:00:00 2001 From: galaxyhaxz Date: Fri, 26 Apr 2019 01:02:05 -0500 Subject: [PATCH] KonnectHall --- Source/drlg_l2.cpp | 319 +++++++++++++++++++-------------------------- 1 file changed, 134 insertions(+), 185 deletions(-) diff --git a/Source/drlg_l2.cpp b/Source/drlg_l2.cpp index 083b1c218..380f14224 100644 --- a/Source/drlg_l2.cpp +++ b/Source/drlg_l2.cpp @@ -1476,204 +1476,153 @@ void GetHall(int *nX1, int *nY1, int *nX2, int *nY2, int *nHd) void ConnectHall(int nX1, int nY1, int nX2, int nY2, int nHd) { - int v5; // edi - signed int v6; // esi - int v7; // eax - int v9; // edi - int v10; // ebx - int v11; // ecx - char v12; // al - int v13; // eax - int v14; // ecx - char *v15; // ebx - int v16; // ecx - int v17; // edx - int v18; // ecx - int v19; // edx - int v20; // eax - //int v21; // ST04_4 - int v23; // ebx - int v24; // ebx - BOOLEAN v25; // zf - signed int v26; // [esp-4h] [ebp-34h] - signed int v27; // [esp-4h] [ebp-34h] - signed int v28; // [esp-4h] [ebp-34h] - signed int v29; // [esp-4h] [ebp-34h] - int v30; // [esp+Ch] [ebp-24h] - int v31; // [esp+10h] [ebp-20h] - int v32; // [esp+14h] [ebp-1Ch] - signed int v33; // [esp+18h] [ebp-18h] - signed int v34; // [esp+1Ch] [ebp-14h] - signed int v35; // [esp+20h] [ebp-10h] - int v36; // [esp+24h] [ebp-Ch] - char *v37; // [esp+28h] [ebp-8h] - signed int nY; // [esp+2Ch] [ebp-4h] - int nX2a; // [esp+38h] [ebp+8h] - int nY2a; // [esp+3Ch] [ebp+Ch] - int nHda; // [esp+40h] [ebp+10h] - - v34 = 0; - v5 = nY1; - v6 = nX1; - nY = nY1; - v7 = random(0, 100); - v33 = v7; - v32 = random(0, 100); - v31 = v6; - v30 = v5; - CreateDoorType(v6, v5); + int nCurrd, nDx, nDy, nRp, nOrigX1, nOrigY1, fMinusFlag, fPlusFlag; + BOOL fDoneflag, fInroom; + + fDoneflag = FALSE; + fMinusFlag = random(0, 100); + fPlusFlag = random(0, 100); + nOrigX1 = nX1; + nOrigY1 = nY1; + CreateDoorType(nX1, nY1); CreateDoorType(nX2, nY2); - abs(nX2 - v6); - abs(nY2 - v5); - v9 = nHd; - v10 = nX2 - Dir_Xadd[nHd]; - v11 = nY2 - Dir_Yadd[nHd]; - nHda = 0; - nY2a = v11; - nX2a = v10; - predungeon[v10][v11] = 44; - v37 = (char *)&predungeon[v6][nY]; - do { - if (v6 >= 38 && v9 == 2) - v9 = 4; - if (nY >= 38 && v9 == 3) - v9 = 1; - if (v6 <= 1 && v9 == 4) - v9 = 2; - if (nY <= 1 && v9 == 1) - v9 = 3; - v12 = *v37; - if (*v37 == 67 && (v9 == 1 || v9 == 4)) - v9 = 2; - if (v12 == 66 && (v9 == 1 || v9 == 2)) - v9 = 3; - if (v12 == 69 && (v9 == 4 || v9 == 3)) - v9 = 1; - if (v12 == 65 && (v9 == 2 || v9 == 3)) - v9 = 4; - v13 = Dir_Xadd[v9]; - v14 = Dir_Yadd[v9]; - nY += v14; - v6 += v13; - v15 = (char *)&predungeon[v6][nY]; - v37 = v15; - if (*v15 == 32) { - if (nHda) { - CreateDoorType(v6 - v13, nY - v14); + nDx = abs(nX2 - nX1); /* unused */ + nDy = abs(nY2 - nY1); /* unused */ + nCurrd = nHd; + nX2 -= Dir_Xadd[nCurrd]; + nY2 -= Dir_Yadd[nCurrd]; + predungeon[nX2][nY2] = 44; + fInroom = FALSE; + + while(!fDoneflag) { + if(nX1 >= 38 && nCurrd == 2) { + nCurrd = 4; + } + if(nY1 >= 38 && nCurrd == 3) { + nCurrd = 1; + } + if(nX1 <= 1 && nCurrd == 4) { + nCurrd = 2; + } + if(nY1 <= 1 && nCurrd == 1) { + nCurrd = 3; + } + if(predungeon[nX1][nY1] == 67 && (nCurrd == 1 || nCurrd == 4)) { + nCurrd = 2; + } + if(predungeon[nX1][nY1] == 66 && (nCurrd == 1 || nCurrd == 2)) { + nCurrd = 3; + } + if(predungeon[nX1][nY1] == 69 && (nCurrd == 4 || nCurrd == 3)) { + nCurrd = 1; + } + if(predungeon[nX1][nY1] == 65 && (nCurrd == 2 || nCurrd == 3)) { + nCurrd = 4; + } + nX1 += Dir_Xadd[nCurrd]; + nY1 += Dir_Yadd[nCurrd]; + if(predungeon[nX1][nY1] == 32) { + if(fInroom) { + CreateDoorType(nX1 - Dir_Xadd[nCurrd], nY1 - Dir_Yadd[nCurrd]); } else { - if (v33 < 50) { - if (v9 == 1 || v9 == 3) { - v17 = nY; - v16 = v6 - 1; + if(fMinusFlag < 50) { + if(nCurrd != 1 && nCurrd != 3) { + PlaceHallExt(nX1, nY1 - 1); } else { - v16 = v6; - v17 = nY - 1; + PlaceHallExt(nX1 - 1, nY1); } - PlaceHallExt(v16, v17); } - if (v32 < 50) { - if (v9 == 1 || v9 == 3) { - v19 = nY; - v18 = v6 + 1; + if(fPlusFlag < 50) { + if(nCurrd != 1 && nCurrd != 3) { + PlaceHallExt(nX1, nY1 + 1); } else { - v18 = v6; - v19 = nY + 1; + PlaceHallExt(nX1 + 1, nY1); } - PlaceHallExt(v18, v19); } } - nHda = 0; - *v15 = 44; + predungeon[nX1][nY1] = 44; + fInroom = FALSE; } else { - if (!nHda && *v15 == 35) - CreateDoorType(v6, nY); - if (*v15 != 44) - nHda = 1; - } - v36 = abs(nX2a - v6); - v20 = abs(nY2a - nY); - //v22 = v21; - v35 = v20; - if (v36 <= v20) { - v24 = 5 * v20; - if (5 * v20 > 80) - v24 = 80; - if (random(0, 100) < v24) { - if (nY2a <= nY || nY >= 40) { - v9 = 1; - goto LABEL_67; + if(!fInroom && predungeon[nX1][nY1] == 35) { + CreateDoorType(nX1, nY1); + } + if(predungeon[nX1][nY1] != 44) { + fInroom = TRUE; + } + } + nDx = abs(nX2 - nX1); + nDy = abs(nY2 - nY1); + if(nDx > nDy) { + nRp = 2 * nDx; + if(nRp > 30) { + nRp = 30; + } + if(random(0, 100) < nRp) { + if(nX2 <= nX1 || nX1 >= 40) { + nCurrd = 4; + } else { + nCurrd = 2; } - v26 = 3; - goto LABEL_58; } } else { - v23 = 2 * v36; - if (2 * v36 > 30) - v23 = 30; - if (random(0, 100) < v23) { - if (nX2a <= v6 || v6 >= 40) - v26 = 4; - else - v26 = 2; - LABEL_58: - v9 = v26; - goto LABEL_67; - } - } - LABEL_67: - if (v35 < 10 && v6 == nX2a && (v9 == 2 || v9 == 4)) { - if (nY2a <= nY || nY >= 40) - v9 = 1; - else - v9 = 3; - } - if (v36 < 10 && nY == nY2a && (v9 == 1 || v9 == 3)) { - if (nX2a <= v6 || v6 >= 40) - v27 = 4; - else - v27 = 2; - v9 = v27; - } - if (v35 == 1) { - v25 = v36 == 1; - if (v36 <= 1) - goto LABEL_94; - if (v9 == 1 || v9 == 3) { - if (nX2a <= v6 || v6 >= 40) - v28 = 4; - else - v28 = 2; - v9 = v28; - } - } - v25 = v36 == 1; - LABEL_94: - if (v25) { - if (v35 <= 1 || v9 != 2 && v9 != 4) - goto LABEL_109; - if (nY2a > nY && v6 < 40) - goto LABEL_100; - v9 = 1; - } - if (!v36 && *v37 != 32 && (v9 == 2 || v9 == 4)) { - if (nX2a <= v31 || v6 >= 40) { - v9 = 1; - goto LABEL_109; - } - LABEL_100: - v9 = 3; - } - LABEL_109: - if (!v35 && *v37 != 32 && (v9 == 1 || v9 == 3)) { - if (nY2a <= v30 || nY >= 40) - v29 = 4; - else - v29 = 2; - v9 = v29; - } - if (v6 == nX2a && nY == nY2a) - v34 = 1; - } while (!v34); + nRp = 5 * nDy; + if(nRp > 80) { + nRp = 80; + } + if(random(0, 100) < nRp) { + if(nY2 <= nY1 || nY1 >= 40) { + nCurrd = 1; + } else { + nCurrd = 3; + } + } + } + if(nDy < 10 && nX1 == nX2 && (nCurrd == 2 || nCurrd == 4)) { + if(nY2 <= nY1 || nY1 >= 40) { + nCurrd = 1; + } else { + nCurrd = 3; + } + } + if(nDx < 10 && nY1 == nY2 && (nCurrd == 1 || nCurrd == 3)) { + if(nX2 <= nX1 || nX1 >= 40) { + nCurrd = 4; + } else { + nCurrd = 2; + } + } + if(nDy == 1 && nDx > 1 && (nCurrd == 1 || nCurrd == 3)) { + if(nX2 <= nX1 || nX1 >= 40) { + nCurrd = 4; + } else { + nCurrd = 2; + } + } + if(nDx == 1 && nDy > 1 && (nCurrd == 2 || nCurrd == 4)) { + if(nY2 <= nY1 || nX1 >= 40) { + nCurrd = 1; + } else { + nCurrd = 3; + } + } + if(nDx == 0 && predungeon[nX1][nY1] != 32 && (nCurrd == 2 || nCurrd == 4)) { + if(nX2 <= nOrigX1 || nX1 >= 40) { + nCurrd = 1; + } else { + nCurrd = 3; + } + } + if(nDy == 0 && predungeon[nX1][nY1] != 32 && (nCurrd == 1 || nCurrd == 3)) { + if(nY2 <= nOrigY1 || nY1 >= 40) { + nCurrd = 4; + } else { + nCurrd = 2; + } + } + if(nX1 == nX2 && nY1 == nY2) { + fDoneflag = TRUE; + } + } } void CreateDoorType(int nX, int nY)