namcos22: add object brightness adjust

This commit is contained in:
hap 2022-11-14 23:22:57 +01:00
parent 103a89ddeb
commit 0cf7e30b41
3 changed files with 84 additions and 51 deletions

View File

@ -28,8 +28,6 @@ TODO:
- improve ss22 lighting:
+ mountains in alpinr2b selection screen
+ ridgerac waving flag shadowing
+ 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)
- improve ss22 spot, used in dirtdash, alpines highscore entry, testmode screen#14 - not understood well:
+ does not work at all in alpines (uses spot_factor, not spotram, should show a spotlight with darkened background)
+ should be done before global fade, see dirtdash when starting at jungle level
@ -2068,7 +2066,7 @@ u16 namcos22_state::point_loword_r()
u16 namcos22_state::point_hiword_ir()
{
// high bit is unknown busy signal (ridgerac, ridgera2, raveracw, cybrcomm)
// high bit is unknown busy signal (ridgerac, ridgera2, raverace, cybrcomm)
return 0x8000 | (point_read(m_point_address++) >> 16 & 0x00ff);
}
@ -3043,7 +3041,7 @@ static INPUT_PORTS_START( ridgera2 )
PORT_DIPSETTING( 0x00000000, DEF_STR( On ) )
INPUT_PORTS_END
static INPUT_PORTS_START( raveracw )
static INPUT_PORTS_START( raverace )
PORT_INCLUDE( ridgera )
PORT_MODIFY("INPUTS")
@ -3110,7 +3108,7 @@ static INPUT_PORTS_START( cybrcomm )
PORT_BIT( 0x0000ffff, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
static INPUT_PORTS_START( acedrvr )
static INPUT_PORTS_START( acedrive )
PORT_START("INPUTS")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down")
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up")
@ -3188,7 +3186,7 @@ static INPUT_PORTS_START( acedrvr )
INPUT_PORTS_END
static INPUT_PORTS_START( victlap )
PORT_INCLUDE( acedrvr )
PORT_INCLUDE( acedrive )
PORT_MODIFY("CUSTOM.0")
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CONDITION("DEV", 0x01, EQUALS, 0x01) PORT_PLAYER(2) PORT_NAME("Dev Service Exit")
@ -3673,6 +3671,7 @@ void namcos22_state::machine_start()
save_item(NAME(m_keycus_id));
save_item(NAME(m_keycus_rng));
save_item(NAME(m_cz_adjust));
save_item(NAME(m_bri_adjust));
save_item(NAME(m_dspram_bank));
save_item(NAME(m_dspram16_latch));
save_item(NAME(m_slave_simulation_active));
@ -6089,19 +6088,19 @@ void namcos22s_state::install_141_speedup()
/*********************************************************************************************/
void namcos22_state::init_ridgeraj()
void namcos22_state::init_ridgerac()
{
m_gametype = NAMCOS22_RIDGE_RACER;
install_c74_speedup();
}
void namcos22_state::init_ridger2j()
void namcos22_state::init_ridgera2()
{
m_gametype = NAMCOS22_RIDGE_RACER2;
install_c74_speedup();
}
void namcos22_state::init_acedrvr()
void namcos22_state::init_acedrive()
{
m_gametype = NAMCOS22_ACE_DRIVER;
install_c74_speedup();
@ -6113,7 +6112,7 @@ void namcos22_state::init_victlap()
install_c74_speedup();
}
void namcos22_state::init_raveracw()
void namcos22_state::init_raverace()
{
m_gametype = NAMCOS22_RAVE_RACER;
install_c74_speedup();
@ -6189,7 +6188,7 @@ void propcycl_state::init_propcyclj()
install_141_speedup();
}
void namcos22s_state::init_cybrcyc()
void namcos22s_state::init_cybrcycc()
{
m_gametype = NAMCOS22_CYBER_CYCLES;
install_130_speedup();
@ -6231,21 +6230,21 @@ void namcos22s_state::init_dirtdash()
/* YEAR, NAME, PARENT, MACHINE, INPUT, CLASS, INIT, MNTR, COMPANY, FULLNAME, FLAGS */
// System22 games
GAME( 1993, ridgerac, 0, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (World, RR2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17
GAME( 1993, ridgeraca, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (World, RR2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28
GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (US, RR3 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17, reports as "-Foreign B-" RR3 means USA?
GAME( 1993, ridgeracc, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (US, RR3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28, purportedly 3 Screen version, reports as "-Foreign B-"
GAME( 1993, ridgeracj, ridgerac, namcos22, ridgera, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer (Japan, RR1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
GAME( 1993, ridgeracf, ridgerac, namcos22, ridgeracf, namcos22_state, init_ridgeraj, ROT0, "Namco", "Ridge Racer Full Scale (World, RRF2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 1993-12-13, very different version, incomplete dump.
GAME( 1994, ridgera2, 0, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (World, RRS2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21 - NOT labeled "B" but based off Japan Rev.B
GAME( 1994, ridgera2j, ridgera2, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Japan, RRS1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21
GAME( 1994, ridgera2ja, ridgera2, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (Japan, RRS1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-13
GAME( 1994, ridgera28, ridgera2, namcos22, ridgera2, namcos22_state, init_ridger2j, ROT0, "Namco", "Ridge Racer 2 (World, RRS8)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-XX-XX - Test Location / proto??
GAME( 1993, ridgerac, 0, namcos22, ridgera, namcos22_state, init_ridgerac, ROT0, "Namco", "Ridge Racer (World, RR2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17
GAME( 1993, ridgeraca, ridgerac, namcos22, ridgera, namcos22_state, init_ridgerac, ROT0, "Namco", "Ridge Racer (World, RR2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28
GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, namcos22_state, init_ridgerac, ROT0, "Namco", "Ridge Racer (US, RR3 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1994-01-17, reports as "-Foreign B-" RR3 means USA?
GAME( 1993, ridgeracc, ridgerac, namcos22, ridgera, namcos22_state, init_ridgerac, ROT0, "Namco", "Ridge Racer (US, RR3)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-28, purportedly 3 Screen version, reports as "-Foreign B-"
GAME( 1993, ridgeracj, ridgerac, namcos22, ridgera, namcos22_state, init_ridgerac, ROT0, "Namco", "Ridge Racer (Japan, RR1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 1993-10-07
GAME( 1993, ridgeracf, ridgerac, namcos22, ridgeracf, namcos22_state, init_ridgerac, ROT0, "Namco", "Ridge Racer Full Scale (World, RRF2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 1993-12-13, very different version, incomplete dump.
GAME( 1994, ridgera2, 0, namcos22, ridgera2, namcos22_state, init_ridgera2, ROT0, "Namco", "Ridge Racer 2 (World, RRS2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21 - NOT labeled "B" but based off Japan Rev.B
GAME( 1994, ridgera2j, ridgera2, namcos22, ridgera2, namcos22_state, init_ridgera2, ROT0, "Namco", "Ridge Racer 2 (Japan, RRS1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-21
GAME( 1994, ridgera2ja, ridgera2, namcos22, ridgera2, namcos22_state, init_ridgera2, ROT0, "Namco", "Ridge Racer 2 (Japan, RRS1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-06-13
GAME( 1994, ridgera28, ridgera2, namcos22, ridgera2, namcos22_state, init_ridgera2, ROT0, "Namco", "Ridge Racer 2 (World, RRS8)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 1994-XX-XX - Test Location / proto??
GAME( 1994, cybrcomm, 0, cybrcomm, cybrcomm, namcos22_state, init_cybrcomm, ROT0, "Namco", "Cyber Commando (Japan, CY1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 10/14/94
GAME( 1995, raverace, 0, namcos22, raveracw, namcos22_state, init_raveracw, ROT0, "Namco", "Rave Racer (World, RV2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveracej, raverace, namcos22, raveracw, namcos22_state, init_raveracw, ROT0, "Namco", "Rave Racer (Japan, RV1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveraceja, raverace, namcos22, raveracw, namcos22_state, init_raveracw, ROT0, "Namco", "Rave Racer (Japan, RV1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 06/29/95
GAME( 1994, acedrive, 0, namcos22, acedrvr, namcos22_state, init_acedrvr, ROT0, "Namco", "Ace Driver: Racing Evolution (World, AD2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 94/10/20 16:22:25
GAME( 1995, raverace, 0, namcos22, raverace, namcos22_state, init_raverace, ROT0, "Namco", "Rave Racer (World, RV2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveracej, raverace, namcos22, raverace, namcos22_state, init_raverace, ROT0, "Namco", "Rave Racer (Japan, RV1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 07/16/95
GAME( 1995, raveraceja, raverace, namcos22, raverace, namcos22_state, init_raverace, ROT0, "Namco", "Rave Racer (Japan, RV1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 06/29/95
GAME( 1994, acedrive, 0, namcos22, acedrive, namcos22_state, init_acedrive, ROT0, "Namco", "Ace Driver: Racing Evolution (World, AD2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 94/10/20 16:22:25
GAME( 1996, victlap, 0, namcos22, victlap, namcos22_state, init_victlap, ROT0, "Namco", "Ace Driver: Victory Lap (World, ADV2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/05/21 19:39:59
GAME( 1996, victlapa, victlap, namcos22, victlap, namcos22_state, init_victlap, ROT0, "Namco", "Ace Driver: Victory Lap (World, ADV2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:29:10
GAME( 1996, victlapj, victlap, namcos22, victlap, namcos22_state, init_victlap, ROT0, "Namco", "Ace Driver: Victory Lap (Japan, ADV1 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 96/02/13 17:29:10
@ -6255,8 +6254,8 @@ GAME( 1994, alpinerd, 0, alpine, alpiner, alpine_state, init_al
GAME( 1994, alpinerc, alpinerd, alpine, alpiner, alpine_state, init_alpiner, ROT0, "Namco", "Alpine Racer (World, AR2 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1994, alpinerjc, alpinerd, alpine, alpiner, alpine_state, init_alpiner, ROT0, "Namco", "Alpine Racer (Japan, AR1 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, airco22b, 0, airco22b, airco22, namcos22s_state, init_airco22, ROT0, "Namco", "Air Combat 22 (Japan, ACS1 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1995, cybrcycc, 0, cybrcycc, cybrcycc, namcos22s_state, init_cybrcyc, ROT0, "Namco", "Cyber Cycles (World, CB2 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 95/04/04
GAME( 1995, cybrcyccj, cybrcycc, cybrcycc, cybrcycc, namcos22s_state, init_cybrcyc, ROT0, "Namco", "Cyber Cycles (Japan, CB1 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 95/04/04
GAME( 1995, cybrcycc, 0, cybrcycc, cybrcycc, namcos22s_state, init_cybrcycc, ROT0, "Namco", "Cyber Cycles (World, CB2 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 95/04/04
GAME( 1995, cybrcyccj, cybrcycc, cybrcycc, cybrcycc, namcos22s_state, init_cybrcycc, ROT0, "Namco", "Cyber Cycles (Japan, CB1 Ver.C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // 95/04/04
GAME( 1995, dirtdash, 0, dirtdash, dirtdash, namcos22s_state, init_dirtdash, ROT0, "Namco", "Dirt Dash (World, DT2 Ver.B)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // 96/?1/0? 21:03:?6, one ROM is bad
GAME( 1995, dirtdasha, dirtdash, dirtdash, dirtdash, namcos22s_state, init_dirtdash, ROT0, "Namco", "Dirt Dash (World, DT2 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 95/12/20 20:01:56
GAME( 1995, dirtdashj, dirtdash, dirtdash, dirtdash, namcos22s_state, init_dirtdash, ROT0, "Namco", "Dirt Dash (Japan, DT1 Ver.A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // 95/12/20 20:06:45

View File

@ -82,6 +82,7 @@ struct namcos22_scenenode
int cmode;
int flags;
int cz_adjust;
int bri_adjust;
int direct;
namcos22_polyvertex v[4];
} quad;
@ -120,6 +121,7 @@ struct namcos22_object_data
int cmode;
int fadefactor;
int pfade_enabled;
int brifactor;
int fogfactor;
int zfog_enabled;
int cz_adjust;
@ -225,12 +227,12 @@ public:
void cybrcomm(machine_config &config);
void namcos22(machine_config &config);
void init_acedrvr();
void init_raveracw();
void init_ridger2j();
void init_acedrive();
void init_raverace();
void init_ridgera2();
void init_victlap();
void init_cybrcomm();
void init_ridgeraj();
void init_ridgerac();
// renderer
u16 *m_texture_tilemap;
@ -458,6 +460,7 @@ protected:
u16 m_keycus_rng = 0;
int m_gametype = 0;
int m_cz_adjust = 0;
int m_bri_adjust = 0;
std::unique_ptr<namcos22_renderer> m_poly;
u16 m_dspram_bank = 0;
u16 m_dspram16_latch = 0;
@ -521,7 +524,7 @@ public:
void tokyowar(machine_config &config);
void init_aquajet();
void init_cybrcyc();
void init_cybrcycc();
void init_tokyowar();
void init_dirtdash();
void init_airco22();

View File

@ -44,12 +44,14 @@ void namcos22_renderer::renderscanline_uvi_full(int32_t scanline, const extent_t
int zfog_enabled = extra.zfog_enabled;
int fogfactor = 0xff - extra.fogfactor;
int fadefactor = 0xff - extra.fadefactor;
int brifactor = 0xff - extra.brifactor;
int alphafactor = 0xff - extra.alpha;
bool alpha_enabled = extra.alpha_enabled;
u8 alpha_pen = m_state.m_poly_alpha_pen;
rgbaint_t fogcolor = extra.fogcolor;
rgbaint_t fadecolor = extra.fadecolor;
rgbaint_t polycolor = extra.polycolor;
rgbaint_t white(0, 0xff, 0xff, 0xff);
int polyfade_enabled = extra.pfade_enabled;
int penmask = 0xff;
int penshift = 0;
@ -172,6 +174,12 @@ void namcos22_renderer::renderscanline_uvi_full(int32_t scanline, const extent_t
int shade = i*ooz;
rgb.scale_imm_and_clamp(shade << 2);
// additional brightness
if (brifactor != 0xff)
{
rgb.blend(white, brifactor);
}
dest[x] = rgb.to_rgba();
primap[x] = (primap[x] & ~1) | prioverchar;
@ -297,16 +305,19 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit
}
}
namcos22_object_data &extra = object_data().next();
int flags = node->data.quad.flags;
int color = node->data.quad.color;
int cz_adjust = node->data.quad.cz_adjust;
int bri_adjust = node->data.quad.bri_adjust;
namcos22_object_data &extra = object_data().next();
extra.destbase = &bitmap;
extra.pfade_enabled = 0;
extra.zfog_enabled = 0;
extra.fadefactor = 0;
extra.fogfactor = 0;
extra.brifactor = 0;
extra.pens = &m_state.m_palette->pen((color & 0x7f) << 8);
extra.primap = &screen.priority();
@ -370,6 +381,11 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit
extra.czram = m_state.m_recalc_czram[bank].get();
}
}
else
{
extra.fogcolor.set(0, 0xff, 0xff, 0xff);
extra.fogfactor = std::clamp(bri_adjust >> 15 & 0x1c0, 0, 0xff);
}
}
}
@ -396,6 +412,9 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit
extra.czram = (u8*)&m_state.m_czram[cztype << (13-2)];
}
}
// additional brightness, only used in cybrcomm
extra.brifactor = std::clamp(bri_adjust >> 15 & 0x1c0, 0, 0xff);
}
render_triangle_fan<4>(m_cliprect, render_delegate(&namcos22_renderer::renderscanline_uvi_full, this), clipverts, clipv);
@ -536,7 +555,7 @@ struct namcos22_scenenode *namcos22_renderer::alloc_scenenode(running_machine &m
{
if (node)
{
/* use free pool */
// use free pool
m_scenenode_cur = node->next;
}
else
@ -559,7 +578,7 @@ struct namcos22_scenenode *namcos22_renderer::new_scenenode(running_machine &mac
struct namcos22_scenenode *next = node->data.nonleaf.next[hash];
if (!next)
{
/* lazily allocate tree node for this radix */
// lazily allocate tree node for this radix
next = alloc_scenenode(machine, m_scenenode_cur);
next->type = NAMCOS22_SCENENODE_NONLEAF;
node->data.nonleaf.next[hash] = next;
@ -571,7 +590,7 @@ struct namcos22_scenenode *namcos22_renderer::new_scenenode(running_machine &mac
if (node->type == NAMCOS22_SCENENODE_NONLEAF)
{
/* first leaf allocation on this branch */
// first leaf allocation on this branch
node->type = type;
return node;
}
@ -732,7 +751,7 @@ void namcos22_state::register_normals(int addr, float m[4][4])
float ny = dspfixed_to_nativefloat(point_read(addr + i * 3 + 1));
float nz = dspfixed_to_nativefloat(point_read(addr + i * 3 + 2));
/* transform normal vector */
// transform normal vector
transform_normal(&nx, &ny, &nz, m);
float dotproduct = nx*m_camera_lx + ny*m_camera_ly + nz*m_camera_lz;
if (dotproduct < 0.0f)
@ -790,6 +809,7 @@ void namcos22_state::draw_direct_poly(const u16 *src)
node->data.quad.texturebank = (src[1 + 4] & 0xf000) >> 12;
}
node->data.quad.cz_adjust = m_cz_adjust;
node->data.quad.bri_adjust = m_bri_adjust;
node->data.quad.flags = (src[3] << 6 & 0x1fff00) | cztype;
node->data.quad.color = (src[2] & 0xff00) >> 8;
src += 4;
@ -901,7 +921,7 @@ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int po
transform_point(&pv->x, &pv->y, &pv->z, m);
}
/* backface cull one-sided polygons */
// backface cull one-sided polygons
if (flags & 0x0020)
{
float c1 =
@ -1010,6 +1030,7 @@ void namcos22_state::blit_single_quad(u32 color, u32 addr, float m[4][4], int po
node->data.quad.color = (color >> 8) & 0xff;
node->data.quad.flags = flags >> 10 & 3;
node->data.quad.cz_adjust = m_cz_adjust;
node->data.quad.bri_adjust = m_bri_adjust;
for (i = 0; i < 4; i++)
{
@ -1290,9 +1311,9 @@ void namcos22_state::slavesim_handle_200002(const s32 *src, int code)
m[1][2] = dspfixed_to_nativefloat(src[0x8]);
m[2][2] = dspfixed_to_nativefloat(src[0x9]);
m[3][0] = src[0xa]; /* xpos */
m[3][1] = src[0xb]; /* ypos */
m[3][2] = src[0xc]; /* zpos */
m[3][0] = src[0xa]; // xpos
m[3][1] = src[0xb]; // ypos
m[3][2] = src[0xc]; // zpos
matrix3d_multiply(m, m_viewmatrix);
blit_polyobject(code, m);
@ -1322,18 +1343,28 @@ void namcos22_state::slavesim_handle_300000(const s32 *src)
void namcos22_state::slavesim_handle_233002(const s32 *src)
{
/*
00233002
00000000 // cz adjust (signed24)
0003dd00 // z bias adjust
001fffff // far plane?
00007fff 00000000 00000000
00000000 00007fff 00000000
00000000 00000000 00007fff
00000000 00000000 00000000
/**
* 00233002
* 00000000 // cz adjust (signed24)
* 0003dd00 // z bias adjust
* 001fffff // brightness adjust?
* 00007fff 00000000 00000000
* 00000000 00007fff 00000000
* 00000000 00000000 00007fff
* 00000000 00000000 00000000
*/
m_cz_adjust = signed24(src[1]);
m_objectshift = src[2];
/**
* 001fffff: common - no effect
* 003fffff: adillor arrows on level select screen - no effect according to video
* 003fffff: propcycl attract mode particles when Solitar rises - unknown
* 003fffff: timecris shoot helicopter - small increase in brightness
* 005fffff: timecris shoot other destructible object - big increase in brightness
* 009fffff: cybrcomm shoot enemy with machine gun - opaque white (no shading)
*/
m_bri_adjust = src[3];
}
void namcos22_state::simulate_slavedsp()
@ -2389,7 +2420,7 @@ void namcos22_state::update_mixer()
m_screen_fade_g = nthbyte(m_mixer, 0x13) << 8 | nthbyte(m_mixer, 0x14);
m_screen_fade_b = nthbyte(m_mixer, 0x15) << 8 | nthbyte(m_mixer, 0x16);
// raveracw is the only game using multiple fog colors (city smog, cars under tunnels, brake disc in attract mode)
// raverace is the only game using multiple fog colors (city smog, cars under tunnels, brake disc in attract mode)
m_fog_colormask = m_mixer[0x84/4];
// fog color per cz type