From 992d521b31ceacf95ea3b1b9018fe2601e45b898 Mon Sep 17 00:00:00 2001 From: galaxyhaxz Date: Fri, 29 Mar 2019 04:47:31 -0500 Subject: [PATCH] DRLG_L1/2 Load Dungeon --- Source/drlg_l1.cpp | 123 +++++++--------- Source/drlg_l2.cpp | 341 ++++++++++++++++----------------------------- 2 files changed, 170 insertions(+), 294 deletions(-) diff --git a/Source/drlg_l1.cpp b/Source/drlg_l1.cpp index 82067c1c4..2ab931efa 100644 --- a/Source/drlg_l1.cpp +++ b/Source/drlg_l1.cpp @@ -134,28 +134,32 @@ void __cdecl DRLG_Init_Globals() void __fastcall LoadL1Dungeon(char *sFileName, int vx, int vy) { int i, j, rw, rh; - unsigned char *pLevelMap; - unsigned char *lm; + BYTE *pLevelMap, *lm; dminx = 16; dminy = 16; dmaxx = 96; dmaxy = 96; + DRLG_InitTrans(); pLevelMap = LoadFileInMem(sFileName, 0); - for (j = 0; j < 40; j++) { - for (i = 0; i < 40; i++) { + + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { dungeon[i][j] = 22; mydflags[i][j] = 0; } } - rw = pLevelMap[0]; - lm = pLevelMap + 2; - rh = lm[0]; + + lm = pLevelMap; + rw = *lm; lm += 2; - for (j = 0; j < rh; j++) { - for (i = 0; i < rw; i++) { - if (*lm) { + rh = *lm; + lm += 2; + + for(j = 0; j < rh; j++) { + for(i = 0; i < rw; i++) { + if(*lm != 0) { dungeon[i][j] = *lm; mydflags[i][j] |= 0x80; } else { @@ -164,6 +168,7 @@ void __fastcall LoadL1Dungeon(char *sFileName, int vx, int vy) lm += 2; } } + DRLG_L1Floor(); ViewX = vx; ViewY = vy; @@ -327,76 +332,50 @@ void __cdecl DRLG_InitL1Vals() void __fastcall LoadPreL1Dungeon(char *sFileName, int vx, int vy) { - unsigned char *v3; // ebx - signed int v4; // ecx - signed int v5; // eax - signed int v6; // edx - int v7; // esi - int v8; // edi - char *v9; // eax - int v10; // ecx - char v11; // dl - signed int v12; // esi - signed int v13; // eax - signed int v14; // edi - int v15; // [esp+Ch] [ebp-8h] - int v16; // [esp+10h] [ebp-4h] + int i, j, rw, rh; + BYTE *pLevelMap, *lm; dminx = 16; dminy = 16; dmaxx = 96; dmaxy = 96; - v3 = LoadFileInMem(sFileName, 0); - v4 = 0; - do { - v5 = v4; - v6 = 40; - do { - mydflags[0][v5] = 0; - dungeon[0][v5] = 22; - v5 += 40; - --v6; - } while (v6); - ++v4; - } while (v4 < 40); - v16 = 0; - v7 = *v3; - v8 = v3[2]; - v9 = (char *)(v3 + 4); - if (v8 > 0) { - do { - if (v7 > 0) { - v10 = v16; - v15 = v7; - do { - v11 = *v9; - if (*v9) { - mydflags[0][v10] |= 0x80u; - dungeon[0][v10] = v11; - } else { - dungeon[0][v10] = 13; - } - v10 += 40; - v9 += 2; - --v15; - } while (v15); + + pLevelMap = LoadFileInMem(sFileName, 0); + + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { + dungeon[i][j] = 22; + mydflags[i][j] = 0; + } + } + + lm = pLevelMap; + rw = *lm; + lm += 2; + rh = *lm; + lm += 2; + + for(j = 0; j < rh; j++) { + for(i = 0; i < rw; i++) { + if(*lm != 0) { + dungeon[i][j] = *lm; + mydflags[i][j] |= 0x80; + } else { + dungeon[i][j] = 13; } - ++v16; - } while (v16 < v8); + lm += 2; + } } + DRLG_L1Floor(); - v12 = 0; - do { - v13 = v12; - v14 = 40; - do { - pdungeon[0][v13] = dungeon[0][v13]; - v13 += 40; - --v14; - } while (v14); - ++v12; - } while (v12 < 40); - mem_free_dbg(v3); + + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { + pdungeon[i][j] = dungeon[i][j]; + } + } + + mem_free_dbg(pLevelMap); } // 5CF328: using guessed type int dmaxx; // 5CF32C: using guessed type int dmaxy; diff --git a/Source/drlg_l2.cpp b/Source/drlg_l2.cpp index 2166b38b3..39fbbe11a 100644 --- a/Source/drlg_l2.cpp +++ b/Source/drlg_l2.cpp @@ -369,154 +369,92 @@ void __cdecl L2DoorFix() void __fastcall LoadL2Dungeon(char *sFileName, int vx, int vy) { - char *v3; // esi - unsigned char *v4; // edi - signed int v5; // edx - signed int v6; // eax - signed int v7; // ecx - int v8; // esi - int v9; // eax - int v10; // ebx - int v11; // edi - char *v12; // eax - int v13; // ecx - char v14; // dl - signed int v15; // ecx - _BYTE *v16; // eax - signed int v17; // edx - int v18; // ebx - int(*v19)[112]; // esi - char *v20; // ecx - signed int v21; // edi - int v22; // edx - char v23; // al - int v24; // ecx - int(*v25)[112]; // edi - char *v26; // eax - int(*v27)[112]; // edx - signed int v28; // ebx - int v29; // esi - int v30; // [esp+Ch] [ebp-Ch] - char *ptr; // [esp+10h] [ebp-8h] - int v32; // [esp+14h] [ebp-4h] - int(*v33)[112]; // [esp+14h] [ebp-4h] - - v30 = vx; - v3 = sFileName; + int i, j, rw, rh, pc; + BYTE *pLevelMap, *lm; + InitDungeon(); DRLG_InitTrans(); - v4 = LoadFileInMem(v3, 0); - v5 = 0; - ptr = (char *)v4; - do { - v6 = v5; - v7 = 40; - do { - dflags[0][v6] = 0; - dungeon[0][v6] = 12; - v6 += 40; - --v7; - } while (v7); - ++v5; - } while (v5 < 40); - v8 = *v4; - v9 = (int)(v4 + 2); - v10 = 0; - v11 = v4[2]; - v12 = (char *)(v9 + 2); - if (v11 > 0) { - do { - if (v8 > 0) { - v13 = v10; - v32 = v8; - do { - v14 = *v12; - if (*v12) { - dflags[0][v13] |= DFLAG_EXPLORED; - dungeon[0][v13] = v14; - } else { - dungeon[0][v13] = 3; - } - v13 += 40; - v12 += 2; - --v32; - } while (v32); + pLevelMap = LoadFileInMem(sFileName, 0); + + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { + dungeon[i][j] = 12; + dflags[i][j] = 0; + } + } + + lm = pLevelMap; + rw = *lm; + lm += 2; + rh = *lm; + lm += 2; + + for(j = 0; j < rh; j++) { + for(i = 0; i < rw; i++) { + if(*lm != 0) { + dungeon[i][j] = *lm; + dflags[i][j] |= 0x80; + } else { + dungeon[i][j] = 3; } - ++v10; - } while (v10 < v11); + lm += 2; + } } - v15 = 0; - do { - v16 = (unsigned char *)dungeon + v15; - v17 = 40; - do { - if (!*v16) - *v16 = 12; - v16 += 40; - --v17; - } while (v17); - ++v15; - } while (v15 < 40); + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { + if(dungeon[i][j] == 0) { + dungeon[i][j] = 12; + } + } + } + DRLG_L2Pass3(); DRLG_Init_Globals(); - v18 = 0; - v33 = dPiece; - do { - v19 = v33; - v20 = (char *)dArch + v18; - v21 = 112; - do { - v22 = (*v19)[0]; - v23 = 0; - if ((*v19)[0] == 541) - v23 = 5; - if (v22 == 178) - v23 = 5; - if (v22 == 551) - v23 = 5; - if (v22 == 542) - v23 = 6; - if (v22 == 553) - v23 = 6; - if (v22 == 13) - v23 = 5; - if (v22 == 17) - v23 = 6; - *v20 = v23; - ++v19; - v20 += 112; - --v21; - } while (v21); - v33 = (int(*)[112])((char *)v33 + 4); - ++v18; - } while ((signed int)v33 < (signed int)dPiece[1]); - v24 = 0; - v25 = dPiece; - do { - v26 = &dArch[0][v24 + 2]; - v27 = v25; - v28 = 112; - do { - v29 = (*v27)[0]; - if ((*v27)[0] == 132) { - *(v26 - 1) = 2; - *v26 = 1; - } else if (v29 == 135 || v29 == 139) { - v26[110] = 3; - v26[222] = 4; + + for(j = 0; j < MAXDUNY; j++) { + for(i = 0; i < MAXDUNX; i++) { + pc = 0; + if(dPiece[i][j] == 541) { + pc = 5; + } + if(dPiece[i][j] == 178) { + pc = 5; + } + if(dPiece[i][j] == 551) { + pc = 5; + } + if(dPiece[i][j] == 542) { + pc = 6; + } + if(dPiece[i][j] == 553) { + pc = 6; + } + if(dPiece[i][j] == 13) { + pc = 5; + } + if(dPiece[i][j] == 17) { + pc = 6; + } + dArch[i][j] = pc; + } + } + for(j = 0; j < MAXDUNY; j++) { + for(i = 0; i < MAXDUNX; i++) { + if(dPiece[i][j] == 132) { + dArch[i][j + 1] = 2; + dArch[i][j + 2] = 1; + } else if(dPiece[i][j] == 135 || dPiece[i][j] == 139) { + dArch[i + 1][j] = 3; + dArch[i + 2][j] = 4; } - ++v27; - v26 += 112; - --v28; - } while (v28); - v25 = (int(*)[112])((char *)v25 + 4); - ++v24; - } while ((signed int)v25 < (signed int)dPiece[1]); - ViewX = v30; + } + } + + ViewX = vx; ViewY = vy; - SetMapMonsters((unsigned char *)ptr, 0, 0); - SetMapObjects((unsigned char *)ptr, 0, 0); - mem_free_dbg(ptr); + SetMapMonsters(pLevelMap, 0, 0); + SetMapObjects(pLevelMap, 0, 0); + mem_free_dbg(pLevelMap); } void __cdecl DRLG_L2Pass3() @@ -605,92 +543,51 @@ void __cdecl DRLG_L2Pass3() void __fastcall LoadPreL2Dungeon(char *sFileName, int vx, int vy) { - char *v3; // esi - unsigned char *v4; // ebx - signed int v5; // esi - signed int v6; // edx - signed int v7; // eax - int v8; // eax - int v9; // edi - char *v10; // edx - int v11; // esi - char v12; // bl - signed int v13; // eax - _BYTE *v14; // edx - signed int v15; // esi - signed int v16; // eax - signed int v17; // edx - signed int v18; // esi - unsigned char *ptr; // [esp+8h] [ebp-Ch] - int v20; // [esp+Ch] [ebp-8h] - int v21; // [esp+10h] [ebp-4h] - - v3 = sFileName; + int i, j, rw, rh; + BYTE *pLevelMap, *lm; + InitDungeon(); DRLG_InitTrans(); - v4 = LoadFileInMem(v3, 0); - v5 = 0; - ptr = v4; - do { - v6 = v5; - v7 = 40; - do { - dflags[0][v6] = 0; - dungeon[0][v6] = 12; - v6 += 40; - --v7; - } while (v7); - ++v5; - } while (v5 < 40); - v21 = 0; - v8 = v4[2]; - v9 = *v4; - v10 = (char *)(v4 + 4); - if (v8 > 0) { - do { - if (v9 > 0) { - v11 = v21; - v20 = v9; - do { - v12 = *v10; - if (*v10) { - dflags[0][v11] |= DFLAG_EXPLORED; - dungeon[0][v11] = v12; - } else { - dungeon[0][v11] = 3; - } - v11 += 40; - v10 += 2; - --v20; - } while (v20); + pLevelMap = LoadFileInMem(sFileName, 0); + + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { + dungeon[i][j] = 12; + dflags[i][j] = 0; + } + } + + lm = pLevelMap; + rw = *lm; + lm += 2; + rh = *lm; + lm += 2; + + for(j = 0; j < rh; j++) { + for(i = 0; i < rw; i++) { + if(*lm != 0) { + dungeon[i][j] = *lm; + dflags[i][j] |= 0x80; + } else { + dungeon[i][j] = 3; } - ++v21; - } while (v21 < v8); + lm += 2; + } } - v13 = 0; - do { - v14 = (unsigned char *)dungeon + v13; - v15 = 40; - do { - if (!*v14) - *v14 = 12; - v14 += 40; - --v15; - } while (v15); - ++v13; - } while (v13 < 40); - v16 = 0; - do { - v17 = v16; - v18 = 40; - do { - pdungeon[0][v17] = dungeon[0][v17]; - v17 += 40; - --v18; - } while (v18); - ++v16; - } while (v16 < 40); - mem_free_dbg(ptr); + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { + if(dungeon[i][j] == 0) { + dungeon[i][j] = 12; + } + } + } + for(j = 0; j < DMAXY; j++) { + for(i = 0; i < DMAXX; i++) { + pdungeon[i][j] = dungeon[i][j]; + } + } + + mem_free_dbg(pLevelMap); } void __fastcall CreateL2Dungeon(int rseed, int entry)