Browse Source

Fix type for Dungeon Micros

pull/90/head^2^2
galaxyhaxz 7 years ago committed by Anders Jenbo
parent
commit
029b15f298
  1. 37
      Source/gendung.cpp
  2. 4
      Source/gendung.h
  3. 13
      Source/objects.cpp
  4. 14
      Source/player.cpp
  5. 132
      Source/scrollrt.cpp
  6. 81
      Source/town.cpp
  7. 4
      structs.h

37
Source/gendung.cpp

@ -11,7 +11,7 @@ BYTE *pSpeedCels;
int nlevel_frames; // weak
char pdungeon[40][40];
char dDead[MAXDUNX][MAXDUNY];
WORD dpiece_defs_map_1[MAXDUNX * MAXDUNY][16];
MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY];
char dPreLight[MAXDUNX][MAXDUNY];
char TransVal; // weak
int MicroTileLen;
@ -65,7 +65,7 @@ int setpc_y; // idb
char dMissile[MAXDUNX][MAXDUNY];
int dminx; // weak
int dminy; // weak
WORD dpiece_defs_map_2[MAXDUNX][MAXDUNY][16];
MICROS dpiece_defs_map_2[MAXDUNX][MAXDUNY];
void FillSolidBlockTbls()
{
@ -126,8 +126,8 @@ void MakeSpeedCels()
int total_frames, blocks, total_size, frameidx, lfs_adder, blk_cnt, currtile, nDataSize;
WORD m;
BOOL blood_flag;
WORD *pMap;
DWORD *pFrameTable;
MICROS *pMap;
#ifndef USE_ASM
int k, l;
BYTE width, pix;
@ -148,10 +148,10 @@ void MakeSpeedCels()
for (y = 0; y < MAXDUNY; y++) {
for (x = 0; x < MAXDUNX; x++) {
for (i = 0; i < blocks; i++) {
pMap = dpiece_defs_map_2[x][y];
if (pMap[i]) {
level_frame_count[pMap[i] & 0xFFF]++;
level_frame_types[pMap[i] & 0xFFF] = pMap[i] & 0x7000;
pMap = &dpiece_defs_map_2[x][y];
if (pMap->mt[i]) {
level_frame_count[pMap->mt[i] & 0xFFF]++;
level_frame_types[pMap->mt[i] & 0xFFF] = pMap->mt[i] & 0x7000;
}
}
}
@ -426,12 +426,12 @@ void MakeSpeedCels()
for (y = 0; y < MAXDUNY; y++) {
for (x = 0; x < MAXDUNX; x++) {
if (dPiece[x][y]) {
pMap = dpiece_defs_map_2[x][y];
pMap = &dpiece_defs_map_2[x][y];
for (i = 0; i < blocks; i++) {
if (pMap[i]) {
if (pMap->mt[i]) {
for (m = 0; m < total_frames; m++) {
if ((pMap[i] & 0xFFF) == tile_defs[m]) {
pMap[i] = m + level_frame_types[m] + 0x8000;
if ((pMap->mt[i] & 0xFFF) == tile_defs[m]) {
pMap->mt[i] = m + level_frame_types[m] + 0x8000;
m = total_frames;
}
}
@ -492,13 +492,11 @@ int IsometricCoord(int x, int y)
void SetSpeedCels()
{
int i, x, y;
int x, y;
for (x = 0; x < MAXDUNX; x++) {
for (y = 0; y < MAXDUNY; y++) {
for (i = 0; i < 16; i++) {
dpiece_defs_map_1[IsometricCoord(x, y)][i] = dpiece_defs_map_2[x][y][i];
}
dpiece_defs_map_1[IsometricCoord(x, y)] = dpiece_defs_map_2[x][y];
}
}
}
@ -506,7 +504,8 @@ void SetSpeedCels()
void SetDungeonMicros()
{
int i, x, y, lv, blocks;
WORD *pMap, *pPiece;
WORD *pPiece;
MICROS *pMap;
if (leveltype != DTYPE_HELL) {
MicroTileLen = 10;
@ -519,7 +518,7 @@ void SetDungeonMicros()
for (y = 0; y < MAXDUNY; y++) {
for (x = 0; x < MAXDUNX; x++) {
lv = dPiece[x][y];
pMap = dpiece_defs_map_2[x][y];
pMap = &dpiece_defs_map_2[x][y];
if (lv) {
lv--;
if (leveltype != DTYPE_HELL)
@ -527,10 +526,10 @@ void SetDungeonMicros()
else
pPiece = (WORD *)&pLevelPieces[32 * lv];
for (i = 0; i < blocks; i++)
pMap[i] = pPiece[(i & 1) + blocks - 2 - (i & 0xE)];
pMap->mt[i] = pPiece[(i & 1) + blocks - 2 - (i & 0xE)];
} else {
for (i = 0; i < blocks; i++)
pMap[i] = 0;
pMap->mt[i] = 0;
}
}
}

4
Source/gendung.h

@ -13,7 +13,7 @@ extern BYTE *pSpeedCels;
extern int nlevel_frames; // weak
extern char pdungeon[40][40];
extern char dDead[MAXDUNX][MAXDUNY];
extern WORD dpiece_defs_map_1[MAXDUNX * MAXDUNY][16];
extern MICROS dpiece_defs_map_1[MAXDUNX * MAXDUNY];
extern char dPreLight[MAXDUNX][MAXDUNY];
extern char TransVal; // weak
extern int MicroTileLen;
@ -67,7 +67,7 @@ extern int setpc_y; // idb
extern char dMissile[MAXDUNX][MAXDUNY];
extern int dminx; // weak
extern int dminy; // weak
extern WORD dpiece_defs_map_2[MAXDUNX][MAXDUNY][16];
extern MICROS dpiece_defs_map_2[MAXDUNX][MAXDUNY];
void FillSolidBlockTbls();
void MakeSpeedCels();

13
Source/objects.cpp

@ -2172,21 +2172,22 @@ void ProcessObjects()
void ObjSetMicro(int dx, int dy, int pn)
{
WORD *defs, *v;
WORD *v;
MICROS *defs;
int i;
dPiece[dx][dy] = pn;
pn--;
defs = dpiece_defs_map_1[IsometricCoord(dx, dy)];
defs = &dpiece_defs_map_1[IsometricCoord(dx, dy)];
if (leveltype != DTYPE_HELL) {
v = (WORD *)pLevelPieces + 10 * pn;
for (i = 0; i < 10; i++) {
defs[i] = v[(i & 1) - (i & 0xE) + 8];
defs->mt[i] = v[(i & 1) - (i & 0xE) + 8];
}
} else {
v = (WORD *)pLevelPieces + 16 * pn;
for (i = 0; i < 16; i++) {
defs[i] = v[(i & 1) - (i & 0xE) + 14];
defs->mt[i] = v[(i & 1) - (i & 0xE) + 14];
}
}
}
@ -2204,8 +2205,8 @@ void objects_set_door_piece(int x, int y)
v4 = dPiece[x][y] - 1;
v5 = *((_WORD *)pLevelPieces + 10 * (unsigned short)v4 + 8);
v6 = *((_WORD *)pLevelPieces + 10 * (unsigned short)v4 + 9);
dpiece_defs_map_1[0][16 * IsometricCoord(x, y)] = v5;
dpiece_defs_map_1[0][16 * IsometricCoord(v3, v2) + 1] = v6;
dpiece_defs_map_1[IsometricCoord(x, y)].mt[0] = v5;
dpiece_defs_map_1[IsometricCoord(v3, v2)].mt[1] = v6;
}
void ObjSetMini(int x, int y, int v)

14
Source/player.cpp

@ -918,7 +918,7 @@ void CheckEFlag(int pnum, BOOL flag)
{
int x, y, i;
int bitflags;
USHORT *pieces;
MICROS *pieces;
if ((DWORD)pnum >= MAX_PLRS) {
app_fatal("InitPlayer: illegal player %d", pnum);
@ -927,10 +927,10 @@ void CheckEFlag(int pnum, BOOL flag)
x = plr[pnum].WorldX - 1;
y = plr[pnum].WorldY + 1;
bitflags = 0;
pieces = dpiece_defs_map_1[IsometricCoord(x, y)];
pieces = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 2; i < 10; i++) {
bitflags |= pieces[i];
bitflags |= pieces->mt[i];
}
if (bitflags | nSolidTable[dPiece[x][y]] | dArch[x][y]) {
@ -946,10 +946,10 @@ void CheckEFlag(int pnum, BOOL flag)
x = plr[pnum].WorldX;
y = plr[pnum].WorldY + 2;
bitflags = 0;
pieces = dpiece_defs_map_1[IsometricCoord(x, y)];
pieces = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 2; i < 10; i++) {
bitflags |= pieces[i];
bitflags |= pieces->mt[i];
}
if (bitflags | dArch[x][y]) {
@ -959,10 +959,10 @@ void CheckEFlag(int pnum, BOOL flag)
x = plr[pnum].WorldX - 2;
y = plr[pnum].WorldY + 1;
bitflags = 0;
pieces = dpiece_defs_map_1[IsometricCoord(x, y)];
pieces = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 2; i < 10; i++) {
bitflags |= pieces[i];
bitflags |= pieces->mt[i];
}
if (bitflags | dArch[x][y]) {

132
Source/scrollrt.cpp

@ -551,11 +551,11 @@ void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag)
{
int i, j;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
/// ASSERT: assert(gpBuffer);
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
if (eflag) {
if ((DWORD)y < MAXDUNY && (DWORD)x < MAXDUNX) {
@ -565,33 +565,33 @@ void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag)
dst = &gpBuffer[sx + 32 + PitchTbl[sy]];
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
arch_draw_type = 2;
level_cel_block = pMap[1];
level_cel_block = pMap->mt[1];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
arch_draw_type = 0;
dst -= 768 * 32;
level_cel_block = pMap[3];
level_cel_block = pMap->mt[3];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[5];
level_cel_block = pMap->mt[5];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[7];
level_cel_block = pMap->mt[7];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[9];
level_cel_block = pMap->mt[9];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[11];
level_cel_block = pMap->mt[11];
if (level_cel_block != 0 && leveltype == DTYPE_HELL) {
drawLowerScreen(dst);
}
@ -603,7 +603,7 @@ void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag)
x++;
y--;
sx += 64;
pMap += 16;
pMap++;
chunks--;
}
@ -622,23 +622,23 @@ void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag)
dst = &gpBuffer[sx + PitchTbl[sy]];
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
arch_draw_type = 1;
level_cel_block = pMap[0];
level_cel_block = pMap->mt[0];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
arch_draw_type = 2;
level_cel_block = pMap[1];
level_cel_block = pMap->mt[1];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
arch_draw_type = 0;
for (i = 2; i < MicroTileLen; i += 2) {
dst -= 768 * 32;
level_cel_block = pMap[i];
level_cel_block = pMap->mt[i];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[i + 1];
level_cel_block = pMap->mt[i + 1];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -649,7 +649,7 @@ void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag)
x++;
y--;
sx += 64;
pMap += 16;
pMap++;
}
if (eflag && (DWORD)y < MAXDUNY && (DWORD)x < MAXDUNX) {
@ -661,33 +661,33 @@ void scrollrt_draw_lower(int x, int y, int sx, int sy, int chunks, int eflag)
dst = &gpBuffer[sx + PitchTbl[sy]];
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
arch_draw_type = 1;
level_cel_block = pMap[0];
level_cel_block = pMap->mt[0];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
arch_draw_type = 0;
dst -= 768 * 32;
level_cel_block = pMap[2];
level_cel_block = pMap->mt[2];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[4];
level_cel_block = pMap->mt[4];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[6];
level_cel_block = pMap->mt[6];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[8];
level_cel_block = pMap->mt[8];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
dst -= 768 * 32;
level_cel_block = pMap[10];
level_cel_block = pMap->mt[10];
if (level_cel_block != 0 && leveltype == DTYPE_HELL) {
drawLowerScreen(dst);
}
@ -1034,7 +1034,7 @@ void scrollrt_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int a4, int a5)
{
int i, lti_old, cta_old, lpi_old;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
lti_old = light_table_index;
cta_old = cel_transparency_active;
@ -1043,16 +1043,16 @@ void scrollrt_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int a4, int a5)
level_piece_id = dPiece[x][y];
light_table_index = dLight[x][y];
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
dst = pBuff;
arch_draw_type = 1;
level_cel_block = pMap[0];
level_cel_block = pMap->mt[0];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
arch_draw_type = 2;
level_cel_block = pMap[1];
level_cel_block = pMap->mt[1];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -1061,11 +1061,11 @@ void scrollrt_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int a4, int a5)
arch_draw_type = 0;
for (i = 2; i < MicroTileLen; i += 2) {
dst -= 768 * 32;
level_cel_block = pMap[i];
level_cel_block = pMap->mt[i];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[i + 1];
level_cel_block = pMap->mt[i + 1];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -1087,11 +1087,11 @@ void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int skipChu
{
int i, j, CelSkip;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
/// ASSERT: assert(gpBuffer);
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
CelSkip = 2 * skipChunks + 2;
if (eflag) {
@ -1103,7 +1103,7 @@ void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int skipChu
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
for (i = 0; i < (MicroTileLen >> 1) - 1; i++) {
if (skipChunks <= i) {
level_cel_block = pMap[2 * i + 3];
level_cel_block = pMap->mt[2 * i + 3];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
@ -1119,7 +1119,7 @@ void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int skipChu
y--;
sx += 64;
chunks--;
pMap += 16;
pMap++;
}
j = chunks;
@ -1137,11 +1137,11 @@ void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int skipChu
i = 0;
while (i < (MicroTileLen >> 1) - 1) {
if (skipChunks <= i) {
level_cel_block = pMap[2 * i + 2];
level_cel_block = pMap->mt[2 * i + 2];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[2 * i + 3];
level_cel_block = pMap->mt[2 * i + 3];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -1157,7 +1157,7 @@ void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int skipChu
x++;
y--;
sx += 64;
pMap += 16;
pMap++;
}
if (eflag && (DWORD)y < MAXDUNY && (DWORD)x < MAXDUNX) {
@ -1168,7 +1168,7 @@ void scrollrt_draw_lower_2(int x, int y, int sx, int sy, int chunks, int skipChu
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
for (i = 0; i < (MicroTileLen >> 1) - 1; i++) {
if (skipChunks <= i) {
level_cel_block = pMap[2 * i + 2];
level_cel_block = pMap->mt[2 * i + 2];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
@ -1434,7 +1434,7 @@ void scrollrt_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int skipChunks, s
{
int lti_old, cta_old, lpi_old;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
lti_old = light_table_index;
cta_old = cel_transparency_active;
@ -1444,45 +1444,45 @@ void scrollrt_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int skipChunks, s
light_table_index = dLight[x][y];
dst = &pBuff[768 * 32 * skipChunks];
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
switch (skipChunks) {
case 0:
level_cel_block = pMap[2];
level_cel_block = pMap->mt[2];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[3];
level_cel_block = pMap->mt[3];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
case 1:
dst -= 768 * 32;
level_cel_block = pMap[4];
level_cel_block = pMap->mt[4];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[5];
level_cel_block = pMap->mt[5];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
case 2:
dst -= 768 * 32;
level_cel_block = pMap[6];
level_cel_block = pMap->mt[6];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[7];
level_cel_block = pMap->mt[7];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
case 3:
dst -= 768 * 32;
level_cel_block = pMap[8];
level_cel_block = pMap->mt[8];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[9];
level_cel_block = pMap->mt[9];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -1506,11 +1506,11 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
{
int i, j, CelCap;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
/// ASSERT: assert(gpBuffer);
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
CelCap = 2 * capChunks + 2;
if (CelCap > 8) {
CelCap = 8;
@ -1524,7 +1524,7 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
dst = &gpBuffer[sx + 32 + PitchTbl[sy]];
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
if (capChunks >= 0) {
level_cel_block = pMap[1];
level_cel_block = pMap->mt[1];
if (level_cel_block != 0) {
arch_draw_type = 2;
drawUpperScreen(dst);
@ -1533,21 +1533,21 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
}
dst -= 768 * 32;
if (capChunks >= 1) {
level_cel_block = pMap[3];
level_cel_block = pMap->mt[3];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
}
dst -= 768 * 32;
if (capChunks >= 2) {
level_cel_block = pMap[5];
level_cel_block = pMap->mt[5];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
}
dst -= 768 * 32;
if (capChunks >= 3) {
level_cel_block = pMap[7];
level_cel_block = pMap->mt[7];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
@ -1561,7 +1561,7 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
y--;
sx += 64;
chunks--;
pMap += 16;
pMap++;
}
for (j = 0; j < chunks; j++) {
@ -1572,12 +1572,12 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
dst = &gpBuffer[sx + PitchTbl[sy]];
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
arch_draw_type = 1;
level_cel_block = pMap[0];
level_cel_block = pMap->mt[0];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
arch_draw_type = 2;
level_cel_block = pMap[1];
level_cel_block = pMap->mt[1];
if (level_cel_block != 0) {
drawUpperScreen(dst + 32);
}
@ -1585,11 +1585,11 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
for (i = 1; i < (MicroTileLen >> 1) - 1; i++) {
dst -= 768 * 32;
if (capChunks >= i) {
level_cel_block = pMap[2 * i];
level_cel_block = pMap->mt[2 * i];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
level_cel_block = pMap[2 * i + 1];
level_cel_block = pMap->mt[2 * i + 1];
if (level_cel_block != 0) {
drawUpperScreen(dst + 32);
}
@ -1603,7 +1603,7 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
x++;
y--;
sx += 64;
pMap += 16;
pMap++;
}
if (eflag && y >= 0 && y < MAXDUNY && x >= 0 && x < MAXDUNX) {
@ -1614,7 +1614,7 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
arch_draw_type = 1;
if (capChunks >= 0) {
level_cel_block = pMap[0];
level_cel_block = pMap->mt[0];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
@ -1622,21 +1622,21 @@ void scrollrt_draw_upper(int x, int y, int sx, int sy, int chunks, int capChunks
arch_draw_type = 0;
dst -= 768 * 32;
if (capChunks >= 1) {
level_cel_block = pMap[2];
level_cel_block = pMap->mt[2];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
}
dst -= 768 * 32;
if (capChunks >= 2) {
level_cel_block = pMap[4];
level_cel_block = pMap->mt[4];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
}
dst -= 768 * 32;
if (capChunks >= 3) {
level_cel_block = pMap[6];
level_cel_block = pMap->mt[6];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
@ -1972,7 +1972,7 @@ void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int capChunks, int CelCap,
{
int i, lti_old, cta_old, lpi_old;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
lti_old = light_table_index;
cta_old = cel_transparency_active;
@ -1982,15 +1982,15 @@ void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int capChunks, int CelCap,
light_table_index = dLight[x][y];
dst = pBuff;
cel_transparency_active = (unsigned char)(nTransTable[level_piece_id] & TransList[dTransVal[x][y]]);
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
arch_draw_type = 1;
level_cel_block = pMap[0];
level_cel_block = pMap->mt[0];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
arch_draw_type = 2;
level_cel_block = pMap[1];
level_cel_block = pMap->mt[1];
if (level_cel_block != 0) {
drawUpperScreen(dst + 32);
}
@ -1999,11 +1999,11 @@ void scrollrt_draw_e_flag(BYTE *pBuff, int x, int y, int capChunks, int CelCap,
for (i = 1; i < (MicroTileLen >> 1) - 1; i++) {
dst -= 768 * 32;
if (capChunks >= i) {
level_cel_block = pMap[2 * i];
level_cel_block = pMap->mt[2 * i];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
level_cel_block = pMap[2 * i + 1];
level_cel_block = pMap->mt[2 * i + 1];
if (level_cel_block != 0) {
drawUpperScreen(dst + 32);
}

81
Source/town.cpp

@ -144,17 +144,17 @@ void town_draw_clipped_e_flag(BYTE *pBuff, int x, int y, int sx, int sy)
{
int i;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
dst = pBuff;
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 12; i += 2) {
level_cel_block = pMap[i];
level_cel_block = pMap->mt[i];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[i + 1];
level_cel_block = pMap->mt[i + 1];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -236,7 +236,7 @@ void town_draw_lower(int x, int y, int sx, int sy, int a5, int some_flag)
{
int i, j;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
/// ASSERT: assert(gpBuffer);
@ -245,9 +245,9 @@ void town_draw_lower(int x, int y, int sx, int sy, int a5, int some_flag)
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx + 32 + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 1; i < 17; i += 2) {
level_cel_block = pMap[i];
level_cel_block = pMap->mt[i];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
@ -270,13 +270,13 @@ void town_draw_lower(int x, int y, int sx, int sy, int a5, int some_flag)
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 16; i += 2) {
level_cel_block = pMap[i];
level_cel_block = pMap->mt[i];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[i + 1];
level_cel_block = pMap->mt[i + 1];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -299,9 +299,9 @@ void town_draw_lower(int x, int y, int sx, int sy, int a5, int some_flag)
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 16; i += 2) {
level_cel_block = pMap[i];
level_cel_block = pMap->mt[i];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
@ -322,7 +322,7 @@ void town_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int a4, int a5, int s
{
int i;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
if (a4 == 0) {
dst = pBuff;
@ -330,15 +330,15 @@ void town_draw_clipped_e_flag_2(BYTE *pBuff, int x, int y, int a4, int a5, int s
dst = &pBuff[768 * 32 * a4];
}
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 6; i++) {
if (a4 <= i) {
level_cel_block = pMap[2 * i + 2];
level_cel_block = pMap->mt[2 * i + 2];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[2 * i + 3];
level_cel_block = pMap->mt[2 * i + 3];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -419,7 +419,7 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int a5, int a6, int some_fl
{
int i, j, dir;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
/// ASSERT: assert(gpBuffer);
@ -430,10 +430,10 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int a5, int a6, int some_fl
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx - (768 * 32 - 32) + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 7; i++) {
if (a6 <= i) {
level_cel_block = pMap[2 * i + 3];
level_cel_block = pMap->mt[2 * i + 3];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
@ -459,14 +459,14 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int a5, int a6, int some_fl
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx - 768 * 32 + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 7; i++) {
if (a6 <= i) {
level_cel_block = pMap[2 * i + 2];
level_cel_block = pMap->mt[2 * i + 2];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
level_cel_block = pMap[2 * i + 3];
level_cel_block = pMap->mt[2 * i + 3];
if (level_cel_block != 0) {
drawLowerScreen(dst + 32);
}
@ -492,10 +492,10 @@ void town_draw_lower_2(int x, int y, int sx, int sy, int a5, int a6, int some_fl
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx - 768 * 32 + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 7; i++) {
if (a6 <= i) {
level_cel_block = pMap[2 * i + 2];
level_cel_block = pMap->mt[2 * i + 2];
if (level_cel_block != 0) {
drawLowerScreen(dst);
}
@ -519,18 +519,18 @@ void town_draw_e_flag(BYTE *pBuff, int x, int y, int a4, int dir, int sx, int sy
{
int i;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
dst = pBuff;
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 7; i++) {
if (a4 >= i) {
level_cel_block = pMap[2 * i];
level_cel_block = pMap->mt[2 * i];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
level_cel_block = pMap[2 * i + 1];
level_cel_block = pMap->mt[2 * i + 1];
if (level_cel_block != 0) {
drawUpperScreen(dst + 32);
}
@ -614,7 +614,7 @@ void town_draw_upper(int x, int y, int sx, int sy, int a5, int a6, int some_flag
{
int i, j, dir;
BYTE *dst;
WORD *pMap;
MICROS *pMap;
/// ASSERT: assert(gpBuffer);
@ -628,10 +628,10 @@ void town_draw_upper(int x, int y, int sx, int sy, int a5, int a6, int some_flag
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx + 32 + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 7; i++) {
if (a6 >= i) {
level_cel_block = pMap[2 * i + 1];
level_cel_block = pMap->mt[2 * i + 1];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
@ -655,14 +655,14 @@ void town_draw_upper(int x, int y, int sx, int sy, int a5, int a6, int some_flag
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 7; i++) {
if (a6 >= i) {
level_cel_block = pMap[2 * i];
level_cel_block = pMap->mt[2 * i];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
level_cel_block = pMap[2 * i + 1];
level_cel_block = pMap->mt[2 * i + 1];
if (level_cel_block != 0) {
drawUpperScreen(dst + 32);
}
@ -686,10 +686,10 @@ void town_draw_upper(int x, int y, int sx, int sy, int a5, int a6, int some_flag
level_cel_block = dPiece[x][y];
if (level_cel_block != 0) {
dst = &gpBuffer[sx + PitchTbl[sy]];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
for (i = 0; i < 7; i++) {
if (a6 >= i) {
level_cel_block = pMap[2 * i];
level_cel_block = pMap->mt[2 * i];
if (level_cel_block != 0) {
drawUpperScreen(dst);
}
@ -1059,21 +1059,22 @@ void T_DrawView(int StartX, int StartY)
void SetTownMicros()
{
int i, x, y, lv;
WORD *pMap, *pPiece;
WORD *pPiece;
MICROS *pMap;
for (y = 0; y < MAXDUNY; y++) {
for (x = 0; x < MAXDUNX; x++) {
lv = dPiece[x][y];
pMap = dpiece_defs_map_1[IsometricCoord(x, y)];
pMap = &dpiece_defs_map_1[IsometricCoord(x, y)];
if (lv != 0) {
lv--;
pPiece = (WORD *)&pLevelPieces[32 * lv];
for (i = 0; i < 16; i++) {
pMap[i] = pPiece[(i & 1) + 14 - (i & 0xE)];
pMap->mt[i] = pPiece[(i & 1) + 14 - (i & 0xE)];
}
} else {
for (i = 0; i < 16; i++) {
pMap[i] = 0;
pMap->mt[i] = 0;
}
}
}

4
structs.h

@ -1117,6 +1117,10 @@ typedef struct THEME_LOC {
int height;
} THEME_LOC;
typedef struct MICROS {
WORD mt[16];
} MICROS;
//////////////////////////////////////////////////
// drlg
//////////////////////////////////////////////////

Loading…
Cancel
Save