Browse Source

DRLG_L1/2 Load Dungeon

pull/78/head
galaxyhaxz 7 years ago committed by Anders Jenbo
parent
commit
992d521b31
  1. 123
      Source/drlg_l1.cpp
  2. 341
      Source/drlg_l2.cpp

123
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;

341
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)

Loading…
Cancel
Save