namcos2.cpp: Force finallap to use 32x32 sprite size for title screen. (#8074)

This commit is contained in:
David Haywood 2021-05-18 18:24:56 +01:00 committed by GitHub
parent d4d7d264b8
commit ab1a5b7d79
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 23 additions and 5 deletions

View File

@ -1929,6 +1929,8 @@ void namcos2_state::finallap_noio(machine_config &config)
configure_c123tmap_standard(config);
configure_c45road_standard(config);
m_ns2sprite->force_32x32_sprites(true);
m_c140->add_route(0, "lspeaker", 0.75);
m_c140->add_route(1, "rspeaker", 0.75);
@ -1954,6 +1956,8 @@ void namcos2_state::finalap2(machine_config &config)
finallap(config);
m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namcos2_state::TilemapCB_finalap2, this));
m_ns2sprite->force_32x32_sprites(false);
}
void namcos2_state::finalap3(machine_config &config)
@ -1961,6 +1965,8 @@ void namcos2_state::finalap3(machine_config &config)
finallap_c68(config);
m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namcos2_state::TilemapCB_finalap2, this));
m_ns2sprite->force_32x32_sprites(false);
}

View File

@ -26,7 +26,8 @@ DEFINE_DEVICE_TYPE(NAMCOS2_SPRITE, namcos2_sprite_device, "namcos2_sprite", "Nam
namcos2_sprite_device::namcos2_sprite_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
device_t(mconfig, NAMCOS2_SPRITE, tag, owner, clock),
m_gfxdecode(*this, finder_base::DUMMY_TAG),
m_spriteram(*this, finder_base::DUMMY_TAG)
m_spriteram(*this, finder_base::DUMMY_TAG),
m_force_32x32(false)
{
}
@ -229,8 +230,16 @@ void namcos2_sprite_device::draw_sprites(screen_device &screen, bitmap_ind16 &bi
const int sizey = ((word0 >> 10) & 0x003f) + 1;
int sizex = (word3 >> 10) & 0x003f;
int is_32 = (word0 >> 9) & 0x0001;
if ((word0 & 0x0200) == 0) sizex >>= 1;
// The finallap title screen needs 32x32 sprites, but doesn't set the expected bit
// other games (eg. mirninja) do correctly set it.
//
// can the 16x16 support be disabled globally with a register, or via a pin on the chip?
if (m_force_32x32)
is_32 = 1;
if (!is_32) sizex >>= 1;
if ((sizey - 1) && sizex)
{
@ -240,13 +249,13 @@ void namcos2_sprite_device::draw_sprites(screen_device &screen, bitmap_ind16 &bi
const int xpos = (offset4 & 0x03ff) - 0x50 + 0x07;
const bool flipy = word1 & 0x8000;
const bool flipx = word1 & 0x4000;
const int scalex = (sizex << 16) / ((word0 & 0x0200) ? 0x20 : 0x10);
const int scaley = (sizey << 16) / ((word0 & 0x0200) ? 0x20 : 0x10);
const int scalex = (sizex << 16) / (is_32 ? 0x20 : 0x10);
const int scaley = (sizey << 16) / (is_32 ? 0x20 : 0x10);
if (scalex && scaley)
{
gfx_element *gfx = m_gfxdecode->gfx(0);
if ((word0 & 0x0200) == 0)
if (!is_32)
gfx->set_source_clip((word1 & 0x0001) ? 16 : 0, 16, (word1 & 0x0002) ? 16 : 0, 16);
else
gfx->set_source_clip(0, 32, 0, 32);

View File

@ -21,6 +21,8 @@ public:
void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri, int control );
void draw_sprites_metalhawk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
void force_32x32_sprites(bool force) { m_force_32x32 = force; }
protected:
// device-level overrides
virtual void device_start() override;
@ -33,6 +35,7 @@ private:
required_device<gfxdecode_device> m_gfxdecode;
required_shared_ptr<u16> m_spriteram;
bool m_force_32x32;
};
// device type definition