namcos22: change ss22 spot, a bit better, a bit worse (nw)

This commit is contained in:
hap 2020-05-26 03:11:16 +02:00
parent 10e4f10d41
commit 310357fd16
2 changed files with 39 additions and 38 deletions

View File

@ -23,32 +23,34 @@ TODO:
- EEPROM write timing should be around 5ms, it doesn't do any data/rdy polling - EEPROM write timing should be around 5ms, it doesn't do any data/rdy polling
- where is the steering wheel motor torque output for dirtdash? Answer: The data comes from the Serial Port on the MOTHER PCB at J2 Pin 7 /TXD - where is the steering wheel motor torque output for dirtdash? Answer: The data comes from the Serial Port on the MOTHER PCB at J2 Pin 7 /TXD
- texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures. The glitch may be in MAME core: - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures. The glitch may be in MAME core:
it used to be much worse with the legacy_poly_manager it used to be much worse with the legacy_poly_manager
- find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash - find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash
- improve ss22 lighting: - improve ss22 lighting:
+ mountains in alpinr2b selection screen + mountains in alpinr2b selection screen
+ ridgerac waving flag shadowing + ridgerac waving flag shadowing
+ cybrcomm enemies should flash white when you shoot them, probably lighting related + cybrcomm enemies should flash white when you shoot them, probably lighting related
+ timecris helicopter, car, grenade boxes should flash white when you shoot them (similar to cybrcomm) + timecris helicopter, car, grenade boxes should flash white when you shoot them (similar to cybrcomm)
- improve ss22 spot: - improve ss22 spot, only used in dirtdash and testmode, not understood well:
+ dirtdash record time message creates a 'gap' in the spotlight when entering the jungle level + should probably be done before global fade
+ how is it enabled exactly? the enable bit in spotram is set in tokyowar too(which doesn't use spot) + should not apply to some of the sprites in dirtdash jungle level (eg. time/position)
+ what is the high bit in spot_factor for? darkness instead of brightness? not used anywhere + how is it enabled exactly? the enable bit in spotram is set in tokyowar too(which doesn't use spot)
+ what is the high bit in spot_factor for? not used anywhere
+ high bits in spot_data are unknown, maybe blend mode
+ testmode looks wrong, spot_data high bits is 0 here (2 in dirtdash)
- PDP command 0xfff9, used in alpinr2b to modify titlescreen logo animation in pointram (should show a snow melting effect) - PDP command 0xfff9, used in alpinr2b to modify titlescreen logo animation in pointram (should show a snow melting effect)
- support for text layer video partial updates after posirq, alpinesa does raster effects on it - support for text layer video partial updates after posirq, alpinesa does raster effects on it
- alpha blended sprite/poly with priority over alpha blended text doesn't work right (see dirtdash countdown when you start at jungle level) - alpha blended sprite/poly with priority over alpha blended text doesn't work right
- ss22 poly translucency is probably more limited than currently emulated, not supporting stacked layers - ss22 poly translucency is probably more limited than currently emulated, not supporting stacked layers
- there's a sprite limit per scanline, eg. timecris submarine explosion smoke partially erases sprites on real hardware - there's a sprite limit per scanline, eg. timecris submarine explosion smoke partially erases sprites on real hardware
- cybrcycc speed dial needle is missing - cybrcycc speed dial needle polygon is missing
- global offset is wrong in non-super22 servicemode video test, and above that, it flickers in acedrvrw, victlapw - global offset is wrong in non-super22 servicemode video test, and above that, it flickers in acedrvrw, victlapw
- ridgerac fogging isn't applied to the upper/side part of the sky (best seen when driving down a hill), it's fine in ridgera2 - ridgerac fogging isn't applied to the upper/side part of the sky (best seen when driving down a hill), it's fine in ridgera2,
czram contents is rather odd here and partly cleared (probably the cause?): czram contents is rather odd here and partly cleared (probably the cause?):
$0000-$0d7f - gradual increase from $00-$7c + $0000-$0d7f - gradual increase from $00-$7c
$0d80-$0fff - $73, huh, why lower? + $0d80-$0fff - $73, huh, why lower?
$1000-$19ff - $00, huh!? (it's specifically cleared, memsetting czram at boot does not fix the issue) + $1000-$19ff - $00, huh!? (it's specifically cleared, memsetting czram at boot does not fix the issue)
$1a00-$0dff - $77 + $1a00-$0dff - $77
$1e00-$1fff - $78 + $1e00-$1fff - $78
- lots of smaller issues - lots of smaller issues
*********************************************************************************************************** ***********************************************************************************************************

View File

@ -1936,9 +1936,7 @@ void namcos22s_state::namcos22s_mix_text_layer(screen_device &screen, bitmap_rgb
// prepare spot // prepare spot
bool spot_enabled = (m_spotram_enable & 1) && (m_chipselect & 0xc000); bool spot_enabled = (m_spotram_enable & 1) && (m_chipselect & 0xc000);
int spot_factor = (m_spot_factor < 0x100) ? 0 : m_spot_factor & 0xff; int spot_factor = (m_spot_factor < 0x100) ? 0 : m_spot_factor & 0xff;
rgbaint_t spot_color(0, spot_factor, spot_factor, spot_factor);
int spot_palbase = m_text_palbase >> 8 & 3; // src[x] >> 8 & 3 int spot_palbase = m_text_palbase >> 8 & 3; // src[x] >> 8 & 3
int spot_shift = 0;
// prepare fader // prepare fader
bool fade_enabled = (m_mixer_flags & 2) && m_screen_fade_factor; bool fade_enabled = (m_mixer_flags & 2) && m_screen_fade_factor;
@ -1959,16 +1957,11 @@ void namcos22s_state::namcos22s_mix_text_layer(screen_device &screen, bitmap_rgb
if (spot_enabled) if (spot_enabled)
{ {
// remap pen // remap pen
int spot_data = m_spotram[(src[x] << 2 | spot_palbase) & 0x3ff]; pen = m_spotram[(src[x] << 2 | spot_palbase) & 0x3ff];
pen = spot_data; if (pen < 0x80)
if (pen >= 0x80)
{
spot_shift = spot_data >> 8 & 7;
rgb.set(spot_color);
}
else
rgb.set(pens[pen | m_text_palbase]); rgb.set(pens[pen | m_text_palbase]);
else if (prival != 6)
continue;
} }
else else
{ {
@ -1976,17 +1969,23 @@ void namcos22s_state::namcos22s_mix_text_layer(screen_device &screen, bitmap_rgb
pen = src[x]; pen = src[x];
} }
// apply fade
if (fade_enabled)
rgb.blend(fade_color, fade_factor);
// spot pen becomes brightness factor // spot pen becomes brightness factor
if (spot_enabled && pen >= 0x80) if (spot_enabled && pen >= 0x80)
rgb.blend(rgbaint_t(dest[x]), (~pen & 0x7f) >> spot_shift); {
rgb.set(rgbaint_t(dest[x]));
u16 factor = (spot_factor * (pen & 0x7f)) >> 7;
rgb.scale_imm_and_clamp(0x100 - factor);
}
else
{
// apply fade
if (fade_enabled)
rgb.blend(fade_color, fade_factor);
// otherwise apply alpha // apply alpha
else if (alpha_factor && ((pen & 0xf) == alpha_mask || (pen >= alpha_check12 && pen <= alpha_check13))) if (alpha_factor && ((pen & 0xf) == alpha_mask || (pen >= alpha_check12 && pen <= alpha_check13)))
rgb.blend(rgbaint_t(dest[x]), 0xff - alpha_factor); rgb.blend(rgbaint_t(dest[x]), 0xff - alpha_factor);
}
dest[x] = rgb.to_rgba(); dest[x] = rgb.to_rgba();
} }