summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2026-04-23 23:19:58 +0200
committer hap <happppp@users.noreply.github.com>2026-04-23 23:19:58 +0200
commitde103666b0fe892d2d02b747ea099a8806edf524 (patch)
tree05d22599c253febe5d9bc914fe75fdf4011fcfd5
parentd3bc34b1a55745af194427bef20871841152f4a9 (diff)
namco_c355spr: remove assumption that it has 2 active spritelists
-rw-r--r--src/mame/dataeast/deco32.h4
-rw-r--r--src/mame/dataeast/deco32_v.cpp7
-rw-r--r--src/mame/namco/namconb1.cpp1
-rw-r--r--src/mame/namco/namcos21_c67.cpp3
-rw-r--r--src/mame/shared/namco_c355spr.cpp269
-rw-r--r--src/mame/shared/namco_c355spr.h22
6 files changed, 137 insertions, 169 deletions
diff --git a/src/mame/dataeast/deco32.h b/src/mame/dataeast/deco32.h
index 2191839c4b1..23b0de592c3 100644
--- a/src/mame/dataeast/deco32.h
+++ b/src/mame/dataeast/deco32.h
@@ -309,8 +309,8 @@ private:
int sprite_bank_callback(int sprite);
u16 read_spritetile(int lookupram_offset);
u16 read_spriteformat(int spriteformatram_offset, u8 attr);
- u16 read_spritetable(int offs, u8 attr, int whichlist);
- u16 read_spritelist(int offs, int whichlist);
+ u16 read_spritetable(int offs, u8 attr);
+ u16 read_spritelist(int offs);
u16 read_cliptable(int offs, u8 attr);
int sprite_priority_callback(int priority);
diff --git a/src/mame/dataeast/deco32_v.cpp b/src/mame/dataeast/deco32_v.cpp
index aac278d6ad4..905cf075f13 100644
--- a/src/mame/dataeast/deco32_v.cpp
+++ b/src/mame/dataeast/deco32_v.cpp
@@ -190,12 +190,12 @@ u16 dragngun_state::read_spriteformat(int spriteformatram_offset, u8 attr)
return m_sprite_spriteformat[0][((spriteformatram_offset & 0x1ff)<<2) + attr];
}
-u16 dragngun_state::read_spritetable(int offs, u8 attr, int whichlist)
+u16 dragngun_state::read_spritetable(int offs, u8 attr)
{
return m_spriteram->buffer()[(offs << 3) + attr];
}
-u16 dragngun_state::read_spritelist(int offs, int whichlist)
+u16 dragngun_state::read_spritelist(int offs)
{
return m_sprite_indextable[offs];
}
@@ -270,7 +270,8 @@ u32 dragngun_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, c
{
rectangle clip(cliprect.left(), cliprect.right(), 8, 247);
m_sprgenzoom->clear_screen_bitmap(clip);
- m_sprgenzoom->draw_dg(screen, bitmap, clip);
+ m_sprgenzoom->build_sprite_list_and_render_sprites(clip);
+ m_sprgenzoom->draw(screen, bitmap, clip);
}
return 0;
diff --git a/src/mame/namco/namconb1.cpp b/src/mame/namco/namconb1.cpp
index 1c3235b47d3..4ed29bc835a 100644
--- a/src/mame/namco/namconb1.cpp
+++ b/src/mame/namco/namconb1.cpp
@@ -1002,7 +1002,6 @@ void namconb1_state::namconb1(machine_config &config)
m_c355spr->set_mix_callback(FUNC(namconb1_state::sprite_mix_callback));
m_c355spr->set_buffer(2); // triple buffered
m_c355spr->set_color_base(0);
- m_c355spr->set_draw_2_lists(false); // prevents bad tile on top left of vshoot during certain scenes
NAMCO_C123TMAP(config, m_c123tmap);
m_c123tmap->set_palette(m_c116);
diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp
index 88324683f12..9fbf8f65a9a 100644
--- a/src/mame/namco/namcos21_c67.cpp
+++ b/src/mame/namco/namcos21_c67.cpp
@@ -18,9 +18,6 @@ TODO:
and on pilot parachuting with a time over;
- aircomb: missing background on attract mode ranking screen (masking? cfr. shared/namco_c355spr.cpp);
- aircomb: bad sprite colors on debriefing medal screen;
-- solvalou: black screen on service mode, is it due of the various hacks or it's in shared/namco_c355spr.cpp?
- it writes the c355 sprite list to 0x14000 and the sprite table to 0x0, so it'll work if those are swapped
- around in namco_c355spr.cpp;
- solvalou: service mode polygon test is crashy when testing invalid polygons (the good old IDC overflow);
- solvalou: sprite blend is wrong during water stages (look at the blaster/score panel), the palette
bank for the water is at 0x2200, but the blend palette is at 0x6000 instead of 0x6200?;
diff --git a/src/mame/shared/namco_c355spr.cpp b/src/mame/shared/namco_c355spr.cpp
index 7d1a3fe1850..827e69bb6e4 100644
--- a/src/mame/shared/namco_c355spr.cpp
+++ b/src/mame/shared/namco_c355spr.cpp
@@ -2,51 +2,51 @@
// copyright-holders:David Haywood, Phil Stroffolino, Bryan McPhail
/*
- Namco 186/187 Zooming Sprites
- Namco C355/187 Zooming sprites
- used by
- namcofl.cpp (all games)
- namconb1.cpp (all games)
- gal3.cpp (all games)
- namcos21*.cpp (Driver's Eyes, Solvalou, Starblade, Air Combat, Cyber Sled) (everything except Winning Run series)
- namcos2.cpp (Steel Gunner, Steel Gunner 2, Lucky & Wild, Suzuka 8 Hours, Suzuka 8 Hours 2)
- deco32.cpp (Dragon Gun, Lock 'n' Loaded)
-
- earlier titles use the 186/187 pair (eg. Steel Gunner, Dragon Gun) while later boards appear to integrate the
- 186 into the C355 custom (eg. Starblade, NB1 hardware, Final Lap R etc.). It is not known if there are any
- differences in capability.
-
- TODO: verify which boards use which chips
-
-
- dragngun does a masking trick on the dragon during the attract intro, it should not be visible but rather
- cause the fire to be invisible in the shape of the dragon
- dragngun 'waterfall' prior to one of the bosses also needs correct priority
- aircomb ranking screen during attract also seems masking related
-
- relative to the start of the sprite area these offets are typically used
- it is not clear if this is implemented in a single RAM chip, or multiple on some boards
-
- * 0x00000 sprite attr (page0) (solvalou service mode)
- * 0x02000 sprite list (page0) (solvalou service mode)
- *
- * 0x02400 window attributes
- * 0x04000 format
- * 0x08000 tile
- * 0x10000 sprite attr (page1)
- * 0x14000 sprite list (page1)
-
- TODO: solvalou service mode wants lists / attributes at 0x02000/2 & 0x00000/2
- Drawing this is what causes the bad tile in vshoot
-
- Do any games need 2 lists at the same time or should 1 list be configurable?
-
- It seems unlikely there are really 2 lists
-
- Maybe the list written by solvalou's service mode is where data gets copied for
- rendering by the sprite DMA trigger, but solvalou is choosing to write it there
- directly rather than trigger the DMA?
+Namco 186/187 Zooming Sprites
+Namco C355/187 Zooming sprites
+
+used by:
+- namcofl.cpp (all games)
+- namconb1.cpp (all games)
+- gal3.cpp (all games)
+- namcos21*.cpp (Driver's Eyes, Solvalou, Starblade, Air Combat, Cyber Sled) (everything except Winning Run series)
+- namcos2.cpp (Steel Gunner, Steel Gunner 2, Lucky & Wild, Suzuka 8 Hours, Suzuka 8 Hours 2)
+- deco32.cpp (Dragon Gun, Lock 'n' Loaded)
+
+earlier titles use the 186/187 pair (eg. Steel Gunner, Dragon Gun) while later boards appear to integrate the
+186 into the C355 custom (eg. Starblade, NB1 hardware, Final Lap R etc.). It is not known if there are any
+differences in capability.
+
+TODO:
+- verify which boards use which chips
+- dragngun does a masking trick on the dragon during the attract intro, it should not be visible but rather
+ cause the fire to be invisible in the shape of the dragon
+- dragngun 'waterfall' prior to one of the bosses also needs correct priority
+- aircomb ranking screen during attract also seems masking related
+
+relative to the start of the sprite area these offets are typically used
+it is not clear if this is implemented in a single RAM chip, or multiple on some boards
+
+* 0x00000 sprite attr (page0) (solvalou service mode)
+* 0x02000 sprite list (page0) (solvalou service mode)
+*
+* 0x02400 window attributes
+* 0x04000 format
+* 0x08000 tile
+* 0x10000 sprite attr (page1)
+* 0x14000 sprite list (page1)
+
+solvalou service mode wants lists / attributes at 0x02000/2 & 0x00000/2.
+Do any games need 2 lists at the same time? It seems unlikely there are really 2 lists.
+
+Maybe the list written by solvalou's service mode is where data gets copied for
+rendering by the sprite DMA trigger, but solvalou is choosing to write it there
+directly rather than trigger the DMA?
+
+Some other games (eg. nebulray, outfxies) deliberately write 0s to page0. If it's
+presumed this is the buffered list, it means they want to clear it immediately
+without a 1-frame delay?
*/
@@ -86,7 +86,6 @@ namco_c355spr_device::namco_c355spr_device(const machine_config &mconfig, device
m_colbase(0),
m_colors(16),
m_granularity(256),
- m_draw_2_lists(true),
m_device_allocates_spriteram(true)
{
std::fill(std::begin(m_position), std::end(m_position), 0);
@@ -266,11 +265,8 @@ void namco_c355spr_device::device_start()
std::fill(std::begin(m_position), std::end(m_position), 0x0000);
- for (int i = 0; i < 2; i++)
- {
- m_spritelist[i] = std::make_unique<c355_sprite[]>(0x100);
- m_sprite_end[i] = m_spritelist[i].get();
- }
+ m_spritelist = std::make_unique<c355_sprite[]>(0x100);
+ m_sprite_end = m_spritelist.get();
if (m_device_allocates_spriteram)
{
@@ -294,8 +290,7 @@ void namco_c355spr_device::device_start()
void namco_c355spr_device::device_stop()
{
- for (auto &spritelist : m_spritelist)
- spritelist.reset();
+ m_spritelist.reset();
for (auto &spriteram : m_spriteram)
spriteram.reset();
@@ -343,6 +338,13 @@ void namco_c355spr_device::draw(screen_device &screen, bitmap_rgb32 &bitmap, con
void namco_c355spr_device::spriteram_w(offs_t offset, u16 data, u16 mem_mask)
{
COMBINE_DATA(&m_spriteram[0][offset]);
+
+ // update page 0 tables
+ if (offset >= 0x10000 / 2 && offset < 0x12000 / 2)
+ COMBINE_DATA(&m_spriteram[0][offset - 0x10000 / 2]);
+
+ else if (offset >= 0x14000 / 2 && offset < 0x14400 / 2)
+ COMBINE_DATA(&m_spriteram[0][offset - 0x12000 / 2]);
}
u16 namco_c355spr_device::spriteram_r(offs_t offset)
@@ -364,30 +366,18 @@ void namco_c355spr_device::vblank(int state)
/******************************************************************************/
-u16 namco_c355spr_device::read_spriteformat(int entry, u8 attr)
+u16 namco_c355spr_device::read_spritetable(int entry, u8 attr)
{
- u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0];
- const u16 *spriteformat = &spriteram16[0x4000 / 2];
- return spriteformat[(entry << 2) + attr];
-}
-
-u16 namco_c355spr_device::read_spritetile(int entry)
-{
- u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0];
- const u16 *spritetile = &spriteram16[0x8000 / 2];
- return spritetile[entry];
+ const int buffer = std::max(0, m_buffer - 1);
+ u16 *ram = &m_spriteram[buffer][0x0000 / 2];
+ return ram[(entry << 3) + attr];
}
-u16 namco_c355spr_device::read_spritetable(int entry, u8 attr, int whichlist)
+u16 namco_c355spr_device::read_spritelist(int entry)
{
- u16 *ram;
const int buffer = std::max(0, m_buffer - 1);
- if (whichlist == 0)
- ram = &m_spriteram[buffer][0x00000 / 2];
- else
- ram = &m_spriteram[buffer][0x10000 / 2];
-
- return ram[(entry << 3) + attr];
+ u16 *ram = &m_spriteram[buffer][0x2000 / 2];
+ return ram[entry];
}
u16 namco_c355spr_device::read_cliptable(int entry, u8 attr)
@@ -397,115 +387,100 @@ u16 namco_c355spr_device::read_cliptable(int entry, u8 attr)
return ram[(entry << 2) + attr];
}
-u16 namco_c355spr_device::read_spritelist(int entry, int whichlist)
+u16 namco_c355spr_device::read_spriteformat(int entry, u8 attr)
{
- u16 *ram;
- const int buffer = std::max(0, m_buffer - 1);
- if (whichlist == 0)
- ram = &m_spriteram[buffer][0x02000 / 2];
- else
- ram = &m_spriteram[buffer][0x14000 / 2];
+ u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0];
+ const u16 *spriteformat = &spriteram16[0x4000 / 2];
+ return spriteformat[(entry << 2) + attr];
+}
- return ram[entry];
+u16 namco_c355spr_device::read_spritetile(int entry)
+{
+ u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0];
+ const u16 *spritetile = &spriteram16[0x8000 / 2];
+ return spritetile[entry];
}
-void namco_c355spr_device::build_sprite_list(int no)
+void namco_c355spr_device::build_sprite_list()
{
/* draw the sprites */
- c355_sprite *sprite_ptr = m_spritelist[no].get();
+ c355_sprite *sprite_ptr = m_spritelist.get();
for (int i = 0; i < 256; i++)
{
sprite_ptr->disable = false;
- const u16 which = m_read_spritelist(i, no);
- get_single_sprite(which & 0xff, sprite_ptr, no);
+ const u16 which = m_read_spritelist(i);
+ get_single_sprite(which & 0xff, sprite_ptr);
sprite_ptr++;
if (which & 0x100) break;
}
- m_sprite_end[no] = sprite_ptr;
+ m_sprite_end = sprite_ptr;
}
void namco_c355spr_device::build_sprite_list_and_render_sprites(const rectangle cliprect)
{
- if (m_draw_2_lists)
- build_sprite_list(0);
-
- build_sprite_list(1);
-
+ build_sprite_list();
render_sprites(cliprect);
}
void namco_c355spr_device::render_sprites(const rectangle cliprect)
{
m_renderbitmap.fill(0xffff, cliprect);
- for (int no = 0; no < 2; no++)
- {
- c355_sprite *sprite_ptr = m_spritelist[no].get();
+ c355_sprite *sprite_ptr = m_spritelist.get();
- while (sprite_ptr != m_sprite_end[no])
+ while (sprite_ptr != m_sprite_end)
+ {
+ if (sprite_ptr->disable == false)
{
- if (sprite_ptr->disable == false)
+ rectangle clip = sprite_ptr->clip;
+ clip &= cliprect;
+ for (int ind = 0; ind < sprite_ptr->size; ind++)
{
- rectangle clip = sprite_ptr->clip;
- clip &= cliprect;
- for (int ind = 0; ind < sprite_ptr->size; ind++)
+ if ((sprite_ptr->tile[ind] & 0x8000) == 0)
{
- if ((sprite_ptr->tile[ind] & 0x8000) == 0)
+ int sprite_screen_height;
+ int sprite_screen_width;
+
+ if (m_alt_precision)
{
- int sprite_screen_height;
- int sprite_screen_width;
-
- if (m_alt_precision)
- {
- sprite_screen_width = ((sprite_ptr->x[ind] + (sprite_ptr->zoomx[ind] << 4)) >> 16) - (sprite_ptr->x[ind] >> 16);
- sprite_screen_height = ((sprite_ptr->y[ind] + (sprite_ptr->zoomy[ind] << 4)) >> 16) - (sprite_ptr->y[ind] >> 16);
- }
- else
- {
- sprite_screen_height = (sprite_ptr->zoomy[ind] * 16 + 0x8000) >> 16;
- sprite_screen_width = (sprite_ptr->zoomx[ind] * 16 + 0x8000) >> 16;
- }
-
- // TODO: offset is also affected?
- int tile = sprite_ptr->tile[ind];
- if (!m_code2tile.isnull())
- tile = m_code2tile(tile);
- zdrawgfxzoom(
- m_renderbitmap,
- clip,
- gfx(0),
- tile + sprite_ptr->offset,
- sprite_ptr->color,
- sprite_ptr->flipx, sprite_ptr->flipy,
- sprite_ptr->x[ind] >> 16, sprite_ptr->y[ind] >> 16,
- sprite_ptr->zoomx[ind], sprite_ptr->zoomy[ind], sprite_ptr->pri,
- sprite_screen_width, sprite_screen_height);
+ sprite_screen_width = ((sprite_ptr->x[ind] + (sprite_ptr->zoomx[ind] << 4)) >> 16) - (sprite_ptr->x[ind] >> 16);
+ sprite_screen_height = ((sprite_ptr->y[ind] + (sprite_ptr->zoomy[ind] << 4)) >> 16) - (sprite_ptr->y[ind] >> 16);
}
+ else
+ {
+ sprite_screen_height = (sprite_ptr->zoomy[ind] * 16 + 0x8000) >> 16;
+ sprite_screen_width = (sprite_ptr->zoomx[ind] * 16 + 0x8000) >> 16;
+ }
+
+ // TODO: offset is also affected?
+ int tile = sprite_ptr->tile[ind];
+ if (!m_code2tile.isnull())
+ tile = m_code2tile(tile);
+ zdrawgfxzoom(
+ m_renderbitmap,
+ clip,
+ gfx(0),
+ tile + sprite_ptr->offset,
+ sprite_ptr->color,
+ sprite_ptr->flipx, sprite_ptr->flipy,
+ sprite_ptr->x[ind] >> 16, sprite_ptr->y[ind] >> 16,
+ sprite_ptr->zoomx[ind], sprite_ptr->zoomy[ind], sprite_ptr->pri,
+ sprite_screen_width, sprite_screen_height);
}
}
- sprite_ptr++;
}
+ sprite_ptr++;
}
}
-void namco_c355spr_device::draw_dg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- build_sprite_list(0);
-
- render_sprites(cliprect);
-
- copybitmap(screen, bitmap, cliprect);
-}
-
-void namco_c355spr_device::get_single_sprite(u16 which, c355_sprite *sprite_ptr, int no)
+void namco_c355spr_device::get_single_sprite(u16 which, c355_sprite *sprite_ptr)
{
/**
* ----xxxx-------- window select
* --------xxxx---- priority
* ------------xxxx palette select
*/
- const u16 palette = m_read_spritetable(which, 6, no);
-
+ u16 palette = m_read_spritetable(which, 6);
const int priority = m_pri_cb(palette);
if (priority == -1)
@@ -516,14 +491,14 @@ void namco_c355spr_device::get_single_sprite(u16 which, c355_sprite *sprite_ptr,
sprite_ptr->pri = priority;
- const u16 spriteformatram_offset = m_read_spritetable(which, 0, no) & 0x7ff; /* LINKNO 0x000..0x7ff for format table entries - finalapr code masks with 0x3ff, but vshoot requires 0x7ff */
- sprite_ptr->offset = m_read_spritetable(which, 1, no); /* OFFSET */
- int hpos = m_read_spritetable(which, 2, no); /* HPOS 0x000..0x7ff (signed) */
- int vpos = m_read_spritetable(which, 3, no); /* VPOS 0x000..0x7ff (signed) */
- u16 hsize = m_read_spritetable(which, 4, no); /* HSIZE max 0x3ff pixels */
- u16 vsize = m_read_spritetable(which, 5, no); /* VSIZE max 0x3ff pixels */
- /* m_read_spritetable(which, 6, no) contains priority/palette */
- /* m_read_spritetable(which, 7, no) is used in Lucky & Wild, possibly for sprite-road priority */
+ const u16 spriteformatram_offset = m_read_spritetable(which, 0) & 0x7ff; /* LINKNO 0x000..0x7ff for format table entries - finalapr code masks with 0x3ff, but vshoot requires 0x7ff */
+ sprite_ptr->offset = m_read_spritetable(which, 1); /* OFFSET */
+ int hpos = m_read_spritetable(which, 2); /* HPOS 0x000..0x7ff (signed) */
+ int vpos = m_read_spritetable(which, 3); /* VPOS 0x000..0x7ff (signed) */
+ u16 hsize = m_read_spritetable(which, 4); /* HSIZE max 0x3ff pixels */
+ u16 vsize = m_read_spritetable(which, 5); /* VSIZE max 0x3ff pixels */
+ /* m_read_spritetable(which, 6) contains priority/palette (handled above) */
+ /* m_read_spritetable(which, 7) is used in Lucky & Wild, possibly for sprite-road priority */
int xscroll = util::sext<s16>(m_position[1], 9);
int yscroll = util::sext<s16>(m_position[0], 9);
diff --git a/src/mame/shared/namco_c355spr.h b/src/mame/shared/namco_c355spr.h
index a0340bf82fd..152c81db638 100644
--- a/src/mame/shared/namco_c355spr.h
+++ b/src/mame/shared/namco_c355spr.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:David Haywood
+// copyright-holders:David Haywood, Phil Stroffolino, Bryan McPhail
#ifndef MAME_SHARED_NAMCO_C355SPR_H
#define MAME_SHARED_NAMCO_C355SPR_H
@@ -13,9 +13,9 @@ class namco_c355spr_device : public device_t, public device_gfx_interface, publi
public:
using c355_obj_code2tile_delegate = device_delegate<int (int)>;
using c355_obj_entry_attr_delegate = device_delegate<u16(int, u8)>;
- using c355_obj_entry_attr_which_delegate = device_delegate<u16(int, u8, int)>;
+ using c355_obj_entry_attr_which_delegate = device_delegate<u16(int, u8)>;
using c355_obj_entry_delegate = device_delegate<u16(int)>;
- using c355_obj_entry_which_delegate = device_delegate<u16(int, int)>;
+ using c355_obj_entry_which_delegate = device_delegate<u16(int)>;
using c355_priority_delegate = device_delegate<int(int)>;
using c355_mix_delegate = device_delegate<bool (u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri)>;
@@ -31,7 +31,6 @@ public:
void set_alt_precision(bool alt_precision) { m_alt_precision = alt_precision; }
void set_colors(int colors) { m_colors = colors; }
void set_granularity(int granularity) { m_granularity = granularity; }
- void set_draw_2_lists(bool draw_2_lists) { m_draw_2_lists = draw_2_lists; }
// the Namco code currently requires us to allocate memory in the device, the Data East hookup uses access callbacks
void set_device_allocates_spriteram(bool allocate_memory) { m_device_allocates_spriteram = allocate_memory; }
@@ -54,8 +53,6 @@ public:
void draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri = 0);
void draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri = 0);
- void draw_dg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
-
void build_sprite_list_and_render_sprites(const rectangle cliprect);
void render_sprites(const rectangle cliprect);
@@ -82,9 +79,9 @@ protected:
u16 read_spritetile(int entry);
u16 read_spriteformat(int entry, u8 attr);
- u16 read_spritetable(int entry, u8 attr, int whichlist);
+ u16 read_spritetable(int entry, u8 attr);
u16 read_cliptable(int entry, u8 attr);
- u16 read_spritelist(int entry, int whichlist);
+ u16 read_spritelist(int entry);
int default_priority(int pal_pri) { return ((pal_pri >> 4) & 0xf); }
bool default_mix(u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri);
@@ -116,21 +113,21 @@ protected:
int pri;
};
- std::unique_ptr<c355_sprite []> m_spritelist[2];
- const c355_sprite *m_sprite_end[2]{};
+ std::unique_ptr<c355_sprite []> m_spritelist;
+ const c355_sprite *m_sprite_end{};
u16 m_position[4];
std::unique_ptr<u16 []> m_spriteram[2];
bitmap_ind16 m_renderbitmap;
bitmap_ind16 m_screenbitmap;
- void build_sprite_list(int no);
+ void build_sprite_list();
private:
void copybitmap(screen_device &screen, bitmap_ind16 &dest_bmp, const rectangle &clip, int pri = 0);
void copybitmap(screen_device &screen, bitmap_rgb32 &dest_bmp, const rectangle &clip, int pri = 0);
// C355 Motion Object internals
- void get_single_sprite(u16 which, c355_sprite *sprite_ptr, int no);
+ void get_single_sprite(u16 which, c355_sprite *sprite_ptr);
template<class BitmapClass> void draw_sprites(screen_device &screen, BitmapClass &bitmap, const rectangle &cliprect, int pri = 0);
int m_scrolloffs[2];
@@ -143,7 +140,6 @@ private:
u16 m_colbase;
int m_colors;
int m_granularity;
- bool m_draw_2_lists;
bool m_device_allocates_spriteram;
};