Fix sky skipper sprites

This commit is contained in:
iq_132 2015-08-24 02:35:27 +00:00
parent 2e9e221835
commit d0c24f35ed
1 changed files with 15 additions and 13 deletions

View File

@ -47,7 +47,7 @@ static UINT8 m_prot_shift;
static UINT8 m_invertmask = 0xff; static UINT8 m_invertmask = 0xff;
static INT32 bgbitmapwh; // 512 for popeye, 1024 for skyskipr static INT32 bgbitmapwh; // 512 for popeye, 1024 for skyskipr
static UINT8 skyskiprmode; static UINT8 skyskiprmode = 0;
static UINT8 DrvJoy1[8]; static UINT8 DrvJoy1[8];
static UINT8 DrvJoy2[8]; static UINT8 DrvJoy2[8];
@ -491,7 +491,7 @@ static INT32 MemIndex()
return 0; return 0;
} }
UINT8 __fastcall port_read(UINT16 port) static UINT8 __fastcall port_read(UINT16 port)
{ {
switch (port & 0xff) { switch (port & 0xff) {
case 0x00: return DrvInput[0]; case 0x00: return DrvInput[0];
@ -502,7 +502,7 @@ UINT8 __fastcall port_read(UINT16 port)
return 0xff; return 0xff;
} }
void __fastcall port_write(UINT16 port, UINT8 data) static void __fastcall port_write(UINT16 port, UINT8 data)
{ {
switch (port & 0xff) { switch (port & 0xff) {
case 0x00: case 0x00:
@ -574,7 +574,7 @@ static INT32 DrvInit()
if (BurnLoadRom(DrvTempRom + 0x1000, 9, 1)) return 1; if (BurnLoadRom(DrvTempRom + 0x1000, 9, 1)) return 1;
if (BurnLoadRom(DrvTempRom + 0x2000,10, 1)) return 1; if (BurnLoadRom(DrvTempRom + 0x2000,10, 1)) return 1;
if (BurnLoadRom(DrvTempRom + 0x3000,11, 1)) return 1; if (BurnLoadRom(DrvTempRom + 0x3000,11, 1)) return 1;
GfxDecode(0x200, 2, 16, 16, SpritePlaneOffsets, SpriteXOffsets, SpriteYOffsets, 0x80, DrvTempRom, DrvSpriteGFX); GfxDecode(0x100 /*((0x4000*8)/2)/(16*16))*/, 2, 16, 16, SpritePlaneOffsets, SpriteXOffsets, SpriteYOffsets, 0x80, DrvTempRom, DrvSpriteGFX);
if (BurnLoadRom(DrvColorPROM + 0x0000, 12, 1)) return 1; if (BurnLoadRom(DrvColorPROM + 0x0000, 12, 1)) return 1;
if (BurnLoadRom(DrvColorPROM + 0x0020, 13, 1)) return 1; if (BurnLoadRom(DrvColorPROM + 0x0020, 13, 1)) return 1;
@ -713,6 +713,7 @@ static void draw_background_skyskipr()
static void draw_sprites() static void draw_sprites()
{ {
UINT8 *spriteram = DrvSpriteRAM; UINT8 *spriteram = DrvSpriteRAM;
INT32 sprmask = ((skyskiprmode) ? 0xff : 0x1ff);
for (INT32 offs = 0; offs < 0x27b; offs += 4) for (INT32 offs = 0; offs < 0x27b; offs += 4)
{ {
@ -739,22 +740,23 @@ static void draw_sprites()
if (sx <= -6) sx += 512; if (sx <= -6) sx += 512;
code = (code ^ 0x1ff) & sprmask;
if (flipy) { // we need a macro for this -dink if (flipy) { // we need a macro for this -dink
if (flipx) { if (flipx) {
Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, code ^ 0x1ff, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, code, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX);
Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, code ^ 0x1ff, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_FlipXY_Clip(pTransDraw, code, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX);
} else { } else {
Render16x16Tile_Mask_FlipY_Clip(pTransDraw, code ^ 0x1ff, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_FlipY_Clip(pTransDraw, code, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX);
Render16x16Tile_Mask_FlipY_Clip(pTransDraw, code ^ 0x1ff, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_FlipY_Clip(pTransDraw, code, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX);
} }
} else { } else {
if (flipx) { if (flipx) {
Render16x16Tile_Mask_FlipX_Clip(pTransDraw, code ^ 0x1ff, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_FlipX_Clip(pTransDraw, code, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX);
Render16x16Tile_Mask_FlipX_Clip(pTransDraw, code ^ 0x1ff, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_FlipX_Clip(pTransDraw, code, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX);
} else { } else {
Render16x16Tile_Mask_Clip(pTransDraw, code ^ 0x1ff, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_Clip(pTransDraw, code, sx, sy, color, 2, 0, 0x200, DrvSpriteGFX);
Render16x16Tile_Mask_Clip(pTransDraw, code ^ 0x1ff, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX); Render16x16Tile_Mask_Clip(pTransDraw, code, sx-512, sy, color, 2, 0, 0x200, DrvSpriteGFX);
} }
} }
} }
@ -772,7 +774,7 @@ static INT32 DrvDraw()
draw_background_skyskipr(); draw_background_skyskipr();
draw_sprites(); draw_sprites();
draw_chars(); draw_chars();
BurnTransferCopy(DrvPalette); BurnTransferCopy(DrvPalette);