summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/konami/k053246_k053247_k055673.cpp490
-rw-r--r--src/mame/konami/k053246_k053247_k055673.h2
-rw-r--r--src/mame/konami/mystwarr.cpp2
-rw-r--r--src/mame/konami/mystwarr_v.cpp26
4 files changed, 173 insertions, 347 deletions
diff --git a/src/mame/konami/k053246_k053247_k055673.cpp b/src/mame/konami/k053246_k053247_k055673.cpp
index 4e5545c3786..f633521dc68 100644
--- a/src/mame/konami/k053246_k053247_k055673.cpp
+++ b/src/mame/konami/k053246_k053247_k055673.cpp
@@ -409,9 +409,6 @@ void k053247_device::k053247_sprites_draw_common(BitmapClass &bitmap, const rect
/* non-gx only */
primask,shadow,drawmode_table,shadowmode_table,shdmask
);
-
-
-
} // end of sprite-list loop
#undef NUM_SPRITES
}
@@ -441,46 +438,18 @@ void k053247_device::k053247_sprites_draw(bitmap_rgb32 &bitmap, const rectangle
void k053247_device::zdrawgfxzoom32GP(
bitmap_rgb32 &bitmap, const rectangle &cliprect,
- u32 code, u32 color, int flipx, int flipy, int sx, int sy,
+ u32 code, u32 color, bool flipx, bool flipy, int sx, int sy,
int scalex, int scaley, int alpha, int drawmode, int zcode, int pri, u8* gx_objzbuf, u8* gx_shdzbuf)
{
-#define FP 19
-#define FPONE (1<<FP)
-#define FPHALF (1<<(FP-1))
-#define FPENT 0
-
- // inner loop
- const u8 *src_ptr;
- int src_x;
- int eax, ecx;
- int src_fx, src_fdx;
- int shdpen;
- u8 z8 = 0, p8 = 0;
- u8 *ozbuf_ptr;
- u8 *szbuf_ptr;
- const pen_t *pal_base;
- const pen_t *shd_base;
- u32 *dst_ptr;
-
- // outter loop
- int src_fby, src_fdy, src_fbx;
- const u8 *src_base;
- int dst_w, dst_h;
-
- // one-time
- int nozoom, granularity;
- int src_fw, src_fh;
- int dst_minx, dst_maxx, dst_miny, dst_maxy;
- int dst_skipx, dst_skipy, dst_x, dst_y, dst_lastx, dst_lasty;
- int src_pitch, dst_pitch;
-
+ constexpr int FP = 19;
+ constexpr int FPENT = 0;
// cull illegal and transparent objects
if (!scalex || !scaley) return;
// find shadow pens and cull invisible shadows
- granularity = shdpen = m_gfx->granularity();
- shdpen--;
+ const u16 granularity = m_gfx->granularity();
+ int shdpen = granularity - 1;
if (zcode >= 0)
{
@@ -496,30 +465,28 @@ void k053247_device::zdrawgfxzoom32GP(
if (alpha >= 255) drawmode &= ~2;
}
+ // cull off-screen objects
+ if (sx > cliprect.max_x || sy > cliprect.max_y) return;
+
// fill internal data structure with default values
- ozbuf_ptr = gx_objzbuf;
- szbuf_ptr = gx_shdzbuf;
-
- src_pitch = 16;
- src_fw = 16;
- src_fh = 16;
- src_base = m_gfx->get_data(code % m_gfx->elements());
-
- pal_base = palette().pens() + m_gfx->colorbase() + (color % m_gfx->colors()) * granularity;
- shd_base = palette().shadow_table();
-
- dst_ptr = &bitmap.pix(0);
- dst_pitch = bitmap.rowpixels();
- dst_minx = cliprect.min_x;
- dst_maxx = cliprect.max_x;
- dst_miny = cliprect.min_y;
- dst_maxy = cliprect.max_y;
- dst_x = sx;
- dst_y = sy;
+ u8 *ozbuf_ptr = gx_objzbuf;
+ u8 *szbuf_ptr = gx_shdzbuf;
- // cull off-screen objects
- if (dst_x > dst_maxx || dst_y > dst_maxy) return;
- nozoom = (scalex == 0x10000 && scaley == 0x10000);
+ const u8 *src_base = m_gfx->get_data(code % m_gfx->elements());
+
+ const pen_t *pal_base = palette().pens() + m_gfx->colorbase() + (color % m_gfx->colors()) * granularity;
+ const pen_t *shd_base = palette().shadow_table();
+
+ u32 *dst_ptr = &bitmap.pix(0);
+ const int dst_pitch = bitmap.rowpixels();
+ int dst_x = sx;
+ int dst_y = sy;
+
+ int dst_w, dst_h;
+ int src_fdx, src_fdy;
+ int src_pitch = 16, src_fw = 16, src_fh = 16;
+
+ const bool nozoom = (scalex == 0x10000 && scaley == 0x10000);
if (nozoom)
{
dst_h = dst_w = 16;
@@ -536,18 +503,31 @@ void k053247_device::zdrawgfxzoom32GP(
src_fdx = src_fw / dst_w;
src_fdy = src_fh / dst_h;
}
- dst_lastx = dst_x + dst_w - 1;
- if (dst_lastx < dst_minx) return;
- dst_lasty = dst_y + dst_h - 1;
- if (dst_lasty < dst_miny) return;
+
+ const int dst_lastx = dst_x + dst_w - 1;
+ const int dst_lasty = dst_y + dst_h - 1;
+ if (dst_lastx < cliprect.min_x || dst_lasty < cliprect.min_y) return;
// clip destination
- dst_skipx = 0;
- eax = dst_minx; if ((eax -= dst_x) > 0) { dst_skipx = eax; dst_w -= eax; dst_x = dst_minx; }
- eax = dst_lastx; if ((eax -= dst_maxx) > 0) dst_w -= eax;
- dst_skipy = 0;
- eax = dst_miny; if ((eax -= dst_y) > 0) { dst_skipy = eax; dst_h -= eax; dst_y = dst_miny; }
- eax = dst_lasty; if ((eax -= dst_maxy) > 0) dst_h -= eax;
+ int dst_skipx = 0;
+ if (int delta_min_x = cliprect.min_x - dst_x; delta_min_x > 0)
+ {
+ dst_skipx = delta_min_x;
+ dst_w -= delta_min_x;
+ dst_x = cliprect.min_x;
+ }
+ if (int delta_max_x = dst_lastx - cliprect.max_x; delta_max_x > 0) dst_w -= delta_max_x;
+
+ int dst_skipy = 0;
+ if (int delta_min_y = cliprect.min_y - dst_y; delta_min_y > 0)
+ {
+ dst_skipy = delta_min_y;
+ dst_h -= delta_min_y;
+ dst_y = cliprect.min_y;
+ }
+ if (int delta_max_y = dst_lasty - cliprect.max_y; delta_max_y > 0) dst_h -= delta_max_y;
+
+ int src_fby, src_fbx;
// calculate zoom factors and clip source
if (nozoom)
@@ -564,14 +544,17 @@ void k053247_device::zdrawgfxzoom32GP(
src_fby += dst_skipy * src_fdy;
// adjust insertion points and pre-entry constants
- eax = (dst_y - dst_miny) * GX_ZBUFW + (dst_x - dst_minx) + dst_w;
- z8 = (u8)zcode;
- p8 = (u8)pri;
- ozbuf_ptr += eax;
- szbuf_ptr += eax << 1;
+ const int offset = (dst_y - cliprect.min_y) * GX_ZBUFW + (dst_x - cliprect.min_x) + dst_w;
+ ozbuf_ptr += offset;
+ szbuf_ptr += offset << 1;
+ const u8 z8 = (u8)zcode;
+ const u8 p8 = (u8)pri;
dst_ptr += dst_y * dst_pitch + dst_x + dst_w;
dst_w = -dst_w;
+ int src_fx, src_x, ecx;
+ const u8 *src_ptr;
+
if (!nozoom)
{
ecx = src_fby; src_fby += src_fdy;
@@ -585,16 +568,43 @@ void k053247_device::zdrawgfxzoom32GP(
{
do {
do {
- eax = src_ptr[src_x];
- src_x = src_fx;
+ const u8 pal_idx = src_ptr[src_x];
+ src_x = src_fx >> FP;
+ src_fx += src_fdx;
+ if (!pal_idx || pal_idx >= shdpen) continue;
+ dst_ptr[ecx] = pal_base[pal_idx];
+ }
+ while (++ecx);
+
+ ecx = src_fby; src_fby += src_fdy;
+ dst_ptr += dst_pitch;
+ ecx >>= FP; src_fx = src_fbx;
+ src_x = src_fbx; src_fx += src_fdx;
+ ecx <<= 4; src_ptr = src_base;
+ src_x >>= FP; src_ptr += ecx;
+ ecx = dst_w;
+ }
+ while (--dst_h);
+ }
+ else if (drawmode < 4)
+ {
+ // 0: all pens solid
+ // 1: solid pens only
+ // 2: all pens solid with alpha blending
+ // 3: solid pens only with alpha blending
+ do {
+ do {
+ const u8 pal_idx = src_ptr[src_x];
+ src_x = src_fx >> FP;
src_fx += src_fdx;
- src_x >>= FP;
- if (!eax || eax >= shdpen) continue;
- dst_ptr [ecx] = pal_base[eax];
+ if (!pal_idx || (drawmode & 0b01 && pal_idx >= shdpen) || ozbuf_ptr[ecx] < z8) continue;
+ ozbuf_ptr[ecx] = z8;
+ dst_ptr[ecx] = (drawmode & 0b10) ? alpha_blend_r32(dst_ptr[ecx], pal_base[pal_idx], alpha) : pal_base[pal_idx];
}
while (++ecx);
ecx = src_fby; src_fby += src_fdy;
+ ozbuf_ptr += GX_ZBUFW;
dst_ptr += dst_pitch;
ecx >>= FP; src_fx = src_fbx;
src_x = src_fbx; src_fx += src_fdx;
@@ -606,144 +616,35 @@ void k053247_device::zdrawgfxzoom32GP(
}
else
{
- switch (drawmode)
- {
- case 0: // all pens solid
- do {
- do {
- eax = src_ptr[src_x];
- src_x = src_fx;
- src_fx += src_fdx;
- src_x >>= FP;
- if (!eax || ozbuf_ptr[ecx] < z8) continue;
- eax = pal_base[eax];
- ozbuf_ptr[ecx] = z8;
- dst_ptr [ecx] = eax;
- }
- while (++ecx);
-
- ecx = src_fby; src_fby += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx >>= FP; src_fx = src_fbx;
- src_x = src_fbx; src_fx += src_fdx;
- ecx <<= 4; src_ptr = src_base;
- src_x >>= FP; src_ptr += ecx;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 1: // solid pens only
- do {
- do {
- eax = src_ptr[src_x];
- src_x = src_fx;
- src_fx += src_fdx;
- src_x >>= FP;
- if (!eax || eax >= shdpen || ozbuf_ptr[ecx] < z8) continue;
- eax = pal_base[eax];
- ozbuf_ptr[ecx] = z8;
- dst_ptr [ecx] = eax;
- }
- while (++ecx);
-
- ecx = src_fby; src_fby += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx >>= FP; src_fx = src_fbx;
- src_x = src_fbx; src_fx += src_fdx;
- ecx <<= 4; src_ptr = src_base;
- src_x >>= FP; src_ptr += ecx;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 2: // all pens solid with alpha blending
- do {
- do {
- eax = src_ptr[src_x];
- src_x = src_fx;
- src_fx += src_fdx;
- src_x >>= FP;
- if (!eax || ozbuf_ptr[ecx] < z8) continue;
- ozbuf_ptr[ecx] = z8;
-
- dst_ptr[ecx] = alpha_blend_r32(pal_base[eax], dst_ptr[ecx], alpha);
- }
- while (++ecx);
-
- ecx = src_fby; src_fby += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx >>= FP; src_fx = src_fbx;
- src_x = src_fbx; src_fx += src_fdx;
- ecx <<= 4; src_ptr = src_base;
- src_x >>= FP; src_ptr += ecx;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 3: // solid pens only with alpha blending
- do {
- do {
- eax = src_ptr[src_x];
- src_x = src_fx;
- src_fx += src_fdx;
- src_x >>= FP;
- if (!eax || eax >= shdpen || ozbuf_ptr[ecx] < z8) continue;
- ozbuf_ptr[ecx] = z8;
-
- dst_ptr[ecx] = alpha_blend_r32(pal_base[eax], dst_ptr[ecx], alpha);
- }
- while (++ecx);
-
- ecx = src_fby; src_fby += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx >>= FP; src_fx = src_fbx;
- src_x = src_fbx; src_fx += src_fdx;
- ecx <<= 4; src_ptr = src_base;
- src_x >>= FP; src_ptr += ecx;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 4: // shadow pens only
- do {
- do {
- eax = src_ptr[src_x];
- src_x = src_fx;
- src_fx += src_fdx;
- src_x >>= FP;
- if (eax < shdpen || szbuf_ptr[ecx*2] < z8 || szbuf_ptr[ecx*2+1] <= p8) continue;
- rgb_t pix = dst_ptr[ecx];
- szbuf_ptr[ecx*2] = z8;
- szbuf_ptr[ecx*2+1] = p8;
-
- // the shadow tables are 15-bit lookup tables which accept RGB15... lossy, nasty, yuck!
- dst_ptr[ecx] = shd_base[pix.as_rgb15()];
- //dst_ptr[ecx] =(eax>>3&0x001f);lend_r32(eax, 0x00000000, 128);
- }
- while (++ecx);
-
- ecx = src_fby; src_fby += src_fdy;
- szbuf_ptr += (GX_ZBUFW<<1);
- dst_ptr += dst_pitch;
- ecx >>= FP; src_fx = src_fbx;
- src_x = src_fbx; src_fx += src_fdx;
- ecx <<= 4; src_ptr = src_base;
- src_x >>= FP; src_ptr += ecx;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
- } // switch (drawmode)
- } // if (zcode < 0)
- } // if (!nozoom)
+ // 4: shadow pens only
+ do {
+ do {
+ const u8 pal_idx = src_ptr[src_x];
+ src_x = src_fx >> FP;
+ src_fx += src_fdx;
+ if (pal_idx < shdpen || szbuf_ptr[ecx*2] < z8 || szbuf_ptr[ecx*2+1] <= p8) continue;
+ rgb_t pix = dst_ptr[ecx];
+ szbuf_ptr[ecx*2] = z8;
+ szbuf_ptr[ecx*2+1] = p8;
+
+ // the shadow tables are 15-bit lookup tables which accept RGB15... lossy, nasty, yuck!
+ dst_ptr[ecx] = shd_base[pix.as_rgb15()];
+ //dst_ptr[ecx] =(eax>>3&0x001f);lend_r32(eax, 0x00000000, 128);
+ }
+ while (++ecx);
+
+ ecx = src_fby; src_fby += src_fdy;
+ szbuf_ptr += (GX_ZBUFW<<1);
+ dst_ptr += dst_pitch;
+ ecx >>= FP; src_fx = src_fbx;
+ src_x = src_fbx; src_fx += src_fdx;
+ ecx <<= 4; src_ptr = src_base;
+ src_x >>= FP; src_ptr += ecx;
+ ecx = dst_w;
+ }
+ while (--dst_h);
+ }
+ } // if (!nozoom)
else
{
src_ptr = src_base + (src_fby<<4) + src_fbx;
@@ -754,14 +655,37 @@ void k053247_device::zdrawgfxzoom32GP(
{
do {
do {
- eax = *src_ptr;
+ const u8 pal_idx = *src_ptr;
+ src_ptr += src_fdx;
+ if (!pal_idx || pal_idx >= shdpen) continue;
+ dst_ptr[ecx] = pal_base[pal_idx];
+ }
+ while (++ecx);
+
+ src_ptr += src_fdy;
+ dst_ptr += dst_pitch;
+ ecx = dst_w;
+ }
+ while (--dst_h);
+ }
+ else if (drawmode < 4)
+ {
+ // 0: all pens solid
+ // 1: solid pens only
+ // 2: all pens solid with alpha blending
+ // 3: solid pens only with alpha blending
+ do {
+ do {
+ const u8 pal_idx = *src_ptr;
src_ptr += src_fdx;
- if (!eax || eax >= shdpen) continue;
- dst_ptr[ecx] = pal_base[eax];
+ if (!pal_idx || (drawmode & 0b01 && pal_idx >= shdpen) || ozbuf_ptr[ecx] < z8) continue;
+ ozbuf_ptr[ecx] = z8;
+ dst_ptr[ecx] = (drawmode & 0b10) ? alpha_blend_r32(dst_ptr[ecx], pal_base[pal_idx], alpha) : pal_base[pal_idx];
}
while (++ecx);
src_ptr += src_fdy;
+ ozbuf_ptr += GX_ZBUFW;
dst_ptr += dst_pitch;
ecx = dst_w;
}
@@ -769,117 +693,29 @@ void k053247_device::zdrawgfxzoom32GP(
}
else
{
- switch (drawmode)
- {
- case 0: // all pens solid
- do {
- do {
- eax = *src_ptr;
- src_ptr += src_fdx;
- if (!eax || ozbuf_ptr[ecx] < z8) continue;
- eax = pal_base[eax];
- ozbuf_ptr[ecx] = z8;
- dst_ptr[ecx] = eax;
- }
- while (++ecx);
-
- src_ptr += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 1: // solid pens only
- do {
- do {
- eax = *src_ptr;
- src_ptr += src_fdx;
- if (!eax || eax >= shdpen || ozbuf_ptr[ecx] < z8) continue;
- eax = pal_base[eax];
- ozbuf_ptr[ecx] = z8;
- dst_ptr[ecx] = eax;
- }
- while (++ecx);
-
- src_ptr += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 2: // all pens solid with alpha blending
- do {
- do {
- eax = *src_ptr;
- src_ptr += src_fdx;
- if (!eax || ozbuf_ptr[ecx] < z8) continue;
- ozbuf_ptr[ecx] = z8;
-
- dst_ptr[ecx] = alpha_blend_r32(pal_base[eax], dst_ptr[ecx], alpha);
- }
- while (++ecx);
-
- src_ptr += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 3: // solid pens only with alpha blending
- do {
- do {
- eax = *src_ptr;
- src_ptr += src_fdx;
- if (!eax || eax >= shdpen || ozbuf_ptr[ecx] < z8) continue;
- ozbuf_ptr[ecx] = z8;
-
- dst_ptr[ecx] = alpha_blend_r32(pal_base[eax], dst_ptr[ecx], alpha);
- }
- while (++ecx);
-
- src_ptr += src_fdy;
- ozbuf_ptr += GX_ZBUFW;
- dst_ptr += dst_pitch;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
-
- case 4: // shadow pens only
- do {
- do {
- eax = *src_ptr;
- src_ptr += src_fdx;
- if (eax < shdpen || szbuf_ptr[ecx*2] < z8 || szbuf_ptr[ecx*2+1] <= p8) continue;
- rgb_t pix = dst_ptr[ecx];
- szbuf_ptr[ecx*2] = z8;
- szbuf_ptr[ecx*2+1] = p8;
-
- // the shadow tables are 15-bit lookup tables which accept RGB15... lossy, nasty, yuck!
- dst_ptr[ecx] = shd_base[pix.as_rgb15()];
- }
- while (++ecx);
-
- src_ptr += src_fdy;
- szbuf_ptr += (GX_ZBUFW<<1);
- dst_ptr += dst_pitch;
- ecx = dst_w;
- }
- while (--dst_h);
- break;
+ // 4: shadow pens only
+ do {
+ do {
+ const u8 pal_idx = *src_ptr;
+ src_ptr += src_fdx;
+ if (pal_idx < shdpen || szbuf_ptr[ecx*2] < z8 || szbuf_ptr[ecx*2+1] <= p8) continue;
+ rgb_t pix = dst_ptr[ecx];
+ szbuf_ptr[ecx*2] = z8;
+ szbuf_ptr[ecx*2+1] = p8;
+
+ // the shadow tables are 15-bit lookup tables which accept RGB15... lossy, nasty, yuck!
+ dst_ptr[ecx] = shd_base[pix.as_rgb15()];
+ }
+ while (++ecx);
+
+ src_ptr += src_fdy;
+ szbuf_ptr += (GX_ZBUFW<<1);
+ dst_ptr += dst_pitch;
+ ecx = dst_w;
}
+ while (--dst_h);
}
}
-#undef FP
-#undef FPONE
-#undef FPHALF
-#undef FPENT
}
diff --git a/src/mame/konami/k053246_k053247_k055673.h b/src/mame/konami/k053246_k053247_k055673.h
index 059f70cea36..d73c9967fe8 100644
--- a/src/mame/konami/k053246_k053247_k055673.h
+++ b/src/mame/konami/k053246_k053247_k055673.h
@@ -111,7 +111,7 @@ public:
/* alt implementation - to be collapsed */
void zdrawgfxzoom32GP(
bitmap_rgb32 &bitmap, const rectangle &cliprect,
- u32 code, u32 color, int flipx, int flipy, int sx, int sy,
+ u32 code, u32 color, bool flipx, bool flipy, int sx, int sy,
int scalex, int scaley, int alpha, int drawmode, int zcode, int pri, u8* gx_objzbuf, u8* gx_shdzbuf);
void zdrawgfxzoom32GP(
diff --git a/src/mame/konami/mystwarr.cpp b/src/mame/konami/mystwarr.cpp
index b0d2d2ae892..604ed5dfd1f 100644
--- a/src/mame/konami/mystwarr.cpp
+++ b/src/mame/konami/mystwarr.cpp
@@ -1125,7 +1125,7 @@ void mystwarr_state::dadandrn(machine_config &config)
m_k056832->set_tile_callback(FUNC(mystwarr_state::game5bpp_tile_callback));
- m_k055673->set_sprite_callback(FUNC(mystwarr_state::gaiapols_sprite_callback));
+ m_k055673->set_sprite_callback(FUNC(mystwarr_state::mystwarr_sprite_callback));
m_k055673->set_config(K055673_LAYOUT_GX, -42, -22);
}
diff --git a/src/mame/konami/mystwarr_v.cpp b/src/mame/konami/mystwarr_v.cpp
index 238891ccf04..8b8c8b9cae1 100644
--- a/src/mame/konami/mystwarr_v.cpp
+++ b/src/mame/konami/mystwarr_v.cpp
@@ -77,29 +77,19 @@ K056832_CB_MEMBER(mystwarr_state::game4bpp_tile_callback)
K055673_CB_MEMBER(mystwarr_state::mystwarr_sprite_callback)
{
- int c = *color;
- *color = m_sprite_colorbase | (c & 0x001f);
- *priority_mask = c & 0x00f0;
+ *priority_mask = *color & 0x00e0;
+
+ const int effect_attributes = ((*color >> 8) & 0b11) << K055555_MIXSHIFT; // used for blending
+ *color = m_sprite_colorbase | (*color & 0x001f) | effect_attributes;
}
K055673_CB_MEMBER(mystwarr_state::metamrph_sprite_callback)
{
- int c = *color;
- int attr = c;
+ *priority_mask = (*color & 0xe0) >> 2;
- c = (c & 0x1f) | m_sprite_colorbase;
-
- // Bit8 & 9 are effect attributes. It is not known whether the effects are generated by external logic.
- if ((attr & 0x300) != 0x300)
- {
- *color = c;
- *priority_mask = (attr & 0xe0) >> 2;
- }
- else
- {
- *color = c | 3<<K055555_MIXSHIFT | K055555_SKIPSHADOW; // reflection?
- *priority_mask = 0x1c;
- }
+ const int shadow = (*color >> 10) & 0b11;
+ const int effect_attributes = ((*color >> 8) & 0b11) << K055555_MIXSHIFT; // used for blending
+ *color = (*color & 0x1f) | m_sprite_colorbase | effect_attributes | ((shadow == 0b11) ? K055555_SKIPSHADOW : 0);
}
K055673_CB_MEMBER(mystwarr_state::gaiapols_sprite_callback)