diff --git a/pcsx2/Linux/HacksDlg.cpp b/pcsx2/Linux/HacksDlg.cpp
index 7a13ad8d83..1f4a29936f 100644
--- a/pcsx2/Linux/HacksDlg.cpp
+++ b/pcsx2/Linux/HacksDlg.cpp
@@ -23,11 +23,13 @@ GtkWidget *GameFixDlg, *SpeedHacksDlg;
void on_Game_Fixes(GtkMenuItem *menuitem, gpointer user_data)
{
GameFixDlg = create_GameFixDlg();
+
+ set_checked(GameFixDlg, "check_VU_Add_Sub", (Config.GameFixes & FLAG_VU_ADD_SUB));
+ set_checked(GameFixDlg, "check_VU_Clip", (Config.GameFixes & FLAG_VU_CLIP));
set_checked(GameFixDlg, "check_FPU_Compare", (Config.GameFixes & FLAG_FPU_Compare));
- set_checked(GameFixDlg, "check_VU_Add_Sub", (Config.GameFixes & FLAG_VU_ADD_SUB));
set_checked(GameFixDlg, "check_FPU_Mul", (Config.GameFixes & FLAG_FPU_MUL));
-
+
gtk_widget_show_all(GameFixDlg);
gtk_widget_set_sensitive(MainWindow, FALSE);
gtk_main();
@@ -37,11 +39,15 @@ void on_Game_Fix_OK(GtkButton *button, gpointer user_data)
{
Config.GameFixes = 0;
- Config.GameFixes |= is_checked(GameFixDlg, "check_FPU_Compare") ? FLAG_FPU_Compare : 0;
+
Config.GameFixes |= is_checked(GameFixDlg, "check_VU_Add_Sub") ? FLAG_VU_ADD_SUB : 0;
+ Config.GameFixes |= is_checked(GameFixDlg, "check_VU_Clip") ? FLAG_VU_CLIP : 0;
+
+ Config.GameFixes |= is_checked(GameFixDlg, "check_FPU_Compare") ? FLAG_FPU_Compare : 0;
Config.GameFixes |= is_checked(GameFixDlg, "check_FPU_Mul") ? FLAG_FPU_MUL : 0;
SaveConfig();
+
gtk_widget_destroy(GameFixDlg);
gtk_widget_set_sensitive(MainWindow, TRUE);
gtk_main_quit();
diff --git a/pcsx2/Linux/Linux.h b/pcsx2/Linux/Linux.h
index fc9b436e44..5ca6f7f9f8 100644
--- a/pcsx2/Linux/Linux.h
+++ b/pcsx2/Linux/Linux.h
@@ -100,8 +100,12 @@ char iop_log_names[9][32] =
"Cdr Log",
"GPU Log"
};
+
//Tri-Ace - IDC_GAMEFIX2
#define FLAG_VU_ADD_SUB 0x1
+// Persona3/4 - IDC_GAMEFIX4
+#define FLAG_VU_CLIP 0x2
+
// Digimon Rumble Arena - IDC_GAMEFIX3
#define FLAG_FPU_Compare 0x4
//Tales of Destiny - IDC_GAMEFIX5
diff --git a/pcsx2/Linux/interface.c b/pcsx2/Linux/interface.c
index 62bceb6fdc..f62270e3d4 100644
--- a/pcsx2/Linux/interface.c
+++ b/pcsx2/Linux/interface.c
@@ -891,6 +891,7 @@ create_GameFixDlg (void)
GtkWidget *check_FPU_Compare;
GtkWidget *check_VU_Add_Sub;
GtkWidget *check_FPU_Mul;
+ GtkWidget *check_VU_Clip;
GtkWidget *label42;
GtkWidget *dialog_action_area1;
GtkWidget *cancelbutton1;
@@ -937,6 +938,11 @@ create_GameFixDlg (void)
gtk_widget_show (check_FPU_Mul);
gtk_box_pack_start (GTK_BOX (vbox30), check_FPU_Mul, FALSE, TRUE, 0);
+ check_VU_Clip = gtk_check_button_new_with_mnemonic (_("VU Clip Hack - Fixes missing ground geometry in Persona."));
+ gtk_widget_set_name (check_VU_Clip, "check_VU_Clip");
+ gtk_widget_show (check_VU_Clip);
+ gtk_box_pack_start (GTK_BOX (vbox30), check_VU_Clip, FALSE, FALSE, 0);
+
label42 = gtk_label_new (_("Some games need special settings.\nConfigure them here."));
gtk_widget_set_name (label42, "label42");
gtk_widget_show (label42);
@@ -976,6 +982,7 @@ create_GameFixDlg (void)
GLADE_HOOKUP_OBJECT (GameFixDlg, check_FPU_Compare, "check_FPU_Compare");
GLADE_HOOKUP_OBJECT (GameFixDlg, check_VU_Add_Sub, "check_VU_Add_Sub");
GLADE_HOOKUP_OBJECT (GameFixDlg, check_FPU_Mul, "check_FPU_Mul");
+ GLADE_HOOKUP_OBJECT (GameFixDlg, check_VU_Clip, "check_VU_Clip");
GLADE_HOOKUP_OBJECT (GameFixDlg, label42, "label42");
GLADE_HOOKUP_OBJECT_NO_REF (GameFixDlg, dialog_action_area1, "dialog_action_area1");
GLADE_HOOKUP_OBJECT (GameFixDlg, cancelbutton1, "cancelbutton1");
diff --git a/pcsx2/Linux/pcsx2.glade b/pcsx2/Linux/pcsx2.glade
index 103e4c2b04..4e2513352c 100644
--- a/pcsx2/Linux/pcsx2.glade
+++ b/pcsx2/Linux/pcsx2.glade
@@ -1923,6 +1923,25 @@ Known to work well with a couple games, namely Shadow of the Colossus (but break
True
+
+
+
+ True
+ True
+ VU Clip Hack - Fixes missing ground geometry in Persona.
+ True
+ GTK_RELIEF_NORMAL
+ True
+ False
+ False
+ True
+
+
+ 0
+ False
+ False
+
+