Browse Source

InitAutomap+ScrollView (#545)

pull/25/head
galaxyhaxz 7 years ago committed by Robin Eklind
parent
commit
b048cac4fe
  1. 109
      Source/automap.cpp
  2. 2
      Source/automap.h
  3. 140
      Source/scrollrt.cpp

109
Source/automap.cpp

@ -7,7 +7,7 @@ WORD automaptype[512];
static int MapX;
static int MapY;
BOOL automapflag; // idb
char AMbyte_4B7E4C[32];
char AmShiftTab[32]; // [31]?
unsigned char automapview[DMAXX][DMAXY];
int AutoMapScale; // idb
int AutoMapXOfs; // weak
@ -49,82 +49,63 @@ void __cdecl InitAutomapOnce()
void __cdecl InitAutomap()
{
signed int v0; // edi
signed int v1; // ecx
int v2; // esi
char v3; // al
int v4; // esi
char v5; // al
char *v6; // ecx
unsigned char *v7; // eax
int v8; // ecx
unsigned char *v9; // edx
unsigned int i; // esi
unsigned char v11; // bl
_BYTE *v12; // edx
signed int v13; // ecx
_BYTE *v14; // eax
signed int v15; // edx
int size; // [esp+Ch] [ebp-4h]
v0 = 50;
v1 = 0;
do {
v2 = (v0 << 6) / 100;
v3 = 2 * (320 / v2);
v4 = 320 % v2;
v5 = v3 + 1;
AMbyte_4B7E4C[v1] = v5;
if (v4)
AMbyte_4B7E4C[v1] = v5 + 1;
if (v4 >= 32 * v0 / 100)
++AMbyte_4B7E4C[v1];
v0 += 5;
++v1;
} while (v1 < 31);
unsigned char b1, b2;
unsigned int dwTiles;
int x, y;
unsigned char *pAFile, *pTmp;
int i, j;
int d;
j = 50;
for(i = 0; i < 31; i++) {
d = (j << 6) / 100;
AmShiftTab[i] = 2 * (320 / d) + 1;
if(320 % d)
AmShiftTab[i]++;
if(320 % d >= (j << 5) / 100)
AmShiftTab[i]++;
j += 5;
}
memset(automaptype, 0, sizeof(automaptype));
switch (leveltype) {
switch(leveltype) {
case DTYPE_CATHEDRAL:
v6 = "Levels\\L1Data\\L1.AMP";
pAFile = LoadFileInMem("Levels\\L1Data\\L1.AMP", (int *)&dwTiles);
dwTiles >>= 1;
break;
case DTYPE_CATACOMBS:
v6 = "Levels\\L2Data\\L2.AMP";
pAFile = LoadFileInMem("Levels\\L2Data\\L2.AMP", (int *)&dwTiles);
dwTiles >>= 1;
break;
case DTYPE_CAVES:
v6 = "Levels\\L3Data\\L3.AMP";
pAFile = LoadFileInMem("Levels\\L3Data\\L3.AMP", (int *)&dwTiles);
dwTiles >>= 1;
break;
case DTYPE_HELL:
v6 = "Levels\\L4Data\\L4.AMP";
pAFile = LoadFileInMem("Levels\\L4Data\\L4.AMP", (int *)&dwTiles);
dwTiles >>= 1;
break;
default:
return;
}
v7 = LoadFileInMem(v6, &size);
size = (unsigned int)size >> 1;
v9 = v7;
for (i = 1; i <= size; ++i) {
v11 = *v9;
v12 = v9 + 1;
_LOWORD(v0) = v11;
_LOBYTE(v8) = *v12;
v9 = v12 + 1;
_LOWORD(v8) = (unsigned char)v8;
v8 = v0 + (v8 << 8);
automaptype[i] = v8;
pTmp = pAFile;
for(i = 1; i <= dwTiles; i++) {
b1 = *pTmp++;
b2 = *pTmp++;
automaptype[i] = b1 + (b2 << 8);
}
mem_free_dbg(v7);
mem_free_dbg(pAFile);
memset(automapview, 0, sizeof(automapview));
v13 = 0;
do {
v14 = (unsigned char *)dFlags + v13;
v15 = 112;
do {
*v14 &= ~DFLAG_EXPLORED;
v14 += 112;
--v15;
} while (v15);
++v13;
} while (v13 < 112);
for(y = 0; y < MAXDUNY; y++) {
for(x = 0; x < MAXDUNX; x++)
dFlags[x][y] &= ~DFLAG_EXPLORED;
}
}
void __cdecl StartAutomap()
@ -210,7 +191,7 @@ void __cdecl DrawAutomap()
AutoMapYOfs--;
MapY += AutoMapYOfs;
cells = AMbyte_4B7E4C[(AutoMapScale - 50) / 5];
cells = AmShiftTab[(AutoMapScale - 50) / 5];
if (ScrollInfo._sxoff + ScrollInfo._syoff)
cells++;
mapx = MapX - cells;

2
Source/automap.h

@ -4,7 +4,7 @@
extern WORD automaptype[512];
extern BOOL automapflag; // idb
extern char AMbyte_4B7E4C[32];
extern char AmShiftTab[32];
extern unsigned char automapview[DMAXX][DMAXY];
extern int AutoMapScale; // idb
extern int AutoMapXOfs; // weak

140
Source/scrollrt.cpp

@ -2545,94 +2545,80 @@ void __cdecl ClearScreenBuffer()
#ifdef _DEBUG
void __cdecl ScrollView()
{
signed int v0; // esi
int v1; // edi
int v2; // edx
if (pcurs < 12) {
v0 = 0;
if (MouseX >= 20) {
v2 = ViewX;
v1 = ViewY;
} else {
v1 = ViewY;
v2 = ViewX;
if (ViewY >= dmaxy - 1 || dminx >= ViewX) {
if (ViewY < dmaxy - 1) {
v1 = ViewY + 1;
v0 = 1;
}
if (dminx < ViewX) {
v2 = ViewX - 1;
v0 = 1;
}
} else {
v1 = ViewY + 1;
v2 = ViewX - 1;
v0 = 1;
BOOL scroll;
if(pcurs >= CURSOR_FIRSTITEM)
return;
scroll = FALSE;
if(MouseX < 20) {
if(dmaxy - 1 <= ViewY || dminx >= ViewX) {
if(dmaxy - 1 > ViewY) {
ViewY++;
scroll = TRUE;
}
if(dminx < ViewX) {
ViewX--;
scroll = TRUE;
}
} else {
ViewY++;
ViewX--;
scroll = TRUE;
}
if (MouseX > 620) {
if (dmaxx - 1 > v2) {
if (dminy < v1) {
--v1;
++v2;
v0 = 1;
goto LABEL_19;
}
if (dmaxx - 1 > v2) {
++v2;
v0 = 1;
}
}
if(MouseX > 640-20) {
if(dmaxx - 1 <= ViewX || dminy >= ViewY) {
if(dmaxx - 1 > ViewX) {
ViewX++;
scroll = TRUE;
}
if (dminy < v1) {
--v1;
v0 = 1;
if(dminy < ViewY) {
ViewY--;
scroll = TRUE;
}
} else {
ViewY--;
ViewX++;
scroll = TRUE;
}
LABEL_19:
if (MouseY >= 20)
goto LABEL_28;
if (dminy < v1) {
if (dminx < v2) {
--v2;
--v1;
goto LABEL_27;
}
if(MouseY < 20) {
if(dminy >= ViewY || dminx >= ViewX) {
if(dminy < ViewY) {
ViewY--;
scroll = TRUE;
}
if (dminy < v1) {
--v1;
v0 = 1;
if(dminx < ViewX) {
ViewX--;
scroll = TRUE;
}
} else {
ViewX--;
ViewY--;
scroll = TRUE;
}
if (dminx >= v2)
goto LABEL_28;
--v2;
LABEL_27:
v0 = 1;
LABEL_28:
ViewX = v2;
ViewY = v1;
if (MouseY > 460) {
if (v1 >= dmaxy - 1 || dmaxx - 1 <= v2) {
ViewY = v1;
if (v1 < dmaxy - 1) {
v0 = 1;
ViewY = v1 + 1;
}
ViewX = v2;
if (dmaxx - 1 <= v2)
goto LABEL_37;
ViewX = v2 + 1;
} else {
ViewX = v2 + 1;
ViewY = v1 + 1;
}
if(MouseY > 480-20) {
if(dmaxy - 1 <= ViewY || dmaxx - 1 <= ViewX) {
if(dmaxy - 1 > ViewY) {
ViewY++;
scroll = TRUE;
}
if(dmaxx - 1 > ViewX) {
ViewX++;
scroll = TRUE;
}
v0 = 1;
} else {
ViewX++;
ViewY++;
scroll = TRUE;
}
LABEL_37:
if (v0)
ScrollInfo._sdir = 0;
}
if(scroll)
ScrollInfo._sdir = 0;
}
void __cdecl EnableFrameCount()

Loading…
Cancel
Save