Simplify bootleg sprite rendering, fix sprites in punipic sets (now working, with glitches in intro, which may happen on hardware?)

This commit is contained in:
Barry Harris 2012-04-13 19:28:50 +00:00
parent f7f0bd95d8
commit 80ef73ac63
2 changed files with 24 additions and 40 deletions

View File

@ -541,18 +541,15 @@ INT32 FcrashObjDraw(INT32 nLevelFrom,INT32 nLevelTo)
// Go through all the Objs // Go through all the Objs
for (i=0; i<pof->nCount; i++,ps+=nPsAdd) { for (i=0; i<pof->nCount; i++,ps+=nPsAdd) {
INT32 x,y,n,a,bx,by,dx,dy; INT32 nFlip; INT32 x,y,n,a; INT32 nFlip;
n = BURN_ENDIAN_SWAP_INT16(ps[0]); n = BURN_ENDIAN_SWAP_INT16(ps[0]);
y = BURN_ENDIAN_SWAP_INT16(ps[-1]); y = BURN_ENDIAN_SWAP_INT16(ps[-1]);
x = BURN_ENDIAN_SWAP_INT16(ps[2]); x = BURN_ENDIAN_SWAP_INT16(ps[2]);
a = BURN_ENDIAN_SWAP_INT16(ps[1]); a = BURN_ENDIAN_SWAP_INT16(ps[1]);
bx = 1;
by = 1;
x &= 0x1ff; x &= 0x1ff;
y &= 0xff; y &= 0x1ff;
x -= 16; x -= 16;
y = 224 - y; y = 224 - y;
@ -563,29 +560,19 @@ INT32 FcrashObjDraw(INT32 nLevelFrom,INT32 nLevelTo)
nFlip=(a>>5)&3; nFlip=(a>>5)&3;
// Take care with tiles if the sprite goes off the screen // Take care with tiles if the sprite goes off the screen
if (x<0 || y<0 || x+(bx<<4)>384 || y+(by<<4)>224) { if (x<0 || y<0 || x+(1<<4)>384 || y+(1<<4)>224) {
nCpstType=CTT_16X16 | CTT_CARE; nCpstType=CTT_16X16 | CTT_CARE;
} else { } else {
nCpstType=CTT_16X16; nCpstType=CTT_16X16;
} }
nCpstFlip=nFlip; nCpstFlip=nFlip;
for (dy=0;dy<by;dy++) {
for (dx=0;dx<bx;dx++) {
INT32 ex,ey;
if (nFlip&1) ex=(bx-dx-1);
else ex=dx;
if (nFlip&2) ey=(by-dy-1);
else ey=dy;
nCpstX=x; nCpstX=x;
nCpstY=y; nCpstY=y;
nCpstTile = n; nCpstTile = n;
nCpstTile <<= 7; nCpstTile <<= 7;
CpstOneObjDoX[0](); CpstOneObjDoX[0]();
} }
}
}
return 0; return 0;
} }

View File

@ -11668,11 +11668,10 @@ static INT32 PunipicInit()
CpsLoadTilesBootleg(CpsGfx + 0x000000, 4); CpsLoadTilesBootleg(CpsGfx + 0x000000, 4);
CpsLoadTilesBootleg(CpsGfx + 0x200000, 8); CpsLoadTilesBootleg(CpsGfx + 0x200000, 8);
CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x2000); CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x4000);
SekOpen(0); SekOpen(0);
SekMapMemory(CpsBootlegSpriteRam, 0x990000, 0x991fff, SM_RAM); SekMapMemory(CpsBootlegSpriteRam, 0x990000, 0x993fff, SM_RAM);
SekMapMemory(CpsBootlegSpriteRam, 0x992000, 0x993fff, SM_RAM);
SekMapHandler(1, 0xf18000, 0xf19fff, SM_READ); SekMapHandler(1, 0xf18000, 0xf19fff, SM_READ);
SekSetReadByteHandler(1, PunipicF18Read); SekSetReadByteHandler(1, PunipicF18Read);
SekMapHandler(2, 0x980000, 0x980fff, SM_WRITE); SekMapHandler(2, 0x980000, 0x980fff, SM_WRITE);
@ -11696,11 +11695,10 @@ static INT32 Punipic2Init()
memset(CpsGfx, 0, nCpsGfxLen); memset(CpsGfx, 0, nCpsGfxLen);
CpsLoadTilesPunipic2(CpsGfx, 4); CpsLoadTilesPunipic2(CpsGfx, 4);
CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x2000); CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x4000);
SekOpen(0); SekOpen(0);
SekMapMemory(CpsBootlegSpriteRam, 0x990000, 0x991fff, SM_RAM); SekMapMemory(CpsBootlegSpriteRam, 0x990000, 0x993fff, SM_RAM);
SekMapMemory(CpsBootlegSpriteRam, 0x992000, 0x993fff, SM_RAM);
SekMapHandler(1, 0xf18000, 0xf19fff, SM_READ); SekMapHandler(1, 0xf18000, 0xf19fff, SM_READ);
SekSetReadByteHandler(1, PunipicF18Read); SekSetReadByteHandler(1, PunipicF18Read);
SekMapHandler(2, 0x980000, 0x980fff, SM_WRITE); SekMapHandler(2, 0x980000, 0x980fff, SM_WRITE);
@ -11724,11 +11722,10 @@ static INT32 Punipic3Init()
memset(CpsGfx, 0, nCpsGfxLen); memset(CpsGfx, 0, nCpsGfxLen);
CpsLoadTilesHack160(CpsGfx, 4); CpsLoadTilesHack160(CpsGfx, 4);
CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x2000); CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x4000);
SekOpen(0); SekOpen(0);
SekMapMemory(CpsBootlegSpriteRam, 0x990000, 0x991fff, SM_RAM); SekMapMemory(CpsBootlegSpriteRam, 0x990000, 0x993fff, SM_RAM);
SekMapMemory(CpsBootlegSpriteRam, 0x992000, 0x993fff, SM_RAM);
SekMapHandler(1, 0xf18000, 0xf19fff, SM_READ); SekMapHandler(1, 0xf18000, 0xf19fff, SM_READ);
SekSetReadByteHandler(1, PunipicF18Read); SekSetReadByteHandler(1, PunipicF18Read);
SekMapHandler(2, 0x980000, 0x980fff, SM_WRITE); SekMapHandler(2, 0x980000, 0x980fff, SM_WRITE);
@ -13893,31 +13890,31 @@ struct BurnDriver BurnDrvCpsPunisherj = {
&CpsRecalcPal, 0x1000, 384, 224, 4, 3 &CpsRecalcPal, 0x1000, 384, 224, 4, 3
}; };
struct BurnDriverD BurnDrvCpsPunipic = { struct BurnDriver BurnDrvCpsPunipic = {
"punipic", "punisher", NULL, NULL, "1993", "punipic", "punisher", NULL, NULL, "1993",
"The Punisher (bootleg with PIC16c57, set 1)\0", NULL, "bootleg", "CPS1", "The Punisher (bootleg with PIC16c57, set 1)\0", "No sound", "bootleg", "CPS1",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, PunipicRomInfo, PunipicRomName, NULL, NULL, PunisherInputInfo, PunisherDIPInfo, NULL, PunipicRomInfo, PunipicRomName, NULL, NULL, PunisherInputInfo, PunisherDIPInfo,
PunipicInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan, PunipicInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3 &CpsRecalcPal, 0x1000, 384, 224, 4, 3
}; };
struct BurnDriverD BurnDrvCpsPunipic2 = { struct BurnDriver BurnDrvCpsPunipic2 = {
"punipic2", "punisher", NULL, NULL, "1993", "punipic2", "punisher", NULL, NULL, "1993",
"The Punisher (bootleg with PIC16c57, set 2)\0", NULL, "bootleg", "CPS1", "The Punisher (bootleg with PIC16c57, set 2)\0", "No sound", "bootleg", "CPS1",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, Punipic2RomInfo, Punipic2RomName, NULL, NULL, PunisherInputInfo, PunisherDIPInfo, NULL, Punipic2RomInfo, Punipic2RomName, NULL, NULL, PunisherInputInfo, PunisherDIPInfo,
Punipic2Init, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan, Punipic2Init, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3 &CpsRecalcPal, 0x1000, 384, 224, 4, 3
}; };
struct BurnDriverD BurnDrvCpsPunipic3 = { struct BurnDriver BurnDrvCpsPunipic3 = {
"punipic3", "punisher", NULL, NULL, "1993", "punipic3", "punisher", NULL, NULL, "1993",
"The Punisher (bootleg with PIC16c57, set 3)\0", NULL, "bootleg", "CPS1", "The Punisher (bootleg with PIC16c57, set 3)\0", "No sound", "bootleg", "CPS1",
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0, BDF_GAME_WORKING | BDF_CLONE | BDF_BOOTLEG, 2, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, Punipic3RomInfo, Punipic3RomName, NULL, NULL, PunisherInputInfo, PunisherDIPInfo, NULL, Punipic3RomInfo, Punipic3RomName, NULL, NULL, PunisherInputInfo, PunisherDIPInfo,
Punipic3Init, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan, Punipic3Init, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3 &CpsRecalcPal, 0x1000, 384, 224, 4, 3