diff --git a/build/win32/Cxbx.vcxproj b/build/win32/Cxbx.vcxproj
index b60243436..5fe56c5f2 100644
--- a/build/win32/Cxbx.vcxproj
+++ b/build/win32/Cxbx.vcxproj
@@ -395,6 +395,7 @@ $(SOLUTIONDIR)Export.bat
+
diff --git a/build/win32/Cxbx.vcxproj.filters b/build/win32/Cxbx.vcxproj.filters
index be097bf2e..e4aecf01c 100644
--- a/build/win32/Cxbx.vcxproj.filters
+++ b/build/win32/Cxbx.vcxproj.filters
@@ -821,6 +821,9 @@
HLEDatabase\XG
+
+ HLEDatabase\XG
+
HLEDatabase\XG
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.3911.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.3911.inl
index 2f22766fc..26be78802 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.3911.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.3911.inl
@@ -76,7 +76,6 @@ OOVPA_NO_XREF(XGSwizzleBox, 3911, 8)
{ 0xFE, 0x45 },
OOVPA_END;
-/* Leave unpatched
// ******************************************************************
// * XGUnswizzleRect
// ******************************************************************
@@ -91,7 +90,6 @@ OOVPA_NO_XREF(XGUnswizzleRect, 3911, 8)
{ 0xDE, 0x89 },
{ 0xFE, 0x60 },
OOVPA_END;
-*/
// ******************************************************************
// * XGWriteSurfaceOrTextureToXPR
@@ -152,6 +150,29 @@ OOVPA_NO_XREF(XGUnswizzleBox, 3911, 8)
{ 0xFE, 0x20 },
OOVPA_END;
+// ******************************************************************
+// * XGCompressRect
+// ******************************************************************
+//Generic OOVPA as of 3911 and newer.
+OOVPA_NO_XREF(XGCompressRect, 3911, 12)
+
+ { 0x00, 0x55 },
+ { 0x01, 0x8D },
+
+ { 0x14, 0x83 },
+ { 0x15, 0x7D },
+ { 0x16, 0x6C },
+ { 0x17, 0x00 },
+ { 0x18, 0x56 },
+ { 0x19, 0x57 },
+ { 0x1A, 0xC7 },
+ { 0x1B, 0x45 },
+
+ { 0xC0, 0x7E },
+ { 0xC1, 0x01 },
+OOVPA_END;
+
+#if 0 // No longer used, replaced by generic 3911 version
// ******************************************************************
// * XGCompressRect
// ******************************************************************
@@ -166,7 +187,7 @@ OOVPA_NO_XREF(XGCompressRect, 3911, 8)
{ 0xBE, 0x80 },
{ 0xDA, 0xAF },
OOVPA_END;
-
+#endif
// ******************************************************************
// * XGSetIndexBufferHeader
// ******************************************************************
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.4134.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.4134.inl
new file mode 100644
index 000000000..29b80426c
--- /dev/null
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.4134.inl
@@ -0,0 +1,81 @@
+// ******************************************************************
+// *
+// * .,-::::: .,:: .::::::::. .,:: .:
+// * ,;;;'````' `;;;, .,;; ;;;'';;' `;;;, .,;;
+// * [[[ '[[,,[[' [[[__[[\. '[[,,[['
+// * $$$ Y$$$P $$""""Y$$ Y$$$P
+// * `88bo,__,o, oP"``"Yo, _88o,,od8P oP"``"Yo,
+// * "YUMMMMMP",m" "Mm,""YUMMMP" ,m" "Mm,
+// *
+// * Cxbx->Win32->CxbxKrnl->XG.1.0.4134.cpp
+// *
+// * This file is part of the Cxbx project.
+// *
+// * Cxbx and Cxbe are free software; you can redistribute them
+// * and/or modify them under the terms of the GNU General Public
+// * License as published by the Free Software Foundation; either
+// * version 2 of the license, or (at your option) any later version.
+// *
+// * This program is distributed in the hope that it will be useful,
+// * but WITHOUT ANY WARRANTY; without even the implied warranty of
+// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// * GNU General Public License for more details.
+// *
+// * You should have recieved a copy of the GNU General Public License
+// * along with this program; see the file COPYING.
+// * If not, write to the Free Software Foundation, Inc.,
+// * 59 Temple Place - Suite 330, Bostom, MA 02111-1307, USA.
+// *
+// * (c) 2017 jarupxx
+// *
+// * All rights reserved
+// *
+// ******************************************************************
+
+// ******************************************************************
+// * XGSetVertexBufferHeader
+// ******************************************************************
+//Generic OOVPA as of 4134 and newer.
+OOVPA_NO_XREF(XGSetVertexBufferHeader, 4134, 15)
+
+ { 0x01, 0x44 },
+ { 0x04, 0x8B },
+ { 0x07, 0x18 },
+ { 0x0A, 0x08 },
+
+ { 0x0C, 0xC7 },
+ { 0x0D, 0x00 },
+ { 0x0E, 0x01 },
+ { 0x0F, 0x00 },
+ { 0x10, 0x00 }, // XGSetVertexBufferHeader 0x00 vs XGSetIndexBufferHeader 0x01
+ { 0x11, 0x00 },
+ { 0x12, 0x89 },
+ { 0x13, 0x48 },
+ { 0x14, 0x04 },
+ { 0x15, 0xC2 },
+ { 0x16, 0x18 },
+OOVPA_END;
+
+// ******************************************************************
+// * XGSetIndexBufferHeader
+// ******************************************************************
+//Generic OOVPA as of 4134 and newer.
+OOVPA_NO_XREF(XGSetIndexBufferHeader, 4134, 15)
+
+ { 0x01, 0x44 },
+ { 0x04, 0x8B },
+ { 0x07, 0x18 },
+ { 0x0A, 0x08 },
+
+ { 0x0C, 0xC7 },
+ { 0x0D, 0x00 },
+ { 0x0E, 0x01 },
+ { 0x0F, 0x00 },
+ { 0x10, 0x01 }, // XGSetVertexBufferHeader 0x00 vs XGSetIndexBufferHeader 0x01
+ { 0x11, 0x00 },
+ { 0x12, 0x89 },
+ { 0x13, 0x48 },
+ { 0x14, 0x04 },
+ { 0x15, 0xC2 },
+ { 0x16, 0x18 },
+OOVPA_END;
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.4361.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.4361.inl
index c334b2c5d..ae1f6e6d6 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.4361.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.4361.inl
@@ -86,6 +86,7 @@ OOVPA_NO_XREF(XGSwizzleRect, 4361, 10)
{ 0xED, 0x0B },
OOVPA_END;
#endif
+#if 0 // No longer used, replaced by generic 4134 version
// ******************************************************************
// * XGSetVertexBufferHeader
// ******************************************************************
@@ -100,6 +101,7 @@ OOVPA_NO_XREF(XGSetVertexBufferHeader, 4361, 8) // 4134
{ 0x13, 0x48 },
{ 0x16, 0x18 },
OOVPA_END;
+#endif
#if 0 // Moved to 3911
// ******************************************************************
// * XGCompressRect
@@ -116,7 +118,7 @@ OOVPA_NO_XREF(XGCompressRect, 4361, 8)
{ 0xFE, 0x8B },
OOVPA_END;
#endif
-
+#if 0 // Moved to 4134
// ******************************************************************
// * XGSetIndexBufferHeader
// ******************************************************************
@@ -138,6 +140,7 @@ OOVPA_NO_XREF(XGSetIndexBufferHeader, 4361, 13)
{ 0x16, 0x18 },
OOVPA_END;
+#endif
// ******************************************************************
// * XFONT_OpenBitmapFontFromMemory
@@ -165,8 +168,8 @@ OOVPATable XG_4361[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.4432.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.4432.inl
index 6c08bbec9..39772642c 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.4432.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.4432.inl
@@ -45,8 +45,8 @@ OOVPATable XG_4432[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.4627.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.4627.inl
index 33c8fafe0..29faf2fed 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.4627.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.4627.inl
@@ -83,8 +83,8 @@ OOVPATable XG_4627[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.5028.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.5028.inl
index fb8dad14d..2576e8db7 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.5028.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.5028.inl
@@ -42,8 +42,8 @@ OOVPATable XG_5028[] = {
// REGISTER_OOVPA(XGUnswizzleRect, 3911, DISABLED), // TODO : Uncomment
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.5233.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.5233.inl
index 2300f9c74..94be2358d 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.5233.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.5233.inl
@@ -43,8 +43,8 @@ OOVPATable XG_5233[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.5344.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.5344.inl
index 17bcfc828..ac32843d0 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.5344.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.5344.inl
@@ -43,8 +43,8 @@ OOVPATable XG_5344[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.5558.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.5558.inl
index 3ba2263a6..60453b26d 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.5558.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.5558.inl
@@ -73,8 +73,8 @@ OOVPATable XG_5558[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.5788.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.5788.inl
index 12de2621d..eb35a12a9 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.5788.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.5788.inl
@@ -60,8 +60,8 @@ OOVPATable XG_5788[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.1.0.5849.inl b/src/CxbxKrnl/HLEDataBase/XG.1.0.5849.inl
index 8169dbd0a..9b9fbe55b 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.1.0.5849.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.1.0.5849.inl
@@ -43,8 +43,8 @@ OOVPATable XG_5849[] = {
REGISTER_OOVPA(XGSwizzleBox, 3911, PATCH),
REGISTER_OOVPA(XGWriteSurfaceOrTextureToXPR, 3911, PATCH),
REGISTER_OOVPA(XGSetTextureHeader, 3911, PATCH),
- REGISTER_OOVPA(XGSetVertexBufferHeader, 4361, XREF),
- REGISTER_OOVPA(XGSetIndexBufferHeader, 4361, XREF),
+ REGISTER_OOVPA(XGSetVertexBufferHeader, 4134, XREF),
+ REGISTER_OOVPA(XGSetIndexBufferHeader, 4134, XREF),
REGISTER_OOVPA(XGCompressRect, 3911, XREF),
REGISTER_OOVPA(XGUnswizzleBox, 3911, DISABLED),
REGISTER_OOVPA(XFONT_OpenBitmapFontFromMemory, 4361, XREF),
diff --git a/src/CxbxKrnl/HLEDataBase/XG.OOVPA.inl b/src/CxbxKrnl/HLEDataBase/XG.OOVPA.inl
index e330af410..91b62125b 100644
--- a/src/CxbxKrnl/HLEDataBase/XG.OOVPA.inl
+++ b/src/CxbxKrnl/HLEDataBase/XG.OOVPA.inl
@@ -32,6 +32,18 @@
// *
// ******************************************************************
+// TODO: Known Xgraphics OOVPA issue list
+// * 4034 is not verified each OOVPA.
+// * Following OOVPA revision are not verified
+// * XGCompressRect (4242, 4721, 5028, 5120)
+// * XGSetIndexBufferHeader (4039)
+// * XGSetVertexBufferHeader (4039)
+// * XGSwizzleBox (4242)
+// * XGUnswizzleBox (4039)
+// * XGWriteSurfaceOrTextureToXPR (4242, 5028)
+// NOTE: Known Xgraphics OOVPA not included in initial revision.
+// * XFONT_OpenBitmapFontFromMemory (4361)
+
#ifndef XGRAPHC_OOVPA_INL
#define XGRAPHC_OOVPA_INL
@@ -39,6 +51,7 @@
#include "HLEDataBase/XG.1.0.3911.inl"
#include "HLEDataBase/XG.1.0.4034.inl"
+#include "HLEDataBase/XG.1.0.4134.inl"
#include "HLEDataBase/XG.1.0.4361.inl"
#include "HLEDataBase/XG.1.0.4432.inl"
#include "HLEDataBase/XG.1.0.4627.inl"
@@ -57,13 +70,13 @@ OOVPATable XGRAPHC_OOVPAV2[] = {
REGISTER_OOVPAS(XFONT_OpenBitmapFontFromMemory, XREF, 4361),
REGISTER_OOVPAS(XGCompressRect, XREF, 3911),
REGISTER_OOVPAS(XGIsSwizzledFormat, PATCH, 3911),
- REGISTER_OOVPAS(XGSetIndexBufferHeader, XREF, 3911, 4361),
+ REGISTER_OOVPAS(XGSetIndexBufferHeader, XREF, 3911, 4134/*4361*/),
REGISTER_OOVPAS(XGSetTextureHeader, PATCH, 3911),
- REGISTER_OOVPAS(XGSetVertexBufferHeader, XREF, 3911, 4361),
+ REGISTER_OOVPAS(XGSetVertexBufferHeader, XREF, 3911, 4134/*4361*/),
REGISTER_OOVPAS(XGSwizzleBox, PATCH, 3911),
- // REGISTER_OOVPAS(XGSwizzleRect, UNPATCHED, 3911), // TODO : Uncomment
+ REGISTER_OOVPAS(XGSwizzleRect, UNPATCHED, 3911),
REGISTER_OOVPAS(XGUnswizzleBox, UNPATCHED, 3911),
- // REGISTER_OOVPAS(XGUnswizzleRect, UNPATCHED, 3911), // TODO : Uncomment
+ REGISTER_OOVPAS(XGUnswizzleRect, UNPATCHED, 3911),
REGISTER_OOVPAS(XGWriteSurfaceOrTextureToXPR, PATCH, 3911),
};