Index: Makefile
===================================================================
RCS file: /cvs/ports/games/devilutionx/Makefile,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 Makefile
--- Makefile 19 Jul 2019 13:42:33 -0000 1.1.1.1
+++ Makefile 24 Jul 2019 06:14:21 -0000
@@ -1,12 +1,12 @@
# $OpenBSD: Makefile,v 1.1.1.1 2019/07/19 13:42:33 bcallah Exp $
COMMENT = open source engine recreation for Diablo 1 game
-DISTNAME = devilutionx-0.4.0pl20190715
+DISTNAME = devilutionx-0.4.0pl20190723
CATEGORIES = games x11
GH_ACCOUNT = diasurgical
GH_PROJECT = devilutionX
-GH_COMMIT = 10ebca4efd422bbf46bad6d12ea4cdade9038b01
+GH_COMMIT = 72f65d577124d24ab9f459ef164e31c9ab225b3e
MAINTAINER = Brian Callahan <bcallah@openbsd.org>
Index: distinfo
===================================================================
RCS file: /cvs/ports/games/devilutionx/distinfo,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 distinfo
--- distinfo 19 Jul 2019 13:42:33 -0000 1.1.1.1
+++ distinfo 24 Jul 2019 06:14:21 -0000
@@ -1,2 +1,2 @@
-SHA256 (devilutionx-0.4.0pl20190715-10ebca4e.tar.gz) = 6WOyN6WpRoYuKpe1P24YgQ8OaYEtShyt8p1R8JrZT4U=
-SIZE (devilutionx-0.4.0pl20190715-10ebca4e.tar.gz) = 1350054
+SHA256 (devilutionx-0.4.0pl20190723-72f65d57.tar.gz) = 13YESHQhAY4y15I8OKjjoyf6pxMEJSCeot84/Qs3Cxg=
+SIZE (devilutionx-0.4.0pl20190723-72f65d57.tar.gz) = 1354368
Index: patches/patch-CMakeLists_txt
===================================================================
RCS file: /cvs/ports/games/devilutionx/patches/patch-CMakeLists_txt,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 patch-CMakeLists_txt
--- patches/patch-CMakeLists_txt 19 Jul 2019 13:42:33 -0000 1.1.1.1
+++ patches/patch-CMakeLists_txt 24 Jul 2019 06:14:21 -0000
@@ -14,7 +14,7 @@ Index: CMakeLists.txt
set(ASAN OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DO_LARGEFILE=0 -Dstat64=stat -Dlstat64=lstat -Dlseek64=lseek -Doff64_t=off_t -Dfstat64=fstat -Dftruncate64=ftruncate")
endif()
-@@ -289,7 +289,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+@@ -290,7 +290,7 @@ if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
# Silence warnings about __int64 alignment hack not always being applicable
target_compile_options(devilutionx PRIVATE -Wno-ignored-attributes)
# Fix: error: cast from pointer to smaller type 'unsigned char' loses information
Index: patches/patch-SourceX_dvlnet_frame_queue_cpp
===================================================================
RCS file: patches/patch-SourceX_dvlnet_frame_queue_cpp
diff -N patches/patch-SourceX_dvlnet_frame_queue_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-SourceX_dvlnet_frame_queue_cpp 24 Jul 2019 06:14:21 -0000
@@ -0,0 +1,22 @@
+$OpenBSD$
+
+nextsize is 8 bytes. framesize_t is 4 bytes. Copy framesize_t to
+nextsize then shift 32 bits to zero out the most significant 32
+bits. This fixes packet_ready().
+
+Index: SourceX/dvlnet/frame_queue.cpp
+--- SourceX/dvlnet/frame_queue.cpp.orig
++++ SourceX/dvlnet/frame_queue.cpp
+@@ -48,7 +48,12 @@ bool frame_queue::packet_ready()
+ if(size() < sizeof(framesize_t))
+ return false;
+ auto szbuf = read(sizeof(framesize_t));
++ #ifdef __LP64__
++ std::memcpy(&nextsize, &szbuf[0], sizeof(framesize_t));
++ nextsize >> 32;
++ #else
+ std::memcpy(&nextsize, &szbuf[0], sizeof(nextsize));
++ #endif
+ if(!nextsize)
+ throw frame_queue_exception();
+ }
Index: patches/patch-Source_list_h
===================================================================
RCS file: patches/patch-Source_list_h
diff -N patches/patch-Source_list_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-Source_list_h 24 Jul 2019 06:14:21 -0000
@@ -0,0 +1,14 @@
+$OpenBSD$
+
+Index: Source/list.h
+--- Source/list.h.orig
++++ Source/list.h
+@@ -154,7 +154,7 @@ void TList<T>::UnlinkAll()
+ {
+ for (;;) {
+ T *node = m_link.Next();
+- if ((int)node <= 0)
++ if ((uintptr_t)node <= 0)
+ break;
+ node->m_Link.Unlink();
+ }
Index: patches/patch-Source_msg_cpp
===================================================================
RCS file: patches/patch-Source_msg_cpp
diff -N patches/patch-Source_msg_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-Source_msg_cpp 24 Jul 2019 06:14:21 -0000
@@ -0,0 +1,44 @@
+$OpenBSD$
+
+This fixes a padding bug.
+
+(char *)&packeta[1] - packeta->dwSpaceLeft doesn't work because it assumes there
+is no padding at the end of TMegaPkt. With padding it started writing a few
+bytes after packeta->data, so the first few bytes were garbage.
+
+The goal is to write to packeta->data at the first available byte, based on
+packeta->dwSpaceLeft. It is safer to calculate starting from packeta->data.
+
+Also, pointers like pNext are 8 bytes long on 64-bit platforms. Should allocate
+8 + 4 + 32000 = 32012.
+
+typedef struct TMegaPkt {^M
+ struct TMegaPkt *pNext;^M
+ DWORD dwSpaceLeft;^M
+ BYTE data[32000];^M
+} TMegaPkt;
+
+Index: Source/msg.cpp
+--- Source/msg.cpp.orig
++++ Source/msg.cpp
+@@ -47,7 +47,7 @@ void msg_send_packet(int pnum, const void *packet, DWO
+ msg_get_next_packet();
+ packeta = sgpCurrPkt;
+ }
+- memcpy((char *)&packeta[1] - packeta->dwSpaceLeft, packet, dwSize);
++ memcpy((char *)(packeta->data + 32000 - packeta->dwSpaceLeft), packet, dwSize);
+ sgpCurrPkt->dwSpaceLeft -= dwSize;
+ }
+
+@@ -55,7 +55,11 @@ TMegaPkt *msg_get_next_packet()
+ {
+ TMegaPkt *result;
+
++ #ifdef __LP64__
++ sgpCurrPkt = (TMegaPkt *)DiabloAllocPtr(32012);
++ #else
+ sgpCurrPkt = (TMegaPkt *)DiabloAllocPtr(32008);
++ #endif
+ sgpCurrPkt->pNext = NULL;
+ sgpCurrPkt->dwSpaceLeft = 32000;
+
Index: patches/patch-Source_nthread_cpp
===================================================================
RCS file: patches/patch-Source_nthread_cpp
diff -N patches/patch-Source_nthread_cpp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-Source_nthread_cpp 24 Jul 2019 06:14:21 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+
+glpMsgTbl stores 64-bit pointers to turn_t variables. This won't fit inside int.
+
+Index: Source/nthread.cpp
+--- Source/nthread.cpp.orig
++++ Source/nthread.cpp
+@@ -11,7 +11,7 @@ static CCritSect sgMemCrit;
+ DWORD gdwDeltaBytesSec;
+ BOOLEAN nthread_should_run;
+ DWORD gdwTurnsInTransit;
+-int glpMsgTbl[MAX_PLRS];
++uintptr_t glpMsgTbl[MAX_PLRS];
+ unsigned int glpNThreadId;
+ char sgbSyncCountdown;
+ int turn_upper_bit;
Index: patches/patch-Source_nthread_h
===================================================================
RCS file: patches/patch-Source_nthread_h
diff -N patches/patch-Source_nthread_h
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-Source_nthread_h 24 Jul 2019 06:14:21 -0000
@@ -0,0 +1,16 @@
+$OpenBSD$
+
+glpMsgTbl stores 64-bit pointers to turn_t variables. This won't fit inside int.
+
+Index: Source/nthread.h
+--- Source/nthread.h.orig
++++ Source/nthread.h
+@@ -7,7 +7,7 @@ extern DWORD gdwMsgLenTbl[MAX_PLRS];
+ extern DWORD gdwDeltaBytesSec;
+ extern BOOLEAN nthread_should_run;
+ extern DWORD gdwTurnsInTransit;
+-extern int glpMsgTbl[MAX_PLRS];
++extern uintptr_t glpMsgTbl[MAX_PLRS];
+ extern unsigned int glpNThreadId;
+ extern int turn_upper_bit;
+ extern BOOLEAN sgbThreadIsRunning;
Index: patches/patch-Source_render_cpp
===================================================================
RCS file: /cvs/ports/games/devilutionx/patches/patch-Source_render_cpp,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 patch-Source_render_cpp
--- patches/patch-Source_render_cpp 19 Jul 2019 13:42:33 -0000 1.1.1.1
+++ patches/patch-Source_render_cpp 24 Jul 2019 06:14:21 -0000
@@ -5,309 +5,309 @@ clang
Index: Source/render.cpp
--- Source/render.cpp.orig
+++ Source/render.cpp
-@@ -164,7 +164,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -161,7 +161,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
} while (i);
break;
case 1: // upper (top transparent), with lighting
-- WorldBoolFlag = (unsigned char)pBuff & 1;
+- WorldBoolFlag = (BYTE)pBuff & 1;
+ WorldBoolFlag = (uintptr_t)pBuff & 1;
xx_32 = 32;
do {
yy_32 = 32;
-@@ -181,7 +181,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -178,7 +178,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
}
if (dst < gpBufEnd)
return;
-- if (((unsigned char)dst & 1) == WorldBoolFlag) {
+- if (((BYTE)dst & 1) == WorldBoolFlag) {
+ if (((uintptr_t)dst & 1) == WorldBoolFlag) {
asm_trans_light_cel_0_2(width, tbl, &dst, &src);
} else {
asm_trans_light_cel_1_3(width, tbl, &dst, &src);
-@@ -238,7 +238,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -235,7 +235,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
} else {
asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src);
}
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
if (xx_32 < 0) {
-@@ -252,7 +252,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -249,7 +249,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
} else {
asm_trans_light_cel_1_3(32 - yy_32, tbl, &dst, &src);
}
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[yy_32 - 800];
+ dst = &dst[yy_32 - (SCREEN_WIDTH + 160)];
yy_32 += 2;
} while (yy_32 != 32);
-@@ -301,7 +301,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -298,7 +298,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
} else {
asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src);
}
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
if (xx_32 < 0) {
-@@ -359,7 +359,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -356,7 +356,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
} while (i);
break;
case 9: // upper (top transparent), without lighting
-- WorldBoolFlag = (unsigned char)pBuff & 1;
+- WorldBoolFlag = (BYTE)pBuff & 1;
+ WorldBoolFlag = (uintptr_t)pBuff & 1;
yy_32 = 32;
LABEL_251:
xx_32 = 32;
-@@ -383,7 +383,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -380,7 +380,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
xx_32 -= width;
if (dst < gpBufEnd)
return;
-- if (((unsigned char)dst & 1) == WorldBoolFlag) {
+- if (((BYTE)dst & 1) == WorldBoolFlag) {
+ if (((uintptr_t)dst & 1) == WorldBoolFlag) {
chk_sh_and = width >> 1;
if (!(width & 1))
goto LABEL_258;
-@@ -775,7 +775,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -772,7 +772,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
} while (i);
break;
case 1: // upper (top transparent), black
-- WorldBoolFlag = (unsigned char)pBuff & 1;
+- WorldBoolFlag = (BYTE)pBuff & 1;
+ WorldBoolFlag = (uintptr_t)pBuff & 1;
xx_32 = 32;
while (1) {
yy_32 = 32;
-@@ -788,7 +788,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
+@@ -785,7 +785,7 @@ void drawTopArchesUpperScreen(BYTE *pBuff)
if (dst < gpBufEnd)
return;
src += width;
-- if (((unsigned char)dst & 1) == WorldBoolFlag) {
+- if (((BYTE)dst & 1) == WorldBoolFlag) {
+ if (((uintptr_t)dst & 1) == WorldBoolFlag) {
chk_sh_and = width >> 1;
if (!(width & 1))
goto LABEL_378;
-@@ -1386,7 +1386,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned
+@@ -1381,7 +1381,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *p
++dst;
--i;
} while (i);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst -= 800;
+ dst -= (SCREEN_WIDTH + 160);
--gpDrawMask;
--yy_32;
-@@ -1471,7 +1471,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned
+@@ -1466,7 +1466,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *p
xx_32 = 30;
while (dst >= gpBufEnd) {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
if (xx_32 < 0) {
-@@ -1480,7 +1480,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned
+@@ -1475,7 +1475,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *p
if (dst < gpBufEnd)
break;
asm_cel_light_edge(32 - yy_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[yy_32 - 800];
+ dst = &dst[yy_32 - (SCREEN_WIDTH + 160)];
yy_32 += 2;
} while (yy_32 != 32);
-@@ -1502,7 +1502,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned
+@@ -1497,7 +1497,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *p
do {
if (dst < gpBufEnd)
break;
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
asm_trans_light_mask(32, tbl, &dst, &src, *gpDrawMask);
- dst -= 800;
+ dst -= (SCREEN_WIDTH + 160);
--gpDrawMask;
-@@ -1516,7 +1516,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned
+@@ -1511,7 +1511,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *p
xx_32 = 30;
while (dst >= gpBufEnd) {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
if (xx_32 < 0) {
-@@ -1526,7 +1526,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, unsigned
+@@ -1521,7 +1521,7 @@ void drawBottomArchesUpperScreen(BYTE *pBuff, DWORD *p
if (dst < gpBufEnd)
break;
asm_trans_light_mask(32, tbl, &dst, &src, *gpDrawMask);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst -= 800;
+ dst -= (SCREEN_WIDTH + 160);
--gpDrawMask;
--yy_32;
-@@ -2107,7 +2107,7 @@ void drawUpperScreen(BYTE *pBuff)
+@@ -2099,7 +2099,7 @@ void drawUpperScreen(BYTE *pBuff)
xx_32 = 30;
while (dst >= gpBufEnd) {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
if (xx_32 < 0) {
-@@ -2116,7 +2116,7 @@ void drawUpperScreen(BYTE *pBuff)
+@@ -2108,7 +2108,7 @@ void drawUpperScreen(BYTE *pBuff)
if (dst < gpBufEnd)
break;
asm_cel_light_edge(32 - yy_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[yy_32 - 800];
+ dst = &dst[yy_32 - (SCREEN_WIDTH + 160)];
yy_32 += 2;
} while (yy_32 != 32);
-@@ -2149,7 +2149,7 @@ void drawUpperScreen(BYTE *pBuff)
+@@ -2141,7 +2141,7 @@ void drawUpperScreen(BYTE *pBuff)
xx_32 = 30;
while (dst >= gpBufEnd) {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
if (xx_32 < 0) {
-@@ -2465,7 +2465,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
+@@ -2454,7 +2454,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
} while (i);
break;
case 1: // lower (top transparent), black
-- WorldBoolFlag = (unsigned char)pBuff & 1;
+- WorldBoolFlag = (BYTE)pBuff & 1;
+ WorldBoolFlag = (uintptr_t)pBuff & 1;
xx_32 = 32;
LABEL_412:
yy_32 = 32;
-@@ -2489,7 +2489,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
+@@ -2478,7 +2478,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
yy_32 -= width;
if (dst < gpBufEnd) {
src += width;
-- if (((unsigned char)dst & 1) == WorldBoolFlag) {
+- if (((BYTE)dst & 1) == WorldBoolFlag) {
+ if (((uintptr_t)dst & 1) == WorldBoolFlag) {
chk_sh_and = width >> 1;
if (!(width & 1))
goto LABEL_420;
-@@ -2895,7 +2895,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
+@@ -2884,7 +2884,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
} while (i);
break;
case 1: // lower (top transparent), with lighting
-- WorldBoolFlag = (unsigned char)pBuff & 1;
+- WorldBoolFlag = (BYTE)pBuff & 1;
+ WorldBoolFlag = (uintptr_t)pBuff & 1;
xx_32 = 32;
do {
yy_32 = 32;
-@@ -2912,7 +2912,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
+@@ -2901,7 +2901,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
}
yy_32 -= width;
if (dst < gpBufEnd) {
-- if (((unsigned char)dst & 1) == WorldBoolFlag) {
+- if (((BYTE)dst & 1) == WorldBoolFlag) {
+ if (((uintptr_t)dst & 1) == WorldBoolFlag) {
asm_trans_light_cel_0_2(width, tbl, &dst, &src);
} else {
asm_trans_light_cel_1_3(width, tbl, &dst, &src);
-@@ -3011,7 +3011,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
+@@ -3000,7 +3000,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
} else {
asm_trans_light_cel_1_3(32 - yy_32, tbl, &dst, &src);
}
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[yy_32 - 800];
+ dst = &dst[yy_32 - (SCREEN_WIDTH + 160)];
yy_32 += 2;
} while (yy_32 != 32);
-@@ -3031,7 +3031,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
+@@ -3020,7 +3020,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
} else {
asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src);
}
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
} while (xx_32 >= 0);
-@@ -3128,7 +3128,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
+@@ -3117,7 +3117,7 @@ void drawTopArchesLowerScreen(BYTE *pBuff)
} else {
asm_trans_light_cel_1_3(32 - xx_32, tbl, &dst, &src);
}
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
} while (xx_32 >= 0);
-@@ -3175,7 +3175,7 @@ LABEL_11:
+@@ -3164,7 +3164,7 @@ LABEL_11:
} while (i);
break;
case 9: // lower (top transparent), without lighting
-- WorldBoolFlag = (unsigned char)pBuff & 1;
+- WorldBoolFlag = (BYTE)pBuff & 1;
+ WorldBoolFlag = (uintptr_t)pBuff & 1;
xx_32 = 32;
while (1) {
yy_32 = 32;
-@@ -3186,7 +3186,7 @@ LABEL_11:
+@@ -3175,7 +3175,7 @@ LABEL_11:
break;
yy_32 -= width;
if (dst < gpBufEnd) {
-- if (((unsigned char)dst & 1) == WorldBoolFlag) {
+- if (((BYTE)dst & 1) == WorldBoolFlag) {
+ if (((uintptr_t)dst & 1) == WorldBoolFlag) {
chk_sh_and = width >> 1;
if (!(width & 1))
goto LABEL_280;
-@@ -4042,7 +4042,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned
+@@ -4029,7 +4029,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *p
}
do {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
} while (xx_32 >= 0);
-@@ -4096,7 +4096,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned
+@@ -4083,7 +4083,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *p
do {
if (dst < gpBufEnd) {
asm_trans_light_mask(32, tbl, &dst, &src, *gpDrawMask);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
} else {
src += 32;
dst += 32;
-@@ -4114,7 +4114,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned
+@@ -4101,7 +4101,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *p
}
do {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
} while (xx_32 >= 0);
-@@ -4396,7 +4396,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, unsigned
+@@ -4383,7 +4383,7 @@ void drawBottomArchesLowerScreen(BYTE *pBuff, DWORD *p
++dst;
--i;
} while (i);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
} else {
src += 32;
dst += 32;
-@@ -4821,7 +4821,7 @@ void drawLowerScreen(BYTE *pBuff)
+@@ -4805,7 +4805,7 @@ void drawLowerScreen(BYTE *pBuff)
}
do {
asm_cel_light_edge(32 - yy_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[yy_32 - 800];
+ dst = &dst[yy_32 - (SCREEN_WIDTH + 160)];
yy_32 += 2;
} while (yy_32 != 32);
-@@ -4834,7 +4834,7 @@ void drawLowerScreen(BYTE *pBuff)
+@@ -4818,7 +4818,7 @@ void drawLowerScreen(BYTE *pBuff)
}
do {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
} while (xx_32 >= 0);
-@@ -4901,7 +4901,7 @@ void drawLowerScreen(BYTE *pBuff)
+@@ -4885,7 +4885,7 @@ void drawLowerScreen(BYTE *pBuff)
}
do {
asm_cel_light_edge(32 - xx_32, tbl, &dst, &src);
-- src += (unsigned char)src & 2;
+- src += (BYTE)src & 2;
+ src += (uintptr_t)src & 2;
- dst = &dst[xx_32 - 800];
+ dst = &dst[xx_32 - (SCREEN_WIDTH + 160)];
xx_32 -= 2;
} while (xx_32 >= 0);
Index: patches/patch-defs_h
===================================================================
RCS file: /cvs/ports/games/devilutionx/patches/patch-defs_h,v
retrieving revision 1.1.1.1
diff -u -p -u -p -r1.1.1.1 patch-defs_h
--- patches/patch-defs_h 19 Jul 2019 13:42:33 -0000 1.1.1.1
+++ patches/patch-defs_h 24 Jul 2019 06:14:21 -0000
@@ -3,7 +3,7 @@ $OpenBSD: patch-defs_h,v 1.1.1.1 2019/07
Index: defs.h
--- defs.h.orig
+++ defs.h
-@@ -151,7 +151,7 @@
+@@ -154,7 +154,7 @@
// Typedef for the function pointer
typedef void (*_PVFV)(void);
I just realized that pasting it mangled the ^M. I have attached it
here. Also, the commit is dated July 23, 2019.
Nam Nguyen writes:
> amd64 multiplayer now works. Here is a diff for the git version as of
> July 19, 2019 from this commit
> (https://github.com/diasurgical/devilutionX/commit/72f65d577124d24ab9f459ef164e31c9ab225b3e).
>
> I added __LP64__ for amd64 specific bits, allowing it to compile on both
> amd64 and i386. Bryan suggested, "You could probably do #ifdef __i386__
> or __amd64__ or more generally, #ifdef __LP64__ I suspect there may be a
> way to fix it so the code works on both 32-bit and 64-bit platforms,
> however."
>
> To test I connected to a game hosted by Bryan, and we played the first
> several rooms in the first dungeon. Also, I was able to build and play
> from i386 and amd64 in the same game.
>
> Brian Callahan writes:
>> We'll sync with releases starting with the next release (presumable
>> 0.5).
>
> I have communicated my findings with upstream
> (https://github.com/diasurgical/devilutionX/issues/191). Multiplayer
> testing is a priority for the next release.
>
> This diff is pasted for consideration in ports, in case multiplayer is
> desired before the next release. Tests and feedback are welcome. Thank
> you to all involved in this port.
>
> Bryan Steele writes:
>
>> On Fri, Jul 19, 2019 at 10:37:59AM -0400, Bryan Steele wrote:
>>> On Thu, Jul 18, 2019 at 07:49:51PM -0400, Brian Callahan wrote:
>>> > Hi ports --
>>> >
>>> > Attached is a new port, games/devilutionx. DevilutionX is an open source
>>> > engine recreation for the original Diablo I game.
>>> >
>>> > ---
>>> > pkg/DESCR:
>>> > DevilutionX is an open source recreation of the game engine used in
>>> > Diablo I, an action role-playing game by Blizzard Entertainment.
>>> >
>>> > While this package and the game engine are open source, one still needs
>>> > to provide the original game assets from Diablo I, which is not open
>>> > source. You will need to purchase the original game to use this package.
>>> > ---
>>> >
>>> > This port is a multi-person effort between myself, thfr@, and brynet@. The
>>> > game works very well on amd64--the underlying engine is claimed to be nearly
>>> > 100% binary identical to the original game. Sadly, multiplayer doesn't work
>>> > on 64-bit platforms, but this is known and hopefully will be fixed at some
>>> > point.
>>> >
>>> > OK?
>>> >
>>> > ~Brian
>>>
>>> I'm obviously ok with this going in, w/ the pkg/README fix from Nam. :-)
>>>
>>> It's unfortunate that we will initially miss out on multiplayer support,
>>> but good that someone is working on the problem, and upstream is aware.
>>>
>>> Hopefully some of these changes can be sent upstream.
>>>
>>> -Bryan.
>>
>> To those of you following along, this is the port that thfr@ used when
>> streaming Diablo last month on OpenBSD.
>>
>> https://www.youtube.com/watch?v=5sBKaqkFev8
No comments:
Post a Comment