|
@@ -18,6 +18,7 @@
|
|
|
#include "CBallProj.h"
|
|
|
#include "XSYS.h"
|
|
|
#include "SNDGAME.h"
|
|
|
+#include "XML.h"
|
|
|
int s_iEVFStrings[160] = {
|
|
|
0x184B, 0x184C, 0x1858, 0, 0, 0, 0, 0, 0, 0,
|
|
|
0x1859, 0x185A, 0, 0, 0, 0, 0, 0, 0, 0, 0x1854,
|
|
@@ -996,7 +997,9 @@ void FREE_AddVisualFeedback_Fail() {}
|
|
|
void FREE_AddVisualFeedback_Offside() {}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001DC4C8
|
|
|
-void FREE_SortPlayers(TFreeGoal *) {}
|
|
|
+void FREE_SortPlayers(TFreeGoal *a1) {
|
|
|
+ LOGE("FREE_SortPlayers%p",a1);
|
|
|
+}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001DC664
|
|
|
void FREE_SortPlayersDistance(TFreeGoal *) {}
|
|
@@ -1008,7 +1011,403 @@ int FREE_ReadXML(TFreeGoal *, int) { return 0; }
|
|
|
bool FREE_ReadXML(TFreeGoal *, char *) { return 0; }
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001DCA14
|
|
|
-void FREE_ReadXMLLevel(TFreeGoal *, CFTTXmlReaderNode) {}
|
|
|
+void FREE_ReadXMLLevel(TFreeGoal* tFreeGoal_r0, CFTTXmlReaderNode cXMLReaderNode_r1) {
|
|
|
+ TPoint3D tPoint3D_50;
|
|
|
+ CFTTXmlReaderNode cNode_48;
|
|
|
+ auto cXMLReaderNode_4C = cXMLReaderNode_r1;
|
|
|
+ //CFTTXmlReaderNode cPropNode_54;
|
|
|
+ CFTTXmlReaderNode cNodeTeam_40;
|
|
|
+ CFTTXmlReaderNode cNodePlayer_3C;
|
|
|
+ TPoint tPoint_34;
|
|
|
+ TPoint tZero_74;
|
|
|
+ // int iTeam_No_Index_78;
|
|
|
+ char pFormatBuf_50[0x20];
|
|
|
+ TPoint3D tPoint3D_98;
|
|
|
+ TPoint tPoint_98;
|
|
|
+
|
|
|
+ // 001DCA30
|
|
|
+ memset(tFreeGoal_r0, 0, sizeof(TFreeGoal)); // sizeof(TFreeGoal) = 0x7634
|
|
|
+
|
|
|
+ // 001DCA3A
|
|
|
+ cNode_48 = cXMLReaderNode_r1.GetFirstChild("Info");
|
|
|
+
|
|
|
+ // 001DCA46 <- **if 分支**
|
|
|
+ if (cNode_48.IsValid()) {
|
|
|
+ // 001DCA48 OK
|
|
|
+ tFreeGoal_r0->m_iVersion_0 = XMLGetInt(cNode_48, "Version", NULL, 0); // 001DCA56 <- **字段 0 赋值**
|
|
|
+ }
|
|
|
+
|
|
|
+ // 001DCA66
|
|
|
+ if (XMLExists(cXMLReaderNode_r1, "Ball", "Pos")) {
|
|
|
+ // 001DCA68 OK
|
|
|
+ // 001DCA7C <- **结构体赋值**
|
|
|
+ //tPoint3D_98 = g_vZero3;
|
|
|
+
|
|
|
+ // 001DCA86 <- **call XMLGetPos3D**
|
|
|
+ tPoint3D_50 = XMLGetPos3D(cXMLReaderNode_r1, "Ball", "Pos", g_vZero3); // 001DCA86 <- **函数调用,结构体传参通过栈拷贝**
|
|
|
+
|
|
|
+ // 001DCA94 <- **TPoint3D.dz_8 赋值**
|
|
|
+ tFreeGoal_r0->m_tBallPos_744C.dz_8 = tPoint3D_50.dz_8;
|
|
|
+
|
|
|
+ // 001DCA9C <- **TPoint3D.point_0赋值**
|
|
|
+ // tFreeGoal_r0->m_tBallPos_744C.point_0 = tPoint3D_40.point_0;
|
|
|
+ tFreeGoal_r0->m_tBallPos_744C.point_0.dx_0 = tPoint3D_50.point_0.dx_0;
|
|
|
+ tFreeGoal_r0->m_tBallPos_744C.point_0.dy_4 = tPoint3D_50.point_0.dy_4;
|
|
|
+
|
|
|
+ // 001DCAA6 <- **if 分支**
|
|
|
+ if (tFreeGoal_r0->m_tBallPos_744C.dz_8 < 0x1000) {
|
|
|
+ // 001DCABC OK
|
|
|
+ tFreeGoal_r0->m_tBallPos_744C.dz_8 = 0x1000; // 001DCAC2 <- **字段 744C 赋值**
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 001DCAAA <- **分支地址**
|
|
|
+ // 001DCAB0 <- **TPoint.dy_4 赋值**
|
|
|
+ // 001DCAB6 <- **TPoint.dx_0 赋值**
|
|
|
+ tFreeGoal_r0->m_tBallPos_744C.point_0 = TPoint(0, 0);
|
|
|
+ // 001DCAC2
|
|
|
+ tFreeGoal_r0->m_tBallPos_744C.dz_8 = 0x1000;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 001DCAD8 <- **字段 745C 赋值**
|
|
|
+ tFreeGoal_r0->m_iKickPlayer_745C = XMLGetInt(cXMLReaderNode_r1, "KickPlayer", NULL, 0); // 001DCACE <- **函数调用**
|
|
|
+
|
|
|
+ // 001DCAE2 <- **call XMLGetString()**
|
|
|
+ char* pKickAnim_r0 = XMLGetString(cXMLReaderNode_r1, "KickAnim", NULL, NULL);
|
|
|
+
|
|
|
+ // 001DCAEA <- **XMLGetString() 返回值判断**
|
|
|
+ if (pKickAnim_r0) {
|
|
|
+ // 001DCAEC OK
|
|
|
+ tFreeGoal_r0->m_iAnimID_7460 = CAnimManager::GetAnimID(pKickAnim_r0); // 001DCB02 <- **字段 7460 赋值**
|
|
|
+ } else {
|
|
|
+ // 001DCAF2
|
|
|
+ tFreeGoal_r0->m_iAnimID_7460 = -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 001DCB1E <- **字段 7464 赋值**
|
|
|
+ tFreeGoal_r0->m_iKickRot_7464 = XMLGetInt(cXMLReaderNode_r1, "KickRot", 0, 0xB4);
|
|
|
+
|
|
|
+ // 001DCB36 <- **字段 8 赋值**
|
|
|
+ const char* sWeatherTypes[3] = {"FINE", "RAIN", "SNOW"};
|
|
|
+ tFreeGoal_r0->m_iWeather_8 = XMLGetStringInt(cXMLReaderNode_r1, "Weather", NULL, (const char**)sWeatherTypes, 3, -1);
|
|
|
+
|
|
|
+ // 001DCB44 <- **字段 C 赋值**
|
|
|
+ tFreeGoal_r0->m_iMaxPhaseCount_C = XMLGetInt(cXMLReaderNode_r1, "MaxPhaseCount", NULL, 0);
|
|
|
+
|
|
|
+ // 001DCB5A <- **字段 10 赋值**
|
|
|
+ tFreeGoal_r0->m_bIndirect_10 = XMLGetInt(cXMLReaderNode_r1, "Indirect", NULL, 0) ? true : false; // 001DCB52 <- **三目运算**
|
|
|
+
|
|
|
+ // 001DCB64 <- **call XMLGetString()**
|
|
|
+ char const* pShotAnim_r0 = XMLGetString(cXMLReaderNode_r1, "ShotAnim", NULL, NULL);
|
|
|
+ // 001DCB68 <- **返回值判断**
|
|
|
+ if (pShotAnim_r0) {
|
|
|
+ // 001DCB6A
|
|
|
+ tFreeGoal_r0->m_iShotAnimID_7468 = CAnimManager::GetAnimID(pShotAnim_r0); // 001DCB82 <- **字段 7468 赋值**
|
|
|
+ } else {
|
|
|
+ // 001DCB70 OK
|
|
|
+ tFreeGoal_r0->m_iShotAnimID_7468 = -1; // 001DCB7E <- **返回值空则赋值 -1**
|
|
|
+ }
|
|
|
+
|
|
|
+ // 001DCB92 <- **字段 746C 赋值**
|
|
|
+ tFreeGoal_r0->m_iShotAnimPlayer_746C = XMLGetInt(cXMLReaderNode_r1, "ShotAnimPlayer", NULL, -1);
|
|
|
+ // 001DCB9E <- **call XMLGetFloat()**
|
|
|
+ tFreeGoal_r0->m_fShotAnimDistance_7470 = XMLGetFloat(cXMLReaderNode_r1, "ShotAnimDistance", NULL, 24.0f);
|
|
|
+ // 001DCBB8 <- **字段 7458 赋值**
|
|
|
+ tFreeGoal_r0->m_iUserPlayer_7458 = XMLGetInt(cXMLReaderNode_r1, "UserPlayer", NULL, 0);
|
|
|
+ // 001DCBCA <- **字段 747C 赋值**
|
|
|
+ tFreeGoal_r0->m_iCPUPlayerCloseDownCount_747C = XMLGetInt(cXMLReaderNode_r1, "CPUPlayerCloseDownCount", NULL, 1);
|
|
|
+ // 001DCBDE <- **字段 7480 赋值**
|
|
|
+ tFreeGoal_r0->m_fCPUCloseDownDist_7480 = XMLGetFloat(cXMLReaderNode_r1, "CPUCloseDownDist", NULL, 4.0f);
|
|
|
+ // 001DCBF0 <- **字段 7484 赋值**
|
|
|
+ tFreeGoal_r0->m_iCPUGKRating_7484 = XMLGetInt(cXMLReaderNode_r1, "CPUGKRating", NULL, 0x32);
|
|
|
+ // 001DCC02 <- **字段 7490 赋值**
|
|
|
+ tFreeGoal_r0->m_fCPUGKSaveSpeed_7490 = XMLGetFloat(cXMLReaderNode_r1, "CPUGKSaveSpeed", NULL, 90.0f);
|
|
|
+ // 001DCC16 <- **字段 7494 赋值**
|
|
|
+ tFreeGoal_r0->m_fCPUGKSaveDistance_7494 = XMLGetFloat(cXMLReaderNode_r1, "CPUGKSaveDistance", NULL, 4.0f);
|
|
|
+ // 001DCC2A <- **字段 7488 赋值**
|
|
|
+ tFreeGoal_r0->m_fCPUGKSaveAlwaysDistance_7488 = XMLGetFloat(cXMLReaderNode_r1, "CPUGKSaveAlwaysDistance", NULL, 0.75f);
|
|
|
+ // 001DCC3C <- **字段 748C 赋值**
|
|
|
+ tFreeGoal_r0->m_iCPUGKSaveResponseTime_748C = XMLGetInt(cXMLReaderNode_r1, "CPUGKSaveResponseTime", NULL, 0xF);
|
|
|
+ // 001DCC4E <- **字段 7498 赋值**
|
|
|
+ tFreeGoal_r0->m_iCPUGKPosResponseTime_7498 = XMLGetInt(cXMLReaderNode_r1, "CPUGKPosResponseTime", NULL, 0xF);
|
|
|
+
|
|
|
+ // 001DCC5C <- **函数返回值赋值**
|
|
|
+ int iCPUPlayerResponseTime_r4 = XMLGetInt(cXMLReaderNode_r1, "CPUPlayerResponseTime", NULL, 0xF); // 001DCC58 <- **函数调用**
|
|
|
+ // 001DCC6E <- **字段 749C 赋值**
|
|
|
+ tFreeGoal_r0->m_iCPUKickResponseTime_749C = XMLGetInt(cXMLReaderNode_r1, "CPUKickResponseTime", NULL, iCPUPlayerResponseTime_r4);
|
|
|
+ // 001DCC80 <- **字段 74A0 赋值**
|
|
|
+ tFreeGoal_r0->m_iCPUMoveResponseTime_74A0 = XMLGetInt(cXMLReaderNode_r1, "CPUMoveResponseTime", NULL, iCPUPlayerResponseTime_r4);
|
|
|
+ // 001DCC92 <- **字段 7478 赋值**
|
|
|
+ tFreeGoal_r0->m_iTEAMKickResponseTime_7478 = XMLGetInt(cXMLReaderNode_r1, "TEAMKickResponseTime", 0, 0xA);
|
|
|
+ // 001DCCA4 <- **字段 7474 赋值**
|
|
|
+ tFreeGoal_r0->m_iTEAMMoveResponseTime_7474 = XMLGetInt(cXMLReaderNode_r1, "TEAMMoveResponseTime", 0, 5);
|
|
|
+ // 001DCCB8 <- **字段 74C4 赋值**
|
|
|
+ tFreeGoal_r0->m_fTEAMPassForceShotDist_74C4 = XMLGetFloat(cXMLReaderNode_r1, "TEAMPassForceShotDist", NULL, 8.0f);
|
|
|
+ // 001DCCCC <- **字段 74C8 赋值**
|
|
|
+ tFreeGoal_r0->m_fTEAMPassForceShotSpace_74C8 = XMLGetFloat(cXMLReaderNode_r1, "TEAMPassForceShotSpace", NULL, 4.0f);
|
|
|
+ // 001DCCDE <- **字段 74CC 赋值**
|
|
|
+ tFreeGoal_r0->m_iShootBias_74CC = XMLGetInt(cXMLReaderNode_r1, "ShootBias", NULL, 0);
|
|
|
+ // 001DCCF0 <- **字段 74D4 赋值**
|
|
|
+ tFreeGoal_r0->m_iPassBias_74D4 = XMLGetInt(cXMLReaderNode_r1, "PassBias", NULL, 0);
|
|
|
+ // 001DCD02 <- **字段 74DC 赋值**
|
|
|
+ tFreeGoal_r0->m_iControlWhenShootBias_74DC = XMLGetInt(cXMLReaderNode_r1, "ControlWhenShootBias", NULL, 0);
|
|
|
+ // 001DCD14 <- **字段 74E4 赋值**
|
|
|
+ tFreeGoal_r0->m_iControlWhenPassBias_74E4 = XMLGetInt(cXMLReaderNode_r1, "ControlWhenPassBias", NULL, 0);
|
|
|
+ // 001DCD26 <- **字段 74D0 赋值**
|
|
|
+ tFreeGoal_r0->m_iShootScale_74D0 = XMLGetInt(cXMLReaderNode_r1, "ShootScale", NULL, 0);
|
|
|
+ // 001DCD38 <- **字段 74D8 赋值**
|
|
|
+ tFreeGoal_r0->m_iPassScale_74D8 = XMLGetInt(cXMLReaderNode_r1, "PassScale", NULL, 0);
|
|
|
+ // 001DCD4A <- **字段 74E0 赋值**
|
|
|
+ tFreeGoal_r0->m_iControlWhenShootScale_74E0 = XMLGetInt(cXMLReaderNode_r1, "ControlWhenShootScale", NULL, 0);
|
|
|
+ // 001DCD5C <- **字段 74E8 赋值**
|
|
|
+ tFreeGoal_r0->m_iControlWhenPassScale_74E8 = XMLGetInt(cXMLReaderNode_r1, "ControlWhenPassScale", NULL, 0);
|
|
|
+ // 001DCD6E <- **字段 74EC 赋值**
|
|
|
+ tFreeGoal_r0->m_iControlRepeatReduce_74EC = XMLGetInt(cXMLReaderNode_r1, "ControlRepeatReduce", NULL, 10);
|
|
|
+ // 001DCD80 <- **字段 74F0 赋值**
|
|
|
+ tFreeGoal_r0->m_iPropCount_74F0 = XMLGetInt(cXMLReaderNode_r1, "PropCount", NULL, 0);
|
|
|
+
|
|
|
+ // 001DCD9C <- **局部变量赋值**
|
|
|
+ CFTTXmlReaderNode cPropNode_44 = cXMLReaderNode_r1.GetFirstChild("Prop"); // cNode_var_54 IDA中伪代码 NextSibling
|
|
|
+
|
|
|
+ // 001DCD9A <- **寄存器R4作为循环计数器**
|
|
|
+ // 001DCEC2 <- **循环条件判断**
|
|
|
+ for (int i_r4 = 0; i_r4 < tFreeGoal_r0->m_iPropCount_74F0; i_r4++) {
|
|
|
+ // 001DCE64
|
|
|
+
|
|
|
+ // 001DCE7A <- **结构体字段赋值**
|
|
|
+ const char* sFPropTypes[3] = {"CONE", "MANNEQUIN", "BOARD"};
|
|
|
+ tFreeGoal_r0->m_tFreeProp_74F4[i_r4].m_iType_C = ( EFreePropType)XMLGetStringInt(cPropNode_44, "Type", NULL, (const char**)sFPropTypes, 3, 0);
|
|
|
+
|
|
|
+ // 001DCEA0 001DCEA2 <- **TPoint3D结构赋值**
|
|
|
+ // 001DCEA2 <- **该地址使用了VSTR指令,推测TPoint3D使用了浮点数,但还原代码时使用TPointF3D结构体,汇编代码并未一致**
|
|
|
+ tFreeGoal_r0->m_tFreeProp_74F4[i_r4].m_tPoint3D_0 = XMLGetPos3D(cPropNode_44, "Pos", NULL, g_vZero3);
|
|
|
+ // 001DCEB0 <- **字段赋值**
|
|
|
+ tFreeGoal_r0->m_tFreeProp_74F4[i_r4].m_iRot_10 = XMLGetInt(cPropNode_44, "Rot", NULL, 0);
|
|
|
+ // 001DCEB6 <- **读取下一个node**
|
|
|
+ cPropNode_44 = cPropNode_44.GetNextSibling("Prop");
|
|
|
+ // 001DCEBC <- **ADDS R6, #0x14; 0x14 说明数组元素是5个int的结构体**
|
|
|
+ } // 001DCEC4 <- **循环代码块结束**
|
|
|
+
|
|
|
+ int iPlayerNO_r10;
|
|
|
+ // 001DCEF0
|
|
|
+ tZero_74 = g_vZero;
|
|
|
+
|
|
|
+ // 001DCEDA 寄存器r3作为循环计数器, iTeamNO_r3 == 1,是对方球队;iTeamNO_r3 == 0,是己方球队
|
|
|
+ for (int iTeamNO_r3 = 0; iTeamNO_r3 != 2; iTeamNO_r3++) {
|
|
|
+ // 001DCEF4 OK
|
|
|
+
|
|
|
+ // 001DCEFE <- **call snprintf**
|
|
|
+ snprintf(pFormatBuf_50, 0x20, "Team%i", iTeamNO_r3);
|
|
|
+ // 001DCF0A <- **局部变量赋值**
|
|
|
+ cNodeTeam_40 = cXMLReaderNode_r1.GetFirstChild(pFormatBuf_50);
|
|
|
+
|
|
|
+ // 001DCF0E <- **if 代码块**
|
|
|
+ if (cNodeTeam_40.IsValid()) {
|
|
|
+ // 001DCF18 OK
|
|
|
+
|
|
|
+ // 001DCF26 <- **局部变量赋值**
|
|
|
+ cNodePlayer_3C = cNodeTeam_40.GetFirstChild("Player");
|
|
|
+
|
|
|
+ iPlayerNO_r10 = 0; // 001DCF20 <- **循环计数器**
|
|
|
+
|
|
|
+ // 001DD28A <- **call IsValid()**
|
|
|
+ // 001DD294 <- **小于等于 10则跳转**
|
|
|
+ while (cNodePlayer_3C.IsValid() && iPlayerNO_r10 < 11) {
|
|
|
+ // 001DCF2A OK
|
|
|
+ if (XMLExists(cNodePlayer_3C, "Pos", NULL)) {
|
|
|
+ // 001DCF2A OK
|
|
|
+ //tPoint_98 = tZero_74; // 001DCF42 <- **结构体赋值**
|
|
|
+ // 001DCF46 <- **tPoint_64 接收函数返回值**
|
|
|
+ tPoint_34 = XMLGetPos(cNodePlayer_3C, "Pos", NULL, g_vZero);
|
|
|
+
|
|
|
+ // 001DCF68 <- **结构体比较,这里的操作符重载函数与原始汇编不一致**
|
|
|
+ // if (tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_4 != tPoint_34) {
|
|
|
+ // 001DCF6C OK
|
|
|
+ // 001DCF6E 001DCF72 <- **结构体赋值, 使用结构体操作符重载函数会改变汇编代码结构**
|
|
|
+ // LOGI("hook 0 %d", iPlayerNO_r10);
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_4.dx_0 = tPoint_34.dx_0; //这里的pos如果改为 TPoint(0,0) 在第一二关时,对方球队的守门员会变得跟自己一方的射门的球员的位置一样
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_4.dy_4 = tPoint_34.dy_4; // iTeamNO_r3 == 1,是对方球队;iTeamNO_r3 == 0,是己方球队
|
|
|
+ /*if (iTeamNO_r3 == 1 && iPlayerNO_r10 == 2) {
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_4.dx_0 = 0;
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_4.dy_4 = 0;
|
|
|
+ //LOGI("hook 0 [team] %d, [player] %d, x:%d, y:%d", iTeamNO_r3, iPlayerNO_r10, tPoint_64.dx_0, tPoint_64.dy_4 );
|
|
|
+ }*/
|
|
|
+ // }
|
|
|
+ } else {
|
|
|
+ // 001DCF8A <- **结构体赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_4 = TPoint(0, 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 001DCFAE
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iHoldPosTime_C = XMLGetInt(cNodePlayer_3C, "HoldPosTime", NULL, 0);
|
|
|
+ // 001DCFBA
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iRot_10 = XMLGetInt(cNodePlayer_3C, "Rot", NULL, -1);
|
|
|
+
|
|
|
+ // 001DCFDC <- ** if **
|
|
|
+ if (XMLGetInt(cNodePlayer_3C, "TeamMoveInfluence", NULL, iPlayerNO_r10 ? 1 : 0)) {
|
|
|
+ // 001DCFDE
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iTeamMoveInfluence_14 = true;
|
|
|
+ } else {
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iTeamMoveInfluence_14 = false;
|
|
|
+ }
|
|
|
+
|
|
|
+ tPoint_98 = TPoint(0, 0); // 001DCFEC <- **结构体赋值**
|
|
|
+ // 001DCFE4 <- **tPoint_64 接收返回值**
|
|
|
+ tPoint_34 = XMLGetPos(cNodePlayer_3C, "MoveInfluence", NULL, tPoint_98);
|
|
|
+ // 001DCFFC <- **结构体比较,重载函数导致汇编不一致**
|
|
|
+ //if (tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dx_0 != tPoint_34.dx_0) {
|
|
|
+ // 001DD004
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dx_0 = tPoint_34.dx_0; // 001DD004
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dy_4 = tPoint_34.dy_4; // 001DD00A
|
|
|
+ /*if (iTeamNO_r3 == 1 && iPlayerNO_r10 == 2) {
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dx_0 = 0;
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dy_4 = 0;
|
|
|
+ //LOGI("hook 1 [team] %d, [player] %d, x:%d, y:%d", iTeamNO_r3, iPlayerNO_r10, tPoint_64.dx_0, tPoint_64.dy_4 );
|
|
|
+ }*/
|
|
|
+ // } else {
|
|
|
+ // 001DD010 OK
|
|
|
+ // tPoint_34.dy_4 = tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dy_4;
|
|
|
+ // }
|
|
|
+
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dx_0 = tPoint_34.dx_0 / 0x8000; // 001DD026
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPoint_18.dy_4 = tPoint_34.dy_4 / 0x8000; // 001DD032
|
|
|
+
|
|
|
+ // 001DD040 <- **结构体字段赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iMoveResponseTime_20 = XMLGetInt(cNodePlayer_3C, "MoveResponseTime", NULL, -1);
|
|
|
+ // 001DD052
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iKickResponseTime_24 = XMLGetInt(cNodePlayer_3C, "KickResponseTime", NULL, -1);
|
|
|
+ // 001DD06A
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_bStatic_28 = XMLGetInt(cNodePlayer_3C, "Static", NULL, 0) ? true : false;
|
|
|
+
|
|
|
+ const char* sFPATypes[3] = {"AI", "PASS", "SHOOT"};
|
|
|
+ // 001DD084
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iAction_534 = XMLGetStringInt(cNodePlayer_3C, "Action", NULL, (const char**)sFPATypes, 3, 0);
|
|
|
+ // 001DD094
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iActionPassTarget_538 = XMLGetInt(cNodePlayer_3C, "ActionPassTarget", NULL, 0);
|
|
|
+ // 001DD0A4
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iActionControlCount_53C = XMLGetInt(cNodePlayer_3C, "ActionControlCount", NULL, 0);
|
|
|
+ // 001DD0B6
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iActionControlRot_540 = XMLGetInt(cNodePlayer_3C, "ActionControlRot", NULL, -1);
|
|
|
+ // 001DD0CE
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_fActionControlKickAhead_544 = XMLGetFloat(cNodePlayer_3C, "ActionControlKickAhead", NULL, 0);
|
|
|
+
|
|
|
+ // 001DD0C8 <- **循环计数器初始化**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeTDestSetLoopIndex_2C = 0;
|
|
|
+
|
|
|
+ // 001DD0D4 <- **call GetFirstChild()**
|
|
|
+ // 001DD1AA <- **call IsValid()**
|
|
|
+ for (auto cNode = cNodePlayer_3C.GetFirstChild("Move"); cNode.IsValid(); cNode = cNode.GetNextSibling("Move")) {
|
|
|
+ // 001DD0DA
|
|
|
+ int iTempIndex = tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeTDestSetLoopIndex_2C;
|
|
|
+ // 001DD0E4 <- **call XMLExits**
|
|
|
+ if (XMLExists(cNode, "Dest", NULL)) {
|
|
|
+ // 001DD0EC
|
|
|
+ // iTempIndex++;
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeTDestSetLoopIndex_2C++; // 001DD0F4
|
|
|
+ // auto ptr = (char*)(tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerMoveInfo_30) + sizeof(TFreeMoveInfo) * iTempIndex;
|
|
|
+ // auto pTFreeMoveInfo = (TFreeMoveInfo*)ptr;
|
|
|
+ // pTFreeMoveInfo->m_iTick_0 = XMLGetInt(cNode, "Tick", NULL, 0);
|
|
|
+ // 001DD10E <- **字段赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_iTick_0 = XMLGetInt(cNode, "Tick", NULL, 0);
|
|
|
+ // 001DD11C <- **字段赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_iFace_C = XMLGetInt(cNode, "Face", NULL, -1);
|
|
|
+ // pTFreeMoveInfo->m_iFace_C = XMLGetInt(cNode, "Face", NULL, -1);
|
|
|
+ // tPoint_98 = vZero; //001DD128 <- **结构体赋值**
|
|
|
+
|
|
|
+ // 001DD12C <- **tPoint_64接收返回值**
|
|
|
+
|
|
|
+ tPoint_34 = XMLGetPos(cNode, "Dest", NULL, g_vZero); // tPoint_98);
|
|
|
+
|
|
|
+ // 001DD13C <- **结构体比较**
|
|
|
+
|
|
|
+ // 001DD144
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tDestPoint_4.dx_0 = tPoint_34.dx_0; // player 2 bug
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tDestPoint_4.dy_4 = tPoint_34.dy_4;
|
|
|
+
|
|
|
+
|
|
|
+ // 001DD158 <- **字段赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_iUrgency_10 = XMLGetInt(cNode, "Urgency", NULL, 50);
|
|
|
+ // pTFreeMoveInfo->m_iUrgency_10 = XMLGetInt(cNode, "Urgency", NULL, 50);
|
|
|
+ tPoint_98 = TPoint(0, 0); // 001DD164
|
|
|
+ tPoint_34 = XMLGetPos(cNode, "MoveInfluence", NULL, tPoint_98); // 001DD16A <- **call XMLGetPos()**
|
|
|
+ // 001DD174 <- **结构体比较**
|
|
|
+ //if (tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tMoveInfluence_14 != tPoint_34) {
|
|
|
+ // 001DD178
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tMoveInfluence_14.dx_0 = tPoint_34.dx_0; // 001DD178 001DD17C <- **赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tMoveInfluence_14.dy_4 = tPoint_34.dy_4;
|
|
|
+ // } else {
|
|
|
+ // 001DD182
|
|
|
+ // tPoint_34.dy_4 = tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tMoveInfluence_14.dy_4;
|
|
|
+ // }
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tMoveInfluence_14.dx_0 = tPoint_34.dx_0 / 0x8000; // 001DD18E
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tPlayerDesk_30[iTempIndex].m_tMoveInfluence_14.dy_4 = tPoint_34.dy_4 / 0x8000; // 001DD198
|
|
|
+
|
|
|
+ } // 001DD1AA <- **if XMLExists 代码块结束**
|
|
|
+
|
|
|
+ } // 001DD1B2 <- **循环结束**
|
|
|
+
|
|
|
+ // 001DD1B6 <- **字段赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeAnimSetLoopIndex_3B0 = 0;
|
|
|
+
|
|
|
+ // 001DD1C0 <- **call GetFirstChild()**
|
|
|
+ // 001DD264 <- **call IsValid()**
|
|
|
+ for (auto cNode = cNodePlayer_3C.GetFirstChild("Anim"); cNode.IsValid(); cNode = cNode.GetNextSibling("Anim")) {
|
|
|
+ // 001DD1C6
|
|
|
+ int index = tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeAnimSetLoopIndex_3B0;
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeAnimSetLoopIndex_3B0 += 1; // 001DD1CE
|
|
|
+ // 001DD1E8 <- **字段赋值**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tAnim_3B4[index].m_iTick_0 = XMLGetInt(cNode, "Tick", NULL, 0);
|
|
|
+ // 001DD1FA <- **字段赋值*
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tAnim_3B4[index].m_iRot_8 = XMLGetInt(cNode, "Rot", NULL, -1);
|
|
|
+
|
|
|
+ // 001DD208 <- **if 代码块起始地址**
|
|
|
+ char* pAnimStr = XMLGetString(cNode, "Anim", NULL, 0);
|
|
|
+ if (pAnimStr) {
|
|
|
+ // 001DD20A
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tAnim_3B4[index].m_iAnimID_4 = CAnimManager::GetAnimID(pAnimStr);
|
|
|
+ if (tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tAnim_3B4[index].m_iAnimID_4 == -1) {
|
|
|
+ // 001DD216
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeAnimSetLoopIndex_3B0--; // 001DD21C
|
|
|
+ // 001DD220 <- **该地址出现赋值0操作**
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_tAnim_3B4[index].m_iAnimID_4 = 0;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 001DD250
|
|
|
+ tFreeGoal_r0->m_tTeamPlayerInfo_1C[iTeamNO_r3][iPlayerNO_r10].m_iNodeAnimSetLoopIndex_3B0--; // 001DD252
|
|
|
+ }
|
|
|
+ }
|
|
|
+ cNodePlayer_3C = cNodePlayer_3C.GetNextSibling("Player"); // 001DD274
|
|
|
+ iPlayerNO_r10++; // 001DD282 <- **计数器加一**
|
|
|
+ }
|
|
|
+ // 001DD2A0 <- **字段赋值**
|
|
|
+ tFreeGoal_r0->m_iTeamPlayerIndex_14[iTeamNO_r3] = iPlayerNO_r10;
|
|
|
+
|
|
|
+ // 001DD2AC <- **结构体赋值**
|
|
|
+ tPoint_98 = TPoint(0xA0000, 0xA0000);
|
|
|
+ // 001DD2B4 <- **call XMLGetPos()**
|
|
|
+ tPoint_34 = XMLGetPos(cNodeTeam_40, "MoveInfluence", NULL, tPoint_98);
|
|
|
+ // 001DD2C6 <-**结构体比较**
|
|
|
+ // if (tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0 != tPoint_34) {
|
|
|
+ // // 001DD2CA OK
|
|
|
+ tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0.dx_0 = tPoint_34.dx_0;
|
|
|
+ tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0.dy_4 = tPoint_34.dy_4;
|
|
|
+ // } else {
|
|
|
+ // // 001DD2DA OK
|
|
|
+ // tPoint_34.dy_4 = tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0.dy_4;
|
|
|
+ // }
|
|
|
+ tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0.dx_0 = tPoint_34.dx_0 / 0x8000; // 001DD2EE
|
|
|
+ tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0.dy_4 = tPoint_34.dy_4 / 0x8000; // 001DD2FA
|
|
|
+
|
|
|
+ // tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0.dx_0 = tPoint_34.dx_0 / 0x8000; // 001DD2EE
|
|
|
+ // tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_tMoveInfluencePoint_0.dy_4 = tPoint_34.dy_4 / 0x8000; // 001DD2FA
|
|
|
+
|
|
|
+ tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_iMoveInfluenceDelayMin_8 = XMLGetInt(cNodeTeam_40, "MoveInfluenceDelayMin", 0, 10); // 001DD30E
|
|
|
+ tFreeGoal_r0->m_tMoveInfluence_74A4[iTeamNO_r3].m_iMoveInfluenceDelayMax_C = XMLGetInt(cNodeTeam_40, "MoveInfluenceDelayMax", 0, 25); // 001DD324
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 001DD338
|
|
|
+ FREE_SortPlayers(tFreeGoal_r0);
|
|
|
+}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 00169A80 ^_-
|
|
|
//单元测试等级: 游戏运行正常
|