Browse Source

Merge branch 'master' of github.com:diasurgical/devilution into working

Fixes #38
pull/41/head
Anders Jenbo 7 years ago
parent
commit
d5a06dcbc1
  1. 6
      Diablo.dsp
  2. 2
      MakefileVC
  3. 8
      Source/control.cpp
  4. 152
      Source/drlg_l1.cpp
  5. 1294
      Source/engine.cpp
  6. 18
      Source/engine.h
  7. 2
      Source/gendung.cpp
  8. 2
      Source/gendung.h
  9. 42
      Source/inv.cpp
  10. 348
      Source/missiles.cpp
  11. 66
      Source/objects.cpp
  12. 42
      Source/scrollrt.cpp
  13. 18
      Source/town.cpp
  14. 2
      structs.h

6
Diablo.dsp

@ -44,7 +44,7 @@ RSC=rc.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /TC /c
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "NDEBUG"
@ -70,7 +70,7 @@ LINK32=link.exe
# PROP Ignore_Export_Lib 0
# PROP Target_Dir ""
# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /O1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c
# ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /O1 /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /TC /c
# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o "NUL" /win32
# ADD BASE RSC /l 0x409 /d "_DEBUG"
@ -97,7 +97,7 @@ LINK32=link.exe
# PROP Target_Dir ""
# ADD BASE CPP /nologo /MT /W3 /GX /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c
# SUBTRACT BASE CPP /WX
# ADD CPP /nologo /MT /W3 /GX /Zi /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FAs /YX /FD /c
# ADD CPP /nologo /MT /W3 /GX /Zi /O1 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /FAs /YX /FD /TC /c
# SUBTRACT CPP /WX
# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32
# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o "NUL" /win32

2
MakefileVC

@ -36,7 +36,7 @@ else
VC6_LINK = wine $(VC6_BIN_DIR)/link.exe
endif
CFLAGS=/nologo /c /TC /GX /W3 /O1 /I $(VC6_INC_DIR) /FD /MT /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fp"Diablo.pch" /YX /Gm /Zi /FA
CFLAGS=/nologo /c /TC /GX /W3 /O1 /I $(VC6_INC_DIR) /FD /MT /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /Fp"Diablo.pch" /YX /Gm /Zi /FAs
LINKFLAGS=/nologo /subsystem:windows /machine:I386 /incremental:no
ifeq ($(MAKE_BUILD),pdb)

8
Source/control.cpp

@ -1023,20 +1023,20 @@ void __cdecl InitControlPan()
pSpellCels = LoadFileInMem("CtrlPan\\SpelIcon.CEL", 0);
SetSpellTrans(RSPLTYPE_SKILL);
pStatusPanel = LoadFileInMem("CtrlPan\\Panel8.CEL", 0);
CelDecodeRect((char *)pBtmBuff, 0, 143, 640, (char *)pStatusPanel, 1, 640);
CelDecodeRect((BYTE *)pBtmBuff, 0, 143, 640, (BYTE *)pStatusPanel, 1, 640);
v1 = pStatusPanel;
pStatusPanel = 0;
mem_free_dbg(v1);
pStatusPanel = LoadFileInMem("CtrlPan\\P8Bulbs.CEL", 0);
CelDecodeRect(pLifeBuff, 0, 87, 88, (char *)pStatusPanel, 1, 88);
CelDecodeRect(pManaBuff, 0, 87, 88, (char *)pStatusPanel, 2, 88);
CelDecodeRect((BYTE *)pLifeBuff, 0, 87, 88, (BYTE *)pStatusPanel, 1, 88);
CelDecodeRect((BYTE *)pManaBuff, 0, 87, 88, (BYTE *)pStatusPanel, 2, 88);
v2 = pStatusPanel;
pStatusPanel = 0;
mem_free_dbg(v2);
talkflag = 0;
if (gbMaxPlayers != 1) {
pTalkPanel = LoadFileInMem("CtrlPan\\TalkPanl.CEL", 0);
CelDecodeRect((char *)pBtmBuff, 0, 287, 640, (char *)pTalkPanel, 1, 640);
CelDecodeRect((BYTE *)pBtmBuff, 0, 287, 640, (BYTE *)pTalkPanel, 1, 640);
v3 = pTalkPanel;
pTalkPanel = 0;
mem_free_dbg(v3);

152
Source/drlg_l1.cpp

@ -202,77 +202,87 @@ void __cdecl DRLG_L1Floor()
void __cdecl DRLG_L1Pass3()
{
int v0; // eax
int *v1; // edx
int *v2; // eax
signed int v3; // ecx
signed int v4; // ebx
int *v5; // ecx
unsigned char *v6; // edx
unsigned short *v7; // esi
unsigned short v8; // ax
int v9; // eax
int v10; // ST24_4
int v11; // ST20_4
int v12; // ST1C_4
signed int v13; // [esp+Ch] [ebp-1Ch]
int *v14; // [esp+10h] [ebp-18h]
int v15; // [esp+14h] [ebp-14h]
int v16; // [esp+18h] [ebp-10h]
int v17; // [esp+1Ch] [ebp-Ch]
int v18; // [esp+20h] [ebp-8h]
v0 = *((unsigned short *)pMegaTiles + 84) + 1;
v18 = *((unsigned short *)pMegaTiles + 84) + 1;
_LOWORD(v0) = *((_WORD *)pMegaTiles + 85);
v17 = ++v0;
_LOWORD(v0) = *((_WORD *)pMegaTiles + 86);
v16 = ++v0;
_LOWORD(v0) = *((_WORD *)pMegaTiles + 87);
v15 = v0 + 1;
v1 = dPiece[1];
do {
v2 = v1;
v3 = 56;
do {
*(v2 - 112) = v18;
*v2 = v17;
*(v2 - 111) = v16;
v2[1] = v15;
v2 += 224;
--v3;
} while (v3);
v1 += 2;
} while ((INT_PTR)v1 < (INT_PTR)dPiece[2]);
v4 = 0;
v14 = &dPiece[17][16]; /* check */
do {
v5 = v14;
v6 = (unsigned char *)dungeon + v4;
v13 = 40;
do {
v7 = (unsigned short *)((char *)pMegaTiles + 8 * (*v6 - 1));
v8 = *v7;
++v7;
v9 = v8 + 1;
v10 = v9;
_LOWORD(v9) = *v7;
++v7;
v11 = ++v9;
_LOWORD(v9) = *v7;
v12 = ++v9;
_LOWORD(v9) = v7[1];
v6 += 40;
*(v5 - 112) = v10;
*v5 = v11;
*(v5 - 111) = v12;
v5[1] = v9 + 1;
v5 += 224;
--v13;
} while (v13);
v14 += 2;
++v4;
} while (v4 < 40);
int i, j, xx, yy;
long v1, v2, v3, v4, lv;
lv = 22-1;
#if (_MSC_VER >= 800) && (_MSC_VER <= 1200)
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv*8])+1;
v2 = *((WORD *)&pMegaTiles[lv*8]+1)+1;
v3 = *((WORD *)&pMegaTiles[lv*8]+2)+1;
v4 = *((WORD *)&pMegaTiles[lv*8]+3)+1;
#endif
for(j = 0; j < MAXDUNY; j += 2) {
for(i = 0; i < MAXDUNX; i += 2) {
dPiece[i][j] = v1;
dPiece[i+1][j] = v2;
dPiece[i][j+1] = v3;
dPiece[i+1][j+1] = v4;
}
}
yy = 16;
for(j = 0; j < DMAXY; j++) {
xx = 16;
for(i = 0; i < DMAXX; i++) {
lv = (unsigned char)dungeon[i][j]-1;
/// ASSERT: assert(lv >= 0);
#if (_MSC_VER >= 800) && (_MSC_VER <= 1200)
__asm {
mov esi, pMegaTiles
mov eax, lv
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[lv*8])+1;
v2 = *((WORD *)&pMegaTiles[lv*8]+1)+1;
v3 = *((WORD *)&pMegaTiles[lv*8]+2)+1;
v4 = *((WORD *)&pMegaTiles[lv*8]+3)+1;
#endif
dPiece[xx][yy] = v1;
dPiece[xx+1][yy] = v2;
dPiece[xx][yy+1] = v3;
dPiece[xx+1][yy+1] = v4;
xx += 2;
}
yy += 2;
}
}
void __cdecl DRLG_InitL1Vals()

1294
Source/engine.cpp

File diff suppressed because it is too large Load Diff

18
Source/engine.h

@ -19,20 +19,20 @@ void __fastcall CelDecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWid
void __fastcall CelDecDatLightOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth);
void __fastcall CelDecDatLightTrans(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth);
void __fastcall CelDecodeLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth);
void __fastcall CelDecodeHdrLightOnly(int screen_x, int screen_y, char *pCelBuff, int frame, int frame_width, int always_0, int direction);
void __fastcall CelDecodeHdrLightTrans(char *pBuff, char *pCelBuff, int frame, int frame_width, int always_0, int direction);
void __fastcall CelDrawHdrLightRed(int screen_x, int screen_y, char *pCelBuff, int frame, int frame_width, int always_0, int direction, char always_1);
void __fastcall CelDecodeHdrLightOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall CelDecodeHdrLightTrans(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall CelDrawHdrLightRed(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir, char light);
void __fastcall Cel2DecDatOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth);
void __fastcall Cel2DrawHdrOnly(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall Cel2DecodeHdrOnly(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall Cel2DecDatLightOnly(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth);
void __fastcall Cel2DecDatLightTrans(BYTE *pDecodeTo, BYTE *pRLEBytes, int nDataSize, int nWidth);
void __fastcall Cel2DecodeHdrLight(int screen_x, int screen_y, char *pCelBuff, int frame, int frame_width, int a6, int direction);
void __fastcall Cel2DecodeLightTrans(char *dst_buf, char *pCelBuff, int frame, int frame_width, int a5, int direction);
void __fastcall Cel2DrawHdrLightRed(int screen_x, int screen_y, char *pCelBuff, int frame, int frame_width, int always_0, int direction, char always_1);
void __fastcall CelDecodeRect(char *pBuff, int always_0, int dst_height, int dst_width, char *pCelBuff, int frame, int frame_width);
void __fastcall CelDecodeClr(BYTE colour, int screen_x, int screen_y, char *pCelBuff, int frame, int frame_width, int a7, int direction);
void __fastcall CelDrawHdrClrHL(char colour, int screen_x, int screen_y, char *pCelBuff, int frame, int frame_width, int a7, int direction);
void __fastcall Cel2DecodeHdrLight(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall Cel2DecodeLightTrans(BYTE *pBuff, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall Cel2DrawHdrLightRed(int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir, char light);
void __fastcall CelDecodeRect(BYTE *pBuff, int always_0, int hgt, int wdt, BYTE *pCelBuff, int nCel, int nWidth);
void __fastcall CelDecodeClr(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall CelDrawHdrClrHL(char col, int sx, int sy, BYTE *pCelBuff, int nCel, int nWidth, int always_0, int dir);
void __fastcall ENG_set_pixel(int screen_x, int screen_y, UCHAR pixel);
void __fastcall engine_draw_pixel(int x, int y);
void __fastcall DrawLine(int x0, int y0, int x1, int y1, UCHAR col);

2
Source/gendung.cpp

@ -24,7 +24,7 @@ int dPiece[MAXDUNX][MAXDUNY];
char dTransVal[MAXDUNX][MAXDUNY];
int setloadflag_2; // weak
int tile_defs[2048];
void *pMegaTiles;
BYTE *pMegaTiles;
void *pLevelPieces;
int gnDifficulty; // idb
char block_lvid[2049];

2
Source/gendung.h

@ -22,7 +22,7 @@ extern int dPiece[MAXDUNX][MAXDUNY];
extern char dTransVal[MAXDUNX][MAXDUNY];
extern int setloadflag_2; // weak
extern int tile_defs[2048];
extern void *pMegaTiles;
extern BYTE *pMegaTiles;
extern void *pLevelPieces;
extern int gnDifficulty; // idb
extern char block_lvid[2049];

42
Source/inv.cpp

@ -168,13 +168,13 @@ void __cdecl DrawInv()
if (!plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag) {
colour = ICOL_RED;
}
CelDecodeClr(colour, 517, 219, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, 517, 219, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvBody[INVLOC_HEAD]._iStatFlag) {
CelDrawHdrOnly(517, 219, (BYTE *)pCursCels, frame, frame_width, 0, 8);
} else {
CelDrawHdrLightRed(517, 219, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(517, 219, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
}
@ -192,13 +192,13 @@ void __cdecl DrawInv()
if (!plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag) {
colour = ICOL_RED;
}
CelDecodeClr(colour, 432, 365, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, 432, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvBody[INVLOC_RING_LEFT]._iStatFlag) {
CelDrawHdrOnly(432, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8);
} else {
CelDrawHdrLightRed(432, 365, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(432, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
}
@ -216,13 +216,13 @@ void __cdecl DrawInv()
if (!plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag) {
colour = ICOL_RED;
}
CelDecodeClr(colour, 633, 365, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, 633, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvBody[INVLOC_RING_RIGHT]._iStatFlag) {
CelDrawHdrOnly(633, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8);
} else {
CelDrawHdrLightRed(633, 365, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(633, 365, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
}
@ -240,13 +240,13 @@ void __cdecl DrawInv()
if (!plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag) {
colour = ICOL_RED;
}
CelDecodeClr(colour, 589, 220, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, 589, 220, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvBody[INVLOC_AMULET]._iStatFlag) {
CelDrawHdrOnly(589, 220, (BYTE *)pCursCels, frame, frame_width, 0, 8);
} else {
CelDrawHdrLightRed(589, 220, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(589, 220, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
}
@ -267,13 +267,13 @@ void __cdecl DrawInv()
if (!plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag) {
colour = ICOL_RED;
}
CelDecodeClr(colour, screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._iStatFlag) {
CelDrawHdrOnly(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8);
} else {
CelDrawHdrLightRed(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
if (plr[myplr].InvBody[INVLOC_HAND_LEFT]._iLoc == ILOC_TWOHAND) {
@ -283,9 +283,9 @@ void __cdecl DrawInv()
CelDecodeHdrLightTrans(
frame_width == INV_SLOT_SIZE_PX
? &gpBuffer->row[160].pixels[581]
: &gpBuffer->row[160].pixels[567],
(char *)pCursCels, frame, frame_width, 0, 8);
? (BYTE *)&gpBuffer->row[160].pixels[581]
: (BYTE *)&gpBuffer->row[160].pixels[567],
(BYTE *)pCursCels, frame, frame_width, 0, 8);
cel_transparency_active = 0;
}
@ -307,13 +307,13 @@ void __cdecl DrawInv()
if (!plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag) {
colour = ICOL_RED;
}
CelDecodeClr(colour, screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvBody[INVLOC_HAND_RIGHT]._iStatFlag) {
CelDrawHdrOnly(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8);
} else {
CelDrawHdrLightRed(screen_x, screen_y, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(screen_x, screen_y, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
}
@ -331,13 +331,13 @@ void __cdecl DrawInv()
if (!plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag) {
colour = ICOL_RED;
}
CelDecodeClr(colour, 517, 320, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, 517, 320, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvBody[INVLOC_CHEST]._iStatFlag) {
CelDrawHdrOnly(517, 320, (BYTE *)pCursCels, frame, frame_width, 0, 8);
} else {
CelDrawHdrLightRed(517, 320, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(517, 320, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
}
@ -372,7 +372,7 @@ void __cdecl DrawInv()
colour,
InvRect[j + SLOTXY_INV_FIRST].X + 64,
InvRect[j + SLOTXY_INV_FIRST].Y + 159,
(char *)pCursCels, frame, frame_width, 0, 8);
(BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].InvList[ii]._iStatFlag) {
@ -384,7 +384,7 @@ void __cdecl DrawInv()
CelDrawHdrLightRed(
InvRect[j + SLOTXY_INV_FIRST].X + 64,
InvRect[j + SLOTXY_INV_FIRST].Y + 159,
(char *)pCursCels, frame, frame_width, 0, 8, 1);
(BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
}
}
}
@ -420,13 +420,13 @@ void __cdecl DrawInvBelt()
colour = ICOL_BLUE;
if (!plr[myplr].SpdList[i]._iStatFlag)
colour = ICOL_RED;
CelDecodeClr(colour, InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (char *)pCursCels, frame, frame_width, 0, 8);
CelDecodeClr(colour, InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (BYTE *)pCursCels, frame, frame_width, 0, 8);
}
if (plr[myplr].SpdList[i]._iStatFlag)
CelDrawHdrOnly(InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (BYTE *)pCursCels, frame, frame_width, 0, 8);
else
CelDrawHdrLightRed(InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (char *)pCursCels, frame, frame_width, 0, 8, 1);
CelDrawHdrLightRed(InvRect[i + 65].X + 64, InvRect[i + 65].Y + 159, (BYTE *)pCursCels, frame, frame_width, 0, 8, 1);
if (AllItemsList[plr[myplr].SpdList[i].IDidx].iUsable
&& plr[myplr].SpdList[i]._iStatFlag

348
Source/missiles.cpp

@ -2439,7 +2439,7 @@ void __fastcall miss_null_11(int mi, int sx, int sy, int dx, int dy, int midir,
SetMissDir(mi, dx);
v10 = v9;
missile[v10]._midam = 0;
missile[v10]._miLightFlag = 1;
missile[v10]._miLightFlag = TRUE;
missile[v10]._mirange = 250;
}
@ -2456,7 +2456,7 @@ void __fastcall miss_null_12(int mi, int sx, int sy, int dx, int dy, int midir,
SetMissDir(mi, v9);
v11 = v10;
missile[v11]._midam = 0;
missile[v11]._miLightFlag = 1;
missile[v11]._miLightFlag = TRUE;
missile[v11]._mirange = 250;
}
@ -2475,56 +2475,43 @@ void __fastcall miss_null_13(int mi, int sx, int sy, int dx, int dy, int midir,
v11 = v10;
v12 = missile[v10]._miAnimLen;
missile[v11]._midam = 0;
missile[v11]._miLightFlag = 1;
missile[v11]._miLightFlag = TRUE;
missile[v11]._mirange = v12;
}
void __fastcall AddRhino(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam)
{
int v9; // esi
CMonster *v10; // eax
char v11; // cl
AnimStruct *v12; // edi
int v13; // eax
CMonster *v14; // ecx
char v15; // cl
BOOLEAN v16; // zf
int i; // [esp+8h] [ebp-4h]
AnimStruct *anim;
v9 = id;
i = mi;
v10 = monster[id].MType;
v11 = v10->mtype;
if (v10->mtype < MT_HORNED || v11 > MT_OBLORD) {
if (v11 < MT_NSNAKE || (v12 = &v10->Anims[MA_ATTACK], v11 > MT_GSNAKE))
v12 = &v10->Anims[MA_WALK];
if (monster[id].MType->mtype < MT_HORNED || monster[id].MType->mtype > MT_OBLORD) {
if (monster[id].MType->mtype < MT_NSNAKE || monster[id].MType->mtype > MT_GSNAKE) {
anim = &monster[id].MType->Anims[MA_WALK];
} else {
anim = &monster[id].MType->Anims[MA_ATTACK];
}
} else {
v12 = &v10->Anims[MA_SPECIAL];
}
GetMissileVel(i, sx, sy, dx, dy, 18);
v13 = i;
missile[v13]._miAnimFlags = 0;
missile[v13]._mimfnum = midir;
missile[v13]._miAnimData = v12->Data[midir];
missile[v13]._miAnimDelay = v12->Rate;
missile[v13]._miAnimLen = v12->Frames;
v14 = monster[v9].MType;
missile[v13]._miAnimWidth = v14->width;
missile[v13]._miAnimWidth2 = v14->width2;
missile[v13]._miAnimAdd = 1;
v15 = v14->mtype;
if (v15 >= MT_NSNAKE && v15 <= MT_GSNAKE)
missile[v13]._miAnimFrame = 7;
missile[v13]._miVar1 = 0;
missile[v13]._miVar2 = 0;
v16 = monster[v9]._uniqtype == 0;
missile[v13]._miLightFlag = 1;
if (!v16) {
missile[v13]._miUniqTrans = (unsigned char)monster[v9]._uniqtrans + 1;
missile[v13]._mlid = (unsigned char)monster[v9].mlid;
}
missile[v13]._mirange = 256;
PutMissile(i);
anim = &monster[id].MType->Anims[MA_SPECIAL];
}
GetMissileVel(mi, sx, sy, dx, dy, 18);
missile[mi]._miAnimFlags = 0;
missile[mi]._mimfnum = midir;
missile[mi]._miAnimData = anim->Data[midir];
missile[mi]._miAnimDelay = anim->Rate;
missile[mi]._miAnimLen = anim->Frames;
missile[mi]._miAnimWidth = monster[id].MType->width;
missile[mi]._miAnimWidth2 = monster[id].MType->width2;
missile[mi]._miAnimAdd = 1;
if (monster[id].MType->mtype >= MT_NSNAKE && monster[id].MType->mtype <= MT_GSNAKE)
missile[mi]._miAnimFrame = 7;
missile[mi]._miVar1 = 0;
missile[mi]._miVar2 = 0;
missile[mi]._miLightFlag = TRUE;
if (monster[id]._uniqtype != 0) {
missile[mi]._miUniqTrans = monster[id]._uniqtrans + 1;
missile[mi]._mlid = monster[id].mlid;
}
missile[mi]._mirange = 256;
PutMissile(mi);
}
void __fastcall miss_null_32(int mi, int sx, int sy, int dx, int dy, int midir, int mienemy, int id, int dam)
@ -2543,7 +2530,7 @@ void __fastcall miss_null_32(int mi, int sx, int sy, int dx, int dy, int midir,
missile[mi]._miAnimAdd = 1;
missile[mi]._miVar1 = 0;
missile[mi]._miVar2 = 0;
missile[mi]._miLightFlag = 1;
missile[mi]._miLightFlag = TRUE;
if (monster[id]._uniqtype != 0)
missile[mi]._miUniqTrans = monster[id]._uniqtrans + 1;
dMonster[monster[id]._mx][monster[id]._my] = 0;
@ -2621,7 +2608,7 @@ void __fastcall AddAcidpud(int mi, int sx, int sy, int dx, int dy, int midir, in
missile[v9]._miyvel = 0;
missile[v9]._mixoff = 0;
missile[v9]._miyoff = 0;
missile[v9]._miLightFlag = 1;
missile[v9]._miLightFlag = TRUE;
v11 = random(50, 15);
missile[v9]._miPreFlag = TRUE;
missile[v9]._mirange = v11 + 40 * ((unsigned char)monster[v10]._mint + 1);
@ -2767,7 +2754,7 @@ void __fastcall miss_null_23(int mi, int sx, int sy, int dx, int dy, int midir,
SetMissDir(mi, 0);
else
SetMissDir(mi, 1);
missile[mi]._miLightFlag = 1;
missile[mi]._miLightFlag = TRUE;
missile[mi]._mirange = missile[mi]._miAnimLen;
}
@ -3290,7 +3277,7 @@ int __fastcall AddMissile(int sx, int sy, int dx, int dy, int midir, int mitype,
missile[mi]._mityoff = 0;
missile[mi]._miDelFlag = FALSE;
missile[mi]._miAnimAdd = 1;
missile[mi]._miLightFlag = 0;
missile[mi]._miLightFlag = FALSE;
missile[mi]._miPreFlag = FALSE;
missile[mi]._miUniqTrans = 0;
missile[mi]._midam = midam;
@ -4280,75 +4267,44 @@ void __fastcall MI_Etherealize(int i)
void __fastcall MI_Firemove(int i)
{
int v1; // esi
int *v2; // eax
int v4; // ecx
int v5; // ebx
int v6; // ecx
int v7; // edx
int v8; // ecx
int v9; // ST10_4
int v10; // ecx
int ExpLight[14]; // [esp+Ch] [ebp-3Ch]
int ia; // [esp+44h] [ebp-4h]
int j;
int ExpLight[14] = { 2, 3, 4, 5, 5, 6, 7, 8, 9, 10, 11, 12, 12 };
v1 = i;
ExpLight[3] = 5;
ExpLight[4] = 5;
missile[v1]._miyoff += 32;
ExpLight[11] = 12;
ExpLight[12] = 12;
--missile[v1]._mix;
--missile[v1]._miy;
ExpLight[0] = 2;
ExpLight[1] = 3;
ExpLight[2] = 4;
ExpLight[5] = 6;
ExpLight[6] = 7;
ExpLight[7] = 8;
ExpLight[8] = 9;
ExpLight[9] = 10;
ExpLight[10] = 11;
ia = i;
ExpLight[13] = 0;
v2 = &missile[i]._miVar1;
if (++*v2 == missile[i]._miAnimLen) {
missile[i]._mix--;
missile[i]._miy--;
missile[i]._miyoff += 32;
missile[i]._miVar1++;
if (missile[i]._miVar1 == missile[i]._miAnimLen) {
SetMissDir(i, 1);
missile[v1]._miAnimFrame = random(82, 11) + 1;
missile[i]._miAnimFrame = random(82, 11) + 1;
}
v4 = ia;
missile[v1]._mitxoff += missile[v1]._mixvel;
missile[v1]._mityoff += missile[v1]._miyvel;
GetMissilePos(v4);
v5 = missile[v1]._mirange;
CheckMissileCol(ia, missile[v1]._midam, missile[v1]._midam, 0, missile[v1]._mix, missile[v1]._miy, 0);
if (missile[v1]._miHitFlag)
missile[v1]._mirange = v5;
if (!missile[v1]._mirange) {
v6 = missile[v1]._mlid;
missile[v1]._miDelFlag = TRUE;
AddUnLight(v6);
missile[i]._mitxoff += missile[i]._mixvel;
missile[i]._mityoff += missile[i]._miyvel;
GetMissilePos(i);
j = missile[i]._mirange;
CheckMissileCol(i, missile[i]._midam, missile[i]._midam, 0, missile[i]._mix, missile[i]._miy, 0);
if (missile[i]._miHitFlag == TRUE)
missile[i]._mirange = j;
if (!missile[i]._mirange) {
missile[i]._miDelFlag = TRUE;
AddUnLight(missile[i]._mlid);
}
if (missile[v1]._mimfnum || !missile[v1]._mirange) {
v7 = missile[v1]._mix;
if (v7 != missile[v1]._miVar3 || missile[v1]._miy != missile[v1]._miVar4) {
v8 = missile[v1]._mlid;
missile[v1]._miVar3 = v7;
v9 = missile[v1]._miy;
missile[v1]._miVar4 = v9;
ChangeLight(v8, v7, v9, 8);
if (missile[i]._mimfnum || !missile[i]._mirange) {
if (missile[i]._mix != missile[i]._miVar3 || missile[i]._miy != missile[i]._miVar4) {
missile[i]._miVar3 = missile[i]._mix;
missile[i]._miVar4 = missile[i]._miy;
ChangeLight(missile[i]._mlid, missile[i]._mix, missile[i]._miy, 8);
}
} else {
if (!missile[v1]._miVar2)
missile[v1]._mlid = AddLight(missile[v1]._mix, missile[v1]._miy, ExpLight[0]);
ChangeLight(missile[v1]._mlid, missile[v1]._mix, missile[v1]._miy, ExpLight[missile[v1]._miVar2]);
++missile[v1]._miVar2;
if (!missile[i]._miVar2)
missile[i]._mlid = AddLight(missile[i]._mix, missile[i]._miy, ExpLight[0]);
ChangeLight(missile[i]._mlid, missile[i]._mix, missile[i]._miy, ExpLight[missile[i]._miVar2]);
missile[i]._miVar2++;
}
++missile[v1]._mix;
v10 = ia;
++missile[v1]._miy;
missile[v1]._miyoff -= 32;
PutMissile(v10);
missile[i]._mix++;
missile[i]._miy++;
missile[i]._miyoff -= 32;
PutMissile(i);
}
void __fastcall MI_Guardian(int i)
@ -4746,78 +4702,44 @@ void __fastcall MI_Rhino(int i)
void __fastcall mi_null_32(int i)
{
int v1; // edi
int v2; // esi
int v3; // ebx
int v4; // edi
int v5; // eax
int v6; // eax
int v7; // ecx
int v8; // eax
int v9; // eax
int v10; // ebx
int v11; // eax
//int v12; // eax
int v13; // ecx
int v14; // ecx
unsigned char *v15; // eax
int v16; // [esp+Ch] [ebp-14h]
int arglist; // [esp+10h] [ebp-10h]
int x; // [esp+14h] [ebp-Ch]
int y; // [esp+18h] [ebp-8h]
int a3; // [esp+1Ch] [ebp-4h]
int src, enemy, ax, ay, bx, by, cx, cy, j;
v1 = i;
arglist = i;
GetMissilePos(i);
v2 = v1;
v3 = missile[v1]._mix;
a3 = missile[v1]._miy;
missile[v2]._mitxoff += missile[v1]._mixvel;
missile[v2]._mityoff += missile[v1]._miyvel;
GetMissilePos(v1);
v4 = missile[v1]._misource;
y = missile[v2]._miy;
v5 = monster[v4]._menemy;
x = missile[v2]._mix;
if (monster[v4]._mFlags & MFLAG_TARGETS_MONSTER) {
v9 = v5;
v7 = monster[v9]._mx;
v8 = monster[v9]._my;
ax = missile[i]._mix;
ay = missile[i]._miy;
missile[i]._mitxoff += missile[i]._mixvel;
missile[i]._mityoff += missile[i]._miyvel;
GetMissilePos(i);
src = missile[i]._misource;
bx = missile[i]._mix;
by = missile[i]._miy;
enemy = monster[src]._menemy;
if (!(monster[src]._mFlags & MFLAG_TARGETS_MONSTER)) {
cx = plr[enemy].WorldX;
cy = plr[enemy].WorldY;
} else {
v6 = v5;
v7 = plr[v6].WorldX;
v8 = plr[v6].WorldY;
}
v16 = v8;
if ((missile[v2]._mix != v3 || y != a3)
&& (missile[v2]._miVar1 & 1 && (abs(v3 - v7) >= 4 || abs(a3 - v16) >= 4) || missile[v2]._miVar2 > 1)
&& PosOkMonst(missile[v2]._misource, v3, a3)) {
MissToMonst(arglist, v3, a3);
v10 = v16;
missile[v2]._miDelFlag = TRUE;
cx = monster[enemy]._mx;
cy = monster[enemy]._my;
}
if ((bx != ax || by != ay) && (missile[i]._miVar1 & 1 && (abs(ax - cx) >= 4 || abs(ay - cy) >= 4) || missile[i]._miVar2 > 1) && PosOkMonst(missile[i]._misource, ax, ay)) {
MissToMonst(i, ax, ay);
missile[i]._miDelFlag = TRUE;
} else if (!(monster[src]._mFlags & MFLAG_TARGETS_MONSTER)) {
j = dPlayer[bx][by];
} else {
v11 = x;
if (monster[v4]._mFlags & MFLAG_TARGETS_MONSTER)
v10 = dMonster[v11][y];
else
v10 = dPlayer[v11][y];
}
//_LOBYTE(v12) = PosOkMissile(x, y);
if (!PosOkMissile(x, y) || v10 > 0 && !(missile[v2]._miVar1 & 1)) {
missile[v2]._mixvel = -missile[v2]._mixvel;
v13 = missile[v2]._mimfnum;
missile[v2]._miyvel = -missile[v2]._miyvel;
v14 = opposite[v13];
missile[v2]._mimfnum = v14;
v15 = monster[v4].MType->Anims[MA_WALK].Data[v14];
++missile[v2]._miVar2;
missile[v2]._miAnimData = v15;
if (v10 > 0)
missile[v2]._miVar1 |= 1u;
j = dMonster[bx][by];
}
MoveMissilePos(arglist);
PutMissile(arglist);
if (!PosOkMissile(bx, by) || j > 0 && !(missile[i]._miVar1 & 1)) {
missile[i]._mixvel *= -1;
missile[i]._miyvel *= -1;
missile[i]._mimfnum = opposite[missile[i]._mimfnum];
missile[i]._miAnimData = monster[src].MType->Anims[MA_WALK].Data[missile[i]._mimfnum];
missile[i]._miVar2++;
if (j > 0)
missile[i]._miVar1 |= 1;
}
MoveMissilePos(i);
PutMissile(i);
}
void __fastcall MI_FirewallC(int i)
@ -5497,66 +5419,32 @@ void __fastcall MI_Bonespirit(int i)
void __fastcall MI_ResurrectBeam(int i)
{
int v1; // eax
BOOLEAN v2; // zf
v1 = i;
v2 = missile[i]._mirange == 1;
--missile[v1]._mirange;
if (v2)
missile[v1]._miDelFlag = TRUE;
missile[i]._mirange--;
if (missile[i]._mirange == 0)
missile[i]._miDelFlag = TRUE;
PutMissile(i);
}
void __fastcall MI_Rportal(int i)
{
int v1; // esi
int v2; // eax
int v3; // ecx
int ExpLight[17]; // [esp+8h] [ebp-48h]
int ia; // [esp+4Ch] [ebp-4h]
int ExpLight[17] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 15, 15 };
v1 = i;
ExpLight[14] = 15;
ExpLight[15] = 15;
ExpLight[16] = 15;
v2 = missile[i]._mirange;
ia = i;
ExpLight[0] = 1;
ExpLight[1] = 2;
ExpLight[2] = 3;
ExpLight[3] = 4;
ExpLight[4] = 5;
ExpLight[5] = 6;
ExpLight[6] = 7;
ExpLight[7] = 8;
ExpLight[8] = 9;
ExpLight[9] = 10;
ExpLight[10] = 11;
ExpLight[11] = 12;
ExpLight[12] = 13;
ExpLight[13] = 14;
if (v2 > 1)
missile[v1]._mirange = v2 - 1;
if (missile[v1]._mirange == missile[v1]._miVar1)
if (missile[i]._mirange > 1)
missile[i]._mirange--;
if (missile[i]._mirange == missile[i]._miVar1)
SetMissDir(i, 1);
if (currlevel && missile[v1]._mimfnum != 1) {
if (!missile[v1]._mirange) {
LABEL_12:
v3 = missile[v1]._mlid;
missile[v1]._miDelFlag = TRUE;
AddUnLight(v3);
goto LABEL_13;
}
if (!missile[v1]._miVar2)
missile[v1]._mlid = AddLight(missile[v1]._mix, missile[v1]._miy, 1);
ChangeLight(missile[v1]._mlid, missile[v1]._mix, missile[v1]._miy, ExpLight[missile[v1]._miVar2]);
++missile[v1]._miVar2;
if (currlevel && missile[i]._mimfnum != 1 && missile[i]._mirange != 0) {
if (!missile[i]._miVar2)
missile[i]._mlid = AddLight(missile[i]._mix, missile[i]._miy, 1);
ChangeLight(missile[i]._mlid, missile[i]._mix, missile[i]._miy, ExpLight[missile[i]._miVar2]);
missile[i]._miVar2++;
}
if (!missile[v1]._mirange)
goto LABEL_12;
LABEL_13:
PutMissile(ia);
if (!missile[i]._mirange) {
missile[i]._miDelFlag = TRUE;
AddUnLight(missile[i]._mlid);
}
PutMissile(i);
}
void __cdecl ProcessMissiles()

66
Source/objects.cpp

@ -2631,34 +2631,44 @@ void __fastcall objects_set_door_piece(int x, int y)
void __fastcall ObjSetMini(int x, int y, int v)
{
unsigned short *v3; // esi
unsigned short v4; // ax
int v5; // eax
int pn; // ST1C_4
int v7; // ST18_4
int v8; // ST14_4
int v9; // ST10_4
int v10; // esi
int v11; // edi
v3 = (unsigned short *)((char *)pMegaTiles + 8 * ((unsigned short)v - 1));
v4 = *v3;
++v3;
v5 = v4 + 1;
pn = v5;
_LOWORD(v5) = *v3;
++v3;
v7 = ++v5;
_LOWORD(v5) = *v3;
v8 = ++v5;
_LOWORD(v5) = v3[1];
v9 = v5 + 1;
v10 = 2 * x + 16;
v11 = 2 * y + 16;
ObjSetMicro(v10, v11, pn);
ObjSetMicro(v10 + 1, v11++, v7);
ObjSetMicro(v10, v11, v8);
ObjSetMicro(v10 + 1, v11, v9);
int xx, yy;
long v1, v2, v3, v4;
#if (_MSC_VER >= 800) && (_MSC_VER <= 1200)
__asm {
mov esi, pMegaTiles
xor eax, eax
mov ax, word ptr v
dec eax
shl eax, 3
add esi, eax
xor eax, eax
lodsw
inc eax
mov v1, eax
lodsw
inc eax
mov v2, eax
lodsw
inc eax
mov v3, eax
lodsw
inc eax
mov v4, eax
}
#else
v1 = *((WORD *)&pMegaTiles[((WORD)v-1)*8])+1;
v2 = *((WORD *)&pMegaTiles[((WORD)v-1)*8]+1)+1;
v3 = *((WORD *)&pMegaTiles[((WORD)v-1)*8]+2)+1;
v4 = *((WORD *)&pMegaTiles[((WORD)v-1)*8]+3)+1;
#endif
xx = 2 * x + 16;
yy = 2 * y + 16;
ObjSetMicro(xx, yy, v1);
ObjSetMicro(xx + 1, yy, v2);
ObjSetMicro(xx, yy + 1, v3);
ObjSetMicro(xx + 1, yy + 1, v4);
}
void __fastcall ObjL1Special(int x1, int y1, int x2, int y2)

42
Source/scrollrt.cpp

@ -873,8 +873,8 @@ void __fastcall scrollrt_draw_clipped_dungeon(char *a1, int sx, int sy, int a4,
if (v18 >= 1 && *(_DWORD *)v17 <= 0x32u && v18 <= *(_DWORD *)v17) {
v19 = a4 - v16->_iAnimWidth2;
if (v49 - 1 == pcursitem)
CelDrawHdrClrHL(ICOL_BLUE, v19, a5, v17, v16->_iAnimFrame, v16->_iAnimWidth, 0, 8);
Cel2DecodeHdrLight(v19, a5, (char *)v16->_iAnimData, v16->_iAnimFrame, v16->_iAnimWidth, 0, 8);
CelDrawHdrClrHL(ICOL_BLUE, v19, a5, (BYTE *)v17, v16->_iAnimFrame, v16->_iAnimWidth, 0, 8);
Cel2DecodeHdrLight(v19, a5, v16->_iAnimData, v16->_iAnimFrame, v16->_iAnimWidth, 0, 8);
}
}
}
@ -987,11 +987,11 @@ void __fastcall scrollrt_draw_clipped_dungeon(char *a1, int sx, int sy, int a4,
if (v38 >= 1 && *(_DWORD *)v37 <= 0x32u && v38 <= *(_DWORD *)v37) {
v39 = a4 - v36->_iAnimWidth2;
if (v49 - 1 == pcursitem)
CelDrawHdrClrHL(ICOL_BLUE, v39, a5, v37, v36->_iAnimFrame, v36->_iAnimWidth, 0, 8);
CelDrawHdrClrHL(ICOL_BLUE, v39, a5, (BYTE *)v37, v36->_iAnimFrame, v36->_iAnimWidth, 0, 8);
Cel2DecodeHdrLight(
v39,
a5,
(char *)v36->_iAnimData,
v36->_iAnimData,
v36->_iAnimFrame,
v36->_iAnimWidth,
0,
@ -1003,7 +1003,7 @@ void __fastcall scrollrt_draw_clipped_dungeon(char *a1, int sx, int sy, int a4,
}
if (v46) {
cel_transparency_active = (unsigned char)TransList[v44];
Cel2DecodeLightTrans(dst_buf, (char *)level_special_cel, v46, 64, 0, 8);
Cel2DecodeLightTrans((BYTE *)dst_buf, (BYTE *)level_special_cel, v46, 64, 0, 8);
}
}
// 4B8CC0: using guessed type char pcursitem;
@ -1111,9 +1111,9 @@ void __fastcall DrawClippedObject(int x, int y, int ox, int oy, BOOL pre, int a6
}
if(bv == pcursobj)
CelDrawHdrClrHL(194, sx, sy, (char *)object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
CelDrawHdrClrHL(194, sx, sy, object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
if(object[bv]._oLight)
Cel2DecodeHdrLight(sx, sy, (char *)object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
Cel2DecodeHdrLight(sx, sy, object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
else
Cel2DrawHdrOnly(sx, sy, object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
}
@ -1473,8 +1473,8 @@ void __fastcall scrollrt_draw_clipped_dungeon_2(char *buffer, int x, int y, int
if (v21 >= 1 && *(_DWORD *)v20 <= 0x32u && v21 <= *(_DWORD *)v20) {
v22 = v13 - v19->_iAnimWidth2;
if (v52 - 1 == pcursitem)
CelDrawHdrClrHL(ICOL_BLUE, v22, sy, v20, v19->_iAnimFrame, v19->_iAnimWidth, a5, 8);
Cel2DecodeHdrLight(v22, sy, (char *)v19->_iAnimData, v19->_iAnimFrame, v19->_iAnimWidth, a5, 8);
CelDrawHdrClrHL(ICOL_BLUE, v22, sy, (BYTE *)v20, v19->_iAnimFrame, v19->_iAnimWidth, a5, 8);
Cel2DecodeHdrLight(v22, sy, v19->_iAnimData, v19->_iAnimFrame, v19->_iAnimWidth, a5, 8);
}
}
}
@ -1589,11 +1589,11 @@ void __fastcall scrollrt_draw_clipped_dungeon_2(char *buffer, int x, int y, int
if (v41 >= 1 && *(_DWORD *)v40 <= 0x32u && v41 <= *(_DWORD *)v40) {
v42 = v13 - v39->_iAnimWidth2;
if (v52 - 1 == pcursitem)
CelDrawHdrClrHL(ICOL_BLUE, v42, sy, v40, v41, v39->_iAnimWidth, a5, 8);
CelDrawHdrClrHL(ICOL_BLUE, v42, sy, (BYTE *)v40, v41, v39->_iAnimWidth, a5, 8);
Cel2DecodeHdrLight(
v42,
sy,
(char *)v39->_iAnimData,
v39->_iAnimData,
v39->_iAnimFrame,
v39->_iAnimWidth,
a5,
@ -1605,7 +1605,7 @@ void __fastcall scrollrt_draw_clipped_dungeon_2(char *buffer, int x, int y, int
}
if (v49) {
cel_transparency_active = (unsigned char)TransList[v47];
Cel2DecodeLightTrans(dst_buf, (char *)level_special_cel, v49, 64, a5, 8);
Cel2DecodeLightTrans((BYTE *)dst_buf, (BYTE *)level_special_cel, v49, 64, a5, 8);
}
}
// 4B8CC0: using guessed type char pcursitem;
@ -2013,8 +2013,8 @@ void __fastcall scrollrt_draw_dungeon(char *buffer, int x, int y, int a4, int a5
if (v20 >= 1 && *(_DWORD *)v19 <= 0x32u && v20 <= *(_DWORD *)v19) {
v21 = sx - v18->_iAnimWidth2;
if (v51 - 1 == pcursitem)
CelDecodeClr(ICOL_BLUE, v21, sy, v19, v18->_iAnimFrame, v18->_iAnimWidth, 0, a5);
CelDecodeHdrLightOnly(v21, sy, (char *)v18->_iAnimData, v18->_iAnimFrame, v18->_iAnimWidth, 0, a5);
CelDecodeClr(ICOL_BLUE, v21, sy, (BYTE *)v19, v18->_iAnimFrame, v18->_iAnimWidth, 0, a5);
CelDecodeHdrLightOnly(v21, sy, v18->_iAnimData, v18->_iAnimFrame, v18->_iAnimWidth, 0, a5);
}
}
}
@ -2127,11 +2127,11 @@ void __fastcall scrollrt_draw_dungeon(char *buffer, int x, int y, int a4, int a5
if (v40 >= 1 && *(_DWORD *)v39 <= 0x32u && v40 <= *(_DWORD *)v39) {
v41 = sx - v38->_iAnimWidth2;
if (v51 - 1 == pcursitem)
CelDecodeClr(ICOL_BLUE, v41, sy, v39, v38->_iAnimFrame, v38->_iAnimWidth, 0, a5);
CelDecodeClr(ICOL_BLUE, v41, sy, (BYTE *)v39, v38->_iAnimFrame, v38->_iAnimWidth, 0, a5);
CelDecodeHdrLightOnly(
v41,
sy,
(char *)v38->_iAnimData,
v38->_iAnimData,
v38->_iAnimFrame,
v38->_iAnimWidth,
0,
@ -2143,7 +2143,7 @@ void __fastcall scrollrt_draw_dungeon(char *buffer, int x, int y, int a4, int a5
}
if (v48) {
cel_transparency_active = (unsigned char)TransList[v46];
CelDecodeHdrLightTrans(dst_buf, (char *)level_special_cel, v48, 64, 0, a5);
CelDecodeHdrLightTrans((BYTE *)dst_buf, (BYTE *)level_special_cel, v48, 64, 0, a5);
}
}
// 4B8CC0: using guessed type char pcursitem;
@ -2251,9 +2251,9 @@ void __fastcall DrawObject(int x, int y, int ox, int oy, BOOL pre, int a6, int d
}
if(bv == pcursobj)
CelDecodeClr(194, sx, sy, (char *)object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
CelDecodeClr(194, sx, sy, object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
if(object[bv]._oLight) {
CelDecodeHdrLightOnly(sx, sy, (char *)object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
CelDecodeHdrLightOnly(sx, sy, object[bv]._oAnimData, object[bv]._oAnimFrame, object[bv]._oAnimWidth, a6, dir);
} else {
/// ASSERT: assert(object[bv]._oAnimData);
if(object[bv]._oAnimData) // BUGFIX: _oAnimData was already checked, this is redundant
@ -2725,10 +2725,10 @@ void __cdecl scrollrt_draw_cursor_item()
if (!plr[myplr].HoldItem._iStatFlag)
colour = ICOL_RED;
v12 = v9 + 64;
CelDrawHdrClrHL(colour, v12, v1 + v10 + 159, (char *)pCursCels, pcurs, v0, 0, 8);
CelDrawHdrClrHL(colour, v12, v1 + v10 + 159, (BYTE *)pCursCels, pcurs, v0, 0, 8);
v13 = cursH + v10 + 159;
if (colour == ICOL_RED)
Cel2DrawHdrLightRed(v12, v13, (char *)pCursCels, pcurs, cursW, 0, 8, 1);
Cel2DrawHdrLightRed(v12, v13, (BYTE *)pCursCels, pcurs, cursW, 0, 8, 1);
else
Cel2DrawHdrOnly(v12, v13, (BYTE *)pCursCels, pcurs, cursW, 0, 8);
}

18
Source/town.cpp

@ -148,7 +148,7 @@ void __fastcall town_draw_clipped_town(BYTE *buffer, int x, int y, int sx, int s
ICOL_BLUE,
v11,
sy,
(char *)item[v10]._iAnimData,
item[v10]._iAnimData,
item[v10]._iAnimFrame,
item[v10]._iAnimWidth,
0,
@ -163,7 +163,7 @@ void __fastcall town_draw_clipped_town(BYTE *buffer, int x, int y, int sx, int s
166,
v13,
sy,
(char *)towner[v12]._tAnimData,
towner[v12]._tAnimData,
towner[v12]._tAnimFrame,
towner[v12]._tAnimWidth,
0,
@ -180,7 +180,7 @@ void __fastcall town_draw_clipped_town(BYTE *buffer, int x, int y, int sx, int s
166,
v17,
sy,
(char *)towner[v16]._tAnimData,
towner[v16]._tAnimData,
towner[v16]._tAnimFrame,
towner[v16]._tAnimWidth,
0,
@ -408,7 +408,7 @@ void __fastcall town_draw_clipped_town_2(int x, int y, int a3, int a4, int a5, i
ICOL_BLUE,
v13,
sy,
(char *)item[v12]._iAnimData,
item[v12]._iAnimData,
item[v12]._iAnimFrame,
item[v12]._iAnimWidth,
a5,
@ -423,7 +423,7 @@ void __fastcall town_draw_clipped_town_2(int x, int y, int a3, int a4, int a5, i
166,
v15,
sy,
(char *)towner[v14]._tAnimData,
towner[v14]._tAnimData,
towner[v14]._tAnimFrame,
towner[v14]._tAnimWidth,
a5,
@ -440,7 +440,7 @@ void __fastcall town_draw_clipped_town_2(int x, int y, int a3, int a4, int a5, i
166,
v19,
sy,
(char *)towner[v18]._tAnimData,
towner[v18]._tAnimData,
towner[v18]._tAnimFrame,
towner[v18]._tAnimWidth,
a5,
@ -655,21 +655,21 @@ void __fastcall town_draw_town_all(BYTE *buffer, int x, int y, int a4, int dir,
ii = dItem[x][y] - 1;
xx = sx - item[ii]._iAnimWidth2;
if (ii == pcursitem)
CelDecodeClr(ICOL_BLUE, xx, sy, (char *)item[ii]._iAnimData, item[ii]._iAnimFrame, item[ii]._iAnimWidth, 0, dir);
CelDecodeClr(ICOL_BLUE, xx, sy, item[ii]._iAnimData, item[ii]._iAnimFrame, item[ii]._iAnimWidth, 0, dir);
CelDrawHdrOnly(xx, sy, item[ii]._iAnimData, item[ii]._iAnimFrame, item[ii]._iAnimWidth, 0, dir);
}
if (dFlags[x][y] & DFLAG_MONSTER) {
mi = -1 - dMonster[x][y - 1];
xx = sx - towner[mi]._tAnimWidth2;
if (mi == pcursmonst)
CelDecodeClr(PAL16_BEIGE + 6, xx, sy, (char *)towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth, 0, dir);
CelDecodeClr(PAL16_BEIGE + 6, xx, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth, 0, dir);
CelDrawHdrOnly(xx, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth, 0, dir);
}
if (dMonster[x][y] > 0) {
mi = dMonster[x][y] - 1;
xx = sx - towner[mi]._tAnimWidth2;
if (mi == pcursmonst)
CelDecodeClr(PAL16_BEIGE + 6, xx, sy, (char *)towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth, 0, dir);
CelDecodeClr(PAL16_BEIGE + 6, xx, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth, 0, dir);
CelDrawHdrOnly(xx, sy, towner[mi]._tAnimData, towner[mi]._tAnimFrame, towner[mi]._tAnimWidth, 0, dir);
}
if (dFlags[x][y] & DFLAG_PLAYER) {

2
structs.h

@ -413,7 +413,7 @@ typedef struct MissileStruct {
int _miAnimAdd;
int _miAnimFrame;
BOOL _miDrawFlag;
int _miLightFlag;
BOOL _miLightFlag;
BOOL _miPreFlag;
int _miUniqTrans;
int _mirange;

Loading…
Cancel
Save