diff --git a/src/gDP.cpp b/src/gDP.cpp index 36d4bd3a..71eae00a 100644 --- a/src/gDP.cpp +++ b/src/gDP.cpp @@ -626,10 +626,14 @@ void gDPLoadTLUT( u32 tile, u32 uls, u32 ult, u32 lrs, u32 lrt ) DebugMsg(DEBUG_NORMAL | DEBUG_ERROR, "gDPLoadTLUT wrong tile tmem addr: tile[%d].tmem=%04x;\n", tile, gDP.tiles[tile].tmem); return; } - const u16 count = (u16)((gDP.tiles[tile].lrs - gDP.tiles[tile].uls + 1) * (gDP.tiles[tile].lrt - gDP.tiles[tile].ult + 1)); + u16 count = (u16)((gDP.tiles[tile].lrs - gDP.tiles[tile].uls + 1) * (gDP.tiles[tile].lrt - gDP.tiles[tile].ult + 1)); u32 address = gDP.textureImage.address + gDP.tiles[tile].ult * gDP.textureImage.bpl + (gDP.tiles[tile].uls << gDP.textureImage.size >> 1); u16 pal = (u16)((gDP.tiles[tile].tmem - 256) >> 4); u16 *dest = (u16*)&TMEM[gDP.tiles[tile].tmem]; + + // Workaround for possible game/emulator bug (see bug #1250) + if (pal != 0) + count = 16; int i = 0; while (i < count) {