Browse Source

Fix dpiece_defs, clean up LoadLvlGFX (#105)

Thanks to @MadHed, implements #102
pull/4/head
galaxyhaxz 8 years ago committed by GitHub
parent
commit
7d06ca540c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 89
      Source/diablo.cpp
  2. 10
      Source/gendung.cpp
  3. 2
      Source/gendung.h
  4. 16
      Source/objects.cpp
  5. 6
      Source/town.cpp
  6. 5
      structs.h

89
Source/diablo.cpp

@ -92,8 +92,8 @@ void __cdecl FreeGameMem()
v1 = pMegaTiles; v1 = pMegaTiles;
pMegaTiles = 0; pMegaTiles = 0;
mem_free_dbg(v1); mem_free_dbg(v1);
v2 = *(void **)&dpiece_defs[0].blocks; v2 = pLevelPieces;
*(_DWORD *)&dpiece_defs[0].blocks = 0; pLevelPieces = 0;
mem_free_dbg(v2); mem_free_dbg(v2);
v3 = level_special_cel; v3 = level_special_cel;
level_special_cel = 0; level_special_cel = 0;
@ -1797,61 +1797,42 @@ LABEL_27:
void __cdecl LoadLvlGFX() void __cdecl LoadLvlGFX()
{ {
unsigned char *v0; // eax switch(leveltype)
char *v1; // ecx
unsigned char *v2; // eax
char *v3; // ecx
unsigned char *v4; // eax
char *v5; // ecx
if (leveltype == DTYPE_TOWN)
{ {
pDungeonCels = LoadFileInMem("Levels\\TownData\\Town.CEL", 0); case DTYPE_TOWN:
pMegaTiles = LoadFileInMem("Levels\\TownData\\Town.TIL", 0); pDungeonCels = LoadFileInMem("Levels\\TownData\\Town.CEL", 0);
v4 = LoadFileInMem("Levels\\TownData\\Town.MIN", 0); pMegaTiles = LoadFileInMem("Levels\\TownData\\Town.TIL", 0);
v5 = "Levels\\TownData\\TownS.CEL"; pLevelPieces = LoadFileInMem("Levels\\TownData\\Town.MIN", 0);
goto LABEL_14; level_special_cel = LoadFileInMem("Levels\\TownData\\TownS.CEL", 0);
} break;
if (leveltype == DTYPE_CATHEDRAL) case DTYPE_CATHEDRAL:
{ pDungeonCels = LoadFileInMem("Levels\\L1Data\\L1.CEL", 0);
pDungeonCels = LoadFileInMem("Levels\\L1Data\\L1.CEL", 0); pMegaTiles = LoadFileInMem("Levels\\L1Data\\L1.TIL", 0);
v2 = LoadFileInMem("Levels\\L1Data\\L1.TIL", 0); pLevelPieces = LoadFileInMem("Levels\\L1Data\\L1.MIN", 0);
v3 = "Levels\\L1Data\\L1.MIN"; level_special_cel = LoadFileInMem("Levels\\L1Data\\L1S.CEL", 0);
goto LABEL_12; break;
} case DTYPE_CATACOMBS:
if (leveltype != DTYPE_CATACOMBS) pDungeonCels = LoadFileInMem("Levels\\L2Data\\L2.CEL", 0);
{ pMegaTiles = LoadFileInMem("Levels\\L2Data\\L2.TIL", 0);
if (leveltype != DTYPE_CAVES) pLevelPieces = LoadFileInMem("Levels\\L2Data\\L2.MIN", 0);
{ level_special_cel = LoadFileInMem("Levels\\L2Data\\L2S.CEL", 0);
if (leveltype != DTYPE_HELL) break;
{ case DTYPE_CAVES:
TermMsg("LoadLvlGFX"); pDungeonCels = LoadFileInMem("Levels\\L3Data\\L3.CEL", 0);
return; pMegaTiles = LoadFileInMem("Levels\\L3Data\\L3.TIL", 0);
} pLevelPieces = LoadFileInMem("Levels\\L3Data\\L3.MIN", 0);
level_special_cel = LoadFileInMem("Levels\\L1Data\\L1S.CEL", 0);
break;
case DTYPE_HELL:
pDungeonCels = LoadFileInMem("Levels\\L4Data\\L4.CEL", 0); pDungeonCels = LoadFileInMem("Levels\\L4Data\\L4.CEL", 0);
v0 = LoadFileInMem("Levels\\L4Data\\L4.TIL", 0); pMegaTiles = LoadFileInMem("Levels\\L4Data\\L4.TIL", 0);
v1 = "Levels\\L4Data\\L4.MIN"; pLevelPieces = LoadFileInMem("Levels\\L4Data\\L4.MIN", 0);
goto LABEL_10; level_special_cel = LoadFileInMem("Levels\\L2Data\\L2S.CEL", 0);
} break;
pDungeonCels = LoadFileInMem("Levels\\L3Data\\L3.CEL", 0); default:
v2 = LoadFileInMem("Levels\\L3Data\\L3.TIL", 0); TermMsg("LoadLvlGFX");
v3 = "Levels\\L3Data\\L3.MIN"; return;
LABEL_12:
pMegaTiles = v2;
v4 = LoadFileInMem(v3, 0);
v5 = "Levels\\L1Data\\L1S.CEL";
goto LABEL_14;
} }
pDungeonCels = LoadFileInMem("Levels\\L2Data\\L2.CEL", 0);
v0 = LoadFileInMem("Levels\\L2Data\\L2.TIL", 0);
v1 = "Levels\\L2Data\\L2.MIN";
LABEL_10:
pMegaTiles = v0;
v4 = LoadFileInMem(v1, 0);
v5 = "Levels\\L2Data\\L2S.CEL";
LABEL_14:
*(_DWORD *)&dpiece_defs[0].blocks = (unsigned int)v4;
level_special_cel = LoadFileInMem(v5, 0);
} }
// 5BB1ED: using guessed type char leveltype; // 5BB1ED: using guessed type char leveltype;

10
Source/gendung.cpp

@ -23,7 +23,7 @@ char dTransVal[112][112];
int setloadflag_2; // weak int setloadflag_2; // weak
Tile tile_defs[1024]; Tile tile_defs[1024];
void *pMegaTiles; void *pMegaTiles;
DPiece dpiece_defs[2]; void *pLevelPieces;
int gnDifficulty; // idb int gnDifficulty; // idb
char block_lvid[2049]; char block_lvid[2049];
//char byte_5B78EB; //char byte_5B78EB;
@ -592,7 +592,7 @@ void __cdecl SetDungeonMicros()
short (*v1)[112][112]; // edx short (*v1)[112][112]; // edx
int (*v2)[112]; // ebp int (*v2)[112]; // ebp
int v3; // eax int v3; // eax
int v4; // eax char *v4; // eax
signed int i; // ecx signed int i; // ecx
_WORD *v6; // edi _WORD *v6; // edi
int j; // ecx int j; // ecx
@ -623,11 +623,11 @@ void __cdecl SetDungeonMicros()
{ {
v3 = (*v2)[0] - 1; v3 = (*v2)[0] - 1;
if ( leveltype == DTYPE_HELL ) if ( leveltype == DTYPE_HELL )
v4 = *(_DWORD *)&dpiece_defs[0].blocks + 32 * v3; v4 = (char *)pLevelPieces + 32 * v3;
else else
v4 = *(_DWORD *)&dpiece_defs[0].blocks + 20 * v3; v4 = (char *)pLevelPieces + 20 * v3;
for ( i = 0; i < v0; ++i ) for ( i = 0; i < v0; ++i )
(*v1)[0][i] = *(_WORD *)(v4 + 2 * (v0 + (i & 1) - (i & 0xE)) - 4); (*v1)[0][i] = *(_WORD *)&v4[2 * (v0 + (i & 1) - (i & 0xE)) - 4];
} }
else if ( v0 > 0 ) else if ( v0 > 0 )
{ {

2
Source/gendung.h

@ -23,7 +23,7 @@ extern char dTransVal[112][112];
extern int setloadflag_2; // weak extern int setloadflag_2; // weak
extern Tile tile_defs[1024]; extern Tile tile_defs[1024];
extern void *pMegaTiles; extern void *pMegaTiles;
extern DPiece dpiece_defs[2]; extern void *pLevelPieces;
extern int gnDifficulty; // idb extern int gnDifficulty; // idb
extern char block_lvid[2049]; extern char block_lvid[2049];
//char byte_5B78EB; //char byte_5B78EB;

16
Source/objects.cpp

@ -3077,9 +3077,9 @@ void __fastcall ObjSetMicro(int dx, int dy, int pn)
{ {
int v3; // esi int v3; // esi
char *v4; // eax char *v4; // eax
int v5; // edx char *v5; // edx
signed int v6; // ecx signed int v6; // ecx
int v7; // esi char *v7; // esi
signed int v8; // ecx signed int v8; // ecx
dPiece[0][dy + 112 * dx] = pn; dPiece[0][dy + 112 * dx] = pn;
@ -3087,22 +3087,22 @@ void __fastcall ObjSetMicro(int dx, int dy, int pn)
v4 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(dx, dy); v4 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(dx, dy);
if ( leveltype == DTYPE_HELL ) if ( leveltype == DTYPE_HELL )
{ {
v7 = *(_DWORD *)&dpiece_defs[0].blocks + 32 * v3; v7 = (char *)pLevelPieces + 32 * v3;
v8 = 0; v8 = 0;
do do
{ {
*(_WORD *)&v4[2 * v8] = *(_WORD *)(v7 + 2 * ((v8 & 1) - (v8 & 0xE)) + 28); *(_WORD *)&v4[2 * v8] = *(_WORD *)&v7[2 * ((v8 & 1) - (v8 & 0xE)) + 28];
++v8; ++v8;
} }
while ( v8 < 16 ); while ( v8 < 16 );
} }
else else
{ {
v5 = *(_DWORD *)&dpiece_defs[0].blocks + 20 * v3; v5 = (char *)pLevelPieces + 20 * v3;
v6 = 0; v6 = 0;
do do
{ {
*(_WORD *)&v4[2 * v6] = *(_WORD *)(v5 + 2 * ((v6 & 1) - (v6 & 0xE)) + 16); *(_WORD *)&v4[2 * v6] = *(_WORD *)&v5[2 * ((v6 & 1) - (v6 & 0xE)) + 16];
++v6; ++v6;
} }
while ( v6 < 10 ); while ( v6 < 10 );
@ -3121,8 +3121,8 @@ void __fastcall objects_set_door_piece(int x, int y)
v2 = y; v2 = y;
v3 = x; v3 = x;
v4 = dPiece[0][y + 112 * x] - 1; v4 = dPiece[0][y + 112 * x] - 1;
v5 = *(_WORD *)(20 * (unsigned short)v4 + *(_DWORD *)&dpiece_defs[0].blocks + 16); v5 = *((_WORD *)pLevelPieces + 10 * (unsigned short)v4 + 8);
v6 = *(_WORD *)(20 * (unsigned short)v4 + *(_DWORD *)&dpiece_defs[0].blocks + 18); v6 = *((_WORD *)pLevelPieces + 10 * (unsigned short)v4 + 9);
dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(x, y)] = v5; dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(x, y)] = v5;
dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(v3, v2) + 1] = v6; dpiece_defs_map_1[0][0][16 * gendung_get_dpiece_num_from_coord(v3, v2) + 1] = v6;
} }

6
Source/town.cpp

@ -1365,7 +1365,7 @@ void __cdecl town_init_dpiece_defs_map()
int v1; // ebp int v1; // ebp
int v2; // esi int v2; // esi
char *v3; // edi char *v3; // edi
int v4; // ecx char *v4; // ecx
signed int v5; // eax signed int v5; // eax
int (*v6)[112]; // [esp+10h] [ebp-8h] int (*v6)[112]; // [esp+10h] [ebp-8h]
int y; // [esp+14h] [ebp-4h] int y; // [esp+14h] [ebp-4h]
@ -1382,11 +1382,11 @@ void __cdecl town_init_dpiece_defs_map()
v3 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(v1, y); v3 = (char *)dpiece_defs_map_1 + 32 * gendung_get_dpiece_num_from_coord(v1, y);
if ( v2 ) if ( v2 )
{ {
v4 = 32 * v2 + *(_DWORD *)&dpiece_defs[0].blocks - 32; v4 = (char *)pLevelPieces + 32 * v2 - 32;
v5 = 0; v5 = 0;
do do
{ {
*(_WORD *)&v3[2 * v5] = *(_WORD *)(v4 + 2 * ((v5 & 1) - (v5 & 0xE)) + 28); *(_WORD *)&v3[2 * v5] = *(_WORD *)&v4[2 * ((v5 & 1) - (v5 & 0xE)) + 28];
++v5; ++v5;
} }
while ( v5 < 16 ); while ( v5 < 16 );

5
structs.h

@ -404,11 +404,6 @@ struct Tile
short bottom; short bottom;
}; };
struct DPiece
{
short blocks;
};
struct _SNETVERSIONDATA struct _SNETVERSIONDATA
{ {
int size; int size;

Loading…
Cancel
Save