Explorar o código

0x001bd85c,TPitchLineCircle::Clamp,412,412,must

DESKTOP-AB9OQPJ\RED-10 %!s(int64=3) %!d(string=hai) anos
pai
achega
97af85baf1

+ 1 - 1
jni/AndroidApp.cpp

@@ -92,7 +92,7 @@ uint32 AndroidApp_GetNEONAvailable() {
 //0026A418 //^_- 经过单元测试,功能正常
 __attribute__((noinline))
 int AndroidApp_GetTotalRAMInKB() {
-  return 0;
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------------
 //0026A4B0 //^_^

+ 11 - 4
jni/CBall.cpp

@@ -34,8 +34,11 @@ void CBall::AdjustKickToPos(TPoint) {
 }
 //-------------------------------------------------------------------------------------------------
 //001577B4
-int CBall::SetBallMoveToPosSpin(TPoint3D *, int, int, TPoint3D, TPoint3D, int, int) {
-	return 0;
+int CBall::SetBallMoveToPosSpin(TPoint3D *a1, int a2, int a3, TPoint3D a4, TPoint3D a5, int a6, int a7) {
+  LOGE("CBall::SetBallMoveToPosSpin%p%d%d%d%d",a1,a2,a3,a6,a7);
+  LOGE("%d%d%d",a4.dz_8,a4.point_0.dx_0,a4.point_0.dy_4);
+  LOGE("%d%d%d",a5.dz_8,a5.point_0.dx_0,a5.point_0.dy_4);
+	return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0015799E
@@ -130,8 +133,12 @@ int CBall::SetBallMoveToPos(TPoint3D* pt1, TPoint3D pt2, TPoint3D pt3, int i4, i
 
 //-------------------------------------------------------------------------------------------------
 //00157EAC
-int CBall::SetBallMoveToPosLow(TPoint3D *, TPoint3D, TPoint3D, int, int) {
-	return 0;
+int CBall::SetBallMoveToPosLow(TPoint3D *a1, TPoint3D a2, TPoint3D a3, int a4, int a5) {
+  LOGE("CBall::SetBallMoveToPosLow%p%x%x",a1,a4,a5);
+  LOGE("%x%x%x",a2.dz_8,a2.point_0.dx_0,a2.point_0.dy_4);
+   LOGE("%x%x%x",a3.dz_8,a3.point_0.dx_0,a3.point_0.dy_4);
+  LOGE("%x%x%x",a1->dz_8,a1->point_0.dx_0,a1->point_0.dy_4);
+	return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //00157FF4

+ 2 - 1
jni/CFTTAndroidDevice.cpp

@@ -50,7 +50,7 @@ bool CFTTAndroidDevice::GetPowerSaveMode() {
 //-------------------------------------------------------------------------------------------------
 //0026B608 //^_^ 经过单元测试,功能正常
 int CFTTAndroidDevice::GetSDKVersion() {
-  return 0;
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0026B670 //^_-
@@ -73,6 +73,7 @@ int CFTTAndroidDevice::GetPackageName(wchar_t *pwbuf, uint len) {
 //-------------------------------------------------------------------------------------------------
 //0026B9E8 //^_^
 void CFTTAndroidDevice::GetDeviceType(char *pbuf, uint len, bool isTypeAndOS) {
+  LOGE("CFTTAndroidDevice::GetDeviceType%p%x%x",pbuf,len,isTypeAndOS);
 }
 //-------------------------------------------------------------------------------------------------
 //0026BA80 //^_^

+ 9 - 2
jni/CFTTAndroidGraphicsSettings.cpp

@@ -69,15 +69,18 @@ bool CFTTAndroidGraphicsSettings::UserHasChoice(EAndroidGraphicsSettingsOption e
 //0026A938 //^_^ 经过单元测试,功能正常
 int CFTTAndroidGraphicsSettings::GetUserSetting(EAndroidGraphicsSettingsOption eOption) {
   //loc_26A990
-  return 0;
+  LOGE("CFTTAndroidGraphicsSettings::GetUserSetting%x",eOption);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0026A9A4 //^_^
 void CFTTAndroidGraphicsSettings::SetFPSAutoChoice(EAndroidGraphicsSettingsFPS eFPS) {
+  LOGE("CFTTAndroidGraphicsSettings::SetFPSAutoChoice%x",eFPS);
 }
 //-------------------------------------------------------------------------------------------------
 //0026AA94  //^_^
 void CFTTAndroidGraphicsSettings::SetQualityChoice(EAndroidGraphicsSettingsQuality eQuality, bool *pb) {
+  LOGE("CFTTAndroidGraphicsSettings::SetQualityChoice%x%p",eQuality,pb);
 }
 //-------------------------------------------------------------------------------------------------
 //0026AABA //^_^ 经过单元测试,功能正常
@@ -87,7 +90,11 @@ int CFTTAndroidGraphicsSettings::ApplyGPUDatabaseOverride(char const *pDbFile0,
                                                           CGPUDatabaseMode const &pGPUDatabase2,
                                                           EAndroidGraphicsSettingsQuality eQuality3,
                                                           int &a4) {
-  return 0;
+  LOGE("CFTTAndroidGraphicsSettings::ApplyGPUDatabaseOverride%p%p%x%x",pDbFile0,pModel1,eQuality3,a4);
+
+  LOGE("CFTTAndroidGraphicsSettings::ApplyGPUDatabaseOverride%x%x%x%x%x%x",pGPUDatabase2.dEnabled_0,pGPUDatabase2.dMinSamples_4
+  ,pGPUDatabase2.dMetric_8,pGPUDatabase2.dHigh_10,pGPUDatabase2.dVHigh_14,pGPUDatabase2.dMed_C);;
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0026AB4C //^_- 经过单元测试,功能正常

+ 2 - 1
jni/CFTTDevice.cpp

@@ -298,7 +298,7 @@ float CFTTDevice::GetBatteryLevel() {
 //-------------------------------------------------------------------------------------------------
 //0026BBA4 //^_^
 int CFTTDevice::GetCPUCoreCount() {
-  return 1;
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0026BE28 //^_^ 经过单元测试,功能正常
@@ -374,6 +374,7 @@ void CFTTDevice::GetMake(char *pBuf, int len) {
 //-------------------------------------------------------------------------------------------------
 //0026BD10 //^_^ 经过单元测试,功能正常
 void CFTTDevice::GetModel(char *pBuf, int len) {
+  LOGE("CFTTDevice::GetModel%s %x",pBuf,len);
 }
 //-------------------------------------------------------------------------------------------------
 //002632A4 //^_^

+ 1 - 0
jni/CFTTGraphicsDeviceOGLES.cpp

@@ -164,6 +164,7 @@ uint CFTTGraphicsDeviceOGLES::ExtractRFromPlatformU32(uint8 a2) const {
 //-------------------------------------------------------------------------------------------------
 //00202938 //^_^
 void CFTTGraphicsDeviceOGLES::GetGPUName(wchar_t *pCUPBuf, int len) const {
+  LOGE("CFTTGraphicsDeviceOGLES::GetGPUName%p%x",pCUPBuf,len);
 }
 //-------------------------------------------------------------------------------------------------
 //00203868 //^_^

+ 3 - 1
jni/CFreeHUD.cpp

@@ -20,11 +20,13 @@ void CFreeHUD::InitTutorial() {
 }
 //-------------------------------------------------------------------------------------------------
 //001D5FA4
-void CFreeHUD::InitTutorial(EStoryTutorial) {
+void CFreeHUD::InitTutorial(EStoryTutorial a1) {
+	LOGE("CFreeHUD::ShutdownAnimation%d",a1);
 }
 //-------------------------------------------------------------------------------------------------
 //001D5FD8
 void CFreeHUD::ShutdownAnimation() {
+	LOGE("CFreeHUD::ShutdownAnimation");
 }
 //-------------------------------------------------------------------------------------------------
 //001D5FF0

+ 2 - 2
jni/CFreeHUD.h

@@ -28,8 +28,8 @@ public:
   static void Shutdown();                 // 001D5EC4
   void MultiLevelWarningCB(int, void *);  // 001D5F00
   static void InitTutorial();             // 001D5F1C
-  void InitTutorial(EStoryTutorial);      // 001D5FA4
-  void ShutdownAnimation();               // 001D5FD8
+  static void InitTutorial(EStoryTutorial);      // 001D5FA4
+  static void ShutdownAnimation();               // 001D5FD8
   static int Process();                   // 001D5FF0
   void RenderButton(THUDButton *);        // 001D61D8
   static void RenderReplayHUD();          // 001D64D4

+ 9 - 3
jni/CGFXFX.cpp

@@ -467,13 +467,19 @@ bool CGFXFX::GetGoldenBootEffectsEnabled() { return 0; }
 bool CGFXFX::GetStarPlayerEffectsEnabled() { return 0; }
 //-------------------------------------------------------------------------------------------------
 // 00184070
-void CGFXFX::SwipeReset() {}
+void CGFXFX::SwipeReset() {
+  LOGE("CGFXFX::SwipeReset");
+}
 //-------------------------------------------------------------------------------------------------
 // 001840AC
-void CGFXFX::SwipeSetCol(uint) {}
+void CGFXFX::SwipeSetCol(uint a1) {
+  LOGE("CGFXFX::SwipeSetCol%d",a1);
+}
 //-------------------------------------------------------------------------------------------------
 // 001840C0
-void CGFXFX::SwipeAddPoint(TPoint) {}
+void CGFXFX::SwipeAddPoint(TPoint p) {
+  LOGE("CGFXFX::SwipeAddPoint%d%d",p.dx_0,p.dy_4);
+}
 //-------------------------------------------------------------------------------------------------
 // 0018416C
 void CGFXFX::EnableGoldenBootEffects() {}

+ 710 - 154
jni/CGFXSpec.cpp

@@ -1,11 +1,12 @@
 #include "CGFXSpec.h"
-#include "CFTTDevice.h"
+
 #include "AndroidApp.h"
+#include "CFE.h"
 #include "CFTTAndroidDevice.h"
-#include "CXmlUtil.h"
+#include "CFTTDevice.h"
 #include "CFTTGraphicsDevice.h"
+#include "CXmlUtil.h"
 #include "STORY.h"
-#include "CFE.h"
 
 char CGFXSpec::s_cDeviceReport[0x1000];
 //-------------------------------------------------------------------------------------------------
@@ -17,208 +18,763 @@ const char *list_ResLimit_323204[4] = {
 };
 //-------------------------------------------------------------------------------------------------
 GFXSPEC_Specification GFXSPEC_tSpecification_AndroidLow{
-    0x1e,               //field_0
-    1.399999976158142,  //fLODMultGame_4
-    1.200000047683716,  //fLODMultNIS_8
-    0.75,               //fRTTScaleFactorX_C
-    0.75,               //fRTTScaleFactorY_10
-    256,                //iAtlasWidth_14
-    256,                //iAtlasHeight_18
-    2,                  //iKitTexFormat_1C
-    512,                //iKitDims_20
-    false,              //bSoftShadows_24
-    true,               //bEnvObjectShadows_25
-    false,              //bGameplayStadium_26
-    true,               //bCrowdAnimated_27
-    false,              //bDropTexMips_28
-    false,              //field_29 unuse
-    false,              //field_2A unuse
-    false,              //field_2B unuse
-    0,                  //eEnableDOF_2C
-    false,              //bEnableDepthFog_30
-    false,              //bEnableReflection_31
-    false,              //bEnableGodRays_32
-    false,              //bHighQualityNet_33
+    0x1e,               // field_0
+    1.399999976158142,  // fLODMultGame_4
+    1.200000047683716,  // fLODMultNIS_8
+    0.75,               // fRTTScaleFactorX_C
+    0.75,               // fRTTScaleFactorY_10
+    256,                // iAtlasWidth_14
+    256,                // iAtlasHeight_18
+    2,                  // iKitTexFormat_1C
+    512,                // iKitDims_20
+    false,              // bSoftShadows_24
+    true,               // bEnvObjectShadows_25
+    false,              // bGameplayStadium_26
+    true,               // bCrowdAnimated_27
+    false,              // bDropTexMips_28
+    false,              // field_29 unuse
+    false,              // field_2A unuse
+    false,              // field_2B unuse
+    0,                  // eEnableDOF_2C
+    false,              // bEnableDepthFog_30
+    false,              // bEnableReflection_31
+    false,              // bEnableGodRays_32
+    false,              // bHighQualityNet_33
     0u,
     0u,
     1u,
     0u,
-    nullptr,                 //pVHSShader_38
-    false,                   //bHighQualityGroundShadows_3C
-    false,                   //b3DGrass_3D
-    false,                   //bFloatEnvMap_3E
-    false,                   //bDynNormMap_3F
-    0,                       //eAntiAliasing_40
-    EPlayerShader_Quality_0,                       //ePlayerLightingQuality_44
-    EPitchShader_Quality_0,  //eHighQualityGrass_48
-    0,                       //eCrowdQuality_4C
-    -1,                      //iMinMaxResolution_50
-    false,                   //bForce16Bit_54
+    nullptr,                  // pVHSShader_38
+    false,                    // bHighQualityGroundShadows_3C
+    false,                    // b3DGrass_3D
+    false,                    // bFloatEnvMap_3E
+    false,                    // bDynNormMap_3F
+    0,                        // eAntiAliasing_40
+    EPlayerShader_Quality_0,  // ePlayerLightingQuality_44
+    EPitchShader_Quality_0,   // eHighQualityGrass_48
+    0,                        // eCrowdQuality_4C
+    -1,                       // iMinMaxResolution_50
+    false,                    // bForce16Bit_54
 };
 //-------------------------------------------------------------------------------------------------
 GFXSPEC_Specification GFXSPEC_tSpecification_AndroidMed{
-    0x1e,               //field_0
-    1.200000047683716,  //fLODMultGame_4
-    1.100000023841858,  //fLODMultNIS_8
-    0.75,               //fRTTScaleFactorX_C
-    0.75,               //fRTTScaleFactorY_10
-    256,                //iAtlasWidth_14
-    256,                //iAtlasHeight_18
-    3,                  //iKitTexFormat_1C
-    256,                //iKitDims_20
-    false,              //bSoftShadows_24
-    true,               //bEnvObjectShadows_25
-    true,               //bGameplayStadium_26
-    true,               //bCrowdAnimated_27
-    false,              //bDropTexMips_28
-    false,              //field_29 unuse
-    false,              //field_2A unuse
-    false,              //field_2B unuse
-    1,                  //eEnableDOF_2C
-    true,               //bEnableDepthFog_30
-    true,               //bEnableReflection_31
-    true,               //bEnableGodRays_32
-    true,               //bHighQualityNet_33
+    0x1e,               // field_0
+    1.200000047683716,  // fLODMultGame_4
+    1.100000023841858,  // fLODMultNIS_8
+    0.75,               // fRTTScaleFactorX_C
+    0.75,               // fRTTScaleFactorY_10
+    256,                // iAtlasWidth_14
+    256,                // iAtlasHeight_18
+    3,                  // iKitTexFormat_1C
+    256,                // iKitDims_20
+    false,              // bSoftShadows_24
+    true,               // bEnvObjectShadows_25
+    true,               // bGameplayStadium_26
+    true,               // bCrowdAnimated_27
+    false,              // bDropTexMips_28
+    false,              // field_29 unuse
+    false,              // field_2A unuse
+    false,              // field_2B unuse
+    1,                  // eEnableDOF_2C
+    true,               // bEnableDepthFog_30
+    true,               // bEnableReflection_31
+    true,               // bEnableGodRays_32
+    true,               // bHighQualityNet_33
     1u,
     1u,
     3u,
     0u,
-    "2d_vhsbasic",           //pVHSShader_38
-    false,                   //bHighQualityGroundShadows_3C
-    false,                   //b3DGrass_3D
-    false,                   //bFloatEnvMap_3E
-    false,                   //bDynNormMap_3F
-    0,                       //eAntiAliasing_40
-    EPlayerShader_Quality_1,                       //ePlayerLightingQuality_44
-    EPitchShader_Quality_1,  //eHighQualityGrass_48
-    0,                       //eCrowdQuality_4C
-    -1,                      //iMinMaxResolution_50
-    false,                   //bForce16Bit_54
+    "2d_vhsbasic",            // pVHSShader_38
+    false,                    // bHighQualityGroundShadows_3C
+    false,                    // b3DGrass_3D
+    false,                    // bFloatEnvMap_3E
+    false,                    // bDynNormMap_3F
+    0,                        // eAntiAliasing_40
+    EPlayerShader_Quality_1,  // ePlayerLightingQuality_44
+    EPitchShader_Quality_1,   // eHighQualityGrass_48
+    0,                        // eCrowdQuality_4C
+    -1,                       // iMinMaxResolution_50
+    false,                    // bForce16Bit_54
 };
 //-------------------------------------------------------------------------------------------------
 GFXSPEC_Specification GFXSPEC_tSpecification_AndroidHigh{
-    0x3c,   //field_0
-    0.875,  //fLODMultGame_4
-    0.75,   //fLODMultNIS_8
-    1.0,    //fRTTScaleFactorX_C
-    1.0,    //fRTTScaleFactorY_10
-    256,    //iAtlasWidth_14
-    256,    //iAtlasHeight_18
-    3,      //iKitTexFormat_1C
-    512,    //iKitDims_20
-    true,   //bSoftShadows_24
-    true,   //bEnvObjectShadows_25
-    true,   //bGameplayStadium_26
-    true,   //bCrowdAnimated_27
-    false,  //bDropTexMips_28
-    false,  //field_29 unuse
-    false,  //field_2A unuse
-    false,  //field_2B unuse
-    2,      //eEnableDOF_2C
-    true,   //bEnableDepthFog_30
-    true,   //bEnableReflection_31
-    true,   //bEnableGodRays_32
-    true,   //bHighQualityNet_33
+    0x3c,   // field_0
+    0.875,  // fLODMultGame_4
+    0.75,   // fLODMultNIS_8
+    1.0,    // fRTTScaleFactorX_C
+    1.0,    // fRTTScaleFactorY_10
+    256,    // iAtlasWidth_14
+    256,    // iAtlasHeight_18
+    3,      // iKitTexFormat_1C
+    512,    // iKitDims_20
+    true,   // bSoftShadows_24
+    true,   // bEnvObjectShadows_25
+    true,   // bGameplayStadium_26
+    true,   // bCrowdAnimated_27
+    false,  // bDropTexMips_28
+    false,  // field_29 unuse
+    false,  // field_2A unuse
+    false,  // field_2B unuse
+    2,      // eEnableDOF_2C
+    true,   // bEnableDepthFog_30
+    true,   // bEnableReflection_31
+    true,   // bEnableGodRays_32
+    true,   // bHighQualityNet_33
     1u,
     1u,
     4u,
     0u,
-    "2d_vhsfancy",           //pVHSShader_38
-    true,                    //bHighQualityGroundShadows_3C
-    true,                    //b3DGrass_3D
-    true,                    //bFloatEnvMap_3E
-    true,                    //bDynNormMap_3F
-    0,                       //eAntiAliasing_40
-    EPlayerShader_Quality_1,                       //ePlayerLightingQuality_44
-    EPitchShader_Quality_2,  //eHighQualityGrass_48
-    2,                       //eCrowdQuality_4C
-    -1,                      //iMinMaxResolution_50
-    false,                   //bForce16Bit_54
+    "2d_vhsfancy",            // pVHSShader_38
+    true,                     // bHighQualityGroundShadows_3C
+    true,                     // b3DGrass_3D
+    true,                     // bFloatEnvMap_3E
+    true,                     // bDynNormMap_3F
+    0,                        // eAntiAliasing_40
+    EPlayerShader_Quality_1,  // ePlayerLightingQuality_44
+    EPitchShader_Quality_2,   // eHighQualityGrass_48
+    2,                        // eCrowdQuality_4C
+    -1,                       // iMinMaxResolution_50
+    false,                    // bForce16Bit_54
 };
 //-------------------------------------------------------------------------------------------------
 GFXSPEC_Specification GFXSPEC_tSpecification_AndroidHighest{
-    0x3c,   //field_0
-    0.75,   //fLODMultGame_4
-    0.5,    //fLODMultNIS_8
-    1.0,    //fRTTScaleFactorX_C
-    1.0,    //fRTTScaleFactorY_10
-    256,    //iAtlasWidth_14
-    256,    //iAtlasHeight_18
-    3,      //iKitTexFormat_1C
-    512,    //iKitDims_20
-    true,   //bSoftShadows_24
-    true,   //bEnvObjectShadows_25
-    true,   //bGameplayStadium_26
-    true,   //bCrowdAnimated_27
-    false,  //bDropTexMips_28
-    false,  //field_29 unuse
-    false,  //field_2A unuse
-    false,  //field_2B unuse
-    3,      //eEnableDOF_2C
-    true,   //bEnableDepthFog_30
-    true,   //bEnableReflection_31
-    true,   //bEnableGodRays_32
-    true,   //bHighQualityNet_33
+    0x3c,   // field_0
+    0.75,   // fLODMultGame_4
+    0.5,    // fLODMultNIS_8
+    1.0,    // fRTTScaleFactorX_C
+    1.0,    // fRTTScaleFactorY_10
+    256,    // iAtlasWidth_14
+    256,    // iAtlasHeight_18
+    3,      // iKitTexFormat_1C
+    512,    // iKitDims_20
+    true,   // bSoftShadows_24
+    true,   // bEnvObjectShadows_25
+    true,   // bGameplayStadium_26
+    true,   // bCrowdAnimated_27
+    false,  // bDropTexMips_28
+    false,  // field_29 unuse
+    false,  // field_2A unuse
+    false,  // field_2B unuse
+    3,      // eEnableDOF_2C
+    true,   // bEnableDepthFog_30
+    true,   // bEnableReflection_31
+    true,   // bEnableGodRays_32
+    true,   // bHighQualityNet_33
     1u,
     1u,
     4u,
     0u,
-    "2d_vhsfancy",           //pVHSShader_38
-    true,                    //bHighQualityGroundShadows_3C
-    true,                    //b3DGrass_3D
-    true,                    //bFloatEnvMap_3E
-    true,                    //bDynNormMap_3F
-    3,                       //eAntiAliasing_40
-    EPlayerShader_Quality_2,                       //ePlayerLightingQuality_44
-    EPitchShader_Quality_3,  //eHighQualityGrass_48
-    3,                       //eCrowdQuality_4C
-    -1,                      //iMinMaxResolution_50
-    false,                   //bForce16Bit_54
+    "2d_vhsfancy",            // pVHSShader_38
+    true,                     // bHighQualityGroundShadows_3C
+    true,                     // b3DGrass_3D
+    true,                     // bFloatEnvMap_3E
+    true,                     // bDynNormMap_3F
+    3,                        // eAntiAliasing_40
+    EPlayerShader_Quality_2,  // ePlayerLightingQuality_44
+    EPitchShader_Quality_3,   // eHighQualityGrass_48
+    3,                        // eCrowdQuality_4C
+    -1,                       // iMinMaxResolution_50
+    false,                    // bForce16Bit_54
 };
 //-------------------------------------------------------------------------------------------------
 
 GFXSPEC_Specification *list_Specification_323214[]{
-    &GFXSPEC_tSpecification_AndroidLow,
-    &GFXSPEC_tSpecification_AndroidLow,
-    &GFXSPEC_tSpecification_AndroidMed,
-    &GFXSPEC_tSpecification_AndroidHigh,
+    &GFXSPEC_tSpecification_AndroidLow,     &GFXSPEC_tSpecification_AndroidLow,
+    &GFXSPEC_tSpecification_AndroidMed,     &GFXSPEC_tSpecification_AndroidHigh,
     &GFXSPEC_tSpecification_AndroidHighest,
 };
 //-------------------------------------------------------------------------------------------------
 GFXSPEC_Specification *GFXSPEC_pSpecification;
 char CGFXSpec::s_cDeviceAnalyticsString[512];
 //-------------------------------------------------------------------------------------------------
-//0018F3F0
+// 0018F3F0
+extern "C" {
+// 0018F3F0
 extern "C" {
 bool sub_18F3F0(CFTTXmlReaderNode *pXmlNode0, const char *pName, int *pOut) {
+  CFTTXmlReaderNode xmlnode_C = pXmlNode0->GetFirstChild(pName);
+  if (!xmlnode_C.IsValid()) return false;
+
+  char *r0_text = CXmlUtil::GetText(xmlnode_C);
+  if (r0_text == nullptr) return false;
+
+  *pOut = atoi(r0_text);
   return true;
 }
 }
+}
 //-------------------------------------------------------------------------------------------------
-//0018E728 经过单元测试,功能正常
+// 0018E728 经过单元测试,功能正常
 void CGFXSpec::Initialise() {
   // 只保留android相关的代码,ios的忽略
-  //SYS_GetHardwareType();
+  // SYS_GetHardwareType();
 
-  //locret_18E80A return
+  // locret_18E80A return
   LOGI("CGFXSpec::Initialise End");
 }
 //-------------------------------------------------------------------------------------------------
-//0018E878 经过单元测试,功能正常
-void CGFXSpec::Platform_InspectDevice() {
-  LOGI("CGFXSpec::Platform_InspectDevice: Entry");
+// 0018EEF4 //^_- 经过单元测试,功能正常
+void CGFXSpec::UpdateGraphicsFromConfig(CFTTXmlReaderNode *pXmlNode) {
+  char pbuf_134[256];
+  CFTTAndroidDevice::GetDeviceType(pbuf_134, 256, false);
+
+  char pbuf_234[256];
+  CFTTAndroidDevice::GetDeviceType(pbuf_234, 256, true);  // 0018EF26
+
+  float fs16 = 0.01;
+  int dInt_240, dr1;
+
+  for (CFTTXmlReaderNode xmlnode_238 = pXmlNode->GetFirstChild("Spec");
+       xmlnode_238.IsValid();
+       xmlnode_238 = xmlnode_238.GetNextSibling("Spec")) {
+    // loc_18EF82
+    CFTTXmlReaderNode xmlnode_23C = xmlnode_238.GetFirstChild("Model");
+    bool r5_isvalid = xmlnode_23C.IsValid();
+    if (!xmlnode_23C.IsValid())  //注意此处的逻辑与原始的汇编略有区别 loc_18F000
+      continue;
+
+    while (xmlnode_23C.IsValid()) {
+      // 0018EFA8
+      char *r8_text = CXmlUtil::GetText(xmlnode_23C);
+      if (r8_text != nullptr &&
+          (strcmp(r8_text, pbuf_134) == 0 || strcmp(r8_text, pbuf_234) == 0)) {
+        // loc_18F006
+        break;
+      }
+      xmlnode_23C = xmlnode_23C.GetNextSibling("Model");
+    }
+
+    // loc_18F000 此处的判断被我移到上去面了
+    // loc_18F006
+    if (sub_18F3F0(&xmlnode_238, "fLODMultGame", &dInt_240))
+      GFXSPEC_pSpecification->fLODMultGame_4 = (float)dInt_240 * (float)0.01;
+
+    if (sub_18F3F0(&xmlnode_238, "fLODMultNIS", &dInt_240))
+      GFXSPEC_pSpecification->fLODMultNIS_8 = (float)dInt_240 * (float)0.01;
+
+    if (sub_18F3F0(&xmlnode_238, "fRTTScaleFactorX", &dInt_240))
+      GFXSPEC_pSpecification->fRTTScaleFactorX_C =
+          (float)dInt_240 * (float)0.01;
+
+    if (sub_18F3F0(&xmlnode_238, "fRTTScaleFactorY", &dInt_240))
+      GFXSPEC_pSpecification->fRTTScaleFactorY_10 =
+          (float)dInt_240 * (float)0.01;
+
+    // loc_18F086
+    if (sub_18F3F0(&xmlnode_238, "iAtlasWidth", &dInt_240)) {
+      dr1 = 256;
+      if (!dInt_240) dr1 = 128;
+      GFXSPEC_pSpecification->iAtlasWidth_14 = dr1;
+    }
+
+    // loc_18F0A4
+    if (sub_18F3F0(&xmlnode_238, "iAtlasHeight", &dInt_240)) {
+      dr1 = 256;
+      if (!dInt_240) dr1 = 128;
+      GFXSPEC_pSpecification->iAtlasHeight_18 = dr1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "iKitTexFormat", &dInt_240)) {
+      dr1 = 3;
+      if (!dInt_240) dr1 = 2;
+      GFXSPEC_pSpecification->iKitTexFormat_1C = dr1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "iKitDims", &dInt_240)) {
+      dr1 = 512;
+      if (!dInt_240) dr1 = 256;
+      GFXSPEC_pSpecification->iKitDims_20 = dr1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bSoftShadows", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bSoftShadows_24 = br1;
+    }
 
-  //loc_18EE76
-  LOGI("CGFXSpec::Platform_InspectDevice");
+    if (sub_18F3F0(&xmlnode_238, "bEnvObjectShadows", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bEnvObjectShadows_25 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bGameplayStadium", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bGameplayStadium_26 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bCrowdAnimated", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bCrowdAnimated_27 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bDropTexMips", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bDropTexMips_28 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "eEnableDOF", &dInt_240))
+      GFXSPEC_pSpecification->eEnableDOF_2C = dInt_240;
+
+    if (sub_18F3F0(&xmlnode_238, "bEnableDepthFog", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bEnableDepthFog_30 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bEnableReflection", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bEnableReflection_31 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bEnableGodRays", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = 1;
+      GFXSPEC_pSpecification->bEnableGodRays_32 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bHighQualityNet", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bHighQualityNet_33 = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "pVHSShader", &dInt_240)) {
+      const char *r0_2d_vh = "2d_vhsbasic";
+
+      if (dInt_240 != 1) r0_2d_vh = nullptr;
+
+      if (dInt_240 == 2) r0_2d_vh = "2d_vhsfancy";
+      GFXSPEC_pSpecification->pVHSShader_38 = r0_2d_vh;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bHighQualityGroundShadows", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bHighQualityGroundShadows_3C = true;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bFloatEnvMap", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bFloatEnvMap_3E = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "bDynNormMap", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bDynNormMap_3F = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "b3DGrass", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->b3DGrass_3D = br1;
+    }
+
+    if (sub_18F3F0(&xmlnode_238, "eHighQualityGrass", &dInt_240))
+      GFXSPEC_pSpecification->eHighQualityGrass_48 =
+          (EPitchShader_Quality)dInt_240;
+
+    if (sub_18F3F0(&xmlnode_238, "eAntiAliasing", &dInt_240))
+      GFXSPEC_pSpecification->eAntiAliasing_40 = dInt_240;
+
+    if (sub_18F3F0(&xmlnode_238, "eCrowdQuality", &dInt_240))
+      GFXSPEC_pSpecification->eCrowdQuality_4C = dInt_240;
+
+    if (sub_18F3F0(&xmlnode_238, "ePlayerLightingQuality", &dInt_240))
+      GFXSPEC_pSpecification->ePlayerLightingQuality_44 =
+          (EPlayerShader_Quality)dInt_240;
+
+    if (sub_18F3F0(&xmlnode_238, "iMinMaxResolution", &dInt_240))
+      GFXSPEC_pSpecification->iMinMaxResolution_50 = dInt_240;
+
+    if (sub_18F3F0(&xmlnode_238, "bForce16Bit", &dInt_240)) {
+      bool br1 = false;
+      if (dInt_240) br1 = true;
+      GFXSPEC_pSpecification->bForce16Bit_54 = br1;
+    }
+  }
+
+  CGFXSpec::ApplyResolutionClamp(pXmlNode);
 }
-//-------------------------------------------------------------------------------------------------
-//0018EEF4 //^_- 经过单元测试,功能正常
-void CGFXSpec::UpdateGraphicsFromConfig(CFTTXmlReaderNode *pXmlNode) {
-  LOGI("CGFXSpec::UpdateGraphicsFromConfig entry");
+
+// 0018E878 经过单元测试,功能正常
+void CGFXSpec::Platform_InspectDevice() {
+  bool bGL_OES_depth_texture_B58, bHighFloat_B60, bIsGLES3_B50;
+
+  int r7_dCpuCoreCount = CFTTDevice::GetCPUCoreCount();
+  int r0_dRendererType =
+      g_pGraphicsDevice->GetRendererType();  // OGLES=0; OGLES3=4; Vulkan=3
+
+  // 0018E8A2
+  if (r0_dRendererType == 4) {  // OGLES3
+    // loc_18E8D0
+    if (g_pGraphicsDevice->bGL_OES_depth_texture_D)
+      bGL_OES_depth_texture_B58 = true;
+    else
+      bGL_OES_depth_texture_B58 = false;
+
+    if (g_pGraphicsDevice->bHighFloat_C)
+      bHighFloat_B60 = true;
+    else
+      bHighFloat_B60 = false;
+
+    // loc_18E8F0
+    bIsGLES3_B50 = true;
+  } else if (r0_dRendererType == 3) {  // 0018E8A8 Vulkan
+    // loc_18E8E8
+    bGL_OES_depth_texture_B58 = true;
+    bHighFloat_B60 = true;
+    bIsGLES3_B50 = true;
+  } else if (r0_dRendererType != 0) {
+    // loc_18E8F4
+    bGL_OES_depth_texture_B58 = false;
+    bHighFloat_B60 = false;
+    bIsGLES3_B50 = false;
+  } else {
+    // 0018E8AE
+    if (g_pGraphicsDevice->bGL_OES_depth_texture_D)
+      bGL_OES_depth_texture_B58 = true;
+    else
+      bGL_OES_depth_texture_B58 = false;
+
+    if (g_pGraphicsDevice->bHighFloat_C)
+      bHighFloat_B60 = true;
+    else
+      bHighFloat_B60 = false;
+
+    if (g_pGraphicsDevice->bIsGLES3_B)
+      bIsGLES3_B50 = true;
+    else
+      bIsGLES3_B50 = false;
+  }
+
+  // loc_18E900
+  int r5_dWidth = g_pGraphicsDevice->width();     // 0018E908
+  int r8_dHeight = g_pGraphicsDevice->height();   // 0018E916
+  int iRAMKb_B6C = AndroidApp_GetTotalRAMInKB();  // 0018E92A
+
+  char buf_428[1024];
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "Core Count: %d\n", r7_dCpuCoreCount);  // 0018E93A
+  strlcat(s_cDeviceReport, buf_428, 0x1000);                      // 0018E954
+
+  const char *pr3 = "NO";
+  if (bIsGLES3_B50) {
+    pr3 = "YES";
+  }
+
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "GLES3: %s\n", pr3);  // 0018E974
+  strlcat(s_cDeviceReport, buf_428, 0x1000);    // 0018E97E
+
+  pr3 = "NO";
+  if (bHighFloat_B60) {
+    pr3 = "YES";
+  }
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "Highp in FS: %s\n", pr3);  // 0018E994
+  strlcat(s_cDeviceReport, buf_428, 0x1000);          // 0018E99E
+
+  // 0018E9A0
+  if (r5_dWidth > r8_dHeight) r5_dWidth = r8_dHeight;
+
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "Smaller Res: %d\n", r5_dWidth);  // 0018E9B4
+  strlcat(s_cDeviceReport, buf_428, 0x1000);                // 0018E9BE
+
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "RAM: %dKB\n", iRAMKb_B6C);  // 0018E9D0
+  strlcat(s_cDeviceReport, buf_428, 0x1000);           // 0018E9DA
+
+  pr3 = "NO";
+  if (bGL_OES_depth_texture_B58) {
+    pr3 = "YES";
+  }
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "Depth Texture Supported: %s\n", pr3);  // 0018E9F0
+  strlcat(s_cDeviceReport, buf_428, 0x1000);                      // 0018E9FA
+
+  int dr0 = bGL_OES_depth_texture_B58 ^ 1;  // 0018E9FE
+  if (r7_dCpuCoreCount == 1) {
+    dr0++;
+  }
+
+  int r4_dNegatives = dr0 + (bHighFloat_B60 ^ 1);
+  if (iRAMKb_B6C < (600 * 1024))  // 0018EA0A
+    r4_dNegatives++;
+
+  if (iRAMKb_B6C < (900 * 1024))  // 0018EA1A
+    r4_dNegatives++;
+
+  if (r5_dWidth < 640) r4_dNegatives++;
+
+  if (CFTTAndroidDevice::GetSDKVersion() < 20)  // 0018EA30
+    r4_dNegatives++;
+
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "Negatives: %d\n", r4_dNegatives);  // 0018EA42
+  strlcat(s_cDeviceReport, buf_428, 0x1000);                  // 0018EA4C
+
+  dr0 = 0;
+  if (r7_dCpuCoreCount > 3) dr0 = 1;  // 0018EA54
+
+  // 0018EA56
+  if (iRAMKb_B6C > (1536 * 1024)) dr0++;
+
+  int r5_dPositives = dr0;
+  if (dr0 < 2) r5_dPositives = 2;
+
+  if (!bIsGLES3_B50) r5_dPositives = dr0;
+
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 1024, "Positives: %d\n", r5_dPositives);  // 0018EA7A
+  strlcat(s_cDeviceReport, buf_428, 0x1000);                  // 0018EA84
+
+  EAndroidGraphicsSettingsQuality r10_eQuality;
+  if (r4_dNegatives >= 2) {
+    // 0018EA8A
+    memset(buf_428, 0, 1024);
+    snprintf(buf_428, 1024, "AGS_QUALITY_SETTING_FAST auto-chosen\n");
+    strlcat(s_cDeviceReport, buf_428, 0x1000);
+    r10_eQuality = EAndroidGraphicsSettingsQuality_FAST;  // 0018EAA8
+  } else {
+    // loc_18EAAE
+    if (r5_dPositives >= 2 && r4_dNegatives != 1) {
+      // 0018EAB6
+      memset(buf_428, 0, 1024);
+      snprintf(buf_428, 1024, "AGS_QUALITY_SETTING_HIGH auto-chosen");
+      strlcat(s_cDeviceReport, buf_428, 0x1000);
+      r10_eQuality = EAndroidGraphicsSettingsQuality_HIGH;
+    } else {
+      // loc_18EADA
+      memset(buf_428, 0, 1024);
+      snprintf(buf_428, 1024, "AGS_QUALITY_SETTING_BALANCED auto-chosen");
+      strlcat(s_cDeviceReport, buf_428, 0x1000);
+      r10_eQuality = EAndroidGraphicsSettingsQuality_BALANCED;
+    }
+  }
+
+  // loc_18EAFC
+  char buf_model_628[512];
+  memset(buf_model_628, 0, 512);
+  CFTTDevice::GetModel(buf_model_628, 512);  // 0018EB06
+
+  int var_92C = -1;
+  char buf_728[256];
+  memset(buf_728, 0, 256);
+  CFTTAndroidDevice::GetDeviceType(buf_728, 256, false);  // 0018EB1C
+
+  char buf_828[256];
+  memset(buf_828, 0, 256);
+  CFTTAndroidDevice::GetDeviceType(buf_828, 256, true);  // 0018EB2A
+
+  wchar_t wgpuname_B2C[256];
+  memset(wgpuname_B2C, 0, sizeof(wchar_t) * 256);
+  g_pGraphicsDevice->GetGPUName(wgpuname_B2C, 256);  // 0018EB3C
+
+  char gpuname_928[256];
+  memset(gpuname_928, 0, 256);
+  UnicodeToAscii(gpuname_928, wgpuname_B2C, 256, '_');  // 0018EB4A
+
+  CGPUDatabaseMode tGPUDatabase_B44;
+  tGPUDatabase_B44.dEnabled_0 = 0;
+  tGPUDatabase_B44.dMinSamples_4 = 5;
+  tGPUDatabase_B44.dMetric_8 = 0;
+  tGPUDatabase_B44.dMed_C = 1500;
+  tGPUDatabase_B44.dHigh_10 = 3500;
+  tGPUDatabase_B44.dVHigh_14 = 8000;
+
+  EAndroidGraphicsSettingsQuality dr7;
+  EAndroidGraphicsSettingsQuality var_B60;
+  EAndroidGraphicsSettingsQuality r8_eQuality = STORY_GetGfxQualityOverride(
+      buf_728, buf_828, gpuname_928, tGPUDatabase_B44);
+
+  // 0018EB76
+  if (r8_eQuality == EAndroidGraphicsSettingsQuality_FAST ||
+      r8_eQuality == EAndroidGraphicsSettingsQuality_BALANCED ||
+      r8_eQuality == EAndroidGraphicsSettingsQuality_HIGH) {
+    // 0018EB84
+    snprintf(
+        buf_428, 1024,
+        "Graphics quality auto choice overridden by config. Was %d, now %d.\n",
+        r10_eQuality, r8_eQuality);
+    strlcat(s_cDeviceReport, buf_428, 0x1000);
+    dr7 = r8_eQuality;
+    var_B60 = EAndroidGraphicsSettingsQuality_ERR;
+  } else {
+    // loc_18EBB2
+    var_B60 = (EAndroidGraphicsSettingsQuality)
+        CFTTAndroidGraphicsSettings::ApplyGPUDatabaseOverride(
+            "PKG:data/x_android/gpu_db.dat", buf_model_628, tGPUDatabase_B44,
+            r10_eQuality,
+            var_92C);  // 0018EBC2
+    memset(buf_428, 0, 1024);
+    // 0018EBCA
+    if (var_92C != -1) {
+      // 0018EBCE
+      if (var_B60 == r10_eQuality) {
+        // 0018EBD4
+        snprintf(buf_428, 1024,
+                 "Graphics quality unchanged by GPU Database. Score %d, "
+                 "Quality %d.\n",
+                 var_92C, r10_eQuality);
+        strlcat(s_cDeviceReport, buf_428, 0x1000);
+        r8_eQuality = EAndroidGraphicsSettingsQuality_ERR;
+        var_B60 = r10_eQuality;
+        // MOV             R7, R10
+        dr7 = r10_eQuality;
+      } else {
+        // loc_18EC74
+        snprintf(buf_428, 1024,
+                 "Graphics quality auto choice overridden by GPU Database. Was "
+                 "%d, now %d. Score=%d.\n",
+                 r10_eQuality, var_B60, var_92C);
+        strlcat(s_cDeviceReport, buf_428, 0x1000);
+        r8_eQuality = EAndroidGraphicsSettingsQuality_ERR;
+      }
+    } else {
+      // loc_18EC00 未知设备
+      snprintf(buf_428, 1024,
+               "Device %s not present in Android database or insufficient "
+               "samples.\n",
+               buf_model_628);
+      strlcat(s_cDeviceReport, buf_428, 0x1000);
+      r8_eQuality = EAndroidGraphicsSettingsQuality_ERR;
+      var_B60 = EAndroidGraphicsSettingsQuality_ERR;
+      dr7 = r10_eQuality;
+    }
+  }
+
+  // loc_18EC9E
+  EAndroidGraphicsSettingsFPS r6_eFPS = EAndroidGraphicsSettingsFPS_2;
+  GFXSPEC_pSpecification = list_Specification_323214[dr7];
+  if (GFXSPEC_pSpecification->dFPS_0 == 30) {
+    r6_eFPS = EAndroidGraphicsSettingsFPS_1;
+  }
+
+  CFTTAndroidGraphicsSettings::SetFPSAutoChoice(r6_eFPS);  // 0018ECBE
+
+  bool var_B49[5];
+  var_B49[0] = var_B49[1] = var_B49[2] = true;
+  var_B49[3] = dr7 > EAndroidGraphicsSettingsQuality_FAST;
+  var_B49[4] = dr7 > EAndroidGraphicsSettingsQuality_BALANCED;
+  CFTTAndroidGraphicsSettings::SetQualityChoice(dr7, &var_B49[0]);
+
+  bool r10_bFPS = GFXSPEC_pSpecification->dFPS_0 == 30;  // 0018ECFC
+
+  EAndroidGraphicsSettingsQuality dUS_dr11 = (EAndroidGraphicsSettingsQuality)
+      CFTTAndroidGraphicsSettings::GetUserSetting(
+          EAndroidGraphicsSettingsOption_1);
+  EAndroidGraphicsSettingsQuality dUS_dr4 = (EAndroidGraphicsSettingsQuality)
+      CFTTAndroidGraphicsSettings::GetUserSetting(
+          EAndroidGraphicsSettingsOption_0);
+  EAndroidGraphicsSettingsQuality dUS_dr5 = (EAndroidGraphicsSettingsQuality)
+      CFTTAndroidGraphicsSettings::GetUserSetting(
+          EAndroidGraphicsSettingsOption_2);
+
+  // 0018ED1C
+  if (dUS_dr11 && dUS_dr11 != dr7) {
+    // 0018ED28
+    memset(buf_428, 0, 1024);
+    snprintf(buf_428, 0x400, "User overridden quality choice. Was %d, now %d",
+             dr7, dUS_dr11);
+    strlcat(s_cDeviceReport, buf_428, 0x1000);
+    GFXSPEC_pSpecification = list_Specification_323214[dUS_dr11];
+  }
+
+  // loc_18ED5A  //??? eFPS 及dUS_dr4
+  // 类型都应该没有错,但是在这儿却做了比较,暂时只能这么写了
+  if (dUS_dr4 && dUS_dr4 != (EAndroidGraphicsSettingsQuality)r6_eFPS) {
+    // 0018ED60
+    memset(buf_428, 0, 1024);
+    snprintf(buf_428, 0x400, "User overridden fps choice. Was %d, now %d",
+             r6_eFPS, dUS_dr4);
+    strlcat(s_cDeviceReport, buf_428, 0x1000);
+    r10_bFPS = dUS_dr4 == EAndroidGraphicsSettingsQuality_FAST;
+  }
+
+  // loc_18ED8C
+  int dr3 = 60;
+  if (r10_bFPS) dr3 = 30;
+
+  GFXSPEC_pSpecification->dFPS_0 = dr3;
+  snprintf(s_cDeviceAnalyticsString, 512, "%s,%d,%d,%d,%d,%d,%d,%d",
+           buf_model_628, r10_eQuality, r8_eQuality, var_B60, var_92C, dUS_dr11,
+           dUS_dr4,
+           dUS_dr5);  // 0018EDC4
+
+  // 0018EDD8
+  memset(buf_428, 0, 1024);
+  snprintf(buf_428, 0x400u, "Analytics String:%s\n", s_cDeviceAnalyticsString);
+  strlcat(s_cDeviceReport, buf_428, 0x1000);
+
+  // 0018EDE8
+  if (!bGL_OES_depth_texture_B58) {
+    GFXSPEC_pSpecification->bEnableDepthFog_30 = false;
+    GFXSPEC_pSpecification->eEnableDOF_2C = 1;
+    GFXSPEC_pSpecification->bEnableGodRays_32 = false;
+  }
+
+  // loc_18EDFE
+  if (g_pGraphicsDevice->GetRendererType() == 0 ||
+      g_pGraphicsDevice->GetRendererType() == 4) {
+    // loc_18EE1A
+    if (!g_pGraphicsDevice->field_24) {
+      GFXSPEC_pSpecification->eEnableDOF_2C = true;
+      GFXSPEC_pSpecification->bSoftShadows_24 = false;
+      GFXSPEC_pSpecification->bEnableDepthFog_30 = false;
+      GFXSPEC_pSpecification->bEnableReflection_31 = false;
+      GFXSPEC_pSpecification->bEnableGodRays_32 = false;
+      GFXSPEC_pSpecification->pVHSShader_38 = "2d_vhsbasic";
+    }
+
+    // loc_18EE3C &&
+    if (g_pGraphicsDevice->bMapbuffer_9) {
+      // 0018EE42
+      if (g_pGraphicsDevice->field_20) {
+        if (g_pGraphicsDevice->field_20 == 1) {
+          GFXSPEC_pSpecification->fLODMultGame_4 = 1.8f;
+          GFXSPEC_pSpecification->fLODMultNIS_8 = 1.2f;
+        } else {
+          return;
+        }
+      } else {
+        // loc_18EE60
+        GFXSPEC_pSpecification->fLODMultGame_4 = 3.0f;
+        GFXSPEC_pSpecification->fLODMultNIS_8 = 1.5f;
+      }
+    } else {
+      // loc_18EE50
+      if (g_pGraphicsDevice->field_20) {
+        // 0018EE52
+        if (g_pGraphicsDevice->field_20 == 1) {
+          // 0018EE48
+          GFXSPEC_pSpecification->fLODMultGame_4 = 2.3f;
+          GFXSPEC_pSpecification->fLODMultNIS_8 = 2.0f;
+        } else {
+          return;
+        }
+      } else {
+        // loc_18EE6A
+        GFXSPEC_pSpecification->fLODMultGame_4 = 4.3f;
+        GFXSPEC_pSpecification->fLODMultNIS_8 = 3.0f;
+      }
+    }
+    // loc_18EE70
+  }
+
+  // loc_18EE76
 }
 //-------------------------------------------------------------------------------------------------
-//0018F41C //^_^
+// 0018F41C //^_^
 void CGFXSpec::ApplyResolutionClamp(CFTTXmlReaderNode *pXmlNode) {
-  //locret_18F4C6
+  // locret_18F4C6
+  LOGE(" CGFXSpec::ApplyResolutionClamp%p",pXmlNode);
 }
 //-------------------------------------------------------------------------------------------------

+ 26 - 26
jni/CGfxCrowd.cpp

@@ -230,7 +230,7 @@ void SetupGaussian(FTTArray<FTTPair<float,float>,PointType_16> &r0_parr,float r1
 
 void GaussianBlur(CFTTRenderToTexture *a1, CFTTRenderToTexture *a2,
                   CFTTRenderToTexture *a3, float a4, int a5, bool a6, bool a7) {
-LOGE("GaussianBlur=%x%x%x%x%x%x%x",a1,a2,a3,a4,a5,a6,a7);
+LOGE("GaussianBlur=%p%p%p%f%x%x%x",a1,a2,a3,a4,a5,a6,a7);
 }
 // 00185e1a ^_-
 // void GetFaceData(TFTTModel *pModel0, ushort *&pUS1, int &i2, int i3) {
@@ -560,7 +560,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
       // loc_19CE38
       // 0019CE48 这里的符号不对 可能会造成内存泄漏 
       // FTTUPtr<TCrowdMember []>::operator=(TCrowdMember*)
-      LOGE("tPtrTextureData_D0.pType_0->pmembers_34=%x",((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0));
+     // LOGE("tPtrTextureData_D0.pType_0->pmembers_34=%x",((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0));
       TCrowdMember* r5_pmem = new TCrowdMember [0x20];
       //FTTUPtr<TCrowdMember[0x20]> r5_pmem(new TCrowdMember [0x20]);
       tPtrTextureData_D0.pType_0->pmembers_34= r5_pmem;
@@ -818,12 +818,12 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
 
           TSATAnim_TSX *r3_panim = GetLegAnim(
               tPtrTextureData_D0.pType_0->field_10c[r10_i][r4_i].b_0);
-          CFTTMatrix32 matrix_sp78 =
+          
               ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i].Animate(
                   r9_panim, r3_panim,
                   tPtrTextureData_D0.pType_0->field_10c[r10_i][r4_i].us_2);
           // 0019D3EE
-        
+        CFTTMatrix32 matrix_sp78;
           MatrixMultiply(&matrix_sp78, &matrix32_spd0, &CFTTCamera::s_matView);
          
           ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i].Render(
@@ -1140,7 +1140,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
           TSATAnim_TSX *r3_plegAnim =
               GetLegAnim(tPtrTextureData_D0.pType_0->data_90c[r10_i][r5_i].b_0);
          
-          CFTTMatrix32 mat32_sp120 =
+          TAABB mat32_sp120 =
               ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i].Animate(
                   r5_panim, r3_plegAnim,
                   tPtrTextureData_D0.pType_0->data_90c[r10_i][r5_i].us_2);
@@ -1531,7 +1531,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                     GetAnim(tPtrTextureData_D0.pType_0->buff_94c[r0_i][r11_u].b_0);
                 TSATAnim_TSX *r3_plegAnim = GetLegAnim(
                     tPtrTextureData_D0.pType_0->buff_94c[r0_i][r11_u].b_0);
-                CFTTMatrix32 mat_spd0 =
+                TAABB mat_spd0 =
                     ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r0_i]
                         .Animate(
                             r4_panim, r3_plegAnim,
@@ -1543,24 +1543,24 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 vector32_sp120.float_8 = 0.100000001f;
                 // CFTTMatrix32 结构体应该是包含TAABB结构 这里先不改
                 ((TAABB *)&mat_spd0)->Inflate(vector32_sp120);
-                data_d8[r0_i][r11_u].f_0 = mat_spd0.d[0][0];
-                data_d8[r0_i][r11_u].f_4 = mat_spd0.d[0][1];
+                data_d8[r0_i][r11_u].f_0 = mat_spd0.Vector32_0.float_0;;
+                data_d8[r0_i][r11_u].f_4 = mat_spd0.Vector32_0.float_4;;
                 // check
-                data_d8[r0_i][r11_u].f_8 = mat_spd0.d[0][3];
-                data_d8[r0_i][r11_u].f_C = mat_spd0.d[0][1];
-                data_d8[r0_i][r11_u].f_10 = mat_spd0.d[0][0];
-                data_d8[r0_i][r11_u].f_1C = mat_spd0.d[1][0];
-                data_d8[r0_i][r11_u].f_14 = mat_spd0.d[1][0];
-                data_d8[r0_i][r11_u].f_18 = mat_spd0.d[0][3];
+                data_d8[r0_i][r11_u].f_8 = mat_spd0.Vector32_C.float_0;;
+                data_d8[r0_i][r11_u].f_C = mat_spd0.Vector32_0.float_4;;
+                data_d8[r0_i][r11_u].f_10 = mat_spd0.Vector32_0.float_0;;
+                data_d8[r0_i][r11_u].f_1C = mat_spd0.Vector32_C.float_4;;
+                data_d8[r0_i][r11_u].f_14 = mat_spd0.Vector32_C.float_4;;
+                data_d8[r0_i][r11_u].f_18 = mat_spd0.Vector32_C.float_0;;
                 vectoeShot_sp78.list_0[r2_u].b_0 = r11_u;
                 vectoeShot_sp78.list_0[r2_u].b_1 = r0_i;
-                vectoeShot_sp78.list_0[r2_u].f_4 = mat_spd0.d[0][0];
-                vectoeShot_sp78.list_0[r2_u].f_8 = mat_spd0.d[0][1];
-                vectoeShot_sp78.list_0[r2_u].f_C = mat_spd0.d[0][2];
-                vectoeShot_sp78.list_0[r2_u].f_10 = mat_spd0.d[0][3];
+                vectoeShot_sp78.list_0[r2_u].f_4 = mat_spd0.Vector32_0.float_0;;
+                vectoeShot_sp78.list_0[r2_u].f_8 = mat_spd0.Vector32_0.float_4;;
+                vectoeShot_sp78.list_0[r2_u].f_C = mat_spd0.Vector32_0.float_8;;
+                vectoeShot_sp78.list_0[r2_u].f_10 = mat_spd0.Vector32_C.float_0;;
 
-                vectoeShot_sp78.list_0[r2_u].f_14 = mat_spd0.d[1][0];
-                vectoeShot_sp78.list_0[r2_u].f_18 = mat_spd0.d[1][1];
+                vectoeShot_sp78.list_0[r2_u].f_14 = mat_spd0.Vector32_C.float_4;;
+                vectoeShot_sp78.list_0[r2_u].f_18 = mat_spd0.Vector32_C.float_8;;
                 //vectoeShot_sp78
 
                 r2_u++;
@@ -1711,7 +1711,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 TSATAnim_TSX *r3_panim = GetLegAnim(
                     tPtrTextureData_D0.pType_0->buff_94c[r9_i][r8_u].b_0);
 
-                CFTTMatrix32 mat_sp50 =
+                TAABB mat_sp50 =
                     ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r9_i]
                         .Animate(
                             r4_panim, r3_panim,
@@ -1752,8 +1752,8 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 s2_f = s26_f + s26_f;
                 CFTTVector32 vector_sp114;
                 vector_sp114.float_8 = 0;
-                mat_sp50.d[0][2]=0;
-                mat_sp50.d[1][1]=20.0f;
+                mat_sp50.Vector32_0.float_8=0;
+                mat_sp50.Vector32_C.float_8=20.0f;
                 // sp64= 20f
                 s4_f = s4_f - 1.0f;
                 s6_f = s6_f - 1.0f;
@@ -1768,7 +1768,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 vector_sp114.float_4 = s0_f;
                 CFTTMatrix32 mat32_spd0;
                 sub_19ED8C(mat32_spd0, (CFTTVector32 *)&mat_sp50,
-                           (CFTTVector32 *)&mat_sp50.d[0][3], &vector_sp114,
+                           (CFTTVector32 *)&mat_sp50.Vector32_C, &vector_sp114,
                            &vector_spc4);
                 CFTTShaderBuiltInConstants::SetViewMatrix(
                     CFTTMatrix32::s_matIdentity);
@@ -1856,7 +1856,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                     tPtrTextureData_D0.pType_0->buff_94c[r10_i][r9_u].b_0);
                 TSATAnim_TSX *r3_panim = GetLegAnim(
                     tPtrTextureData_D0.pType_0->buff_94c[r10_i][r9_u].b_0);
-                CFTTMatrix32 mat32_spd0 =
+                TAABB mat32_spd0 =
                     ((TCrowdMember*)tPtrTextureData_D0.pType_0->pmembers_34.pType_0)[r10_i]
                         .Animate(
                             r5_panim, r3_panim,
@@ -1868,7 +1868,7 @@ void CGfxCrowd::UpdateCrowdTextures(uint r1_u) {
                 vector_sp78.float_8 = 0.100000001f;
                 ((TAABB *)&mat32_spd0)->Inflate(vector_sp78);
                 // 0019E7F2
-                float s0_f = mat32_spd0.d[1][0] / 2.5f;
+                float s0_f = mat32_spd0.Vector32_C.float_4 / 2.5f;
                 int r0_i =
                     tPtrTextureData_D0.pType_0->buf_1950[r10_i][r9_u]->field_C /
                     2;

+ 1 - 1
jni/CStageManager.h

@@ -237,7 +237,7 @@ struct CStageManager_5CF0 {
   char field_024D[3];
   uchar field_0250[0x94];
   int field_02E4;
-  int field_02E8;  // 001ED226
+  int TutorialType_CrowdSFX_2e8;  // 001ED226
 };
 
 // sizeof:8

+ 3 - 2
jni/CStoryTutorial.cpp

@@ -22,8 +22,9 @@ void CStoryTutorial::Process() {
 }
 //-------------------------------------------------------------------------------------------------
 //001ED404
-bool CStoryTutorial::CheckKickLength(TPoint) {
-	return 0;
+bool CStoryTutorial::CheckKickLength(TPoint p) {
+	LOGE("CStoryTutorial::CheckKickLength%d%d",p.dx_0,p.dy_4);
+	return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001ED4B8

+ 2 - 2
jni/CXmlUtil.cpp

@@ -30,8 +30,8 @@ char *CXmlUtil::GetText(CFTTXmlReaderNode aNode, char const *pName) {
 //-------------------------------------------------------------------------------------------------
 //001F54F2 //^_^
 char *CXmlUtil::GetText(CFTTXmlReaderNode aNode) {
-
-  return 0;
+  LOGE("CXmlUtil::GetText%s",aNode.GetText(NULL));
+  return (char*)rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001F5504 //^_^

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 869 - 63
jni/FREE.cpp


+ 2 - 2
jni/FTTALG.h

@@ -87,12 +87,12 @@ FTTVector<FTTPair<CFTTBMMMatrixCache::Key,CFTTBMMMatrixCache::StartCount> >::Ite
 namespace FTTALG {
   template <typename T>
   void  Shuffle(T*a1,T*a2){
-    LOGE("Shuffle=%x%x",a1,a2);
+    LOGE("Shuffle=%p%p",a1,a2);
   }
 
   template <typename Iterator>
   void  Reverse(Iterator a1,Iterator a2){
-    LOGE("Reverse=%x%x",&a1,&a2);
+    LOGE("Reverse=%p%p",&a1,&a2);
   }
 
   template <typename T,typename TVecIterator>

+ 1 - 1
jni/FTTArray.h

@@ -65,7 +65,7 @@ public:
     // result->field_4 = a2->field_4;
     // a2->field_4 = v5;
     // return result;
-    LOGE("Insertthis=%x,a2=%x",this,&a2);
+    LOGE("Insertthis=%p,a2=%p",this,&a2);
     return ((T*)rand());
   }
 

+ 6 - 3
jni/GFXCAMERA.cpp

@@ -45,15 +45,18 @@ void GFXCAMERA_ScreenToWorldRay(TPoint const *, CFTTVector32 &, CFTTVector32 &)
 }
 //-------------------------------------------------------------------------------------------------
 //0017CFC8
-void GFXCAMERA_ScreenToGame(TPoint3D *, TPoint const *, int) {
+void GFXCAMERA_ScreenToGame(TPoint3D *p1, TPoint const *p2, int i3) {
+  LOGE("GFXCAMERA_GameToScreen%p%p%d",p1,p2,i3);
 }
 //-------------------------------------------------------------------------------------------------
 //0017D028
-void GFXCAMERA_GameToScreen(TPoint *, TPoint const *) {
+void GFXCAMERA_GameToScreen(TPoint *p1, TPoint const *p2) {
+  LOGE("GFXCAMERA_GameToScreen%p%p",p1,p2);
 }
 //-------------------------------------------------------------------------------------------------
 //0017D040
-void GFXCAMERA_GameToScreen(TPoint *, TPoint3D const *) {
+void GFXCAMERA_GameToScreen(TPoint *p1, TPoint3D const *p2) {
+   LOGE("GFXCAMERA_GameToScreen%p%p",p1,p2);
 }
 //-------------------------------------------------------------------------------------------------
 //0017D0D0

+ 2 - 1
jni/GU.cpp

@@ -14,12 +14,13 @@ int GU_GetRot(const TPoint3D &a1, const TPoint &a2) {
 //-------------------------------------------------------------------------------------------------
 //001553F0
 int GU_GetRot(const TPoint3D &a1, const TPoint3D &a2) {
+  LOGE("GU_GetRot %d%d%d%d%d%d",a1.point_0.dx_0,a1.point_0.dy_4,a2.point_0.dx_0,a2.point_0.dy_4,a1.dz_8,a2.dz_8);
   return 0;
 }
 //-------------------------------------------------------------------------------------------------
 //0015BE38
 int GU_GetRot(const TPoint &a1, const TPoint &a2) {
-  LOGE("GU_GetRot");
+  LOGE("GU_GetRot %d%d%d%d",a1.dx_0,a1.dy_4,a2.dx_0,a2.dy_4);
   return rand();
 }
 //-------------------------------------------------------------------------------------------------

+ 2 - 1
jni/STORY.cpp

@@ -190,7 +190,8 @@ void STORY_ReadGraphicsSpecs() {
 //-------------------------------------------------------------------------------------------------
 //001F1D04 不确定所有逻辑都正确 这个函数可能影响性能,因为它的返回值是一个性能配置的index GFXSPEC_pSpecification
 EAndroidGraphicsSettingsQuality STORY_GetGfxQualityOverride(char const *a1, char const *a2, char const *a3, CGPUDatabaseMode &a4) {
-  EAndroidGraphicsSettingsQuality ret = EAndroidGraphicsSettingsQuality_0;
+  EAndroidGraphicsSettingsQuality ret = (EAndroidGraphicsSettingsQuality)rand();
+  LOGE("STORY_GetGfxQualityOverride%p%p%p%x%x%x",a1,a2,a3,a4.dMinSamples_4,a4.dEnabled_0,a4.dHigh_10);
   return ret;
 }
 //-------------------------------------------------------------------------------------------------

+ 8 - 18
jni/TCrowdMember.cpp

@@ -62,29 +62,19 @@ TCrowdMember::~TCrowdMember() {
 //单元测试内容: 启动游戏到第1关,会被多次调用
 //单元测试结果: 正常
 //编译无栈保护选项
-CFTTMatrix32 TCrowdMember::Animate(TSATAnim_TSX* pAnim_r2, TSATAnim_TSX* pAnim_r3, unsigned int iArg_r4) {
+TAABB TCrowdMember::Animate(TSATAnim_TSX* pAnim_r2, TSATAnim_TSX* pAnim_r3, unsigned int iArg_r4) {
   
-  CFTTMatrix32 cTAABB_sp_4;
+  TAABB cTAABB_sp_4;
   LOGE("%x",this);
 LOGE("%x",pAnim_r2);
 LOGE("%x",pAnim_r3);
 LOGE("%x",iArg_r4);
-cTAABB_sp_4.d[0][0] =rand()    ;
-cTAABB_sp_4.d[0][1] =rand()    ;
-cTAABB_sp_4.d[0][2] =rand()    ;
-cTAABB_sp_4.d[0][3] =rand()    ;
-cTAABB_sp_4.d[1][0] =rand()    ;
-cTAABB_sp_4.d[1][1] =rand()    ;
-cTAABB_sp_4.d[1][2] =rand()    ;
-cTAABB_sp_4.d[1][3] =rand()    ;
-cTAABB_sp_4.d[2][0] =rand()    ;
-cTAABB_sp_4.d[2][1] =rand()    ;
-cTAABB_sp_4.d[2][2] =rand()    ;
-cTAABB_sp_4.d[2][3] =rand()    ;
-cTAABB_sp_4.d[3][0] =rand()    ;
-cTAABB_sp_4.d[3][1] =rand()    ;
-cTAABB_sp_4.d[3][2] =rand()    ;
-cTAABB_sp_4.d[3][3] =rand()  ;
+cTAABB_sp_4.Vector32_0.float_0=rand();
+cTAABB_sp_4.Vector32_0.float_4=rand();
+cTAABB_sp_4.Vector32_0.float_8=rand();
+cTAABB_sp_4.Vector32_C.float_0=rand();
+cTAABB_sp_4.Vector32_C.float_4=rand();
+cTAABB_sp_4.Vector32_C.float_8=rand();
   return cTAABB_sp_4;
 }
 //-------------------------------------------------------------------------------------------------------

+ 1 - 1
jni/TCrowdMember.h

@@ -19,7 +19,7 @@ public:
   static void swap(TCrowdMember&, TCrowdMember&);             // 001A4704
   void Setup(ECrowdMemberType, uchar);                        // 0019EB18
   void Render(CFTTMatrix32*);                                 // 0019F240
-  CFTTMatrix32 Animate(TSATAnim_TSX*, TSATAnim_TSX*, unsigned int);  // 0019EE90
+  TAABB Animate(TSATAnim_TSX*, TSATAnim_TSX*, unsigned int);  // 0019EE90
 public:
   ECrowdMemberType m_eCrowdMemberType_0;
   uchar m_uc_4;

+ 14 - 4
jni/XCTRL.cpp

@@ -111,17 +111,22 @@ TPoint XCTRL_TouchHWGetPos() {
 //-------------------------------------------------------------------------------------------------
 //0011A608
 int XCTRL_TouchGetCount() {
-  return 10;
+  LOGE("XCTRL_TouchGetCount");
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0011A614 ^_^
 bool XCTRL_TouchIsTouching(int i1) {
-  return false;
+  LOGE("XCTRL_TouchIsTouching=%d",i1);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0011A624
 TPoint XCTRL_TouchGetDownPos(int dIndex) {
   TPoint d;
+  LOGE("XCTRL_TouchGetPos%d",dIndex);
+  d.dx_0=rand();
+  d.dy_4=rand();
   return d;
 }
 //-------------------------------------------------------------------------------------------------
@@ -137,6 +142,9 @@ int XCTRL_TouchGetDownTime(int i1) {
 //0011A664 //^_^
 TPoint XCTRL_TouchGetPos(int dIndex) {
   TPoint d;
+  LOGE("XCTRL_TouchGetPos%d",dIndex);
+  d.dx_0=rand();
+  d.dy_4=rand();
   return d;
 }
 //-------------------------------------------------------------------------------------------------
@@ -147,12 +155,14 @@ int XCTRL_TouchLastTime(int i1) {
 //-------------------------------------------------------------------------------------------------
 //0011A68C ^_^
 bool XCTRL_TouchIsPressed(int i1) {
-  return false;
+  LOGE("XCTRL_TouchIsPressed=%d",i1);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0011A69C ^_^
 bool XCTRL_TouchIsReleased(int i1) {
-  return false;
+   LOGE("XCTRL_TouchIsReleased=%d",i1);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //0011A6AC

+ 7 - 2
jni/XMATH.cpp

@@ -209,6 +209,10 @@ TPoint XMATH_PointProject(TPoint tpoint_a1, int i2, int i3) {
 //001F33CE 测试数据通过 汇编代码对栈地址做比较 经过单元测试,功能正常
 TPoint3D XMATH_PointProject(TPoint3D a1, int a2, int a3) {
   TPoint3D tpoint_var24;
+  LOGE("XMATH_PointProject%d%d%d%d%d",a1.dz_8,a1.point_0.dx_0,a1.point_0.dy_4,a2,a3);
+  tpoint_var24.dz_8=rand();
+  tpoint_var24.point_0.dx_0=rand();
+  tpoint_var24.point_0.dy_4=rand();
   return tpoint_var24;
 }
 //-------------------------------------------------------------------------------------------------
@@ -304,8 +308,9 @@ float XMATH_IsPowerOfTwo(int) {
 }
 //-------------------------------------------------------------------------------------------------
 //001F3BE8 //^_^
-int XMATH_Clamp(int d_r0, int d_r1, int d_r2) {
-  return 0;
+int XMATH_Clamp(int a1, int a2, int a3) {
+  LOGE("XMATH_Clamp a1=%d a2=%d a3=%d",a1,a2,a3);
+  return rand();
 }
 //-------------------------------------------------------------------------------------------------
 //001F3BF8

+ 1 - 1
jni/common_type.h

@@ -25,7 +25,7 @@ typedef unsigned long ulong;    //ul
 //float  f
 //double d
 
-//#define _TESTMOD_
+#define _TESTMOD_
 
 #ifdef _TESTMOD_
 #define MYSTATIC

+ 22 - 0
jni/global_func.h

@@ -131,6 +131,10 @@ struct TPoint {
       // dx_0 = 0;
       // dy_4 = 0;
   };
+  void copy(TPoint p){
+    dx_0=p.dx_0;
+    dy_4=p.dy_4;
+  }
 
   TPoint(int i0, int i1) {
     dx_0 = i0;
@@ -234,6 +238,10 @@ struct TPoint3D {
     point_0 = point;
   };
 
+   TPoint3D(TPoint3D* point) {
+    *this = *point;
+  };
+
   TPoint3D& operator=(const TPoint3D& other) {
     point_0.dx_0 = other.point_0.dx_0;
     point_0.dy_4 = other.point_0.dy_4;
@@ -249,6 +257,20 @@ struct TPoint3D {
     return this;
   };
 
+  TPoint3D* operator-(const TPoint3D& other) {
+    point_0.dx_0 -= other.point_0.dx_0;
+    point_0.dy_4 -= other.point_0.dy_4;
+    this->dz_8 -= other.dz_8;
+    return this;
+  };
+
+  TPoint3D* operator+(const TPoint3D& other) {
+    point_0.dx_0 += other.point_0.dx_0;
+    point_0.dy_4 += other.point_0.dy_4;
+    this->dz_8 += other.dz_8;
+    return this;
+  };
+
   TPoint3D operator*(float f2) {
     int iX = point_0.dx_0 * f2;
     int iY = point_0.dy_4 * f2;

+ 4 - 0
对比/my/RealizeSaticGlobalConfs

@@ -0,0 +1,4 @@
+0x2c3341 348918 bool_348918
+0x2c3344 34891c dword_34891C
+0x2c3348 4b8540 bSoccerInit_4B8540
+0x2c334c 4b8550 tFTTJNI_4B8550

+ 57 - 0
对比/my/notRealizeExportFunConfs

@@ -0,0 +1,57 @@
+0xc47a1 26a244 _Z19AndroidApp_SetupJNIP7_JNIEnvP8_jobject
+0xc4841 26a2e4 _Z30AndroidApp_RegisterPackageNamePKc
+0xc4901 26a418 _Z26AndroidApp_GetTotalRAMInKBv
+0xc7cc1 153a38 _ZN3CFE18OpenTermsOfServiceEv
+0xc7ce1 153a88 _ZN3CFE17OpenPrivacyPolicyEv
+0xc7d01 153ad8 _ZN3CFE34ContinueTermsOfServiceNativeDialogEv
+0xc7d61 153c04 _ZN3CFE18CheckTimeMinimisedEv
+0xcda01 1f6934 _Z8AppStartv
+0xcdb61 1f6954 _Z17AppSetupCallbacksv
+0xcdd21 26b608 _ZN17CFTTAndroidDevice13GetSDKVersionEv
+0xcddc1 26b9e8 _ZN17CFTTAndroidDevice13GetDeviceTypeEPcjb
+0xce001 26a939 _ZN27CFTTAndroidGraphicsSettings14GetUserSettingE30EAndroidGraphicsSettingsOption
+0xce041 26a9a4 _ZN27CFTTAndroidGraphicsSettings16SetFPSAutoChoiceE27EAndroidGraphicsSettingsFPS
+0xce061 26aa94 _ZN27CFTTAndroidGraphicsSettings16SetQualityChoiceE31EAndroidGraphicsSettingsQualityPb
+0xce081 26aaba _ZN27CFTTAndroidGraphicsSettings24ApplyGPUDatabaseOverrideEPKcS1_RK16CGPUDatabaseMode31EAndroidGraphicsSettingsQualityRi
+0xce981 1f98fc _ZN22CFTTAWSKinesisFirehose12SetSessionIDEj
+0xce9a1 1f9918 _ZN22CFTTAWSKinesisFirehose12GetSessionIDEv
+0xd0f41 26bba4 _ZN10CFTTDevice15GetCPUCoreCountEv
+0xd10e1 26bd10 _ZN10CFTTDevice8GetModelEPci
+0xd2cc1 26c520 _ZN22CFTTFileSystem_Android22AndroidSetAssetManagerEPv
+0xd2ce1 26c554 _ZN22CFTTFileSystem_Android23AndroidSetExpansionPathEPKc
+0xd2d01 26c52c _ZN22CFTTFileSystem_Android26AndroidSetExternalFilesDirEPKc
+0xdacc1 2680a0 _ZN12CFTTSaveFile22OnGoogleSavedGamesSyncEbPKc
+0xdadc1 268830 _ZN14CFTTServerTime11GetDateTimeEbb
+0xde281 23a2ba _ZNK17CFTTXmlReaderNode7IsValidEv
+0xde3a1 23a3a0 _ZNK17CFTTXmlReaderNode13GetFirstChildEPKc
+0xde3c1 23a3aa _ZNK17CFTTXmlReaderNode14GetNextSiblingEPKc
+0xe9f81 18f41c _ZN8CGFXSpec20ApplyResolutionClampEP17CFTTXmlReaderNode
+0xec1e1 11977c _ZN10CMyProfile23SetInstallSourceTrackerEPKc
+0xec201 119788 _ZN10CMyProfile24SetInstallSourceCampaignEPKc
+0xec341 1cccb4 _ZN10CMyProfile12DoLoadOnBootERb
+0xec501 1cd55c _ZN10CMyProfile11AttemptSaveE9ESaveMode
+0xecde1 1ce074 _ZN10CMyProfile22SetNotificationRewardsEv
+0xecf21 1ce138 _ZN10CMyProfile24NeedToCheckNotificationsEv
+0xf0b61 1cf320 _ZN13CProfileFeats31SendAllAchievementsToGooglePlayEv
+0xf0c61 1cf562 _ZN13CProfileStats8GetFeatsEv
+0xf24c1 1e1ffc _ZN10CStoryCore39LoadConfigForTimeAndRepeatNotificationsEv
+0xf3761 1e830c _ZN13CStoryProfile19SecondsToFullEnergyEii
+0xf95e1 1f54f2 _ZN8CXmlUtil7GetTextE17CFTTXmlReaderNode
+0xffe01 202674 _Z30FTTGraphicsEnableStencilBufferb
+0xffe41 20268c _Z28FTTGraphicsAndroid_SetScreenii
+0xffe81 2026e8 _Z32FTTGraphicsAndroid_SetScreenSizef
+0xffec1 2026f4 _Z40FTTGraphicsAndroid_InitializeVulkanEarlyv
+0xfff01 2026f8 _Z42FTTGraphicsAndroid_OnVulkanSurfaceAcquiredP13ANativeWindow
+0xfff21 202744 _Z38FTTGraphicsAndroid_OnVulkanSurfaceLostv
+0x100481 22004c _Z34FTTInputTouch_AddAndroidTouchEventffii
+0x100621 220190 _Z31FTTInput_worldOriUpdatedAndroidfffffffff
+0x101d21 1f6a38 _Z13SetUp_IAP_JNIv
+0x101ee1 26d28a _ZN8FTTMutex4LockEv
+0x101f41 26d2a2 _ZN8FTTMutex6UnlockEv
+0x105921 274238 _Z10IAP_Updatev
+0x107401 262a6c _Z13FTTInitializeibb
+0x107481 1cac28 _Z11Soccer_Initv
+0x107501 1cadcc _Z15Soccer_MainLoopv
+0x1078c1 1f1d04 _Z27STORY_GetGfxQualityOverridePKcS0_S0_R16CGPUDatabaseMode
+0x107b21 268edc _Z13UTF8ToUnicodePwPKcj
+0x107c21 268e6e _Z14UnicodeToAsciiPcPKwjc

+ 16 - 0
对比/my/notRealizeExportGlobalConfs

@@ -0,0 +1,16 @@
+0x1bc2e8 5cdedc _ZN24CFTTAndroidAppCInterface9m_OnStartE
+0x1bc2ec 5cded8 _ZN24CFTTAndroidAppCInterface10m_OnCreateE
+0x1bc2f0 5cdee0 _ZN24CFTTAndroidAppCInterface14m_ResignActiveE
+0x1bc2f4 5cdee4 _ZN24CFTTAndroidAppCInterface14m_BecomeActiveE
+0x1bc2f8 5cdee8 _ZN24CFTTAndroidAppCInterface20m_DidEnterBackgroundE
+0x1bc2fc 5cdef0 _ZN24CFTTAndroidAppCInterface15m_WillTerminateE
+0x1bc308 5cdeec _ZN24CFTTAndroidAppCInterface21m_WillEnterForegroundE
+0x1bc30c 5cdefd _ZN24CFTTAndroidAppCInterface14m_bAppHasFocusE
+0x1bc30d 5cdefc _ZN24CFTTAndroidAppCInterface18m_bAppInForegroundE
+0x1dbd24 5a9e6c g_pGraphicsDevice
+0x29fff8 4613fc _ZN8CGFXSpec15s_cDeviceReportE
+0x2a0ff8 4613f8 GFXSPEC_pSpecification
+0x2a0ffc 4623fc _ZN8CGFXSpec24s_cDeviceAnalyticsStringE
+0x2a8130 477e90 MP_cMyProfile
+0x2c3394 3540b0 FE_bBackButtonPressed
+0x2c3398 4b902c g_fpAdjustCB

+ 2 - 0
对比/my/realizeExportFunConfs

@@ -0,0 +1,2 @@
+0xe9aa1 18eef4 _ZN8CGFXSpec24UpdateGraphicsFromConfigEP17CFTTXmlReaderNode
+0xe9fa1 18e878 _ZN8CGFXSpec22Platform_InspectDeviceEv

+ 4 - 0
对比/old/RealizeSaticGlobalConfs

@@ -0,0 +1,4 @@
+0x31907c 348918 bool_348918
+0x319080 34891c dword_34891C
+0x572bb1 4b8540 bSoccerInit_4B8540
+0x572bb4 4b8550 tFTTJNI_4B8550

+ 61 - 0
对比/old/notRealizeExportFunConfs

@@ -0,0 +1,61 @@
+0x101a61 26a244 _Z19AndroidApp_SetupJNIP7_JNIEnvP8_jobject
+0x101b41 26a2e4 _Z30AndroidApp_RegisterPackageNamePKc
+0x101ca1 26a418 _Z26AndroidApp_GetTotalRAMInKBv
+0x10c1a1 153a38 _ZN3CFE18OpenTermsOfServiceEv
+0x10c1c1 153a88 _ZN3CFE17OpenPrivacyPolicyEv
+0x10c1e1 153ad8 _ZN3CFE34ContinueTermsOfServiceNativeDialogEv
+0x10c2e1 153c04 _ZN3CFE18CheckTimeMinimisedEv
+0x11c981 1f98fc _ZN22CFTTAWSKinesisFirehose12SetSessionIDEj
+0x11c9a1 1f9918 _ZN22CFTTAWSKinesisFirehose12GetSessionIDEv
+0x11ca41 1f6934 _Z8AppStartv
+0x11cc21 1f6954 _Z17AppSetupCallbacksv
+0x11d1e1 26b608 _ZN17CFTTAndroidDevice13GetSDKVersionEv
+0x11d601 26b9e8 _ZN17CFTTAndroidDevice13GetDeviceTypeEPcjb
+0x11db61 26a939 _ZN27CFTTAndroidGraphicsSettings14GetUserSettingE30EAndroidGraphicsSettingsOption
+0x11dbc1 26a9a4 _ZN27CFTTAndroidGraphicsSettings16SetFPSAutoChoiceE27EAndroidGraphicsSettingsFPS
+0x11dc01 26aa94 _ZN27CFTTAndroidGraphicsSettings16SetQualityChoiceE31EAndroidGraphicsSettingsQualityPb
+0x11dc41 26aaba _ZN27CFTTAndroidGraphicsSettings24ApplyGPUDatabaseOverrideEPKcS1_RK16CGPUDatabaseMode31EAndroidGraphicsSettingsQualityRi
+0x128f21 26bba4 _ZN10CFTTDevice15GetCPUCoreCountEv
+0x129621 26bd10 _ZN10CFTTDevice8GetModelEPci
+0x12bf21 26c520 _ZN22CFTTFileSystem_Android22AndroidSetAssetManagerEPv
+0x12bf41 26c554 _ZN22CFTTFileSystem_Android23AndroidSetExpansionPathEPKc
+0x12bf81 26c52c _ZN22CFTTFileSystem_Android26AndroidSetExternalFilesDirEPKc
+0x142721 2680a0 _ZN12CFTTSaveFile22OnGoogleSavedGamesSyncEbPKc
+0x142c21 268830 _ZN14CFTTServerTime11GetDateTimeEbb
+0x14a141 23a2ba _ZNK17CFTTXmlReaderNode7IsValidEv
+0x14a261 23a3a0 _ZNK17CFTTXmlReaderNode13GetFirstChildEPKc
+0x14a281 23a3aa _ZNK17CFTTXmlReaderNode14GetNextSiblingEPKc
+0x1508c1 18f41c _ZN8CGFXSpec20ApplyResolutionClampEP17CFTTXmlReaderNode
+0x17bb21 11957c _ZN14CHeroAnalytics18InstallTimestampCBERy
+0x17bb61 11959c _ZN14CHeroAnalytics22InstallSourceTrackerCBEv
+0x17bba1 1195b0 _ZN14CHeroAnalytics23InstallSourceCampaignCBEv
+0x17bca1 119794 _ZN14CHeroAnalytics23NotificationAppLaunchedEPKcS1_S1_
+0x182441 11977c _ZN10CMyProfile23SetInstallSourceTrackerEPKc
+0x182461 119788 _ZN10CMyProfile24SetInstallSourceCampaignEPKc
+0x1826e1 1cd55c _ZN10CMyProfile11AttemptSaveE9ESaveMode
+0x1827a1 1cccb4 _ZN10CMyProfile12DoLoadOnBootERb
+0x183ca1 1ce074 _ZN10CMyProfile22SetNotificationRewardsEv
+0x183e61 1ce138 _ZN10CMyProfile24NeedToCheckNotificationsEv
+0x18fe21 1cf320 _ZN13CProfileFeats31SendAllAchievementsToGooglePlayEv
+0x190001 1cf562 _ZN13CProfileStats8GetFeatsEv
+0x1967e1 1e1ffc _ZN10CStoryCore39LoadConfigForTimeAndRepeatNotificationsEv
+0x19a9c1 1e830c _ZN13CStoryProfile19SecondsToFullEnergyEii
+0x1afae1 1f54f2 _ZN8CXmlUtil7GetTextE17CFTTXmlReaderNode
+0x1c73a1 202674 _Z30FTTGraphicsEnableStencilBufferb
+0x1c73e1 20268c _Z28FTTGraphicsAndroid_SetScreenii
+0x1c7441 2026e8 _Z32FTTGraphicsAndroid_SetScreenSizef
+0x1c7461 2026f4 _Z40FTTGraphicsAndroid_InitializeVulkanEarlyv
+0x1c7481 2026f8 _Z42FTTGraphicsAndroid_OnVulkanSurfaceAcquiredP13ANativeWindow
+0x1c74c1 202744 _Z38FTTGraphicsAndroid_OnVulkanSurfaceLostv
+0x1c7ce1 22004c _Z34FTTInputTouch_AddAndroidTouchEventffii
+0x1c7e21 220190 _Z31FTTInput_worldOriUpdatedAndroidfffffffff
+0x1c9241 1f6a38 _Z13SetUp_IAP_JNIv
+0x1ca6a1 26d28a _ZN8FTTMutex4LockEv
+0x1ca6e1 26d2a2 _ZN8FTTMutex6UnlockEv
+0x1d8c81 274238 _Z10IAP_Updatev
+0x1e1c41 1f1d04 _Z27STORY_GetGfxQualityOverridePKcS0_S0_R16CGPUDatabaseMode
+0x1e20e1 262a6c _Z13FTTInitializeibb
+0x1e23c1 1cac28 _Z11Soccer_Initv
+0x1e2501 1cadcc _Z15Soccer_MainLoopv
+0x1ebf21 268edc _Z13UTF8ToUnicodePwPKcj
+0x1ec021 268e6e _Z14UnicodeToAsciiPcPKwjc

+ 16 - 0
对比/old/notRealizeExportGlobalConfs

@@ -0,0 +1,16 @@
+0x36ffe0 5cdedc _ZN24CFTTAndroidAppCInterface9m_OnStartE
+0x36ffe4 5cded8 _ZN24CFTTAndroidAppCInterface10m_OnCreateE
+0x36ffe8 5cdee0 _ZN24CFTTAndroidAppCInterface14m_ResignActiveE
+0x36ffec 5cdee4 _ZN24CFTTAndroidAppCInterface14m_BecomeActiveE
+0x36fff0 5cdee8 _ZN24CFTTAndroidAppCInterface20m_DidEnterBackgroundE
+0x36fff4 5cdef0 _ZN24CFTTAndroidAppCInterface15m_WillTerminateE
+0x370000 5cdeec _ZN24CFTTAndroidAppCInterface21m_WillEnterForegroundE
+0x370004 5cdefd _ZN24CFTTAndroidAppCInterface14m_bAppHasFocusE
+0x370005 5cdefc _ZN24CFTTAndroidAppCInterface18m_bAppInForegroundE
+0x4801b8 5a9e6c g_pGraphicsDevice
+0x5337c8 4613fc _ZN8CGFXSpec15s_cDeviceReportE
+0x5347c8 4613f8 GFXSPEC_pSpecification
+0x5347cc 4623fc _ZN8CGFXSpec24s_cDeviceAnalyticsStringE
+0x559a00 477e90 MP_cMyProfile
+0x572bfc 3540b0 FE_bBackButtonPressed
+0x572c00 4b902c g_fpAdjustCB

+ 2 - 0
对比/old/realizeExportFunConfs

@@ -0,0 +1,2 @@
+0x14fc81 18e878 _ZN8CGFXSpec22Platform_InspectDeviceEv
+0x1503e1 18eef4 _ZN8CGFXSpec24UpdateGraphicsFromConfigEP17CFTTXmlReaderNode

+ 4 - 0
对比/oldold/RealizeSaticGlobalConfs

@@ -0,0 +1,4 @@
+0x2ebcb4 348918 bool_348918
+0x2ebcb8 34891c dword_34891C
+0x545478 4b8540 bSoccerInit_4B8540
+0x54547c 4b8550 tFTTJNI_4B8550

+ 61 - 0
对比/oldold/notRealizeExportFunConfs

@@ -0,0 +1,61 @@
+0xf1f81 26a244 _Z19AndroidApp_SetupJNIP7_JNIEnvP8_jobject
+0xf2061 26a2e4 _Z30AndroidApp_RegisterPackageNamePKc
+0xf21c1 26a418 _Z26AndroidApp_GetTotalRAMInKBv
+0xfc141 153a38 _ZN3CFE18OpenTermsOfServiceEv
+0xfc161 153a88 _ZN3CFE17OpenPrivacyPolicyEv
+0xfc181 153ad8 _ZN3CFE34ContinueTermsOfServiceNativeDialogEv
+0xfc281 153c04 _ZN3CFE18CheckTimeMinimisedEv
+0x10c561 1f98fc _ZN22CFTTAWSKinesisFirehose12SetSessionIDEj
+0x10c581 1f9918 _ZN22CFTTAWSKinesisFirehose12GetSessionIDEv
+0x10c621 1f6934 _Z8AppStartv
+0x10c801 1f6954 _Z17AppSetupCallbacksv
+0x10cce1 26b608 _ZN17CFTTAndroidDevice13GetSDKVersionEv
+0x10d101 26b9e8 _ZN17CFTTAndroidDevice13GetDeviceTypeEPcjb
+0x10d641 26a939 _ZN27CFTTAndroidGraphicsSettings14GetUserSettingE30EAndroidGraphicsSettingsOption
+0x10d6a1 26a9a4 _ZN27CFTTAndroidGraphicsSettings16SetFPSAutoChoiceE27EAndroidGraphicsSettingsFPS
+0x10d6e1 26aa94 _ZN27CFTTAndroidGraphicsSettings16SetQualityChoiceE31EAndroidGraphicsSettingsQualityPb
+0x10d721 26aaba _ZN27CFTTAndroidGraphicsSettings24ApplyGPUDatabaseOverrideEPKcS1_RK16CGPUDatabaseMode31EAndroidGraphicsSettingsQualityRi
+0x116fe1 26bba4 _ZN10CFTTDevice15GetCPUCoreCountEv
+0x1176e1 26bd10 _ZN10CFTTDevice8GetModelEPci
+0x119fc1 26c520 _ZN22CFTTFileSystem_Android22AndroidSetAssetManagerEPv
+0x119fe1 26c554 _ZN22CFTTFileSystem_Android23AndroidSetExpansionPathEPKc
+0x11a021 26c52c _ZN22CFTTFileSystem_Android26AndroidSetExternalFilesDirEPKc
+0x130621 2680a0 _ZN12CFTTSaveFile22OnGoogleSavedGamesSyncEbPKc
+0x130b21 268830 _ZN14CFTTServerTime11GetDateTimeEbb
+0x137fc1 23a2ba _ZNK17CFTTXmlReaderNode7IsValidEv
+0x1380e1 23a3a0 _ZNK17CFTTXmlReaderNode13GetFirstChildEPKc
+0x138101 23a3aa _ZNK17CFTTXmlReaderNode14GetNextSiblingEPKc
+0x13e4c1 18f41c _ZN8CGFXSpec20ApplyResolutionClampEP17CFTTXmlReaderNode
+0x15e761 11957c _ZN14CHeroAnalytics18InstallTimestampCBERy
+0x15e781 11959c _ZN14CHeroAnalytics22InstallSourceTrackerCBEv
+0x15e7a1 1195b0 _ZN14CHeroAnalytics23InstallSourceCampaignCBEv
+0x15e821 119794 _ZN14CHeroAnalytics23NotificationAppLaunchedEPKcS1_S1_
+0x163de1 11977c _ZN10CMyProfile23SetInstallSourceTrackerEPKc
+0x163e01 119788 _ZN10CMyProfile24SetInstallSourceCampaignEPKc
+0x164081 1cd55c _ZN10CMyProfile11AttemptSaveE9ESaveMode
+0x164141 1cccb4 _ZN10CMyProfile12DoLoadOnBootERb
+0x165421 1ce074 _ZN10CMyProfile22SetNotificationRewardsEv
+0x165581 1ce138 _ZN10CMyProfile24NeedToCheckNotificationsEv
+0x16ffe1 1cf320 _ZN13CProfileFeats31SendAllAchievementsToGooglePlayEv
+0x170141 1cf562 _ZN13CProfileStats8GetFeatsEv
+0x176741 1e1ffc _ZN10CStoryCore39LoadConfigForTimeAndRepeatNotificationsEv
+0x17a721 1e830c _ZN13CStoryProfile19SecondsToFullEnergyEii
+0x18dd21 1f54f2 _ZN8CXmlUtil7GetTextE17CFTTXmlReaderNode
+0x1a4d21 202674 _Z30FTTGraphicsEnableStencilBufferb
+0x1a4d61 20268c _Z28FTTGraphicsAndroid_SetScreenii
+0x1a4dc1 2026e8 _Z32FTTGraphicsAndroid_SetScreenSizef
+0x1a4de1 2026f4 _Z40FTTGraphicsAndroid_InitializeVulkanEarlyv
+0x1a4e01 2026f8 _Z42FTTGraphicsAndroid_OnVulkanSurfaceAcquiredP13ANativeWindow
+0x1a4e21 202744 _Z38FTTGraphicsAndroid_OnVulkanSurfaceLostv
+0x1a5601 22004c _Z34FTTInputTouch_AddAndroidTouchEventffii
+0x1a5741 220190 _Z31FTTInput_worldOriUpdatedAndroidfffffffff
+0x1a6981 1f6a38 _Z13SetUp_IAP_JNIv
+0x1a7de1 26d28a _ZN8FTTMutex4LockEv
+0x1a7e21 26d2a2 _ZN8FTTMutex6UnlockEv
+0x1b56a1 274238 _Z10IAP_Updatev
+0x1be301 1f1d04 _Z27STORY_GetGfxQualityOverridePKcS0_S0_R16CGPUDatabaseMode
+0x1be7a1 262a6c _Z13FTTInitializeibb
+0x1bea81 1cac28 _Z11Soccer_Initv
+0x1bebc1 1cadcc _Z15Soccer_MainLoopv
+0x1c81c1 268edc _Z13UTF8ToUnicodePwPKcj
+0x1c82c1 268e6e _Z14UnicodeToAsciiPcPKwjc

+ 16 - 0
对比/oldold/notRealizeExportGlobalConfs

@@ -0,0 +1,16 @@
+0x342ac4 5cdedc _ZN24CFTTAndroidAppCInterface9m_OnStartE
+0x342ac8 5cded8 _ZN24CFTTAndroidAppCInterface10m_OnCreateE
+0x342acc 5cdee0 _ZN24CFTTAndroidAppCInterface14m_ResignActiveE
+0x342ad0 5cdee4 _ZN24CFTTAndroidAppCInterface14m_BecomeActiveE
+0x342ad4 5cdee8 _ZN24CFTTAndroidAppCInterface20m_DidEnterBackgroundE
+0x342ad8 5cdef0 _ZN24CFTTAndroidAppCInterface15m_WillTerminateE
+0x342ae4 5cdeec _ZN24CFTTAndroidAppCInterface21m_WillEnterForegroundE
+0x342ae8 5cdefd _ZN24CFTTAndroidAppCInterface14m_bAppHasFocusE
+0x342ae9 5cdefc _ZN24CFTTAndroidAppCInterface18m_bAppInForegroundE
+0x452c48 5a9e6c g_pGraphicsDevice
+0x506230 4613fc _ZN8CGFXSpec15s_cDeviceReportE
+0x507230 4613f8 GFXSPEC_pSpecification
+0x507234 4623fc _ZN8CGFXSpec24s_cDeviceAnalyticsStringE
+0x52c398 477e90 MP_cMyProfile
+0x5454c4 3540b0 FE_bBackButtonPressed
+0x5454c8 4b902c g_fpAdjustCB

+ 2 - 0
对比/oldold/realizeExportFunConfs

@@ -0,0 +1,2 @@
+0x13d881 18e878 _ZN8CGFXSpec22Platform_InspectDeviceEv
+0x13dfe1 18eef4 _ZN8CGFXSpec24UpdateGraphicsFromConfigEP17CFTTXmlReaderNode

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio