From e64011e1c20c62a77e6edc2d73da03ca0efa61ed Mon Sep 17 00:00:00 2001 From: pjgat09 Date: Tue, 14 May 2013 23:06:47 +0000 Subject: [PATCH] N64: Wire up per-game hack options to the plugin screen and to the m64p core. --- BizHawk.MultiClient/Config.cs | 29 + BizHawk.MultiClient/MainForm.cs | 135 ++-- .../N64tools/N64VideoPluginconfig.Designer.cs | 574 +++++++++++++++++- .../N64tools/N64VideoPluginconfig.cs | 165 +++++ .../output/dll/mupen64plus-video-rice.dll | Bin 496640 -> 496640 bytes .../mupen64plus-video-rice/src/Config.cpp | 7 +- 6 files changed, 864 insertions(+), 46 deletions(-) diff --git a/BizHawk.MultiClient/Config.cs b/BizHawk.MultiClient/Config.cs index 16c598e62d..255728fc6a 100644 --- a/BizHawk.MultiClient/Config.cs +++ b/BizHawk.MultiClient/Config.cs @@ -303,6 +303,35 @@ namespace BizHawk.MultiClient public bool RiceLoadHiResTextures = false; public bool RiceDumpTexturesToFiles = false; + public bool RiceUseDefaultHacks = true; + public bool RiceDisableTextureCRC = false; + public bool RiceDisableCulling = false; + public bool RiceIncTexRectEdge = false; + public bool RiceZHack = false; + public bool RiceTextureScaleHack = false; + public bool RicePrimaryDepthHack = false; + public bool RiceTexture1Hack = false; + public bool RiceFastLoadTile = false; + public bool RiceUseSmallerTexture = false; + public int RiceVIWidth = -1; + public int RiceVIHeight = -1; + public int RiceUseCIWidthAndRatio = 0; + public int RiceFullTMEM = 0; + public bool RiceTxtSizeMethod2 = false; + public bool RiceEnableTxtLOD = false; + public int RiceFastTextureCRC = 0; + public bool RiceEmulateClear = false; + public bool RiceForceScreenClear = false; + public int RiceAccurateTextureMappingHack = 0; + public int RiceNormalBlender = 0; + public bool RiceDisableBlender = false; + public bool RiceForceDepthBuffer = false; + public bool RiceDisableObjBG = false; + public int RiceFrameBufferOption = 0; + public int RiceRenderToTextureOption = 0; + public int RiceScreenUpdateSettingHack = 0; + public int RiceEnableHacksForGame = 0; + // General Client Settings public int Input_Hotkey_OverrideOptions = 0; public bool StackOSDMessages = true; diff --git a/BizHawk.MultiClient/MainForm.cs b/BizHawk.MultiClient/MainForm.cs index c9b14f82bf..b4f599e8fc 100644 --- a/BizHawk.MultiClient/MainForm.cs +++ b/BizHawk.MultiClient/MainForm.cs @@ -2483,44 +2483,7 @@ namespace BizHawk.MultiClient case "N64": if (INTERIM) { - BizHawk.Emulation.Consoles.Nintendo.N64.VideoPluginSettings video_settings = new BizHawk.Emulation.Consoles.Nintendo.N64.VideoPluginSettings(Global.Config.N64VidPlugin, Global.Config.N64VideoSizeX, Global.Config.N64VideoSizeY); - if (Global.Config.N64VidPlugin == "Rice") - { - video_settings.Parameters.Add("NormalAlphaBlender", Global.Config.RiceNormalAlphaBlender); - video_settings.Parameters.Add("FastTextureLoading", Global.Config.RiceFastTextureLoading); - video_settings.Parameters.Add("AccurateTextureMapping", Global.Config.RiceAccurateTextureMapping); - video_settings.Parameters.Add("InN64Resolution", Global.Config.RiceInN64Resolution); - video_settings.Parameters.Add("SaveVRAM", Global.Config.RiceSaveVRAM); - video_settings.Parameters.Add("DoubleSizeForSmallTxtrBuf", Global.Config.RiceDoubleSizeForSmallTxtrBuf); - video_settings.Parameters.Add("DefaultCombinerDisable", Global.Config.RiceDefaultCombinerDisable); - video_settings.Parameters.Add("EnableHacks", Global.Config.RiceEnableHacks); - video_settings.Parameters.Add("WinFrameMode", Global.Config.RiceWinFrameMode); - video_settings.Parameters.Add("FullTMEMEmulation", Global.Config.RiceFullTMEMEmulation); - video_settings.Parameters.Add("OpenGLVertexClipper", Global.Config.RiceOpenGLVertexClipper); - video_settings.Parameters.Add("EnableSSE", Global.Config.RiceEnableSSE); - video_settings.Parameters.Add("EnableVertexShader", Global.Config.RiceEnableVertexShader); - video_settings.Parameters.Add("SkipFrame", Global.Config.RiceSkipFrame); - video_settings.Parameters.Add("TexRectOnly", Global.Config.RiceTexRectOnly); - video_settings.Parameters.Add("SmallTextureOnly", Global.Config.RiceSmallTextureOnly); - video_settings.Parameters.Add("LoadHiResCRCOnly", Global.Config.RiceLoadHiResCRCOnly); - video_settings.Parameters.Add("LoadHiResTextures", Global.Config.RiceLoadHiResTextures); - video_settings.Parameters.Add("DumpTexturesToFiles", Global.Config.RiceDumpTexturesToFiles); - video_settings.Parameters.Add("FrameBufferSetting", Global.Config.RiceFrameBufferSetting); - video_settings.Parameters.Add("FrameBufferWriteBackControl", Global.Config.RiceFrameBufferWriteBackControl); - video_settings.Parameters.Add("RenderToTexture", Global.Config.RiceRenderToTexture); - video_settings.Parameters.Add("ScreenUpdateSetting", Global.Config.RiceScreenUpdateSetting); - video_settings.Parameters.Add("Mipmapping", Global.Config.RiceMipmapping); - video_settings.Parameters.Add("FogMethod", Global.Config.RiceFogMethod); - video_settings.Parameters.Add("ForceTextureFilter", Global.Config.RiceForceTextureFilter); - video_settings.Parameters.Add("TextureEnhancement", Global.Config.RiceTextureEnhancement); - video_settings.Parameters.Add("TextureEnhancementControl", Global.Config.RiceTextureEnhancementControl); - video_settings.Parameters.Add("TextureQuality", Global.Config.RiceTextureQuality); - video_settings.Parameters.Add("OpenGLDepthBufferSetting", Global.Config.RiceOpenGLDepthBufferSetting); - video_settings.Parameters.Add("MultiSampling", Global.Config.RiceMultiSampling); - video_settings.Parameters.Add("ColorQuality", Global.Config.RiceColorQuality); - video_settings.Parameters.Add("OpenGLRenderSetting", Global.Config.RiceOpenGLRenderSetting); - video_settings.Parameters.Add("AnisotropicFiltering", Global.Config.RiceAnisotropicFiltering); - } + VideoPluginSettings video_settings = N64GenerateVideoSettings(); nextEmulator = new N64(nextComm, game, rom.RomData, video_settings); } break; @@ -3897,6 +3860,102 @@ namespace BizHawk.MultiClient Cheats1.Focus(); } + public VideoPluginSettings N64GenerateVideoSettings() + { + VideoPluginSettings video_settings = new VideoPluginSettings(Global.Config.N64VidPlugin, Global.Config.N64VideoSizeX, Global.Config.N64VideoSizeY); + if (Global.Config.N64VidPlugin == "Rice") + { + video_settings.Parameters.Add("NormalAlphaBlender", Global.Config.RiceNormalAlphaBlender); + video_settings.Parameters.Add("FastTextureLoading", Global.Config.RiceFastTextureLoading); + video_settings.Parameters.Add("AccurateTextureMapping", Global.Config.RiceAccurateTextureMapping); + video_settings.Parameters.Add("InN64Resolution", Global.Config.RiceInN64Resolution); + video_settings.Parameters.Add("SaveVRAM", Global.Config.RiceSaveVRAM); + video_settings.Parameters.Add("DoubleSizeForSmallTxtrBuf", Global.Config.RiceDoubleSizeForSmallTxtrBuf); + video_settings.Parameters.Add("DefaultCombinerDisable", Global.Config.RiceDefaultCombinerDisable); + video_settings.Parameters.Add("EnableHacks", Global.Config.RiceEnableHacks); + video_settings.Parameters.Add("WinFrameMode", Global.Config.RiceWinFrameMode); + video_settings.Parameters.Add("FullTMEMEmulation", Global.Config.RiceFullTMEMEmulation); + video_settings.Parameters.Add("OpenGLVertexClipper", Global.Config.RiceOpenGLVertexClipper); + video_settings.Parameters.Add("EnableSSE", Global.Config.RiceEnableSSE); + video_settings.Parameters.Add("EnableVertexShader", Global.Config.RiceEnableVertexShader); + video_settings.Parameters.Add("SkipFrame", Global.Config.RiceSkipFrame); + video_settings.Parameters.Add("TexRectOnly", Global.Config.RiceTexRectOnly); + video_settings.Parameters.Add("SmallTextureOnly", Global.Config.RiceSmallTextureOnly); + video_settings.Parameters.Add("LoadHiResCRCOnly", Global.Config.RiceLoadHiResCRCOnly); + video_settings.Parameters.Add("LoadHiResTextures", Global.Config.RiceLoadHiResTextures); + video_settings.Parameters.Add("DumpTexturesToFiles", Global.Config.RiceDumpTexturesToFiles); + video_settings.Parameters.Add("FrameBufferSetting", Global.Config.RiceFrameBufferSetting); + video_settings.Parameters.Add("FrameBufferWriteBackControl", Global.Config.RiceFrameBufferWriteBackControl); + video_settings.Parameters.Add("RenderToTexture", Global.Config.RiceRenderToTexture); + video_settings.Parameters.Add("ScreenUpdateSetting", Global.Config.RiceScreenUpdateSetting); + video_settings.Parameters.Add("Mipmapping", Global.Config.RiceMipmapping); + video_settings.Parameters.Add("FogMethod", Global.Config.RiceFogMethod); + video_settings.Parameters.Add("ForceTextureFilter", Global.Config.RiceForceTextureFilter); + video_settings.Parameters.Add("TextureEnhancement", Global.Config.RiceTextureEnhancement); + video_settings.Parameters.Add("TextureEnhancementControl", Global.Config.RiceTextureEnhancementControl); + video_settings.Parameters.Add("TextureQuality", Global.Config.RiceTextureQuality); + video_settings.Parameters.Add("OpenGLDepthBufferSetting", Global.Config.RiceOpenGLDepthBufferSetting); + video_settings.Parameters.Add("MultiSampling", Global.Config.RiceMultiSampling); + video_settings.Parameters.Add("ColorQuality", Global.Config.RiceColorQuality); + video_settings.Parameters.Add("OpenGLRenderSetting", Global.Config.RiceOpenGLRenderSetting); + video_settings.Parameters.Add("AnisotropicFiltering", Global.Config.RiceAnisotropicFiltering); + + if (Global.Config.RiceUseDefaultHacks) + { + video_settings.Parameters.Add("DisableTextureCRC", N64GetBoolFromDB("RiceDisableTextureCRC")); + video_settings.Parameters.Add("DisableCulling", N64GetBoolFromDB("RiceDisableCulling")); + video_settings.Parameters.Add("IncTexRectEdge", N64GetBoolFromDB("RiceIncTexRectEdge")); + video_settings.Parameters.Add("ZHack", N64GetBoolFromDB("RiceZHack")); + video_settings.Parameters.Add("TextureScaleHack", N64GetBoolFromDB("RiceTextureScaleHack")); + video_settings.Parameters.Add("PrimaryDepthHack", N64GetBoolFromDB("RicePrimaryDepthHack")); + video_settings.Parameters.Add("Texture1Hack", N64GetBoolFromDB("RiceTexture1Hack")); + video_settings.Parameters.Add("FastLoadTile", N64GetBoolFromDB("RiceFastLoadTile")); + video_settings.Parameters.Add("UseSmallerTexture", N64GetBoolFromDB("RiceUseSmallerTexture")); + video_settings.Parameters.Add("VIWidth", N64GetIntFromDB("RiceVIWidth", -1)); + video_settings.Parameters.Add("VIHeight", N64GetIntFromDB("RiceVIHeight", -1)); + video_settings.Parameters.Add("UseCIWidthAndRatio", N64GetIntFromDB("RiceUseCIWidthAndRatio", 0)); + video_settings.Parameters.Add("FullTMEM", N64GetIntFromDB("RiceFullTMEM", 0)); + video_settings.Parameters.Add("TxtSizeMethod2", N64GetBoolFromDB("RiceTxtSizeMethod2")); + video_settings.Parameters.Add("EnableTxtLOD", N64GetBoolFromDB("RiceEnableTxtLOD")); + video_settings.Parameters.Add("FastTextureCRC", N64GetIntFromDB("RiceFastTextureCRC", 0)); + video_settings.Parameters.Add("EmulateClear", N64GetBoolFromDB("RiceEmulateClear")); + video_settings.Parameters.Add("ForceScreenClear", N64GetBoolFromDB("RiceForceScreenClear")); + video_settings.Parameters.Add("AccurateTextureMapping", N64GetIntFromDB("RiceAccurateTextureMapping", 0)); + video_settings.Parameters.Add("NormalBlender", N64GetIntFromDB("RiceNormalBlender", 0)); + video_settings.Parameters.Add("DisableBlender", N64GetBoolFromDB("RiceDisableBlender")); + video_settings.Parameters.Add("ForceDepthBuffer", N64GetBoolFromDB("RiceForceDepthBuffer")); + video_settings.Parameters.Add("DisableObjBG", N64GetBoolFromDB("RiceDisableObjBG")); + video_settings.Parameters.Add("FrameBufferOption", N64GetIntFromDB("RiceFrameBufferOption", 0)); + video_settings.Parameters.Add("RenderToTextureOption", N64GetIntFromDB("RiceRenderToTextureOption", 0)); + video_settings.Parameters.Add("ScreenUpdateSettingHack", N64GetIntFromDB("RiceScreenUpdateSettingHack", 0)); + video_settings.Parameters.Add("EnableHacksForGame", N64GetIntFromDB("RiceEnableHacksForGame", 0)); + } + else + { + video_settings.Parameters.Add("Texture1Hack", Global.Config.RiceTexture1Hack); + } + } + + return video_settings; + } + + public bool N64GetBoolFromDB(string parameter) + { + if (Global.Game.OptionPresent(parameter) && Global.Game.OptionValue(parameter) == "true") + return true; + else + return false; + } + + public int N64GetIntFromDB(string parameter, int defaultVal) + { + if (Global.Game.OptionPresent(parameter) && InputValidate.IsValidUnsignedNumber(Global.Game.OptionValue(parameter))) + return int.Parse(Global.Game.OptionValue(parameter)); + else + return defaultVal; + } + + private int lastWidth = -1; private int lastHeight = -1; diff --git a/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.Designer.cs b/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.Designer.cs index c47877289e..04419a01f3 100644 --- a/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.Designer.cs +++ b/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.Designer.cs @@ -93,7 +93,45 @@ this.RiceLoadHiResTextures_CB = new System.Windows.Forms.CheckBox(); this.RiceDumpTexturesToFiles_CB = new System.Windows.Forms.CheckBox(); this.RiceGameSpecificTab = new System.Windows.Forms.TabPage(); + this.label27 = new System.Windows.Forms.Label(); + this.RiceEnableHacksForGame_Combo = new System.Windows.Forms.ComboBox(); + this.RiceForceDepthBuffer_CB = new System.Windows.Forms.CheckBox(); + this.label28 = new System.Windows.Forms.Label(); + this.RiceUseCIWidthAndRatio_Combo = new System.Windows.Forms.ComboBox(); + this.label26 = new System.Windows.Forms.Label(); + this.RiceRenderToTextureOption_Combo = new System.Windows.Forms.ComboBox(); + this.label25 = new System.Windows.Forms.Label(); + this.RiceFrameBufferOption_Combo = new System.Windows.Forms.ComboBox(); + this.label24 = new System.Windows.Forms.Label(); + this.RiceNormalBlender_Combo = new System.Windows.Forms.ComboBox(); + this.label23 = new System.Windows.Forms.Label(); + this.RiceAccurateTextureMappingHack_Combo = new System.Windows.Forms.ComboBox(); + this.label22 = new System.Windows.Forms.Label(); + this.RiceFastTextureCRC_Combo = new System.Windows.Forms.ComboBox(); + this.label21 = new System.Windows.Forms.Label(); + this.RiceFullTMEM_Combo = new System.Windows.Forms.ComboBox(); + this.label20 = new System.Windows.Forms.Label(); + this.RiceScreenUpdateSettingHack_Combo = new System.Windows.Forms.ComboBox(); + this.label19 = new System.Windows.Forms.Label(); + this.RiceVIHeight_Text = new System.Windows.Forms.TextBox(); this.label4 = new System.Windows.Forms.Label(); + this.RiceVIWidth_Text = new System.Windows.Forms.TextBox(); + this.RiceTextureScaleHack_CB = new System.Windows.Forms.CheckBox(); + this.RiceFastLoadTile_CB = new System.Windows.Forms.CheckBox(); + this.RiceUseSmallerTexture_CB = new System.Windows.Forms.CheckBox(); + this.RiceEnableTxtLOD_CB = new System.Windows.Forms.CheckBox(); + this.RiceZHack_CB = new System.Windows.Forms.CheckBox(); + this.RicePrimaryDepthHack_CB = new System.Windows.Forms.CheckBox(); + this.RiceDisableObjBG_CB = new System.Windows.Forms.CheckBox(); + this.RiceDisableBlender_CB = new System.Windows.Forms.CheckBox(); + this.RiceForceScreenClear_CB = new System.Windows.Forms.CheckBox(); + this.RiceEmulateClear_CB = new System.Windows.Forms.CheckBox(); + this.RiceTxtSizeMethod2_CB = new System.Windows.Forms.CheckBox(); + this.RiceIncTexRectEdge_CB = new System.Windows.Forms.CheckBox(); + this.RiceDisableCulling_CB = new System.Windows.Forms.CheckBox(); + this.RiceDisableTextureCRC_CB = new System.Windows.Forms.CheckBox(); + this.RiceTexture1Hack_CB = new System.Windows.Forms.CheckBox(); + this.RiceUseDefaultHacks_CB = new System.Windows.Forms.CheckBox(); this.button1 = new System.Windows.Forms.Button(); this.CancelBT = new System.Windows.Forms.Button(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); @@ -936,23 +974,509 @@ // // RiceGameSpecificTab // + this.RiceGameSpecificTab.Controls.Add(this.label27); + this.RiceGameSpecificTab.Controls.Add(this.RiceEnableHacksForGame_Combo); + this.RiceGameSpecificTab.Controls.Add(this.RiceForceDepthBuffer_CB); + this.RiceGameSpecificTab.Controls.Add(this.label28); + this.RiceGameSpecificTab.Controls.Add(this.RiceUseCIWidthAndRatio_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label26); + this.RiceGameSpecificTab.Controls.Add(this.RiceRenderToTextureOption_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label25); + this.RiceGameSpecificTab.Controls.Add(this.RiceFrameBufferOption_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label24); + this.RiceGameSpecificTab.Controls.Add(this.RiceNormalBlender_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label23); + this.RiceGameSpecificTab.Controls.Add(this.RiceAccurateTextureMappingHack_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label22); + this.RiceGameSpecificTab.Controls.Add(this.RiceFastTextureCRC_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label21); + this.RiceGameSpecificTab.Controls.Add(this.RiceFullTMEM_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label20); + this.RiceGameSpecificTab.Controls.Add(this.RiceScreenUpdateSettingHack_Combo); + this.RiceGameSpecificTab.Controls.Add(this.label19); + this.RiceGameSpecificTab.Controls.Add(this.RiceVIHeight_Text); this.RiceGameSpecificTab.Controls.Add(this.label4); + this.RiceGameSpecificTab.Controls.Add(this.RiceVIWidth_Text); + this.RiceGameSpecificTab.Controls.Add(this.RiceTextureScaleHack_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceFastLoadTile_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceUseSmallerTexture_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceEnableTxtLOD_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceZHack_CB); + this.RiceGameSpecificTab.Controls.Add(this.RicePrimaryDepthHack_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceDisableObjBG_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceDisableBlender_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceForceScreenClear_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceEmulateClear_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceTxtSizeMethod2_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceIncTexRectEdge_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceDisableCulling_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceDisableTextureCRC_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceTexture1Hack_CB); + this.RiceGameSpecificTab.Controls.Add(this.RiceUseDefaultHacks_CB); this.RiceGameSpecificTab.Location = new System.Drawing.Point(4, 22); this.RiceGameSpecificTab.Name = "RiceGameSpecificTab"; this.RiceGameSpecificTab.Padding = new System.Windows.Forms.Padding(3); this.RiceGameSpecificTab.Size = new System.Drawing.Size(564, 310); this.RiceGameSpecificTab.TabIndex = 1; - this.RiceGameSpecificTab.Text = "Game Specific"; + this.RiceGameSpecificTab.Text = "Per-Game Hacks"; this.RiceGameSpecificTab.UseVisualStyleBackColor = true; // + // label27 + // + this.label27.AutoSize = true; + this.label27.Location = new System.Drawing.Point(310, 178); + this.label27.Name = "label27"; + this.label27.Size = new System.Drawing.Size(119, 13); + this.label27.TabIndex = 52; + this.label27.Text = "Enable hacks for game:"; + // + // RiceEnableHacksForGame_Combo + // + this.RiceEnableHacksForGame_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceEnableHacksForGame_Combo.FormattingEnabled = true; + this.RiceEnableHacksForGame_Combo.Items.AddRange(new object[] { + "NO_HACK_FOR_GAME", + "HACK_FOR_BANJO_TOOIE", + "HACK_FOR_DR_MARIO", + "HACK_FOR_ZELDA", + "HACK_FOR_MARIO_TENNIS", + "HACK_FOR_BANJO", + "HACK_FOR_PD", + "HACK_FOR_GE", + "HACK_FOR_PILOT_WINGS", + "HACK_FOR_YOSHI", + "HACK_FOR_NITRO", + "HACK_FOR_TONYHAWK", + "HACK_FOR_NASCAR", + "HACK_FOR_SUPER_BOWLING", + "HACK_FOR_CONKER", + "HACK_FOR_ALL_STAR_BASEBALL", + "HACK_FOR_TIGER_HONEY_HUNT", + "HACK_REVERSE_XY_COOR", + "HACK_REVERSE_Y_COOR", + "HACK_FOR_GOLDEN_EYE", + "HACK_FOR_FZERO", + "HACK_FOR_COMMANDCONQUER", + "HACK_FOR_RUMBLE", + "HACK_FOR_SOUTH_PARK_RALLY", + "HACK_FOR_BUST_A_MOVE", + "HACK_FOR_OGRE_BATTLE", + "HACK_FOR_TWINE", + "HACK_FOR_EXTREME_G2", + "HACK_FOR_ROGUE_SQUADRON", + "HACK_FOR_MARIO_GOLF", + "HACK_FOR_MLB", + "HACK_FOR_POLARISSNOCROSS", + "HACK_FOR_TOPGEARRALLY", + "HACK_FOR_DUKE_NUKEM", + "HACK_FOR_ZELDA_MM", + "HACK_FOR_MARIO_KART"}); + this.RiceEnableHacksForGame_Combo.Location = new System.Drawing.Point(313, 194); + this.RiceEnableHacksForGame_Combo.Name = "RiceEnableHacksForGame_Combo"; + this.RiceEnableHacksForGame_Combo.Size = new System.Drawing.Size(240, 21); + this.RiceEnableHacksForGame_Combo.TabIndex = 51; + // + // RiceForceDepthBuffer_CB + // + this.RiceForceDepthBuffer_CB.AutoSize = true; + this.RiceForceDepthBuffer_CB.Location = new System.Drawing.Point(173, 186); + this.RiceForceDepthBuffer_CB.Name = "RiceForceDepthBuffer_CB"; + this.RiceForceDepthBuffer_CB.Size = new System.Drawing.Size(116, 17); + this.RiceForceDepthBuffer_CB.TabIndex = 50; + this.RiceForceDepthBuffer_CB.Text = "Force Depth Buffer"; + this.RiceForceDepthBuffer_CB.UseVisualStyleBackColor = true; + // + // label28 + // + this.label28.AutoSize = true; + this.label28.Location = new System.Drawing.Point(12, 275); + this.label28.Name = "label28"; + this.label28.Size = new System.Drawing.Size(115, 13); + this.label28.TabIndex = 49; + this.label28.Text = "Screen Update Setting"; + // + // RiceUseCIWidthAndRatio_Combo + // + this.RiceUseCIWidthAndRatio_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceUseCIWidthAndRatio_Combo.FormattingEnabled = true; + this.RiceUseCIWidthAndRatio_Combo.Items.AddRange(new object[] { + "SCREEN_UPDATE_DEFAULT", + "SCREEN_UPDATE_AT_VI_UPDATE", + "SCREEN_UPDATE_AT_VI_CHANGE", + "SCREEN_UPDATE_AT_CI_CHANGE", + "SCREEN_UPDATE_AT_1ST_CI_CHANGE", + "SCREEN_UPDATE_AT_1ST_PRIMITIVE", + "SCREEN_UPDATE_BEFORE_SCREEN_CLEAR", + "SCREEN_UPDATE_AT_VI_UPDATE_AND_DRAWN"}); + this.RiceUseCIWidthAndRatio_Combo.Location = new System.Drawing.Point(133, 241); + this.RiceUseCIWidthAndRatio_Combo.Name = "RiceUseCIWidthAndRatio_Combo"; + this.RiceUseCIWidthAndRatio_Combo.Size = new System.Drawing.Size(274, 21); + this.RiceUseCIWidthAndRatio_Combo.TabIndex = 48; + // + // label26 + // + this.label26.AutoSize = true; + this.label26.Location = new System.Drawing.Point(310, 138); + this.label26.Name = "label26"; + this.label26.Size = new System.Drawing.Size(121, 13); + this.label26.TabIndex = 47; + this.label26.Text = "Render to texture option"; + // + // RiceRenderToTextureOption_Combo + // + this.RiceRenderToTextureOption_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceRenderToTextureOption_Combo.FormattingEnabled = true; + this.RiceRenderToTextureOption_Combo.Items.AddRange(new object[] { + "TXT_BUF_NONE", + "TXT_BUF_IGNORE", + "TXT_BUF_NORMAL", + "TXT_BUF_WRITE_BACK", + "TXT_BUF_WRITE_BACK_AND_RELOAD"}); + this.RiceRenderToTextureOption_Combo.Location = new System.Drawing.Point(313, 154); + this.RiceRenderToTextureOption_Combo.Name = "RiceRenderToTextureOption_Combo"; + this.RiceRenderToTextureOption_Combo.Size = new System.Drawing.Size(240, 21); + this.RiceRenderToTextureOption_Combo.TabIndex = 46; + // + // label25 + // + this.label25.AutoSize = true; + this.label25.Location = new System.Drawing.Point(310, 95); + this.label25.Name = "label25"; + this.label25.Size = new System.Drawing.Size(97, 13); + this.label25.TabIndex = 45; + this.label25.Text = "Framebuffer Option"; + // + // RiceFrameBufferOption_Combo + // + this.RiceFrameBufferOption_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceFrameBufferOption_Combo.FormattingEnabled = true; + this.RiceFrameBufferOption_Combo.Items.AddRange(new object[] { + "FRM_BUF_NONE", + "FRM_BUF_IGNORE", + "FRM_BUF_BASIC", + "FRM_BUF_BASIC_AND_WRITEBACK", + "FRM_BUF_WRITEBACK_AND_RELOAD", + "FRM_BUF_COMPLETE", + "FRM_BUF_WITH_EMULATOR", + "FRM_BUF_BASIC_AND_WITH_EMULATOR", + "FRM_BUF_WITH_EMULATOR_READ_ONLY", + "FRM_BUF_WITH_EMULATOR_WRITE_ONLY"}); + this.RiceFrameBufferOption_Combo.Location = new System.Drawing.Point(313, 114); + this.RiceFrameBufferOption_Combo.Name = "RiceFrameBufferOption_Combo"; + this.RiceFrameBufferOption_Combo.Size = new System.Drawing.Size(239, 21); + this.RiceFrameBufferOption_Combo.TabIndex = 44; + // + // label24 + // + this.label24.AutoSize = true; + this.label24.Location = new System.Drawing.Point(430, 34); + this.label24.Name = "label24"; + this.label24.Size = new System.Drawing.Size(79, 13); + this.label24.TabIndex = 43; + this.label24.Text = "Normal Blender"; + this.label24.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // RiceNormalBlender_Combo + // + this.RiceNormalBlender_Combo.DisplayMember = "0,1,2,3"; + this.RiceNormalBlender_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceNormalBlender_Combo.FormattingEnabled = true; + this.RiceNormalBlender_Combo.Items.AddRange(new object[] { + "0", + "1", + "2"}); + this.RiceNormalBlender_Combo.Location = new System.Drawing.Point(515, 31); + this.RiceNormalBlender_Combo.Name = "RiceNormalBlender_Combo"; + this.RiceNormalBlender_Combo.Size = new System.Drawing.Size(37, 21); + this.RiceNormalBlender_Combo.TabIndex = 42; + // + // label23 + // + this.label23.AutoSize = true; + this.label23.Location = new System.Drawing.Point(376, 7); + this.label23.Name = "label23"; + this.label23.Size = new System.Drawing.Size(133, 13); + this.label23.TabIndex = 41; + this.label23.Text = "Accurate Texture Mapping"; + this.label23.TextAlign = System.Drawing.ContentAlignment.TopRight; + this.toolTip1.SetToolTip(this.label23, "\\"); + // + // RiceAccurateTextureMappingHack_Combo + // + this.RiceAccurateTextureMappingHack_Combo.DisplayMember = "0,1,2,3"; + this.RiceAccurateTextureMappingHack_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceAccurateTextureMappingHack_Combo.FormattingEnabled = true; + this.RiceAccurateTextureMappingHack_Combo.Items.AddRange(new object[] { + "0", + "1"}); + this.RiceAccurateTextureMappingHack_Combo.Location = new System.Drawing.Point(515, 4); + this.RiceAccurateTextureMappingHack_Combo.Name = "RiceAccurateTextureMappingHack_Combo"; + this.RiceAccurateTextureMappingHack_Combo.Size = new System.Drawing.Size(37, 21); + this.RiceAccurateTextureMappingHack_Combo.TabIndex = 40; + // + // label22 + // + this.label22.AutoSize = true; + this.label22.Location = new System.Drawing.Point(418, 61); + this.label22.Name = "label22"; + this.label22.Size = new System.Drawing.Size(91, 13); + this.label22.TabIndex = 39; + this.label22.Text = "Fast Texture CRC"; + this.label22.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // RiceFastTextureCRC_Combo + // + this.RiceFastTextureCRC_Combo.DisplayMember = "0,1,2,3"; + this.RiceFastTextureCRC_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceFastTextureCRC_Combo.FormattingEnabled = true; + this.RiceFastTextureCRC_Combo.Items.AddRange(new object[] { + "0", + "1", + "2"}); + this.RiceFastTextureCRC_Combo.Location = new System.Drawing.Point(515, 58); + this.RiceFastTextureCRC_Combo.Name = "RiceFastTextureCRC_Combo"; + this.RiceFastTextureCRC_Combo.Size = new System.Drawing.Size(37, 21); + this.RiceFastTextureCRC_Combo.TabIndex = 38; + // + // label21 + // + this.label21.AutoSize = true; + this.label21.Location = new System.Drawing.Point(454, 88); + this.label21.Name = "label21"; + this.label21.Size = new System.Drawing.Size(55, 13); + this.label21.TabIndex = 37; + this.label21.Text = "FullTMEM"; + this.label21.TextAlign = System.Drawing.ContentAlignment.TopRight; + // + // RiceFullTMEM_Combo + // + this.RiceFullTMEM_Combo.DisplayMember = "0,1,2,3"; + this.RiceFullTMEM_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceFullTMEM_Combo.FormattingEnabled = true; + this.RiceFullTMEM_Combo.Items.AddRange(new object[] { + "0", + "1", + "2"}); + this.RiceFullTMEM_Combo.Location = new System.Drawing.Point(515, 85); + this.RiceFullTMEM_Combo.Name = "RiceFullTMEM_Combo"; + this.RiceFullTMEM_Combo.Size = new System.Drawing.Size(36, 21); + this.RiceFullTMEM_Combo.TabIndex = 36; + // + // label20 + // + this.label20.AutoSize = true; + this.label20.Location = new System.Drawing.Point(8, 244); + this.label20.Name = "label20"; + this.label20.Size = new System.Drawing.Size(119, 13); + this.label20.TabIndex = 35; + this.label20.Text = "Use CI Width and Ratio"; + // + // RiceScreenUpdateSettingHack_Combo + // + this.RiceScreenUpdateSettingHack_Combo.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.RiceScreenUpdateSettingHack_Combo.FormattingEnabled = true; + this.RiceScreenUpdateSettingHack_Combo.Items.AddRange(new object[] { + "NOT_USE_CI_WIDTH_AND_RATIO", + "USE_CI_WIDTH_AND_RATIO_FOR_NTSC", + "USE_CI_WIDTH_AND_RATIO_FOR_PAL"}); + this.RiceScreenUpdateSettingHack_Combo.Location = new System.Drawing.Point(133, 272); + this.RiceScreenUpdateSettingHack_Combo.Name = "RiceScreenUpdateSettingHack_Combo"; + this.RiceScreenUpdateSettingHack_Combo.Size = new System.Drawing.Size(274, 21); + this.RiceScreenUpdateSettingHack_Combo.TabIndex = 34; + // + // label19 + // + this.label19.AutoSize = true; + this.label19.Location = new System.Drawing.Point(306, 62); + this.label19.Name = "label19"; + this.label19.Size = new System.Drawing.Size(51, 13); + this.label19.TabIndex = 20; + this.label19.Text = "VI Height"; + // + // RiceVIHeight_Text + // + this.RiceVIHeight_Text.Location = new System.Drawing.Point(363, 59); + this.RiceVIHeight_Text.Name = "RiceVIHeight_Text"; + this.RiceVIHeight_Text.Size = new System.Drawing.Size(36, 20); + this.RiceVIHeight_Text.TabIndex = 19; + // // label4 // this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(125, 124); + this.label4.Location = new System.Drawing.Point(309, 34); this.label4.Name = "label4"; - this.label4.Size = new System.Drawing.Size(104, 13); - this.label4.TabIndex = 0; - this.label4.Text = "Nothing To see here"; + this.label4.Size = new System.Drawing.Size(48, 13); + this.label4.TabIndex = 18; + this.label4.Text = "VI Width"; + // + // RiceVIWidth_Text + // + this.RiceVIWidth_Text.Location = new System.Drawing.Point(363, 31); + this.RiceVIWidth_Text.Name = "RiceVIWidth_Text"; + this.RiceVIWidth_Text.Size = new System.Drawing.Size(36, 20); + this.RiceVIWidth_Text.TabIndex = 17; + // + // RiceTextureScaleHack_CB + // + this.RiceTextureScaleHack_CB.AutoSize = true; + this.RiceTextureScaleHack_CB.Location = new System.Drawing.Point(6, 140); + this.RiceTextureScaleHack_CB.Name = "RiceTextureScaleHack_CB"; + this.RiceTextureScaleHack_CB.Size = new System.Drawing.Size(121, 17); + this.RiceTextureScaleHack_CB.TabIndex = 16; + this.RiceTextureScaleHack_CB.Text = "Texture Scale Hack"; + this.RiceTextureScaleHack_CB.UseVisualStyleBackColor = true; + // + // RiceFastLoadTile_CB + // + this.RiceFastLoadTile_CB.AutoSize = true; + this.RiceFastLoadTile_CB.Location = new System.Drawing.Point(6, 209); + this.RiceFastLoadTile_CB.Name = "RiceFastLoadTile_CB"; + this.RiceFastLoadTile_CB.Size = new System.Drawing.Size(93, 17); + this.RiceFastLoadTile_CB.TabIndex = 15; + this.RiceFastLoadTile_CB.Text = "Fast Load Tile"; + this.RiceFastLoadTile_CB.UseVisualStyleBackColor = true; + // + // RiceUseSmallerTexture_CB + // + this.RiceUseSmallerTexture_CB.AutoSize = true; + this.RiceUseSmallerTexture_CB.ForeColor = System.Drawing.SystemColors.ControlText; + this.RiceUseSmallerTexture_CB.Location = new System.Drawing.Point(173, 209); + this.RiceUseSmallerTexture_CB.Name = "RiceUseSmallerTexture_CB"; + this.RiceUseSmallerTexture_CB.Size = new System.Drawing.Size(121, 17); + this.RiceUseSmallerTexture_CB.TabIndex = 14; + this.RiceUseSmallerTexture_CB.Text = "Use Smaller Texture"; + this.RiceUseSmallerTexture_CB.UseVisualStyleBackColor = true; + // + // RiceEnableTxtLOD_CB + // + this.RiceEnableTxtLOD_CB.AutoSize = true; + this.RiceEnableTxtLOD_CB.Location = new System.Drawing.Point(173, 71); + this.RiceEnableTxtLOD_CB.Name = "RiceEnableTxtLOD_CB"; + this.RiceEnableTxtLOD_CB.Size = new System.Drawing.Size(102, 17); + this.RiceEnableTxtLOD_CB.TabIndex = 13; + this.RiceEnableTxtLOD_CB.Text = "Enable Txt LOD"; + this.RiceEnableTxtLOD_CB.UseVisualStyleBackColor = true; + // + // RiceZHack_CB + // + this.RiceZHack_CB.AutoSize = true; + this.RiceZHack_CB.Location = new System.Drawing.Point(6, 117); + this.RiceZHack_CB.Name = "RiceZHack_CB"; + this.RiceZHack_CB.Size = new System.Drawing.Size(62, 17); + this.RiceZHack_CB.TabIndex = 12; + this.RiceZHack_CB.Text = "Z Hack"; + this.RiceZHack_CB.UseVisualStyleBackColor = true; + // + // RicePrimaryDepthHack_CB + // + this.RicePrimaryDepthHack_CB.AutoSize = true; + this.RicePrimaryDepthHack_CB.Location = new System.Drawing.Point(6, 163); + this.RicePrimaryDepthHack_CB.Name = "RicePrimaryDepthHack_CB"; + this.RicePrimaryDepthHack_CB.Size = new System.Drawing.Size(121, 17); + this.RicePrimaryDepthHack_CB.TabIndex = 11; + this.RicePrimaryDepthHack_CB.Text = "Primary Depth Hack"; + this.RicePrimaryDepthHack_CB.UseVisualStyleBackColor = true; + // + // RiceDisableObjBG_CB + // + this.RiceDisableObjBG_CB.AutoSize = true; + this.RiceDisableObjBG_CB.Location = new System.Drawing.Point(173, 163); + this.RiceDisableObjBG_CB.Name = "RiceDisableObjBG_CB"; + this.RiceDisableObjBG_CB.Size = new System.Drawing.Size(98, 17); + this.RiceDisableObjBG_CB.TabIndex = 10; + this.RiceDisableObjBG_CB.Text = "Disable Obj BG"; + this.RiceDisableObjBG_CB.UseVisualStyleBackColor = true; + // + // RiceDisableBlender_CB + // + this.RiceDisableBlender_CB.AutoSize = true; + this.RiceDisableBlender_CB.Location = new System.Drawing.Point(173, 140); + this.RiceDisableBlender_CB.Name = "RiceDisableBlender_CB"; + this.RiceDisableBlender_CB.Size = new System.Drawing.Size(100, 17); + this.RiceDisableBlender_CB.TabIndex = 9; + this.RiceDisableBlender_CB.Text = "Disable Blender"; + this.RiceDisableBlender_CB.UseVisualStyleBackColor = true; + // + // RiceForceScreenClear_CB + // + this.RiceForceScreenClear_CB.AutoSize = true; + this.RiceForceScreenClear_CB.Location = new System.Drawing.Point(173, 117); + this.RiceForceScreenClear_CB.Name = "RiceForceScreenClear_CB"; + this.RiceForceScreenClear_CB.Size = new System.Drawing.Size(117, 17); + this.RiceForceScreenClear_CB.TabIndex = 8; + this.RiceForceScreenClear_CB.Text = "Force Screen Clear"; + this.RiceForceScreenClear_CB.UseVisualStyleBackColor = true; + // + // RiceEmulateClear_CB + // + this.RiceEmulateClear_CB.AutoSize = true; + this.RiceEmulateClear_CB.Location = new System.Drawing.Point(173, 94); + this.RiceEmulateClear_CB.Name = "RiceEmulateClear_CB"; + this.RiceEmulateClear_CB.Size = new System.Drawing.Size(91, 17); + this.RiceEmulateClear_CB.TabIndex = 7; + this.RiceEmulateClear_CB.Text = "Emulate Clear"; + this.RiceEmulateClear_CB.UseVisualStyleBackColor = true; + // + // RiceTxtSizeMethod2_CB + // + this.RiceTxtSizeMethod2_CB.AutoSize = true; + this.RiceTxtSizeMethod2_CB.Location = new System.Drawing.Point(173, 48); + this.RiceTxtSizeMethod2_CB.Name = "RiceTxtSizeMethod2_CB"; + this.RiceTxtSizeMethod2_CB.Size = new System.Drawing.Size(112, 17); + this.RiceTxtSizeMethod2_CB.TabIndex = 6; + this.RiceTxtSizeMethod2_CB.Text = "Txt Size Method 2"; + this.RiceTxtSizeMethod2_CB.UseVisualStyleBackColor = true; + // + // RiceIncTexRectEdge_CB + // + this.RiceIncTexRectEdge_CB.AutoSize = true; + this.RiceIncTexRectEdge_CB.Location = new System.Drawing.Point(6, 94); + this.RiceIncTexRectEdge_CB.Name = "RiceIncTexRectEdge_CB"; + this.RiceIncTexRectEdge_CB.Size = new System.Drawing.Size(116, 17); + this.RiceIncTexRectEdge_CB.TabIndex = 5; + this.RiceIncTexRectEdge_CB.Text = "Inc Tex Rect Edge"; + this.RiceIncTexRectEdge_CB.UseVisualStyleBackColor = true; + // + // RiceDisableCulling_CB + // + this.RiceDisableCulling_CB.AutoSize = true; + this.RiceDisableCulling_CB.Location = new System.Drawing.Point(6, 71); + this.RiceDisableCulling_CB.Name = "RiceDisableCulling_CB"; + this.RiceDisableCulling_CB.Size = new System.Drawing.Size(95, 17); + this.RiceDisableCulling_CB.TabIndex = 4; + this.RiceDisableCulling_CB.Text = "Disable Culling"; + this.RiceDisableCulling_CB.UseVisualStyleBackColor = true; + // + // RiceDisableTextureCRC_CB + // + this.RiceDisableTextureCRC_CB.AutoSize = true; + this.RiceDisableTextureCRC_CB.Location = new System.Drawing.Point(6, 48); + this.RiceDisableTextureCRC_CB.Name = "RiceDisableTextureCRC_CB"; + this.RiceDisableTextureCRC_CB.Size = new System.Drawing.Size(125, 17); + this.RiceDisableTextureCRC_CB.TabIndex = 3; + this.RiceDisableTextureCRC_CB.Text = "Disable Texture CRC"; + this.RiceDisableTextureCRC_CB.UseVisualStyleBackColor = true; + // + // RiceTexture1Hack_CB + // + this.RiceTexture1Hack_CB.AutoSize = true; + this.RiceTexture1Hack_CB.Location = new System.Drawing.Point(6, 186); + this.RiceTexture1Hack_CB.Name = "RiceTexture1Hack_CB"; + this.RiceTexture1Hack_CB.Size = new System.Drawing.Size(97, 17); + this.RiceTexture1Hack_CB.TabIndex = 2; + this.RiceTexture1Hack_CB.Text = "Texture1 Hack"; + this.RiceTexture1Hack_CB.UseVisualStyleBackColor = true; + // + // RiceUseDefaultHacks_CB + // + this.RiceUseDefaultHacks_CB.AutoSize = true; + this.RiceUseDefaultHacks_CB.Location = new System.Drawing.Point(6, 6); + this.RiceUseDefaultHacks_CB.Name = "RiceUseDefaultHacks_CB"; + this.RiceUseDefaultHacks_CB.Size = new System.Drawing.Size(165, 17); + this.RiceUseDefaultHacks_CB.TabIndex = 1; + this.RiceUseDefaultHacks_CB.Text = "Use defaults for current game"; + this.RiceUseDefaultHacks_CB.UseVisualStyleBackColor = true; + this.RiceUseDefaultHacks_CB.CheckedChanged += new System.EventHandler(this.RiceUseDefaultHacks_CB_CheckedChanged); // // button1 // @@ -1076,12 +1600,50 @@ private System.Windows.Forms.CheckBox RiceLoadHiResTextures_CB; private System.Windows.Forms.CheckBox RiceDumpTexturesToFiles_CB; private System.Windows.Forms.TabPage RiceGameSpecificTab; - private System.Windows.Forms.Label label4; private System.Windows.Forms.Label label16; private System.Windows.Forms.Label label17; private System.Windows.Forms.Label label18; private System.Windows.Forms.ComboBox RiceFrameBufferWriteBackControl_Combo; private System.Windows.Forms.ComboBox RiceFrameBufferSetting_Combo; private System.Windows.Forms.ComboBox RiceRenderToTexture_Combo; + private System.Windows.Forms.CheckBox RiceTexture1Hack_CB; + private System.Windows.Forms.CheckBox RiceUseDefaultHacks_CB; + private System.Windows.Forms.CheckBox RiceTxtSizeMethod2_CB; + private System.Windows.Forms.CheckBox RiceIncTexRectEdge_CB; + private System.Windows.Forms.CheckBox RiceDisableCulling_CB; + private System.Windows.Forms.CheckBox RiceDisableTextureCRC_CB; + private System.Windows.Forms.CheckBox RiceTextureScaleHack_CB; + private System.Windows.Forms.CheckBox RiceFastLoadTile_CB; + private System.Windows.Forms.CheckBox RiceUseSmallerTexture_CB; + private System.Windows.Forms.CheckBox RiceEnableTxtLOD_CB; + private System.Windows.Forms.CheckBox RiceZHack_CB; + private System.Windows.Forms.CheckBox RicePrimaryDepthHack_CB; + private System.Windows.Forms.CheckBox RiceDisableObjBG_CB; + private System.Windows.Forms.CheckBox RiceDisableBlender_CB; + private System.Windows.Forms.CheckBox RiceForceScreenClear_CB; + private System.Windows.Forms.CheckBox RiceEmulateClear_CB; + private System.Windows.Forms.Label label19; + private System.Windows.Forms.TextBox RiceVIHeight_Text; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.TextBox RiceVIWidth_Text; + private System.Windows.Forms.Label label20; + private System.Windows.Forms.ComboBox RiceScreenUpdateSettingHack_Combo; + private System.Windows.Forms.Label label22; + private System.Windows.Forms.ComboBox RiceFastTextureCRC_Combo; + private System.Windows.Forms.Label label21; + private System.Windows.Forms.ComboBox RiceFullTMEM_Combo; + private System.Windows.Forms.Label label23; + private System.Windows.Forms.ComboBox RiceAccurateTextureMappingHack_Combo; + private System.Windows.Forms.Label label26; + private System.Windows.Forms.ComboBox RiceRenderToTextureOption_Combo; + private System.Windows.Forms.Label label25; + private System.Windows.Forms.ComboBox RiceFrameBufferOption_Combo; + private System.Windows.Forms.Label label24; + private System.Windows.Forms.ComboBox RiceNormalBlender_Combo; + private System.Windows.Forms.Label label28; + private System.Windows.Forms.ComboBox RiceUseCIWidthAndRatio_Combo; + private System.Windows.Forms.CheckBox RiceForceDepthBuffer_CB; + private System.Windows.Forms.Label label27; + private System.Windows.Forms.ComboBox RiceEnableHacksForGame_Combo; } } \ No newline at end of file diff --git a/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.cs b/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.cs index ea2bee43ec..6c1966aed7 100644 --- a/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.cs +++ b/BizHawk.MultiClient/N64tools/N64VideoPluginconfig.cs @@ -83,6 +83,43 @@ namespace BizHawk.MultiClient Global.Config.RiceOpenGLRenderSetting = RiceOpenGLRenderSetting_Combo.SelectedIndex; Global.Config.RiceAnisotropicFiltering = RiceAnisotropicFiltering_TB.Value; + Global.Config.RiceUseDefaultHacks = RiceUseDefaultHacks_CB.Checked; + Global.Config.RiceDisableTextureCRC = RiceDisableTextureCRC_CB.Checked; + Global.Config.RiceDisableCulling = RiceDisableCulling_CB.Checked; + Global.Config.RiceIncTexRectEdge = RiceIncTexRectEdge_CB.Checked; + Global.Config.RiceZHack = RiceZHack_CB.Checked; + Global.Config.RiceTextureScaleHack = RiceTextureScaleHack_CB.Checked; + Global.Config.RicePrimaryDepthHack = RicePrimaryDepthHack_CB.Checked; + Global.Config.RiceTexture1Hack = RiceTexture1Hack_CB.Checked; + Global.Config.RiceFastLoadTile = RiceFastLoadTile_CB.Checked; + Global.Config.RiceUseSmallerTexture = RiceUseSmallerTexture_CB.Checked; + + if (InputValidate.IsValidSignedNumber(RiceVIWidth_Text.Text)) + Global.Config.RiceVIWidth = int.Parse(RiceVIWidth_Text.Text); + else + Global.Config.RiceVIWidth = -1; + + if (InputValidate.IsValidSignedNumber(RiceVIHeight_Text.Text)) + Global.Config.RiceVIHeight = int.Parse(RiceVIHeight_Text.Text); + else + Global.Config.RiceVIHeight = -1; + + Global.Config.RiceUseCIWidthAndRatio = RiceUseCIWidthAndRatio_Combo.SelectedIndex; + Global.Config.RiceFullTMEM = RiceFullTMEM_Combo.SelectedIndex; + Global.Config.RiceTxtSizeMethod2 = RiceTxtSizeMethod2_CB.Checked; + Global.Config.RiceEnableTxtLOD = RiceEnableTxtLOD_CB.Checked; + Global.Config.RiceFastTextureCRC = RiceFastTextureCRC_Combo.SelectedIndex; + Global.Config.RiceEmulateClear = RiceEmulateClear_CB.Checked; + Global.Config.RiceForceScreenClear = RiceForceScreenClear_CB.Checked; + Global.Config.RiceAccurateTextureMappingHack = RiceAccurateTextureMappingHack_Combo.SelectedIndex; + Global.Config.RiceNormalBlender = RiceNormalBlender_Combo.SelectedIndex; + Global.Config.RiceDisableBlender = RiceDisableBlender_CB.Checked; + Global.Config.RiceForceDepthBuffer = RiceForceDepthBuffer_CB.Checked; + Global.Config.RiceDisableObjBG = RiceDisableObjBG_CB.Checked; + Global.Config.RiceFrameBufferOption = RiceFrameBufferOption_Combo.SelectedIndex; + Global.Config.RiceRenderToTextureOption = RiceRenderToTextureOption_Combo.SelectedIndex; + Global.Config.RiceScreenUpdateSettingHack = RiceScreenUpdateSettingHack_Combo.SelectedIndex; + Global.Config.RiceEnableHacksForGame = RiceEnableHacksForGame_Combo.SelectedIndex; } private void N64VideoPluginconfig_Load(object sender, EventArgs e) @@ -147,6 +184,41 @@ namespace BizHawk.MultiClient RiceAnisotropicFiltering_TB.Value = Global.Config.RiceAnisotropicFiltering; AnisotropicFiltering_LB.Text = "Anisotropic Filtering: " + RiceAnisotropicFiltering_TB.Value.ToString(); + RiceUseDefaultHacks_CB.Checked = Global.Config.RiceUseDefaultHacks; + + UpdateHacksSection(); + if (!Global.Config.RiceUseDefaultHacks) + { + RiceTexture1Hack_CB.Checked = Global.Config.RiceTexture1Hack; + + RiceDisableTextureCRC_CB.Checked = Global.Config.RiceDisableTextureCRC; + RiceDisableCulling_CB.Checked = Global.Config.RiceDisableCulling; + RiceIncTexRectEdge_CB.Checked = Global.Config.RiceIncTexRectEdge; + RiceZHack_CB.Checked = Global.Config.RiceZHack; + RiceTextureScaleHack_CB.Checked = Global.Config.RiceTextureScaleHack; + RicePrimaryDepthHack_CB.Checked = Global.Config.RicePrimaryDepthHack; + RiceTexture1Hack_CB.Checked = Global.Config.RiceTexture1Hack; + RiceFastLoadTile_CB.Checked = Global.Config.RiceFastLoadTile; + RiceUseSmallerTexture_CB.Checked = Global.Config.RiceUseSmallerTexture; + RiceVIWidth_Text.Text = Global.Config.RiceVIWidth.ToString(); + RiceVIHeight_Text.Text = Global.Config.RiceVIHeight.ToString(); + RiceUseCIWidthAndRatio_Combo.SelectedIndex = Global.Config.RiceUseCIWidthAndRatio; + RiceFullTMEM_Combo.SelectedIndex = Global.Config.RiceFullTMEM; + RiceTxtSizeMethod2_CB.Checked = Global.Config.RiceTxtSizeMethod2; + RiceEnableTxtLOD_CB.Checked = Global.Config.RiceEnableTxtLOD; + RiceFastTextureCRC_Combo.SelectedIndex = Global.Config.RiceFastTextureCRC; + RiceEmulateClear_CB.Checked = Global.Config.RiceEmulateClear; + RiceForceScreenClear_CB.Checked = Global.Config.RiceForceScreenClear; + RiceAccurateTextureMappingHack_Combo.SelectedIndex = Global.Config.RiceAccurateTextureMappingHack; + RiceNormalBlender_Combo.SelectedIndex = Global.Config.RiceNormalBlender; + RiceDisableBlender_CB.Checked = Global.Config.RiceDisableBlender; + RiceForceDepthBuffer_CB.Checked = Global.Config.RiceForceDepthBuffer; + RiceDisableObjBG_CB.Checked = Global.Config.RiceDisableObjBG; + RiceFrameBufferOption_Combo.SelectedIndex = Global.Config.RiceFrameBufferOption; + RiceRenderToTextureOption_Combo.SelectedIndex = Global.Config.RiceRenderToTextureOption; + RiceScreenUpdateSettingHack_Combo.SelectedIndex = Global.Config.RiceScreenUpdateSettingHack; + RiceEnableHacksForGame_Combo.SelectedIndex = Global.Config.RiceEnableHacksForGame; + } } private void RiceAnisotropicFiltering_TB_Scroll_1(object sender, EventArgs e) @@ -154,6 +226,99 @@ namespace BizHawk.MultiClient AnisotropicFiltering_LB.Text = "Anisotropic Filtering: " + RiceAnisotropicFiltering_TB.Value.ToString(); } + private void RiceUseDefaultHacks_CB_CheckedChanged(object sender, EventArgs e) + { + UpdateHacksSection(); + } + + private void UpdateHacksSection() + { + if (RiceUseDefaultHacks_CB.Checked) + { + RiceDisableTextureCRC_CB.Checked = GetBoolFromDB("RiceDisableTextureCRC"); + RiceDisableCulling_CB.Checked = GetBoolFromDB("RiceDisableCulling"); + RiceIncTexRectEdge_CB.Checked = GetBoolFromDB("RiceIncTexRectEdge"); + RiceZHack_CB.Checked = GetBoolFromDB("RiceZHack"); + RiceTextureScaleHack_CB.Checked = GetBoolFromDB("RiceTextureScaleHack"); + RicePrimaryDepthHack_CB.Checked = GetBoolFromDB("RicePrimaryDepthHack"); + RiceTexture1Hack_CB.Checked = GetBoolFromDB("RiceTexture1Hack"); + RiceFastLoadTile_CB.Checked = GetBoolFromDB("RiceFastLoadTile"); + RiceUseSmallerTexture_CB.Checked = GetBoolFromDB("RiceUseSmallerTexture"); + RiceVIWidth_Text.Text = GetIntFromDB("RiceVIWidth", -1).ToString(); + RiceVIHeight_Text.Text = GetIntFromDB("RiceVIHeight", -1).ToString(); + RiceUseCIWidthAndRatio_Combo.SelectedIndex = GetIntFromDB("RiceUseCIWidthAndRatio", 0); + RiceFullTMEM_Combo.SelectedIndex = GetIntFromDB("RiceFullTMEM", 0); + RiceTxtSizeMethod2_CB.Checked = GetBoolFromDB("RiceTxtSizeMethod2"); + RiceEnableTxtLOD_CB.Checked = GetBoolFromDB("RiceEnableTxtLOD"); + RiceFastTextureCRC_Combo.SelectedIndex = GetIntFromDB("RiceFastTextureCRC", 0); + RiceEmulateClear_CB.Checked = GetBoolFromDB("RiceEmulateClear"); + RiceForceScreenClear_CB.Checked = GetBoolFromDB("RiceForceScreenClear"); + RiceAccurateTextureMappingHack_Combo.SelectedIndex = GetIntFromDB("RiceAccurateTextureMapping", 0); + RiceNormalBlender_Combo.SelectedIndex = GetIntFromDB("RiceNormalBlender", 0); + RiceDisableBlender_CB.Checked = GetBoolFromDB("RiceDisableBlender"); + RiceForceDepthBuffer_CB.Checked = GetBoolFromDB("RiceForceDepthBuffer"); + RiceDisableObjBG_CB.Checked = GetBoolFromDB("RiceDisableObjBG"); + RiceFrameBufferOption_Combo.SelectedIndex = GetIntFromDB("RiceFrameBufferOption", 0); + RiceRenderToTextureOption_Combo.SelectedIndex = GetIntFromDB("RiceRenderToTextureOption", 0); + RiceScreenUpdateSettingHack_Combo.SelectedIndex = GetIntFromDB("RiceScreenUpdateSettingHack", 0); + RiceEnableHacksForGame_Combo.SelectedIndex = GetIntFromDB("RiceEnableHacksForGame", 0); + + ToggleHackCheckboxEnable(false); + } + else + { + ToggleHackCheckboxEnable(true); + } + } + + public bool GetBoolFromDB(string parameter) + { + if (Global.Game.OptionPresent(parameter) && Global.Game.OptionValue(parameter) == "true") + return true; + else + return false; + } + + public int GetIntFromDB(string parameter, int defaultVal) + { + if (Global.Game.OptionPresent(parameter) && InputValidate.IsValidUnsignedNumber(Global.Game.OptionValue(parameter))) + return int.Parse(Global.Game.OptionValue(parameter)); + else + return defaultVal; + } + + public void ToggleHackCheckboxEnable (bool val) + { + RiceDisableTextureCRC_CB.Enabled = val; + RiceDisableCulling_CB.Enabled = val; + RiceIncTexRectEdge_CB.Enabled = val; + RiceZHack_CB.Enabled = val; + RiceTextureScaleHack_CB.Enabled = val; + RicePrimaryDepthHack_CB.Enabled = val; + RiceTexture1Hack_CB.Enabled = val; + RiceFastLoadTile_CB.Enabled = val; + RiceUseSmallerTexture_CB.Enabled = val; + RiceVIWidth_Text.Enabled = val; + RiceVIHeight_Text.Enabled = val; + RiceUseCIWidthAndRatio_Combo.Enabled = val; + RiceFullTMEM_Combo.Enabled = val; + RiceTxtSizeMethod2_CB.Enabled = val; + RiceEnableTxtLOD_CB.Enabled = val; + RiceFastTextureCRC_Combo.Enabled = val; + RiceEmulateClear_CB.Enabled = val; + RiceForceScreenClear_CB.Enabled = val; + RiceAccurateTextureMappingHack_Combo.Enabled = val; + RiceNormalBlender_Combo.Enabled = val; + RiceDisableBlender_CB.Enabled = val; + RiceForceDepthBuffer_CB.Enabled = val; + RiceDisableObjBG_CB.Enabled = val; + RiceFrameBufferOption_Combo.Enabled = val; + RiceRenderToTextureOption_Combo.Enabled = val; + RiceScreenUpdateSettingHack_Combo.Enabled = val; + RiceEnableHacksForGame_Combo.Enabled = val; + } + + } } diff --git a/BizHawk.MultiClient/output/dll/mupen64plus-video-rice.dll b/BizHawk.MultiClient/output/dll/mupen64plus-video-rice.dll index 6fdf6b5797cfebcee929e6e002887f6d3b331fad..933e0761256be48edcdd96e8bd68b549d637fb26 100644 GIT binary patch delta 60364 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 diff --git a/libmupen64plus/mupen64plus-video-rice/src/Config.cpp b/libmupen64plus/mupen64plus-video-rice/src/Config.cpp index f72517b992..1cb54e09e7 100644 --- a/libmupen64plus/mupen64plus-video-rice/src/Config.cpp +++ b/libmupen64plus/mupen64plus-video-rice/src/Config.cpp @@ -393,8 +393,9 @@ BOOL InitConfiguration(void) ConfigSetDefaultInt(l_ConfigVideoRice, "FrameBufferOption", 0, "...?"); ConfigSetDefaultInt(l_ConfigVideoRice, "RenderToTextureOption", 0, "...?"); - ConfigSetDefaultInt(l_ConfigVideoRice, "ScreenUpdateSetting", 0, "...?"); + ConfigSetDefaultInt(l_ConfigVideoRice, "ScreenUpdateSettingHack", 0, "...?"); + ConfigSetDefaultInt(l_ConfigVideoRice, "EnableHacksForGame", NO_HACK_FOR_GAME, "...?"); return TRUE; } @@ -714,6 +715,8 @@ void GenerateCurrentRomOptions() options.enableHackForGames = HACK_FOR_MARIO_KART; } + options.enableHackForGames = (HACK_FOR_GAMES)ConfigGetParamInt(l_ConfigVideoRice, "EnableHacksForGame"); + if (options.enableHackForGames != NO_HACK_FOR_GAME) DebugMessage(M64MSG_INFO, "Enabled hacks for game: '%s'", g_curRomInfo.szGameName); @@ -780,7 +783,7 @@ void Ini_GetRomOptions(LPGAMESETTING pGameSetting) pGameSetting->bDisableObjBG = ConfigGetParamBool(l_ConfigVideoRice, "DisableObjBG"); pGameSetting->dwFrameBufferOption = ConfigGetParamInt(l_ConfigVideoRice, "FrameBufferOption"); pGameSetting->dwRenderToTextureOption = ConfigGetParamInt(l_ConfigVideoRice, "RenderToTextureOption"); - pGameSetting->dwScreenUpdateSetting = ConfigGetParamInt(l_ConfigVideoRice, "ScreenUpdateSetting"); + pGameSetting->dwScreenUpdateSetting = ConfigGetParamInt(l_ConfigVideoRice, "ScreenUpdateSettingHack"); } void Ini_StoreRomOptions(LPGAMESETTING pGameSetting)