(Re)added Frameskip option and added PAL 576p support (Tanooki16) (#1045)

* (Re)added frameskip option and added PAL 576p support (Tanooki16)

* Fix mistake with number of total video modes (fixes PAL 60Hz option not appearing)
This commit is contained in:
saulfabreg Wii VC Project 2023-01-24 17:29:08 -05:00 committed by GitHub
parent d193277eca
commit c84d99060c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 44 additions and 21 deletions

View File

@ -3666,6 +3666,7 @@ static int MenuSettingsVideo()
sprintf(options.name[i++], "Video Mode"); sprintf(options.name[i++], "Video Mode");
sprintf(options.name[i++], "SNES Hi-Res Mode"); sprintf(options.name[i++], "SNES Hi-Res Mode");
sprintf(options.name[i++], "Sprites Per-Line Limit"); sprintf(options.name[i++], "Sprites Per-Line Limit");
sprintf(options.name[i++], "Frame Skipping");
sprintf(options.name[i++], "Crosshair"); sprintf(options.name[i++], "Crosshair");
sprintf(options.name[i++], "Show Framerate"); sprintf(options.name[i++], "Show Framerate");
sprintf(options.name[i++], "Show Local Time"); sprintf(options.name[i++], "Show Local Time");
@ -3757,7 +3758,7 @@ static int MenuSettingsVideo()
case 5: case 5:
GCSettings.videomode++; GCSettings.videomode++;
if(GCSettings.videomode > 4) if(GCSettings.videomode > 5)
GCSettings.videomode = 0; GCSettings.videomode = 0;
break; break;
@ -3770,18 +3771,22 @@ static int MenuSettingsVideo()
break; break;
case 8: case 8:
GCSettings.crosshair ^= 1; GCSettings.FrameSkip ^= 1;
break; break;
case 9: case 9:
Settings.DisplayFrameRate ^= 1; GCSettings.crosshair ^= 1;
break; break;
case 10: case 10:
Settings.DisplayTime ^= 1; Settings.DisplayFrameRate ^= 1;
break; break;
case 11: case 11:
Settings.DisplayTime ^= 1;
break;
case 12:
#ifdef HW_RVL #ifdef HW_RVL
GCSettings.sfxOverclock++; GCSettings.sfxOverclock++;
if (GCSettings.sfxOverclock > 6) { if (GCSettings.sfxOverclock > 6) {
@ -3842,15 +3847,18 @@ static int MenuSettingsVideo()
case 2: case 2:
sprintf (options.value[5], "Progressive (480p)"); break; sprintf (options.value[5], "Progressive (480p)"); break;
case 3: case 3:
sprintf (options.value[5], "PAL (50Hz)"); break; sprintf (options.value[5], "Progressive (576p)"); break;
case 4: case 4:
sprintf (options.value[5], "PAL (50Hz)"); break;
case 5:
sprintf (options.value[5], "PAL (60Hz)"); break; sprintf (options.value[5], "PAL (60Hz)"); break;
} }
sprintf (options.value[6], "%s", GCSettings.HiResolution == 1 ? "On" : "Off"); sprintf (options.value[6], "%s", GCSettings.HiResolution == 1 ? "On" : "Off");
sprintf (options.value[7], "%s", GCSettings.SpriteLimit == 1 ? "On" : "Off"); sprintf (options.value[7], "%s", GCSettings.SpriteLimit == 1 ? "On" : "Off");
sprintf (options.value[8], "%s", GCSettings.crosshair == 1 ? "On" : "Off"); sprintf (options.value[8], "%s", GCSettings.FrameSkip == 1 ? "On" : "Off");
sprintf (options.value[9], "%s", Settings.DisplayFrameRate ? "On" : "Off"); sprintf (options.value[9], "%s", GCSettings.crosshair == 1 ? "On" : "Off");
sprintf (options.value[10], "%s", Settings.DisplayTime ? "On" : "Off"); sprintf (options.value[10], "%s", Settings.DisplayFrameRate ? "On" : "Off");
sprintf (options.value[11], "%s", Settings.DisplayTime ? "On" : "Off");
switch(GCSettings.sfxOverclock) switch(GCSettings.sfxOverclock)
{ {
case 0: case 0:

View File

@ -153,6 +153,7 @@ preparePrefsData ()
createXMLSetting("FilterMethod", "Filter Method", toStr(GCSettings.FilterMethod)); createXMLSetting("FilterMethod", "Filter Method", toStr(GCSettings.FilterMethod));
createXMLSetting("HiResolution", "SNES Hi-Res Mode", toStr(GCSettings.HiResolution)); createXMLSetting("HiResolution", "SNES Hi-Res Mode", toStr(GCSettings.HiResolution));
createXMLSetting("SpriteLimit", "Sprites per-line Limit", toStr(GCSettings.SpriteLimit)); createXMLSetting("SpriteLimit", "Sprites per-line Limit", toStr(GCSettings.SpriteLimit));
createXMLSetting("FrameSkip", "Frame Skipping", toStr(GCSettings.FrameSkip));
createXMLSetting("xshift", "Horizontal Video Shift", toStr(GCSettings.xshift)); createXMLSetting("xshift", "Horizontal Video Shift", toStr(GCSettings.xshift));
createXMLSetting("yshift", "Vertical Video Shift", toStr(GCSettings.yshift)); createXMLSetting("yshift", "Vertical Video Shift", toStr(GCSettings.yshift));
createXMLSetting("sfxOverclock", "SuperFX Overclock", toStr(GCSettings.sfxOverclock)); createXMLSetting("sfxOverclock", "SuperFX Overclock", toStr(GCSettings.sfxOverclock));
@ -346,6 +347,7 @@ decodePrefsData ()
loadXMLSetting(&GCSettings.FilterMethod, "FilterMethod"); loadXMLSetting(&GCSettings.FilterMethod, "FilterMethod");
loadXMLSetting(&GCSettings.HiResolution, "HiResolution"); loadXMLSetting(&GCSettings.HiResolution, "HiResolution");
loadXMLSetting(&GCSettings.SpriteLimit, "SpriteLimit"); loadXMLSetting(&GCSettings.SpriteLimit, "SpriteLimit");
loadXMLSetting(&GCSettings.FrameSkip, "FrameSkip");
loadXMLSetting(&GCSettings.xshift, "xshift"); loadXMLSetting(&GCSettings.xshift, "xshift");
loadXMLSetting(&GCSettings.yshift, "yshift"); loadXMLSetting(&GCSettings.yshift, "yshift");
loadXMLSetting(&GCSettings.TurboModeEnabled, "TurboModeEnabled"); loadXMLSetting(&GCSettings.TurboModeEnabled, "TurboModeEnabled");
@ -426,7 +428,7 @@ void FixInvalidSettings()
GCSettings.Controller = CTRL_PAD2; GCSettings.Controller = CTRL_PAD2;
if(!(GCSettings.render >= 0 && GCSettings.render < 5)) if(!(GCSettings.render >= 0 && GCSettings.render < 5))
GCSettings.render = 3; GCSettings.render = 3;
if(!(GCSettings.videomode >= 0 && GCSettings.videomode < 5)) if(!(GCSettings.videomode >= 0 && GCSettings.videomode < 6))
GCSettings.videomode = 0; GCSettings.videomode = 0;
} }
@ -533,13 +535,14 @@ DefaultSettings ()
Settings.DisplayTime = false; Settings.DisplayTime = false;
GCSettings.HiResolution = 1; // Enabled by default GCSettings.HiResolution = 1; // Enabled by default
GCSettings.SpriteLimit = 1; // Enabled by default GCSettings.SpriteLimit = 1; // Enabled by default
GCSettings.FrameSkip = 1; // Enabled by default
// Frame timings in 50hz and 60hz cpu mode // Frame timings in 50hz and 60hz cpu mode
Settings.FrameTimePAL = 20000; Settings.FrameTimePAL = 20000;
Settings.FrameTimeNTSC = 16667; Settings.FrameTimeNTSC = 16667;
GCSettings.sfxOverclock = 0; GCSettings.sfxOverclock = 0;
/* Initialize SuperFX CPU to normal speed by default */ /* Initialize Super FX CPU to normal speed by default */
Settings.SuperFXSpeedPerLine = 5823405; Settings.SuperFXSpeedPerLine = 5823405;
Settings.SuperFXClockMultiplier = 100; Settings.SuperFXClockMultiplier = 100;

View File

@ -534,6 +534,7 @@ int main(int argc, char *argv[])
Settings.Mute = GCSettings.MuteAudio; Settings.Mute = GCSettings.MuteAudio;
Settings.SupportHiRes = (GCSettings.HiResolution == 1); Settings.SupportHiRes = (GCSettings.HiResolution == 1);
Settings.MaxSpriteTilesPerLine = (GCSettings.SpriteLimit ? 34 : 128); Settings.MaxSpriteTilesPerLine = (GCSettings.SpriteLimit ? 34 : 128);
Settings.SkipFrames = (GCSettings.FrameSkip ? AUTO_FRAMERATE : 0);
Settings.AutoDisplayMessages = (Settings.DisplayFrameRate || Settings.DisplayTime ? true : false); Settings.AutoDisplayMessages = (Settings.DisplayFrameRate || Settings.DisplayTime ? true : false);
Settings.MultiPlayer5Master = (GCSettings.Controller == CTRL_PAD4 ? true : false); Settings.MultiPlayer5Master = (GCSettings.Controller == CTRL_PAD4 ? true : false);
Settings.SuperScopeMaster = (GCSettings.Controller == CTRL_SCOPE ? true : false); Settings.SuperScopeMaster = (GCSettings.Controller == CTRL_SCOPE ? true : false);

View File

@ -133,12 +133,13 @@ struct SGCSettings{
float zoomHor; // horizontal zoom amount float zoomHor; // horizontal zoom amount
float zoomVert; // vertical zoom amount float zoomVert; // vertical zoom amount
int videomode; // 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - PAL (50Hz), 4 - PAL (60Hz) int videomode; // 0 - automatic, 1 - NTSC (480i), 2 - Progressive (480p), 3 - Progressive (576p), 4 - PAL (50Hz), 5 - PAL (60Hz)
int render; // 0 - original, 1 - filtered, 2 - unfiltered int render; // 0 - original, 1 - filtered, 2 - unfiltered
int FilterMethod; // convert to RenderFilter int FilterMethod; // convert to RenderFilter
int Controller; int Controller;
int HiResolution; int HiResolution;
int SpriteLimit; int SpriteLimit;
int FrameSkip;
int crosshair; int crosshair;
int widescreen; // 0 - 4:3 aspect, 1 - 16:9 aspect int widescreen; // 0 - 4:3 aspect, 1 - 16:9 aspect
int xshift; // video output shift int xshift; // video output shift

View File

@ -108,9 +108,7 @@ static camera cam = {
}; };
/*** /*** Custom Video modes (used to emulate original console video modes) ***/
*** Custom Video modes (used to emulate original console video modes)
***/
/** Original SNES PAL Resolutions: **/ /** Original SNES PAL Resolutions: **/
@ -261,8 +259,8 @@ static GXRModeObj TV_Custom;
/* TV Modes table */ /* TV Modes table */
static GXRModeObj *tvmodes[4] = { static GXRModeObj *tvmodes[4] = {
&TV_239p, &TV_478i, /* Snes PAL video modes */ &TV_239p, &TV_478i, /* SNES PAL video modes */
&TV_224p, &TV_448i, /* Snes NTSC video modes */ &TV_224p, &TV_448i, /* SNES NTSC video modes */
}; };
/**************************************************************************** /****************************************************************************
@ -401,10 +399,13 @@ static GXRModeObj * FindVideoMode()
case 2: // Progressive (480p) case 2: // Progressive (480p)
mode = &TVNtsc480Prog; mode = &TVNtsc480Prog;
break; break;
case 3: // PAL (50Hz) case 3: // Progressive (576p)
mode = &TVPal576ProgScale;
break;
case 4: // PAL (50Hz)
mode = &TVPal576IntDfScale; mode = &TVPal576IntDfScale;
break; break;
case 4: // PAL (60Hz) case 5: // PAL (60Hz)
mode = &TVEurgb60Hz480IntDf; mode = &TVEurgb60Hz480IntDf;
break; break;
default: default:
@ -416,6 +417,8 @@ static GXRModeObj * FindVideoMode()
* on the Wii, the user can do this themselves on their Wii Settings */ * on the Wii, the user can do this themselves on their Wii Settings */
if(VIDEO_HaveComponentCable()) if(VIDEO_HaveComponentCable())
mode = &TVNtsc480Prog; mode = &TVNtsc480Prog;
else
mode = &TVPal576ProgScale;
#endif #endif
break; break;
@ -430,9 +433,13 @@ static GXRModeObj * FindVideoMode()
// Original Video modes (forced to PAL 50Hz) // Original Video modes (forced to PAL 50Hz)
// set video signal mode // set video signal mode
TV_239p.viTVMode = VI_TVMODE_PAL_DS;
TV_478i.viTVMode = VI_TVMODE_PAL_INT;
TV_224p.viTVMode = VI_TVMODE_PAL_DS; TV_224p.viTVMode = VI_TVMODE_PAL_DS;
TV_448i.viTVMode = VI_TVMODE_PAL_INT; TV_448i.viTVMode = VI_TVMODE_PAL_INT;
// set VI position // set VI position
TV_239p.viYOrigin = (VI_MAX_HEIGHT_PAL/2 - 478/2)/2;
TV_478i.viYOrigin = (VI_MAX_HEIGHT_PAL - 478)/2;
TV_224p.viYOrigin = (VI_MAX_HEIGHT_PAL/2 - 448/2)/2; TV_224p.viYOrigin = (VI_MAX_HEIGHT_PAL/2 - 448/2)/2;
TV_448i.viYOrigin = (VI_MAX_HEIGHT_PAL - 448)/2; TV_448i.viYOrigin = (VI_MAX_HEIGHT_PAL - 448)/2;
break; break;
@ -473,7 +480,7 @@ static GXRModeObj * FindVideoMode()
} }
// check for progressive scan // check for progressive scan
if (mode->viTVMode == VI_TVMODE_NTSC_PROG) if (mode->viTVMode == VI_TVMODE_NTSC_PROG || VI_TVMODE_PAL_PROG)
progressive = true; progressive = true;
else else
progressive = false; progressive = false;
@ -538,7 +545,6 @@ static void SetupVideoMode(GXRModeObj * mode)
* This function MUST be called at startup. * This function MUST be called at startup.
* - also sets up menu video mode * - also sets up menu video mode
***************************************************************************/ ***************************************************************************/
void void
InitGCVideo () InitGCVideo ()
{ {
@ -635,7 +641,11 @@ ResetVideo_Emu ()
rmode->xfbMode = VI_XFBMODE_DF; rmode->xfbMode = VI_XFBMODE_DF;
rmode->viTVMode |= VI_INTERLACE; rmode->viTVMode |= VI_INTERLACE;
} }
Settings.SoundInputRate = 31894;
if (Settings.PAL == 1)
Settings.SoundInputRate = 32090;
else
Settings.SoundInputRate = 31894;
UpdatePlaybackRate(); UpdatePlaybackRate();
} }
else else