diff --git a/pcsx2/CDVD/CDVD.cpp b/pcsx2/CDVD/CDVD.cpp
index 3bd4b07bc4..486c09af24 100644
--- a/pcsx2/CDVD/CDVD.cpp
+++ b/pcsx2/CDVD/CDVD.cpp
@@ -394,7 +394,6 @@ void cdvdReadKey(u8 arg0, u16 arg1, u32 arg2, u8* key) {
{
ElfCRC = loadElfCRC( str );
ElfApplyPatches();
- LoadGameSpecificSettings();
GSsetGameCRC( ElfCRC, 0 );
}
}
@@ -584,7 +583,6 @@ void cdvdNewDiskCB()
{
ElfCRC = loadElfCRC( str );
ElfApplyPatches();
- LoadGameSpecificSettings();
GSsetGameCRC( ElfCRC, 0 );
}
diff --git a/pcsx2/Elfheader.cpp b/pcsx2/Elfheader.cpp
index 5bf94204b3..d77d4b015f 100644
--- a/pcsx2/Elfheader.cpp
+++ b/pcsx2/Elfheader.cpp
@@ -565,23 +565,7 @@ int loadElfFile(const char *filename)
Console::Status( "loadElfFile: %s; CRC = %8.8X", params filename, ElfCRC);
ElfApplyPatches();
- LoadGameSpecificSettings();
-
+
return 0;
}
-#include "VU.h"
-int g_VUGameFixes = 0;
-
-// fixme - this should be moved to patches or eliminated
-void LoadGameSpecificSettings()
-{
- // default
- g_VUGameFixes = 0;
-
- switch(ElfCRC) {
- case 0xb99379b7: // erementar gerad (discolored chars)
- g_VUGameFixes |= VUFIX_XGKICKDELAY2; // Tested - still needed - arcum42
- break;
- }
-}
diff --git a/pcsx2/Elfheader.h b/pcsx2/Elfheader.h
index c6c93beb1d..4e352d020e 100644
--- a/pcsx2/Elfheader.h
+++ b/pcsx2/Elfheader.h
@@ -26,7 +26,6 @@ extern unsigned int args_ptr;
//-------------------
int loadElfFile(const char *filename);
u32 loadElfCRC(const char *filename);
-void LoadGameSpecificSettings();
void ElfApplyPatches();
extern u32 ElfCRC;
diff --git a/pcsx2/Linux/HacksDlg.cpp b/pcsx2/Linux/HacksDlg.cpp
index e620ba0ccc..c4e17fcab1 100644
--- a/pcsx2/Linux/HacksDlg.cpp
+++ b/pcsx2/Linux/HacksDlg.cpp
@@ -30,6 +30,7 @@ GtkWidget *GameFixDlg, *SpeedHacksDlg;
set_checked(GameFixDlg, "check_FPU_Compare", (Config.GameFixes & FLAG_FPU_Compare));
set_checked(GameFixDlg, "check_FPU_Mul", (Config.GameFixes & FLAG_FPU_MUL));
set_checked(GameFixDlg, "check_DMAExec", (Config.GameFixes & FLAG_DMAExec));
+ set_checked(GameFixDlg, "check_XGKick", (Config.GameFixes & FLAG_XGKick));
gtk_widget_show_all(GameFixDlg);
gtk_widget_set_sensitive(MainWindow, FALSE);
@@ -47,6 +48,7 @@ void on_Game_Fix_OK(GtkButton *button, gpointer user_data)
Config.GameFixes |= is_checked(GameFixDlg, "check_FPU_Compare") ? FLAG_FPU_Compare : 0;
Config.GameFixes |= is_checked(GameFixDlg, "check_FPU_Mul") ? FLAG_FPU_MUL : 0;
Config.GameFixes |= is_checked(GameFixDlg, "check_DMAExec") ? FLAG_DMAExec : 0;
+ Config.GameFixes |= is_checked(GameFixDlg, "check_XGKick") ? FLAG_XGKick : 0;
SaveConfig();
diff --git a/pcsx2/Linux/Linux.h b/pcsx2/Linux/Linux.h
index 15252e76c5..49de616d43 100644
--- a/pcsx2/Linux/Linux.h
+++ b/pcsx2/Linux/Linux.h
@@ -127,6 +127,8 @@ char ee_cycle_labels[3][256] =
#define FLAG_FPU_MUL 0x8
//Fatal Frame
#define FLAG_DMAExec 0x10
+//Erementar Gerad
+#define FLAG_XGKick 0x20
#define FLAG_VU_NO_OVERFLOW 0x2
#define FLAG_VU_EXTRA_OVERFLOW 0x40
diff --git a/pcsx2/Linux/interface.c b/pcsx2/Linux/interface.c
index a6d8daaf5f..774b27f02c 100644
--- a/pcsx2/Linux/interface.c
+++ b/pcsx2/Linux/interface.c
@@ -940,6 +940,7 @@ create_GameFixDlg (void)
GtkWidget *check_FPU_Mul;
GtkWidget *check_VU_Clip;
GtkWidget *check_DMAExec;
+ GtkWidget *check_XGKick;
GtkWidget *label42;
GtkWidget *dialog_action_area1;
GtkWidget *cancelbutton1;
@@ -996,6 +997,11 @@ create_GameFixDlg (void)
gtk_widget_show (check_DMAExec);
gtk_box_pack_start (GTK_BOX (vbox30), check_DMAExec, FALSE, FALSE, 0);
+ check_XGKick = gtk_check_button_new_with_mnemonic (_("VU XGkick Hack - Fix for Erementar Gerad. \nAdds more delay to VU XGkick instructions. Corrects the color of some graphics."));
+ gtk_widget_set_name (check_XGKick, "check_XGKick");
+ gtk_widget_show (check_XGKick);
+ gtk_box_pack_start (GTK_BOX (vbox30), check_XGKick, 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);
@@ -1040,6 +1046,7 @@ create_GameFixDlg (void)
GLADE_HOOKUP_OBJECT (GameFixDlg, check_FPU_Mul, "check_FPU_Mul");
GLADE_HOOKUP_OBJECT (GameFixDlg, check_VU_Clip, "check_VU_Clip");
GLADE_HOOKUP_OBJECT (GameFixDlg, check_DMAExec, "check_DMAExec");
+ GLADE_HOOKUP_OBJECT (GameFixDlg, check_XGKick, "check_XGKick");
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 54f489309d..841d42da45 100644
--- a/pcsx2/Linux/pcsx2.glade
+++ b/pcsx2/Linux/pcsx2.glade
@@ -1984,6 +1984,26 @@ Causes freezing in Gust games and crashing in some TriAce games
False
+
+
+
+ True
+ True
+ VU XGkick Hack - Fix for Erementar Gerad.
+Adds more delay to VU XGkick instructions. Corrects the color of some graphics.
+ True
+ GTK_RELIEF_NORMAL
+ True
+ False
+ False
+ True
+
+
+ 0
+ False
+ False
+
+
diff --git a/pcsx2/Patch.cpp b/pcsx2/Patch.cpp
index 618e6f5041..85d40b1277 100644
--- a/pcsx2/Patch.cpp
+++ b/pcsx2/Patch.cpp
@@ -653,13 +653,10 @@ int AddPatch(int Mode, int Place, int Address, int Size, u64 data)
void patchFunc_ffxhack( char * cmd, char * param )
{
- //Keeping this as a dummy a while :p
- //g_FFXHack = 1;
}
void patchFunc_xkickdelay( char * cmd, char * param )
{
- g_VUGameFixes |= VUFIX_XGKICKDELAY2;
}
void patchFunc_fastmemory( char * cmd, char * param )
diff --git a/pcsx2/VU.h b/pcsx2/VU.h
index fb9602afe7..c339c4cf9b 100644
--- a/pcsx2/VU.h
+++ b/pcsx2/VU.h
@@ -196,10 +196,3 @@ static __forceinline u32* GET_VU_MEM(VURegs* VU, u32 addr)
return (u32*)(VU0.Mem+(addr&0x0fff)); // for addr 0x0000 to 0x4000 just wrap around
}
-
-
-// various fixes to enable per game (all are off by default)
-#define VUFIX_SIGNEDZERO 1
-#define VUFIX_EXTRAFLAGS 2
-#define VUFIX_XGKICKDELAY2 4
-extern int g_VUGameFixes;