naomi: auto-rotate screen, no widescreen when rot, lightgun as analog
rotate screen for naomi games that need it disable widescreen when rotating screen detect lightgun games and enable proper settings disable model 3 comm board for atomiswave
This commit is contained in:
parent
3660cf49f4
commit
98b2a32eae
|
@ -1848,6 +1848,11 @@ struct maple_naomi_jamma : maple_sega_controller
|
|||
case JVS::LightGun:
|
||||
io_boards.emplace_back(new jvs_namco_jyu(1, this));
|
||||
break;
|
||||
case JVS::LightGunAsAnalog:
|
||||
// Regular board sending lightgun coords as axis 0/1
|
||||
io_boards.emplace_back(new jvs_837_13551(1, this));
|
||||
io_boards.back()->lightgun_as_analog = true;
|
||||
break;
|
||||
case JVS::Mazan:
|
||||
io_boards.emplace_back(new jvs_namco_fcb(1, this));
|
||||
io_boards.emplace_back(new jvs_namco_fcb(2, this));
|
||||
|
@ -1868,13 +1873,6 @@ struct maple_naomi_jamma : maple_sega_controller
|
|||
io_boards.emplace_back(new jvs_namco_v226_pcb(1, this));
|
||||
break;
|
||||
}
|
||||
if (settings.input.JammaSetup != JVS::Mazan)
|
||||
for (int bus = 0; bus < MAPLE_PORTS; ++bus)
|
||||
if ((MapleDeviceType)settings.input.maple_devices[bus] == MDT_LightGun)
|
||||
{
|
||||
io_boards.back()->lightgun_as_analog = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
virtual ~maple_naomi_jamma()
|
||||
{
|
||||
|
@ -2678,7 +2676,6 @@ u32 jvs_io_board::handle_jvs_message(u8 *buffer_in, u32 length_in, u8 *buffer_ou
|
|||
LOGJVS("ana ");
|
||||
if (lightgun_as_analog)
|
||||
{
|
||||
// Death Crimson / Confidential Mission
|
||||
u16 x = mo_x_abs * 0xFFFF / 639;
|
||||
u16 y = mo_y_abs * 0xFFFF / 479;
|
||||
if (mo_x_abs < 0 || mo_x_abs > 639 || mo_y_abs < 0 || mo_y_abs > 479)
|
||||
|
|
|
@ -419,7 +419,7 @@ void WriteMem_naomi(u32 address, u32 data, u32 size)
|
|||
INFO_LOG(NAOMI, "called without cartridge");
|
||||
return;
|
||||
}
|
||||
if (address >= NAOMI_COMM2_CTRL_addr && address <= NAOMI_COMM2_STATUS1_addr)
|
||||
if (address >= NAOMI_COMM2_CTRL_addr && address <= NAOMI_COMM2_STATUS1_addr && settings.platform.system == DC_PLATFORM_NAOMI)
|
||||
m3comm.WriteMem(address, data, size);
|
||||
else
|
||||
CurrentCartridge->WriteMem(address, data, size);
|
||||
|
|
|
@ -56,6 +56,7 @@ u32 RomCacheMapCount;
|
|||
char naomi_game_id[33];
|
||||
InputDescriptors *NaomiGameInputs;
|
||||
u8 *naomi_default_eeprom;
|
||||
bool naomi_rotate_screen;
|
||||
|
||||
extern MemChip *sys_rom;
|
||||
|
||||
|
@ -355,10 +356,13 @@ static void naomi_cart_LoadZip(const char *filename)
|
|||
}
|
||||
if (naomi_default_eeprom == NULL && game->eeprom_dump != NULL)
|
||||
naomi_default_eeprom = game->eeprom_dump;
|
||||
naomi_rotate_screen = game->rotation_flag == ROT270;
|
||||
|
||||
CurrentCartridge->Init();
|
||||
|
||||
strcpy(naomi_game_id, CurrentCartridge->GetGameId().c_str());
|
||||
if (naomi_game_id[0] == '\0')
|
||||
strcpy(naomi_game_id, game->name);
|
||||
NOTICE_LOG(NAOMI, "NAOMI GAME ID [%s]", naomi_game_id);
|
||||
|
||||
} catch (ReicastException& ex) {
|
||||
|
|
|
@ -97,6 +97,7 @@ int naomi_cart_GetPlatform(const char *path);
|
|||
|
||||
extern char naomi_game_id[];
|
||||
extern u8 *naomi_default_eeprom;
|
||||
extern bool naomi_rotate_screen;
|
||||
|
||||
extern Cartridge *CurrentCartridge;
|
||||
|
||||
|
|
|
@ -398,13 +398,21 @@ void LoadSpecialSettings()
|
|||
INFO_LOG(BOOT, "Enabling JVS rotary encoders for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = JVS::OutTrigger;
|
||||
}
|
||||
|
||||
if (!strcmp("COSMIC SMASH IN JAPAN", naomi_game_id))
|
||||
else if (!strcmp("COSMIC SMASH IN JAPAN", naomi_game_id))
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling translucent depth multipass for game %s", naomi_game_id);
|
||||
settings.rend.TranslucentPolygonDepthMask = true;
|
||||
tr_poly_depth_mask_game = true;
|
||||
}
|
||||
else if (!strcmp(naomi_game_id, "THE MAZE OF THE KINGS")
|
||||
|| !strcmp(naomi_game_id, " CONFIDENTIAL MISSION ---------")
|
||||
|| !strcmp(naomi_game_id, "DEATH CRIMSON OX")
|
||||
|| !strncmp(naomi_game_id, "hotd2", 5)) // House of the Dead 2
|
||||
{
|
||||
INFO_LOG(BOOT, "Enabling lightgun as analog setup for game %s", naomi_game_id);
|
||||
settings.input.JammaSetup = JVS::LightGunAsAnalog;
|
||||
}
|
||||
settings.rend.Rotate90 = naomi_rotate_screen;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -800,7 +808,7 @@ void InitSettings()
|
|||
settings.dispmanx.Keep_Aspect = true;
|
||||
#endif
|
||||
|
||||
#if HOST_OS != OS_LINUX || defined(__ANDROID__) || defined(TARGET_PANDORA)
|
||||
#if defined(__ANDROID__) || defined(TARGET_PANDORA)
|
||||
settings.aica.BufferSize = 5644; // 128 ms
|
||||
#else
|
||||
settings.aica.BufferSize = 2822; // 64 ms
|
||||
|
@ -1021,7 +1029,8 @@ void SaveSettings()
|
|||
cfgSaveInt("config", "rend.ScreenStretching", settings.rend.ScreenStretching);
|
||||
cfgSaveBool("config", "rend.Fog", settings.rend.Fog);
|
||||
cfgSaveBool("config", "rend.FloatVMUs", settings.rend.FloatVMUs);
|
||||
cfgSaveBool("config", "rend.Rotate90", settings.rend.Rotate90);
|
||||
if (!naomi_rotate_screen || !settings.rend.Rotate90)
|
||||
cfgSaveBool("config", "rend.Rotate90", settings.rend.Rotate90);
|
||||
cfgSaveInt("config", "ta.skip", settings.pvr.ta_skip);
|
||||
cfgSaveInt("config", "pvr.rend", settings.pvr.rend);
|
||||
cfgSaveBool("config", "rend.PerStripSorting", settings.rend.PerStripSorting);
|
||||
|
|
|
@ -751,7 +751,7 @@ static bool RenderFrame()
|
|||
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(struct PolyParam) * pvrrc.global_param_tr.used(), pvrrc.global_param_tr.head(), GL_STATIC_DRAW);
|
||||
glCheck();
|
||||
|
||||
if (is_rtt || !settings.rend.WideScreen || matrices.IsClipped())
|
||||
if (is_rtt || !settings.rend.WideScreen || matrices.IsClipped() || settings.rend.Rotate90)
|
||||
{
|
||||
float width;
|
||||
float height;
|
||||
|
|
|
@ -1140,7 +1140,7 @@ bool RenderFrame()
|
|||
}
|
||||
}
|
||||
|
||||
bool wide_screen_on = !is_rtt && settings.rend.WideScreen && !matrices.IsClipped();
|
||||
bool wide_screen_on = !is_rtt && settings.rend.WideScreen && !matrices.IsClipped() && !settings.rend.Rotate90;
|
||||
|
||||
//Color is cleared by the background plane
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@ TileClipping BaseDrawer::SetTileClip(u32 val, vk::Rect2D& clipRect)
|
|||
void BaseDrawer::SetBaseScissor()
|
||||
{
|
||||
bool wide_screen_on = settings.rend.WideScreen && !pvrrc.isRenderFramebuffer
|
||||
&& !matrices.IsClipped();
|
||||
&& !matrices.IsClipped() && !settings.rend.Rotate90;
|
||||
if (!wide_screen_on)
|
||||
{
|
||||
if (pvrrc.isRenderFramebuffer)
|
||||
|
|
|
@ -389,7 +389,8 @@ enum class JVS {
|
|||
WorldKicks,
|
||||
WorldKicksPCB,
|
||||
Keyboard,
|
||||
OutTrigger
|
||||
OutTrigger,
|
||||
LightGunAsAnalog,
|
||||
};
|
||||
|
||||
struct settings_t
|
||||
|
|
Loading…
Reference in New Issue