diff --git a/desmume/src/NDSSystem.h b/desmume/src/NDSSystem.h index 66df76434..5b9a296f7 100644 --- a/desmume/src/NDSSystem.h +++ b/desmume/src/NDSSystem.h @@ -472,6 +472,7 @@ extern struct TCommonSettings { , GFX3D_EdgeMark(true) , GFX3D_Fog(true) , GFX3D_Texture(true) + , GFX3D_LineHack(true) , GFX3D_Zelda_Shadow_Depth_Hack(0) , UseExtBIOS(false) , SWIFromBIOS(false) @@ -512,6 +513,7 @@ extern struct TCommonSettings { bool GFX3D_EdgeMark; bool GFX3D_Fog; bool GFX3D_Texture; + bool GFX3D_LineHack; int GFX3D_Zelda_Shadow_Depth_Hack; bool UseExtBIOS; diff --git a/desmume/src/gfx3d.cpp b/desmume/src/gfx3d.cpp index af3afc50f..b9ba116aa 100644 --- a/desmume/src/gfx3d.cpp +++ b/desmume/src/gfx3d.cpp @@ -2818,6 +2818,8 @@ void GFX3D_Clipper::clipPoly(POLY* poly, VERT** verts) // "Workaround" for line poly bool gfx3d_IsLinePoly(POLY *poly) { + if(!CommonSettings.GFX3D_LineHack) return false; + int type = poly->type; VERT *vert1, *vert2; diff --git a/desmume/src/rasterize.cpp b/desmume/src/rasterize.cpp index b73f83f1a..fb2252dc9 100644 --- a/desmume/src/rasterize.cpp +++ b/desmume/src/rasterize.cpp @@ -817,7 +817,7 @@ public: runctr++; //HACK: special handling for horizontal line poly - if (lineHack && left->Height == 0 && right->Height == 0) + if (lineHack && left->Height == 0 && right->Height == 0 && left->Y<192 && left->Y>=0) { bool draw = (!SLI || (left->Y & SLI_MASK) == SLI_VALUE); if(draw) drawscanline(left,right,lineHack); diff --git a/desmume/src/thumb_instructions.cpp b/desmume/src/thumb_instructions.cpp index 152ce5daa..1d6e12568 100644 --- a/desmume/src/thumb_instructions.cpp +++ b/desmume/src/thumb_instructions.cpp @@ -1066,7 +1066,6 @@ TEMPLATE static u32 FASTCALL OP_B_COND(const u32 i) TEMPLATE static u32 FASTCALL OP_B_UNCOND(const u32 i) { -#ifdef DEVELOPER //nocash message detection const u16 last = _MMU_read16(cpu->instruct_adr-2); const u16 next = _MMU_read16(cpu->instruct_adr+2); @@ -1075,7 +1074,6 @@ TEMPLATE static u32 FASTCALL OP_B_UNCOND(const u32 i) { NocashMessage(cpu); } -#endif cpu->R[15] += (SIGNEEXT_IMM11(i)<<1); cpu->next_instruction = cpu->R[15]; diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp index 7ce03b28c..355c2a922 100644 --- a/desmume/src/windows/main.cpp +++ b/desmume/src/windows/main.cpp @@ -2884,7 +2884,7 @@ int _main() CommonSettings.GFX3D_EdgeMark = GetPrivateProfileBool("3D", "EnableEdgeMark", 1, IniName); CommonSettings.GFX3D_Fog = GetPrivateProfileBool("3D", "EnableFog", 1, IniName); CommonSettings.GFX3D_Texture = GetPrivateProfileBool("3D", "EnableTexture", 1, IniName); - //CommonSettings.gfx3d_flushMode = GetPrivateProfileInt("3D", "AlternateFlush", 0, IniName); + CommonSettings.GFX3D_LineHack = GetPrivateProfileBool("3D", "EnableLineHack", 1, IniName); Change3DCoreWithFallbackAndSave(cur3DCore); #ifdef BETA_VERSION @@ -5626,6 +5626,7 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp) CheckDlgButton(hw,IDC_3DSETTINGS_EDGEMARK,CommonSettings.GFX3D_EdgeMark); CheckDlgButton(hw,IDC_3DSETTINGS_FOG,CommonSettings.GFX3D_Fog); CheckDlgButton(hw,IDC_3DSETTINGS_TEXTURE,CommonSettings.GFX3D_Texture); + CheckDlgButton(hw,IDC_3DSETTINGS_LINEHACK, CommonSettings.GFX3D_LineHack); SetDlgItemInt (hw,IDC_ZELDA_SHADOW_DEPTH_HACK,CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack,FALSE); //CheckDlgButton(hw,IDC_ALTERNATEFLUSH,CommonSettings.gfx3d_flushMode); @@ -5647,6 +5648,7 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp) CommonSettings.GFX3D_EdgeMark = IsDlgCheckboxChecked(hw,IDC_3DSETTINGS_EDGEMARK); CommonSettings.GFX3D_Fog = IsDlgCheckboxChecked(hw,IDC_3DSETTINGS_FOG); CommonSettings.GFX3D_Texture = IsDlgCheckboxChecked(hw,IDC_3DSETTINGS_TEXTURE); + CommonSettings.GFX3D_LineHack = IsDlgCheckboxChecked(hw,IDC_3DSETTINGS_LINEHACK); CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack = GetDlgItemInt(hw,IDC_ZELDA_SHADOW_DEPTH_HACK,NULL,FALSE); Change3DCoreWithFallbackAndSave(ComboBox_GetCurSel(GetDlgItem(hw, IDC_3DCORE))); @@ -5655,7 +5657,7 @@ LRESULT CALLBACK GFX3DSettingsDlgProc(HWND hw, UINT msg, WPARAM wp, LPARAM lp) WritePrivateProfileBool("3D", "EnableFog", CommonSettings.GFX3D_Fog, IniName); WritePrivateProfileBool("3D", "EnableTexture", CommonSettings.GFX3D_Texture, IniName); WritePrivateProfileInt ("3D", "ZeldaShadowDepthHack", CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack, IniName); - //CommonSettings.gfx3d_flushMode = (IsDlgButtonChecked(hw,IDC_ALTERNATEFLUSH) == BST_CHECKED)?1:0; + WritePrivateProfileInt ("3D", "EnableLineHack", CommonSettings.GFX3D_LineHack, IniName); //WritePrivateProfileInt("3D", "AlternateFlush", CommonSettings.gfx3d_flushMode, IniName); } case IDCANCEL: diff --git a/desmume/src/windows/resource.h b/desmume/src/windows/resource.h index 7a3f59a4a..81b3ec84d 100644 --- a/desmume/src/windows/resource.h +++ b/desmume/src/windows/resource.h @@ -709,6 +709,7 @@ #define ID_LABEL_HK4 4468 #define IDC_GI_ICON 4469 #define ID_LABEL_HK5 4469 +#define IDC_3DSETTINGS_LINEHACK 4469 #define IDC_GI_TITLE 4470 #define ID_LABEL_HK6 4470 #define IDC_GI_TITLEEN 4471 @@ -791,6 +792,7 @@ #define IDC_IOREG 6001 #define ID_LABEL_ZELDA_SHADOW_DEPTH_HACK 9000 #define IDC_ZELDA_SHADOW_DEPTH_HACK 9001 +#define ID_LABEL_ZELDA_SHADOW_DEPTH_HACK2 9003 #define IDD_CHEAT_ADD_XX_CODE 10005 #define IDD_GBASLOT_GUITARGRIP 10009 #define IDD_GBASLOT_PIANO 10010 diff --git a/desmume/src/windows/resources.rc b/desmume/src/windows/resources.rc index 2ee5e158e..7985fca21 100644 Binary files a/desmume/src/windows/resources.rc and b/desmume/src/windows/resources.rc differ