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
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 <bcal...@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);