|
@@ -19,6 +19,11 @@
|
|
|
#include "XSYS.h"
|
|
|
#include "SNDGAME.h"
|
|
|
#include "XML.h"
|
|
|
+#include "CGameLoop.h"
|
|
|
+#include "COMM.h"
|
|
|
+#include "GL.h"
|
|
|
+#include "GM.h"
|
|
|
+#include "GFXNET.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,
|
|
@@ -81,7 +86,9 @@ void FREE_ProcessControls(bool) {}
|
|
|
int FREE_CalcKickTargetTime(int) { return 0; }
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001D3EEC
|
|
|
-void FREE_ResetControls() {}
|
|
|
+void FREE_ResetControls() {
|
|
|
+ LOGE("FREE_ResetControls");
|
|
|
+}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001D3F24
|
|
|
int FREE_PassIsLowKick(TFreeControl *, TPoint3D *, TPoint3D *, int) {
|
|
@@ -297,9 +304,291 @@ void FREE_SetupDifficulty() {
|
|
|
}
|
|
|
// locret_1D4410
|
|
|
}
|
|
|
+void GenerateMesh()
|
|
|
+{
|
|
|
+ LOGE("GenerateMesh");
|
|
|
+}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
-// 001D4424
|
|
|
-void FREE_Initialise() {}
|
|
|
+// 001D4424 //^_-
|
|
|
+//单元测试等级:目测游戏表现
|
|
|
+//测试内容:启动游戏到第10关传球射门
|
|
|
+//测试结果: 游戏表现正常无崩溃且无明显变化,未检测到日志输出
|
|
|
+//测试分支: 无
|
|
|
+void FREE_Initialise() {
|
|
|
+ // 4B0F74 - 0x4B0F58
|
|
|
+ int r0_i = CStoryCore::m_tStages.i_1C;
|
|
|
+ //qint var_252C = r0_i;
|
|
|
+ XSYS_RandomSetSeed(r0_i);
|
|
|
+ CTeam var_418_sp2120[2];
|
|
|
+ memcpy(var_418_sp2120, tGame.CTeam_2C60, sizeof(tGame.CTeam_2C60)); // 1008
|
|
|
+ TPlayerInfo var_2518_sp20[64];
|
|
|
+ memcpy(var_2518_sp20, &tGame.TPlayerInfo_94, sizeof(tGame.TPlayerInfo_94)); // 8448
|
|
|
+ CGameLoop::InitGameVars();
|
|
|
+
|
|
|
+ COMM_Reset();
|
|
|
+ memcpy(tGame.CTeam_2C60, &var_418_sp2120, sizeof(tGame.CTeam_2C60));
|
|
|
+ memcpy(&tGame.TPlayerInfo_94, var_2518_sp20, sizeof(tGame.TPlayerInfo_94));
|
|
|
+ CGameLoop::ObjectsInit();
|
|
|
+ CGameLoop::PlayerObjectsUpdate();
|
|
|
+ GL_NewPlayMode(EPlayMode_1, 0, 1);
|
|
|
+ GL_NewPlayModeState(EPlayModeState_1);
|
|
|
+ // 0x7450
|
|
|
+ tGame.mTLogic_6678.team_40 = FREE_iTeam;
|
|
|
+ cBall.ballPosPrev_4.point_0.dx_0 = FREE_tInfo.filed_0.pFREE_tGoal_1818->m_tBallPos_744C.point_0.dx_0;
|
|
|
+ cBall.ballPosPrev_4.point_0.dy_4 = FREE_tInfo.filed_0.pFREE_tGoal_1818->m_tBallPos_744C.point_0.dy_4;
|
|
|
+ cBall.ballPosPrev_4.dz_8 = FREE_tInfo.filed_0.pFREE_tGoal_1818->m_tBallPos_744C.dz_8;
|
|
|
+ cBall.Stop();
|
|
|
+ int r2_i = 1000;
|
|
|
+ tGame.mTLogic_6678.field_86 = 0;
|
|
|
+ tGame.field_6C8C = r2_i;
|
|
|
+ tGame.field_6C90 = r2_i;
|
|
|
+ tGame.field_6C94 = r2_i;
|
|
|
+ tGame.field_6C98 = r2_i;
|
|
|
+ r2_i = 0xFFE50000;
|
|
|
+ CPlayer* r0_player = tGame.allplay_14[FREE_iTeam].teamlist_0[0];
|
|
|
+ r0_player->SetPos(0, r2_i);
|
|
|
+ r0_i = FREE_iTeam ^ 1;
|
|
|
+ r0_player = tGame.allplay_14[r0_i].teamlist_0[0];
|
|
|
+ r0_player->SetPos(0, 0x1B0000);
|
|
|
+ int r4_i = 0;
|
|
|
+ // loc_1D4552
|
|
|
+ while (r4_i != 2) {
|
|
|
+ // loc_1D453A
|
|
|
+ for (int r6_i = 0; r6_i != 11; r6_i++) {
|
|
|
+ // loc_1D453E
|
|
|
+ r0_player = tGame.allplay_14[r4_i].teamlist_0[r6_i];
|
|
|
+ CGameLoop::ExcludePlayer(r0_player, false);
|
|
|
+ }
|
|
|
+ r4_i++;
|
|
|
+ }
|
|
|
+ // 001D4556
|
|
|
+ r0_i = 0;
|
|
|
+ int r1_i = 1;
|
|
|
+ // loc_1D456C
|
|
|
+ while (r0_i != 3) {
|
|
|
+ // loc_1D4560
|
|
|
+ CPlayer* r2_player = tGame.field_8[r0_i];
|
|
|
+ r0_i++;
|
|
|
+ r2_player->tStr32_44.uc_2 = r1_i;
|
|
|
+ } // loc_1D4560
|
|
|
+ // 001D4570
|
|
|
+ GL_ResetPlayers();
|
|
|
+ // 47F7D0 - 0x47DFB0 = 1820
|
|
|
+ int r5_i = 0;
|
|
|
+ // loc_1D46A2
|
|
|
+ while (r5_i != 2) {
|
|
|
+ // loc_1D4582
|
|
|
+ r0_i = CStoryCore::m_tStages.i_1C;
|
|
|
+ XSYS_RandomSetSeed(r0_i + r5_i);
|
|
|
+ int r8_i = 0;
|
|
|
+ //int var_251C_sp1C = r5_i;
|
|
|
+ // loc_1D468C
|
|
|
+ while (r8_i < (r1_i = FREE_tInfo.filed_0.pFREE_tGoal_1818->m_iTeamPlayerIndex_14[r5_i])) {
|
|
|
+ // loc_1D4594
|
|
|
+ r0_i = (uint)FREE_iTeam ^ (uint)r5_i;
|
|
|
+ TFreePlayer* r4_st = &FREE_tInfo.filed_0.pFREE_tGoal_1818->m_tTeamPlayerInfo_1C[r5_i][r8_i];
|
|
|
+ r1_i = r4_st->filed_0;
|
|
|
+ CPlayer* r5_player = tGame.allplay_14[r0_i].teamlist_0[r1_i];
|
|
|
+ r5_player->Reset();
|
|
|
+ r5_player->SetPos(r4_st->m_tPoint_4);
|
|
|
+ //r0_i = 0;
|
|
|
+ r5_player->ballPosPrev_4.dz_8 = 0;
|
|
|
+ r5_player->SetMoveDest(r4_st->m_tPoint_4);
|
|
|
+
|
|
|
+ r0_i = 0xFFFF;
|
|
|
+ r1_i = 0x168;
|
|
|
+
|
|
|
+ r5_player->tStr58_A0.s_4C = r0_i;
|
|
|
+ int r7_i = r4_st->m_iRot_10;
|
|
|
+ r0_i = r7_i << 14u;
|
|
|
+ int r6_i = r0_i / r1_i;
|
|
|
+ // 001D45EC
|
|
|
+ if (r7_i >= 0) {
|
|
|
+ // 001D45F8
|
|
|
+ r5_player->SetRotExplicit(r6_i);
|
|
|
+ r5_player->SetRot(r6_i, false);
|
|
|
+ r1_i = r6_i;
|
|
|
+ // loc_1D4622
|
|
|
+ } else {
|
|
|
+ // loc_1D4608
|
|
|
+ // var2528 =cball
|
|
|
+ r1_i = r5_player->GetRotPoint(cBall.ballPosPrev_4);
|
|
|
+ r5_player->SetRotExplicit(r1_i);
|
|
|
+ r1_i = -1;
|
|
|
+ }
|
|
|
+ // loc_1D4622
|
|
|
+ r5_player->Stop(r1_i);
|
|
|
+ // int* r10_pi = &r4_st->m_tAnim_3B4[0].m_iRot_8 ; //3d8
|
|
|
+ r6_i = 0;
|
|
|
+ r5_player->tStr32_44.uc_2 = r6_i;
|
|
|
+ // loc_1D4622
|
|
|
+ while (r6_i < r4_st->m_iNodeAnimSetLoopIndex_3B0) // field_3CC
|
|
|
+ {
|
|
|
+ // loc_1D4636
|
|
|
+ // 47F7D0 - 0x47DFB0 =1820
|
|
|
+ r0_i = FREE_tInfo.filed_0.field_1820;
|
|
|
+ r1_i = r4_st->m_tAnim_3B4[r6_i].m_iTick_0;
|
|
|
+ // 001D463E
|
|
|
+ if (r0_i == r1_i) {
|
|
|
+ // 001D4642
|
|
|
+ r1_i = r4_st->m_tAnim_3B4[r6_i].m_iAnimID_4;
|
|
|
+ r5_player->SetAnim(r1_i);
|
|
|
+ r0_i = r4_st->m_tAnim_3B4[r6_i].m_iAnimID_4;
|
|
|
+ r5_player->tStr32_44.field_8 = CAnimManager::GetState(r0_i);
|
|
|
+ // 001D465A
|
|
|
+ if (r4_st->m_tAnim_3B4[r6_i].m_iRot_8 >= 0) {
|
|
|
+ // 001D465E
|
|
|
+ r0_i = r0_i << 14u;
|
|
|
+ r1_i = r0_i / 360;
|
|
|
+ r5_player->SetRot(r1_i, false);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // loc_1D4672
|
|
|
+ // r10_pi = r10_pi+3;
|
|
|
+ r6_i++;
|
|
|
+ }
|
|
|
+ // loc_1D4678
|
|
|
+ r5_player->ClearBlend();
|
|
|
+ r8_i++;
|
|
|
+ } // loc_1D468C
|
|
|
+ r5_i++;
|
|
|
+ } // loc_1D4582
|
|
|
+ // 47F7E0 - 0x47DFB0
|
|
|
+ // r8 = r9 =cball
|
|
|
+ r0_i = FREE_tInfo.filed_0.field_1830;
|
|
|
+ // r1_i = r0_i + 1;
|
|
|
+ if (FREE_tInfo.filed_0.field_1830==-1) {
|
|
|
+ // 001D46B8
|
|
|
+ r0_i = GM_GetPlayerNearestPoint(FREE_iTeam, cBall.ballPosPrev_4.point_0, 0);
|
|
|
+ // 47F7F0 - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_1830 = r0_i;
|
|
|
+ FREE_tInfo.filed_0.field_1840 = r0_i;
|
|
|
+ }
|
|
|
+ // loc_1D46D2
|
|
|
+ r5_i = FREE_tInfo.filed_0.field_1834;
|
|
|
+ // r1_i = r5_i + 1;
|
|
|
+ // 001D46DA
|
|
|
+ if (FREE_tInfo.filed_0.field_1834 != -1) {
|
|
|
+ // 001D46DE
|
|
|
+ r1_i = FREE_iTeam;
|
|
|
+ CPlayer* r4_player = tGame.allplay_14[r1_i].teamlist_0[r0_i];
|
|
|
+ uint r0_u = CAnimManager::GetState(r5_i);
|
|
|
+ //r2_i = r5_i + r5_i * 32;
|
|
|
+ int r3_i = r4_player->us_122;
|
|
|
+ int r7_i = 0x7454;
|
|
|
+ TAnimData* anims = CAnimManager::s_tAnimData;
|
|
|
+ r1_i = anims[r5_i].filed_20[0].filed_8;
|
|
|
+ r1_i = r3_i * r1_i;
|
|
|
+ TFreeGoal* r3_goal = FREE_tInfo.filed_0.pFREE_tGoal_1818;
|
|
|
+ r2_i = r1_i / 128;
|
|
|
+ r3_goal->m_tBallPos_744C.dz_8 = r2_i;
|
|
|
+ bool b4748 = false;
|
|
|
+ // 001D4704
|
|
|
+ if (r0_u <= 17) {
|
|
|
+ r3_i = 0x30080; //
|
|
|
+ r7_i = 1;
|
|
|
+ r0_u = (uint)r7_i << (uint)r0_u;
|
|
|
+ // 001D4734
|
|
|
+ if ((r0_u & r3_i) != 0) {
|
|
|
+ // 001D4738
|
|
|
+ tGame.field_6ADC = r4_player;
|
|
|
+ tGame.field_6AD8 = 3;
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // loc_1D4748
|
|
|
+ b4748 = true;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 001D4746
|
|
|
+ b4748 = true;
|
|
|
+ }
|
|
|
+ if (b4748) {
|
|
|
+ // loc_1D4748
|
|
|
+ tGame.field_6ADC = NULL;
|
|
|
+ tGame.field_6AD8 = 0;
|
|
|
+ cBall.ballPosPrev_4.dz_8 = r2_i;
|
|
|
+ // 001D4754
|
|
|
+ if (r1_i >= 0x100000) {
|
|
|
+ // 001D4758
|
|
|
+ r0_i = CAnimManager::GetActionTime(r5_i, 0, 0x400);
|
|
|
+ r1_i = cBall.ballPosPrev_4.dz_8;
|
|
|
+ LOGE("r0-i=%x",r0_i);
|
|
|
+ r0_i = r1_i + ((int)(r0_i * r0_i*98) >> 1);
|
|
|
+ } else {
|
|
|
+ // loc_1D4790
|
|
|
+ r0_i = 0x1000;
|
|
|
+ }
|
|
|
+ // loc_1D4794
|
|
|
+ cBall.ballPosPrev_4.dz_8 = r0_i;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // loc_1D4798
|
|
|
+
|
|
|
+ // 66C0
|
|
|
+ tGame.mTLogic_6678.field_48 = 11;
|
|
|
+ // 66FD
|
|
|
+ tGame.mTLogic_6678.field_85 = 0;
|
|
|
+ // 66B8
|
|
|
+ tGame.mTLogic_6678.team_40 = FREE_iTeam;
|
|
|
+ // //47FC34 - 0x47DFB0
|
|
|
+ // r4_i = FREE_tInfo.field_1CB4;
|
|
|
+ // 47FC34 - 0x47DFB0 = 1C84
|
|
|
+ FREE_tInfo.field_188C.cBuff_3DC.field_1C = 0;
|
|
|
+ FREE_ResetControls();
|
|
|
+ // 47F7D0 - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_1820 = 0; // FREE_tInfo.field_1CB4;//
|
|
|
+ // 47F7CC - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_181C = 0; // r4_i;FREE_tInfo.field_1CB4
|
|
|
+ cBallProj.EnsureProj(30);
|
|
|
+ r1_i = cBallProj.field_E4;
|
|
|
+ // 47F7C8 - 0x47DFB0
|
|
|
+ // TFreeGoal* r0_goal = FREE_tInfo.filed_0.pFREE_tGoal_1818;
|
|
|
+ r1_i = ((r1_i + 11) % 512);
|
|
|
+ TPoint3D tp3d;
|
|
|
+ tp3d.point_0.dx_0 = cBallProj.field_E8[r1_i].point3D_0.point_0.dx_0;
|
|
|
+ tp3d.point_0.dy_4 = cBallProj.field_E8[r1_i].point3D_0.point_0.dy_4;
|
|
|
+ tp3d.dz_8 = cBallProj.field_E8[r1_i].point3D_0.dz_8;
|
|
|
+ // r1_i = r1_i +11;
|
|
|
+ r0_i = FREE_tInfo.filed_0.pFREE_tGoal_1818->m_iKickRot_7464;
|
|
|
+ // r1_i = r1_i % 512u;
|
|
|
+ r0_i = (uint)r0_i << 14u;
|
|
|
+ // r1_i = r1_i + r1_i*4;
|
|
|
+ r0_i = r0_i / 360;
|
|
|
+ FREE_SetupKickAction(tp3d, 0, r0_i); // 44
|
|
|
+ FREE_SetupPhaseTransition(true);
|
|
|
+ r0_i = cBall.ballPosPrev_4.point_0.dx_0;
|
|
|
+ r1_i = cBall.ballPosPrev_4.point_0.dy_4;
|
|
|
+ r2_i = cBall.ballPosPrev_4.dz_8;
|
|
|
+ tGame.m_uc_6CD4 = 0; // FREE_tInfo.field_1CB4;//r4_i;
|
|
|
+ // 47FC7C - 0x47DFB0
|
|
|
+ FREE_tInfo.field_1C9C.field_1CCC = r0_i;
|
|
|
+ FREE_tInfo.field_1C9C.field_1CD0 = r1_i;
|
|
|
+ FREE_tInfo.field_1C9C.field_1CD4 = r2_i;
|
|
|
+ GFXNET::Reset();
|
|
|
+ FREE_tInfo.filed_0.gamestatus_1828 = 2;
|
|
|
+ // 47F7DC - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_182C = 0;
|
|
|
+ // 47F80E - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_185E = 0;
|
|
|
+ // 47F80C - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_185C = 0;
|
|
|
+ // 47F808 - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_1858 = 0;
|
|
|
+ // 47F804 - 0x47DFB0
|
|
|
+ FREE_tInfo.filed_0.field_1854[0] = 0;
|
|
|
+ FREE_tInfo.filed_0.field_1854[1] = 0;
|
|
|
+ FREE_tInfo.filed_0.field_1854[2] = 0;
|
|
|
+ FREE_tInfo.filed_0.field_1854[3] = 0;
|
|
|
+ CGFXFX::ResetGoldenBootEffects();
|
|
|
+ CGFXFX::ResetStarPlayerEffects();
|
|
|
+ FREE_ResetControls();
|
|
|
+ r1_i = tGame.mTLogic_6678.field_38;
|
|
|
+ int r7_i = 30;
|
|
|
+ if (r1_i >= 31) {
|
|
|
+ tGame.mTLogic_6678.field_38 = r7_i;
|
|
|
+ }
|
|
|
+ GenerateMesh();
|
|
|
+}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001D49C0
|
|
|
void FREE_UpdateCamera(bool) {}
|
|
@@ -623,7 +912,9 @@ void FREE_SetupKickAction(TPoint3D tPoint3D0, int i1, int i2) {
|
|
|
void FREE_CheckGKHandPos(CPlayer *, int) {}
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001D8B9C
|
|
|
-int FREE_SetupPhaseTransition(bool) { return 0; }
|
|
|
+int FREE_SetupPhaseTransition(bool a1) {
|
|
|
+ LOGE("FREE_SetupPhaseTransition");
|
|
|
+ return rand()+a1; }
|
|
|
//-------------------------------------------------------------------------------------------------
|
|
|
// 001D8DB4
|
|
|
int FREE_PlayerGetUrgency(CPlayer *, int) { return 0; }
|