daimakaib uses bootleg sprite ram
This commit is contained in:
parent
c1d9183637
commit
9938a5563b
|
@ -358,6 +358,7 @@ INT32 CpsObjGet();
|
|||
INT32 FcrashObjGet();
|
||||
INT32 KodbObjGet();
|
||||
INT32 DinopicObjGet();
|
||||
INT32 DaimakaibObjGet();
|
||||
INT32 WofhObjGet();
|
||||
void CpsObjDrawInit();
|
||||
INT32 Cps1ObjDraw(INT32 nLevelFrom,INT32 nLevelTo);
|
||||
|
|
|
@ -564,6 +564,67 @@ INT32 DinopicObjGet()
|
|||
return 0;
|
||||
}
|
||||
|
||||
INT32 DaimakaibObjGet()
|
||||
{
|
||||
INT32 i;
|
||||
UINT8 *pg, *po;
|
||||
struct ObjFrame* pof;
|
||||
UINT8* Get = NULL;
|
||||
|
||||
pof = of + nGetNext;
|
||||
|
||||
pof->nCount = 0;
|
||||
|
||||
po = pof->Obj;
|
||||
pof->nShiftX = -0x40;
|
||||
pof->nShiftY = -0x10;
|
||||
|
||||
// writes a blank sprite, followed by end of sprite list marker, start at 0x10 to ignore these
|
||||
Get = CpsBootlegSpriteRam + 0x1010;
|
||||
|
||||
if (Get==NULL) return 1;
|
||||
|
||||
// Make a copy of all active sprites in the list
|
||||
for (pg = Get, i = 0; i < nMax; pg += 8, i++) {
|
||||
UINT16* ps = (UINT16*)pg;
|
||||
INT32 n, y, x, a;
|
||||
|
||||
y = BURN_ENDIAN_SWAP_INT16(ps[-1]);
|
||||
|
||||
if (y == 0x8000) { // end of sprite list
|
||||
break;
|
||||
}
|
||||
|
||||
n = BURN_ENDIAN_SWAP_INT16(ps[0]);
|
||||
a = BURN_ENDIAN_SWAP_INT16(ps[1]);
|
||||
x = BURN_ENDIAN_SWAP_INT16(ps[2]);
|
||||
|
||||
n = GfxRomBankMapper(GFXTYPE_SPRITES, n);
|
||||
if (n == -1) continue;
|
||||
|
||||
n |= (y & 0x6000) << 3; // high bits of address
|
||||
|
||||
po[0] = n & 0xff;
|
||||
po[1] = n >> 8;
|
||||
po[2] = a & 0xff;
|
||||
po[3] = a >> 8;
|
||||
po[4] = x & 0xff;
|
||||
po[5] = x >> 8;
|
||||
po[6] = y & 0xff;
|
||||
po[7] = y >> 8;
|
||||
|
||||
pof->nCount++;
|
||||
po += 8;
|
||||
}
|
||||
|
||||
nGetNext++;
|
||||
if (nGetNext >= nFrameCount) {
|
||||
nGetNext = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
INT32 WofhObjGet()
|
||||
{
|
||||
INT32 i;
|
||||
|
|
|
@ -11411,16 +11411,20 @@ static INT32 DaimakaibInit()
|
|||
Ghouls = 1;
|
||||
Port6SoundWrite = 1;
|
||||
Cps1OverrideLayers = 1;
|
||||
Cps1DisableBgHi = 1;
|
||||
Cps1ObjGetCallbackFunction = DaimakaibObjGet;
|
||||
Cps1ObjDrawCallbackFunction = FcrashObjDraw;
|
||||
CpsMemScanCallbackFunction = CpsBootlegSpriteRamScanCallback;
|
||||
|
||||
INT32 nRet = DrvInit();
|
||||
|
||||
CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x4000);
|
||||
|
||||
SekOpen(0);
|
||||
SekMapHandler(1, 0x880000, 0x88ffff, SM_READ | SM_WRITE);
|
||||
SekMapMemory(CpsBootlegSpriteRam, 0x990000, 0x991fff, SM_RAM);
|
||||
SekMapHandler(1, 0x880000, 0x88ffff, SM_WRITE);
|
||||
SekSetWriteWordHandler(1, Daimakaib88WriteWord);
|
||||
SekMapHandler(2, 0x980000, 0x98ffff, SM_READ | SM_WRITE);
|
||||
SekMapHandler(2, 0x980000, 0x98ffff, SM_WRITE);
|
||||
SekSetWriteWordHandler(2, Daimakaib98WriteWord);
|
||||
// There are also writes in the 0x99xxxx area (unknown)
|
||||
SekClose();
|
||||
|
||||
return nRet;
|
||||
|
|
Loading…
Reference in New Issue