enum {
SCALE_1_1,
SCALE_4_3,
+ SCALE_4_3v2,
SCALE_FULLSCREEN,
SCALE_CUSTOM,
};
pl_rearmed_cbs.frameskip = 0;
pl_rearmed_cbs.gpu_peops.iUseDither = 0;
pl_rearmed_cbs.gpu_peops.dwActFixes = 1<<7;
+ pl_rearmed_cbs.gpu_unai.abe_hack =
+ pl_rearmed_cbs.gpu_unai.no_light =
+ pl_rearmed_cbs.gpu_unai.no_blend = 0;
iUseReverb = 2;
iUseInterpolation = 1;
CE_CONFIG_VAL(Cpu),
CE_CONFIG_VAL(CdrReschedule),
CE_INTVAL(region),
- CE_INTVAL(scaling),
+ CE_INTVAL_V(scaling, 2),
CE_INTVAL(g_layer_x),
CE_INTVAL(g_layer_y),
CE_INTVAL(g_layer_w),
CE_INTVAL_P(frameskip),
CE_INTVAL_P(gpu_peops.iUseDither),
CE_INTVAL_P(gpu_peops.dwActFixes),
+ CE_INTVAL_P(gpu_unai.abe_hack),
+ CE_INTVAL_P(gpu_unai.no_light),
+ CE_INTVAL_P(gpu_unai.no_blend),
CE_INTVAL(iUseReverb),
CE_INTVAL(iXAPitch),
CE_INTVAL_V(iUseInterpolation, 2),
// ------------ gfx options menu ------------
-static const char *men_scaler[] = { "1x1", "scaled 4:3", "fullscreen", "custom", NULL };
+static const char *men_scaler[] = { "1x1", "scaled 4:3", "integer scaled 4:3", "fullscreen", "custom", NULL };
static const char h_cscaler[] = "Displays the scaler layer, you can resize it\n"
"using d-pad or move it using R+d-pad";
static const char *men_dummy[] = { NULL };
// ------------ bios/plugins ------------
+static menu_entry e_menu_plugin_gpu_unai[] =
+{
+ mee_onoff ("Abe's Odyssey hack", 0, pl_rearmed_cbs.gpu_unai.abe_hack, 1),
+ mee_onoff ("Disable lighting", 0, pl_rearmed_cbs.gpu_unai.no_light, 1),
+ mee_onoff ("Disable blending", 0, pl_rearmed_cbs.gpu_unai.no_blend, 1),
+ mee_end,
+};
+
+static int menu_loop_plugin_gpu_unai(int id, int keys)
+{
+ int sel = 0;
+ me_loop(e_menu_plugin_gpu_unai, &sel);
+ return 0;
+}
+
static const char *men_gpu_dithering[] = { "None", "Game dependant", "Always", NULL };
static const char h_gpu_0[] = "Needed for Chrono Cross";
static const char h_gpu_1[] = "Capcom fighting games";
static const char h_gpu_9[] = "better g-colors, worse textures";
static const char h_gpu_10[] = "Toggle busy flags after drawing";
-static menu_entry e_menu_plugin_gpu[] =
+static menu_entry e_menu_plugin_gpu_peops[] =
{
mee_enum ("Dithering", 0, pl_rearmed_cbs.gpu_peops.iUseDither, men_gpu_dithering),
mee_onoff_h ("Odd/even bit hack", 0, pl_rearmed_cbs.gpu_peops.dwActFixes, 1<<0, h_gpu_0),
mee_end,
};
-static int menu_loop_plugin_gpu(int id, int keys)
+static int menu_loop_plugin_gpu_peops(int id, int keys)
{
static int sel = 0;
- me_loop(e_menu_plugin_gpu, &sel);
+ me_loop(e_menu_plugin_gpu_peops, &sel);
return 0;
}
"the game for change to take effect";
static const char h_plugin_xpu[] = "Must save config and reload the game\n"
"for plugin change to take effect";
-static const char h_gpu[] = "Configure P.E.Op.S. SoftGL Driver V1.17";
+static const char h_gpu_peops[] = "Configure P.E.Op.S. SoftGL Driver V1.17";
+static const char h_gpu_unai[] = "Configure Unai/PCSX4ALL Team GPU plugin";
static const char h_spu[] = "Configure built-in P.E.Op.S. Sound Driver V1.7";
static menu_entry e_menu_plugin_options[] =
mee_enum_h ("BIOS", 0, bios_sel, bioses, h_bios),
mee_enum_h ("GPU plugin", 0, gpu_plugsel, gpu_plugins, h_plugin_xpu),
mee_enum_h ("SPU plugin", 0, spu_plugsel, spu_plugins, h_plugin_xpu),
- mee_handler_h ("Configure gpu_peops plugin", menu_loop_plugin_gpu, h_gpu),
+ mee_handler_h ("Configure gpu_peops plugin", menu_loop_plugin_gpu_peops, h_gpu_peops),
+ mee_handler_h ("Configure PCSX4ALL GPU plugin", menu_loop_plugin_gpu_unai, h_gpu_unai),
mee_handler_h ("Configure built-in SPU plugin", menu_loop_plugin_spu, h_spu),
mee_end,
};
void menu_notify_mode_change(int w, int h, int bpp)
{
+ float mult;
+ int imult;
+
last_psx_w = w;
last_psx_h = h;
last_psx_bpp = bpp;
- if (scaling == SCALE_1_1) {
- g_layer_x = 800/2 - w/2; g_layer_y = 480/2 - h/2;
+ switch (scaling) {
+ case SCALE_1_1:
g_layer_w = w; g_layer_h = h;
+ break;
+
+ case SCALE_4_3:
+ mult = 240.0f / (float)h * 4.0f / 3.0f;
+ if (h > 256)
+ mult *= 2.0f;
+ g_layer_w = mult * (float)g_menuscreen_h;
+ g_layer_h = g_menuscreen_h;
+ printf(" -> %dx%d %.1f\n", g_layer_w, g_layer_h, mult);
+ break;
+
+ case SCALE_4_3v2:
+ // 4:3 that prefers integer scaling
+ imult = g_menuscreen_h / h;
+ g_layer_w = w * imult;
+ g_layer_h = h * imult;
+ mult = (float)g_layer_w / (float)g_layer_h;
+ if (mult < 1.25f || mult > 1.666f)
+ g_layer_w = 4.0f/3.0f * (float)g_layer_h;
+ printf(" -> %dx%d %.1f\n", g_layer_w, g_layer_h, mult);
+ break;
+
+ case SCALE_FULLSCREEN:
+ g_layer_w = g_menuscreen_w;
+ g_layer_h = g_menuscreen_h;
+ break;
+
+ default:
+ break;
}
+
+ g_layer_x = g_menuscreen_w / 2 - g_layer_w / 2;
+ g_layer_y = g_menuscreen_h / 2 - g_layer_h / 2;
+ if (g_layer_x < 0) g_layer_x = 0;
+ if (g_layer_y < 0) g_layer_y = 0;
+ if (g_layer_w > g_menuscreen_w) g_layer_w = g_menuscreen_w;
+ if (g_layer_h > g_menuscreen_h) g_layer_w = g_menuscreen_h;
}
static void menu_leave_emu(void)
plat_video_menu_leave();
- switch (scaling) {
- case SCALE_1_1:
- menu_notify_mode_change(last_psx_w, last_psx_h, last_psx_bpp);
- break;
- case SCALE_4_3:
- g_layer_x = 80; g_layer_y = 0;
- g_layer_w = 640; g_layer_h = 480;
- break;
- case SCALE_FULLSCREEN:
- g_layer_x = 0; g_layer_y = 0;
- g_layer_w = 800; g_layer_h = 480;
- break;
- case SCALE_CUSTOM:
- break;
- }
+ menu_notify_mode_change(last_psx_w, last_psx_h, last_psx_bpp);
psxCpu = (Config.Cpu == CPU_INTERPRETER) ? &psxInt : &psxRec;
if (psxCpu != prev_cpu)