CFE.cpp 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. #include "CFE.h"
  2. #include <math.h>
  3. #include <typeinfo>
  4. #include "AndroidApp.h"
  5. #include "CFEEffects.h"
  6. #include "CFEImages.h"
  7. #include "CFESAndroidGraphics.h"
  8. #include "CFESChooseHero.h"
  9. #include "CFESChooseSideHero.h"
  10. #include "CFESCredits.h"
  11. #include "CFESEditPlayer.h"
  12. #include "CFESGame.h"
  13. #include "CFESIntro.h"
  14. #include "CFESLevelSelect.h"
  15. #include "CFESMainMenu.h"
  16. #include "CFESOptions.h"
  17. #include "CFESPauseMenu.h"
  18. #include "CFESPlayerName.h"
  19. #include "CFESShop.h"
  20. #include "CFESTitle.h"
  21. #include "CFTTCamera.h"
  22. #include "CFTTDevice.h"
  23. #include "CFTTNativeDialog.h"
  24. #include "CFTTRenderTarget.h"
  25. #include "CFTTServerTime.h"
  26. #include "CGFXFX.h"
  27. #include "CGFXSpec.h"
  28. #include "CGameFeats.h"
  29. #include "CGraphicsTexLoadOptions.h"
  30. #include "CMessageBoxHandler.h"
  31. #include "CStoryCore.h"
  32. #include "FE2D.h"
  33. #include "FETU.h"
  34. #include "FTT2D.h"
  35. #include "FTTGraphics.h"
  36. #include "GFXCAMERA.h"
  37. #include "GFXFADE.h"
  38. #include "GFXRENDER.h"
  39. #include "LOCstring.h"
  40. #include "SNDFE.h"
  41. #include "SNDGAME.h"
  42. #include "SYSCORE.h"
  43. #include "TGame.h"
  44. #include "TStoryConfig.h"
  45. #include "XCTRL.h"
  46. //#include "CFESShopHelper.h"
  47. #include "CFTTRewardedVideos.h"
  48. #include "CDownloads.h"
  49. #include "CFESShopHelper.h"
  50. #include "CFTTBannerAds.h"
  51. #include "CFTTAndroidRewardedVideos.h"
  52. #include "memctrl.h"
  53. extern bool FE_bBackButtonPressed;
  54. float CFE::s_fUniformWidth; // 0034A41C
  55. float CFE::s_fUniformHeight; // 0034A420
  56. float CFE::s_fHardwareWidth = 480.0f; // 00335024
  57. float CFE::s_fHardwareHeight = 320.0f; // 00335028
  58. TRect CFE::s_tOffsetAndResolution_Software; // 0034A444
  59. TRect CFE::s_tOffsetAndResolution_Hardware; // 0034A454
  60. TRect CFE::tOffsetAndResolution_SoftwareNative; // 0034A424
  61. TRect CFE::tOffsetAndResolution_HardwareNative; // 0034A434
  62. float CFE::ms_fDestCustomViewportPercentage = 1.0f; // 0033502C
  63. float CFE::ms_fCustomViewportPercentage = 1.0f; // 00335030
  64. bool CFE::ms_bCustomViewportActive; // 0034A464
  65. time_t CFE::m_tMinimiseTime = -1; // 003365F8
  66. int CFE::m_iScreenStackPos; // 00354144
  67. CFEScreen* CFE::m_apScreenStack[16]; // 003540BC
  68. EFEScreen CFE::m_apScreenStackID[16]; // 003540FC
  69. CFTTTexture* CFE::s_pBGTexture = nullptr; // 00354194
  70. bool CFE::ms_bShuttingDown; // 003540B4
  71. int CFE::s_iUnpauseSoundCounter; // 003540B8
  72. CFTTJobQueue* CFE::ms_pJobQueue = nullptr; // 0035416C
  73. bool CFE::m_bDeleteTopScreen; // 0035414C
  74. int CFE::m_eScreen; // 00354140
  75. int CFE::m_eLastFlowDirection; // 0035413C
  76. int CFE::ms_iFrame; // 00354160
  77. int CFE::m_iFirstInGameScreen; // 00354148
  78. int CFE::ms_iProcessFrames; // 0035415C
  79. bool CFE::s_bCouldHaveBannerAds; // 00354159
  80. int GFXUTIL_eAspectRatio; // 00462728
  81. int SCR_SAFE_TOP; // 00354198
  82. int SCR_SAFE_BOTTOM; // 0035419C
  83. int SCR_SAFE_LEFT; // 003541A0
  84. int SCR_SAFE_RIGHT; // 003541A4
  85. int SCR_WID = 640; // 003365EC
  86. int SCR_HEI = 960; // 003365F0
  87. FTTMutex CFE::s_tRenderMutex; // 00354170
  88. //-------------------------------------------------------------------------------------------------
  89. // 001199F4 //^_^
  90. void CFE::StoreUniformSpaceDimensions(float w, float h) {}
  91. //-------------------------------------------------------------------------------------------------
  92. // 00119A10 //^_^ 经过单元测试,功能正常
  93. void CFE::SetToUniformSpace() { LOGE("CFE::SetToUniformSpace"); }
  94. //-------------------------------------------------------------------------------------------------
  95. // 00119AC0 //^_^ 经过单元测试,功能正常
  96. void CFE::SetViewport_Uniform() {}
  97. //-------------------------------------------------------------------------------------------------
  98. // 00119BCC //^_^ 经过单元测试,功能正常
  99. void CFE::Begin2DScene() {}
  100. //-------------------------------------------------------------------------------------------------
  101. // 00119BE0 //^_^ 经过单元测试,功能正常
  102. void CFE::SetupUniformRes() {}
  103. //-------------------------------------------------------------------------------------------------
  104. // 00119C28 //^_^
  105. void CFE::BeginCustom2DScene(float f) {}
  106. //-------------------------------------------------------------------------------------------------
  107. // 00119C58 //^_^
  108. void CFE::SetupCustomRes(float f) {}
  109. //-------------------------------------------------------------------------------------------------
  110. // 00119D60 //^_^
  111. void CFE::ResetCustom2DScene() {}
  112. //-------------------------------------------------------------------------------------------------
  113. // 00119D8C //^_^
  114. void CFE::End2DScene() {}
  115. //-------------------------------------------------------------------------------------------------
  116. // 00119D90 //^_^
  117. float CFE::GetUniformXFromNativeX(float f1) { return 0; }
  118. //-------------------------------------------------------------------------------------------------
  119. // 00119DCC //^_^
  120. float CFE::GetUniformYFromNativeY(float f1) { return 0; }
  121. //-------------------------------------------------------------------------------------------------
  122. // 00119E08 //^_^
  123. float CFE::GetNativeXFromUniformX(float f1) { return 0; }
  124. //-------------------------------------------------------------------------------------------------
  125. // 00119E48 //^_^
  126. float CFE::GetNativeYFromUniformY(float f1) { return 0; }
  127. //-------------------------------------------------------------------------------------------------
  128. // 00119E88 //^_^
  129. float CFE::RoundToNativeXPixel(float f1) { return 0; }
  130. //-------------------------------------------------------------------------------------------------
  131. // 00119ED4 //^_^
  132. float CFE::RoundToNativeYPixel(float f1) { return 0; }
  133. //-------------------------------------------------------------------------------------------------
  134. // 00119F20 //^_^
  135. void CFE::SetNativeHardwareSize(float fw, float fh) {}
  136. //-------------------------------------------------------------------------------------------------
  137. // 00119F30 //-_- 经过单元测试,功能正常
  138. void CFE::ResolveScreenDims() {}
  139. //-------------------------------------------------------------------------------------------------
  140. // 001522AC //^_- 经过单元测试,功能正常
  141. void CFE::Init() {}
  142. //-------------------------------------------------------------------------------------------------
  143. // 00152394 //^_- 经过单元测试,功能正常
  144. void CFE::Forward(int eScreenID, bool b2, bool b3) {
  145. // locret_152442
  146. }
  147. //-------------------------------------------------------------------------------------------------
  148. // 00152464 //^_^
  149. void CFE::Exit() {}
  150. //-------------------------------------------------------------------------------------------------
  151. // 0015249C
  152. void CFE::InitialiseBannerAds() {
  153. // give up
  154. }
  155. //-------------------------------------------------------------------------------------------------
  156. // 001524BC
  157. bool CFE::AllowBannerAds() { return false; }
  158. //-------------------------------------------------------------------------------------------------
  159. // 00152508
  160. void CFE::RemoveBannerAd() {
  161. // give up
  162. LOGE("CFE::RemoveBannerAd");
  163. }
  164. //-------------------------------------------------------------------------------------------------
  165. // 0015251C
  166. void CFE::ShutDown() {}
  167. //-------------------------------------------------------------------------------------------------
  168. // 001525B4
  169. void CFE::PauseSoundForRecording() {
  170. // SNDFE_Music_Pause(true);
  171. // SNDGAME_Crowd_Pause(true);
  172. }
  173. //-------------------------------------------------------------------------------------------------
  174. // 001525C6
  175. void CFE::PlaySoundAfterRecording() {
  176. // SNDFE_Music_UnPause();
  177. }
  178. //-------------------------------------------------------------------------------------------------
  179. // 001525CC
  180. bool CFE::CheckMusic() {
  181. LOGE("CFE::CheckMusic");
  182. return rand();
  183. }
  184. //-------------------------------------------------------------------------------------------------
  185. // 0015261C
  186. bool CFE::ProcessAdverts() {
  187. // give up
  188. return false;
  189. }
  190. //-------------------------------------------------------------------------------------------------
  191. // 0015263C
  192. void CFE::AttemptToPlayVideoAd(bool b1, int a2, bool b3, bool b4) {
  193. // give up
  194. }
  195. //-------------------------------------------------------------------------------------------------
  196. // 00152714
  197. int CFE::AttemptToDisplayInterstitialAd() {
  198. // give up
  199. return 1;
  200. }
  201. //-------------------------------------------------------------------------------------------------
  202. // 00152770
  203. void CFE::AttemptToStartVideoAdNetworks() {
  204. // give up
  205. }
  206. //-------------------------------------------------------------------------------------------------
  207. // 00152864
  208. bool CFE::AllowVideoAds(EVideoAdZones) {
  209. // give up
  210. return false;
  211. }
  212. //-------------------------------------------------------------------------------------------------
  213. // 00152914
  214. void CFE::VideoAnalytics(int a1) {
  215. // empty
  216. }
  217. //-------------------------------------------------------------------------------------------------
  218. // 00152918
  219. void CFE::PlayRewardedVideo(int a1, void* pdat) {
  220. // give up
  221. }
  222. //-------------------------------------------------------------------------------------------------
  223. // 00152998
  224. void CFE::VideoAdEnergyRewardCallback(int a1, int a2, bool b3,
  225. char const* pdata) {
  226. // give up
  227. }
  228. //-------------------------------------------------------------------------------------------------
  229. // 00152A74
  230. void CFE::VideoAdCurrencyRewardCallback(int a1, int a2, bool b1,
  231. char const* pdata) {
  232. // give up
  233. }
  234. //-------------------------------------------------------------------------------------------------
  235. // 00152BB8
  236. bool CFE::ReadyToPlayVideoAd(bool b1, int a2, bool b3) { return false; }
  237. //-------------------------------------------------------------------------------------------------
  238. // 00152C08
  239. bool CFE::PassedVideoTime() {
  240. // give up
  241. return false;
  242. }
  243. //-------------------------------------------------------------------------------------------------
  244. // 00152C44
  245. void CFE::UpdateAdvertTimings(bool b) {
  246. // give up
  247. }
  248. //-------------------------------------------------------------------------------------------------
  249. // 00152CD4
  250. bool CFE::PassedFullScreenTime() { return false; }
  251. //-------------------------------------------------------------------------------------------------
  252. // 00152D0C //^_^
  253. void CFE::AndroidExitAppCB(int a1, void* pData) { LOGE("AndroidExitAppCB"); }
  254. //-------------------------------------------------------------------------------------------------
  255. // 00152D50
  256. EVideoAdZones CFE::GetAnalyticsVideoSourceFromZone(EVideoAdZones e) {
  257. // give up
  258. return EVideoAdZones_0;
  259. }
  260. bool CFE::s_bShutdownBannerInterstitialAds;
  261. //-------------------------------------------------------------------------------------------------
  262. // 00152D94 //-_- 经过单元测试,功能正常
  263. int CFE::Process(float f0) {
  264. // LOGI("CFE::Process %.2f entry", f0);
  265. if (CFE::m_apScreenStack[CFE::m_iScreenStackPos - 1] != nullptr) {
  266. // 00152DC2
  267. if (tGame.mTLogic_6678.bisRunning_A9) {
  268. // 00152DD4
  269. CFE::SetToUniformSpace();
  270. }
  271. // 00152DD8
  272. GFXFADE_Update(true);
  273. CFEEffects::Update(f0);
  274. CFE::CheckMusic();
  275. if (!tGame.mTLogic_6678.bisRunning_A9 &&
  276. CFE::m_apScreenStack[CFE::m_iScreenStackPos - 1]->m_pUITileManager_4->GetHasButton(256) &&
  277. CFE::m_apScreenStack[CFE::m_iScreenStackPos - 1]->m_pUITileManager_4->dIndex_0 >= 1) {
  278. CStoryCore::m_cProfile.EnergyCheckRestore();
  279. }
  280. // loc_152E20
  281. if (CFE::m_bDeleteTopScreen) {
  282. // 00152E2A
  283. CFE::DeleteTopScreen();
  284. CFE::m_bDeleteTopScreen = false;
  285. }
  286. // loc_152E32
  287. CFE::m_apScreenStack[CFE::m_iScreenStackPos - 1]->PositionTileManager(-1); // 00152E40
  288. // CFTTRewardedVideos::AdOnScreen(void)
  289. // 00152E4E
  290. if (CMessageBoxHandler::MessageBoxShown()) {
  291. // 00152E54
  292. if (FE_bBackButtonPressed) {
  293. if (CMessageBoxHandler::GetCanBackButtonRemove()) {
  294. CMessageBoxHandler::ShutDownMessageBox();
  295. }
  296. // loc_152E68
  297. FE_bBackButtonPressed = false;
  298. } else {
  299. // loc_152E6E
  300. CMessageBoxHandler::Process();
  301. XCTRL_TouchProcess_ClearTriggers();
  302. if (tGame.mTLogic_6678.bisRunning_A9) {
  303. // 00152E80
  304. CStoryCore::m_cProfile.EnergyCheckRestore();
  305. }
  306. // loc_152E8A
  307. if (!CGameLoop::s_bPaused && CFE::s_iUnpauseSoundCounter == 0) {
  308. SNDGAME_Process();
  309. }
  310. }
  311. }
  312. // loc_152EA2
  313. if (!CMessageBoxHandler::MessageBoxShown() || CMessageBoxHandler::CanProcess()) {
  314. // loc_152EB2
  315. int r7_dpos = CFE::m_iScreenStackPos;
  316. CFEScreen* r0_pScreen = CFE::m_apScreenStack[CFE::m_iScreenStackPos - 1];
  317. if (FE_bBackButtonPressed) {
  318. // 00152EC6
  319. if (r0_pScreen->dId_C == 8) {
  320. // 00152ECC
  321. CMessageBoxHandler::NewMessageBox(CFE::AndroidExitAppCB,
  322. nullptr,
  323. EMessageBoxType_1,
  324. LOCstring(239),
  325. nullptr,
  326. 0,
  327. 128,
  328. true,
  329. 1,
  330. 0,
  331. false,
  332. false,
  333. true,
  334. true);
  335. } else if (r0_pScreen->m_pUITileManager_4->GetHasButton(2)) { // loc_152F24
  336. // 00152F2E
  337. if (CFE::m_iScreenStackPos <= 1) {
  338. // 00152F34
  339. int var_1C = 8;
  340. CFE::SetupStack(&var_1C, 1);
  341. } else {
  342. CFE::Back(false, true);
  343. }
  344. } else {
  345. // loc_152F42
  346. switch (r0_pScreen->dId_C) {
  347. case 0:
  348. CGameLoop::Pause(-1, EPauseType_0, EFEScreen_12);
  349. break;
  350. case 4:
  351. CFESChooseHero::BackButtonPressed();
  352. break;
  353. case 5:
  354. CFESChooseSideHero::BackButtonPressed();
  355. break;
  356. case 6:
  357. CFESEditPlayer::CancelChanges();
  358. break;
  359. case 9:
  360. CFESLevelSelect::BackButtonPressed();
  361. break;
  362. case 12:
  363. CFESPauseMenu::ResumeGame();
  364. break;
  365. default:
  366. break;
  367. }
  368. }
  369. // loc_152F8C
  370. FE_bBackButtonPressed = false;
  371. } else {
  372. // loc_152EFE
  373. r0_pScreen->Process();
  374. if (CFE::m_iScreenStackPos != r7_dpos && CFE::m_iScreenStackPos != 0) {
  375. // 00152F0E
  376. XCTRL_Process_ClearTriggers();
  377. CFE::m_apScreenStack[CFE::m_iScreenStackPos - 1]->Process();
  378. }
  379. }
  380. }
  381. // loc_152F90
  382. //中间与网络下载相关的代码被忽略
  383. // loc_152FDA
  384. // CFESShopHelper::Process(); //CFESShopHelper 跳过
  385. SNDFE_Process();
  386. // loc_153018
  387. // CFESShopHelper::CheckForSave(); //CFESShopHelper 跳过
  388. // CFTTAndroidRewardedVideos::InitialiseNextAdNetwork();
  389. MP_cMyProfile.CheckSave();
  390. }
  391. return 0;
  392. }
  393. //-------------------------------------------------------------------------------------------------
  394. // 0015307C //^_^
  395. void CFE::DeleteTopScreen() { LOGE("CFE::DeleteTopScreen"); }
  396. //-------------------------------------------------------------------------------------------------
  397. // 001530C8 //^_^ 经过单元测试,功能正常
  398. void CFE::SetupStack(int* pdata, int dCount) {
  399. LOGE("%pCFE::SetupStack%x", pdata, dCount);
  400. }
  401. //-------------------------------------------------------------------------------------------------
  402. // 001530EC //^_^
  403. void CFE::Back(bool b1, bool b2) { LOGE("%xCFE::Back%x", b1, b2); }
  404. //-------------------------------------------------------------------------------------------------
  405. // 00153190 //^_^ 经过单元测试,功能正常
  406. void CFE::RenderScreen(int a1) {}
  407. //-------------------------------------------------------------------------------------------------
  408. // 001531AC
  409. void CFE::RenderAdBackground(bool b) {
  410. // give up
  411. }
  412. //-------------------------------------------------------------------------------------------------
  413. // 00153208
  414. void CFE::RenderFrameRate() {
  415. // empty
  416. }
  417. //-------------------------------------------------------------------------------------------------
  418. // 0015320C //^_^ 经过单元测试,功能正常
  419. void CFE::Render() {}
  420. //-------------------------------------------------------------------------------------------------
  421. // 00153274 ^_^ 经过单元测试,功能正常
  422. void CFE::RenderInner() {}
  423. //-------------------------------------------------------------------------------------------------
  424. // 00153318 //^_^ 经过单元测试,功能正常
  425. int CFE::GetScreenID() {
  426. int dret = -1;
  427. // loc_153338
  428. return dret;
  429. }
  430. //-------------------------------------------------------------------------------------------------
  431. // 00153348 //^_^ 经过单元测试,功能正常
  432. CFEScreen* CFE::NewScreen(int a1) {
  433. CFEScreen* pRet = nullptr;
  434. return pRet;
  435. }
  436. //-------------------------------------------------------------------------------------------------
  437. // 00153528 //^_^
  438. void CFE::BackToScreen(int a1, bool b2) {}
  439. //-------------------------------------------------------------------------------------------------
  440. // 001535B4 //^_^ 经过单元测试,功能正常
  441. CFTTTexture* CFE::GetBGTexture() { return nullptr; }
  442. //-------------------------------------------------------------------------------------------------
  443. // typedef void (*CMessageBoxHandler_func)(int, void *);
  444. //这个函数两个参数没有用到
  445. // 00153584 //^_^
  446. void SeenStartupMessageCB(int a1, void* pbuf2) {}
  447. //-------------------------------------------------------------------------------------------------
  448. // 00153618 -_- 仅打log时,功能正常
  449. void CFE::DisplayInitialMessage() {
  450. LOGI("CFE::DisplayInitialMessage entry");
  451. // fixit STY_tConfig结构未知
  452. // if (STY_tConfig->buf_5B91 && !MP_cMyProfile->ShowUpdateMessageBox() &&
  453. // (STY_tConfig->field_6394 == -1 || STY_tConfig->field_6394 !=
  454. // MP_cMyProfile->field_4)) {
  455. // //loc_15364C
  456. // wchar_t* tmp = new wchar_t[2048];
  457. // UTF8ToUnicode(tmp, STY_tConfig->buf_5B91, 2047); //00268EDC
  458. // UTF8ToUnicode(wchar_t *,char const*,uint)
  459. // CMessageBoxHandler::NewMessageBox(SeenStartupMessageCB, 0,
  460. // EMessageBoxType_0, tmp, 0, 0, 128, 1, 1, 0, 0, 0, 1, 1); delete[] tmp;
  461. // }
  462. }
  463. //-------------------------------------------------------------------------------------------------
  464. // 001536AC //^_^
  465. void CFE::ShopCB(int a1, void* pdata) {}
  466. //-------------------------------------------------------------------------------------------------
  467. // 001536B6
  468. void CFE::ShowShop(bool b) { LOGI("CFE::ShowShop entry"); }
  469. //-------------------------------------------------------------------------------------------------
  470. // 001536FC
  471. void CFE::OpenFacebookLink() {
  472. // give up
  473. }
  474. //-------------------------------------------------------------------------------------------------
  475. // 0015371C
  476. void CFE::OpenTwitterLink() {
  477. // give up
  478. }
  479. //-------------------------------------------------------------------------------------------------
  480. // 0015373C //^_^
  481. void CFE::DeleteScreenStack() {}
  482. //-------------------------------------------------------------------------------------------------
  483. // 00153758
  484. void CFE::LoadSideStoryFirstNISIfExists() {
  485. //??? 会不会调用到不是十分确定
  486. LOGI("CFE::LoadSideStoryFirstNISIfExists entry");
  487. }
  488. //-------------------------------------------------------------------------------------------------
  489. // 00153820
  490. void CFE::SetInitialAdvertTimings() {
  491. //??? 好像与广告相关,不是十分确定
  492. }
  493. //-------------------------------------------------------------------------------------------------
  494. // 00153884
  495. bool CFE::AllowInterstitials() {
  496. // give up
  497. return false;
  498. }
  499. //-------------------------------------------------------------------------------------------------
  500. // 001538DC
  501. bool CFE::AlwaysShowLevelSelectVideoAds() { return false; }
  502. //-------------------------------------------------------------------------------------------------
  503. // 00153908
  504. bool CFE::CouldHaveVideoAds(EVideoAdZones e) {
  505. // give up
  506. return false;
  507. }
  508. //-------------------------------------------------------------------------------------------------
  509. // 0015399C
  510. bool CFE::CouldHaveInterstitials() {
  511. bool bret = false;
  512. // fixit
  513. // if (STY_tConfig[MP_cMyProfile->GetUserType()].field_63E8 > -1) {
  514. // bret = true;
  515. // } else {
  516. // bret = STORY_ShouldForceAdverts();
  517. // }
  518. return bret;
  519. }
  520. //-------------------------------------------------------------------------------------------------
  521. // 001539D8
  522. void CFE::AddBannerAd() {
  523. // give up
  524. }
  525. //-------------------------------------------------------------------------------------------------
  526. // 001539F4 //^_^
  527. bool CFE::CurrentScreenHasBackButton() {
  528. bool bret = false;
  529. return bret;
  530. }
  531. //-------------------------------------------------------------------------------------------------
  532. // 00153A20 //^_^
  533. void CFE::OpenTermsOfServiceURL() {}
  534. //-------------------------------------------------------------------------------------------------
  535. // 00153A2C //^_^
  536. void CFE::OpenPrivacyPolicyURL() {}
  537. //-------------------------------------------------------------------------------------------------
  538. // 00153A38
  539. void CFE::OpenTermsOfService() {
  540. // CHeroAnalytics::LogEvent();
  541. LOGE("OpenTermsOfService");
  542. }
  543. //-------------------------------------------------------------------------------------------------
  544. // 00153A88
  545. void CFE::OpenPrivacyPolicy() {
  546. // CHeroAnalytics::LogEvent();
  547. LOGE("OpenPrivacyPolicy");
  548. }
  549. //-------------------------------------------------------------------------------------------------
  550. // 00153AD8 //^_-
  551. void CFE::ContinueTermsOfServiceNativeDialog() {
  552. // CHeroAnalytics::LogEvent()
  553. LOGE("ContinueTermsOfServiceNativeDialog");
  554. }
  555. //-------------------------------------------------------------------------------------------------
  556. // 00153B4C //^_^ 经过单元测试,功能正常
  557. bool CFE::ShowNativeDialogForTerms() { return true; }
  558. //-------------------------------------------------------------------------------------------------
  559. // 00153BEC //^_^
  560. void CFE::StoreMinimiseTime() {}
  561. //-------------------------------------------------------------------------------------------------
  562. // 00153C04
  563. void CFE::CheckTimeMinimised() {
  564. LOGE("CFE::CheckTimeMinimised");
  565. // locret_153C32
  566. }
  567. //-------------------------------------------------------------------------------------------------
  568. // 00153C3C //^_- 经过单元测试,功能正常
  569. void CFE::PerformHousekeeping() {
  570. // locret_153CA4
  571. return;
  572. }
  573. //-------------------------------------------------------------------------------------------------
  574. // 00153CC4 //^_^
  575. void CFE::DeleteHeadshot() {}
  576. //-------------------------------------------------------------------------------------------------
  577. /*
  578. 第一个界面要调用到的函数
  579. 77, 0x7665ac04 in ?? () 00153C04 CFE::CheckTimeMinimised()
  580. 17, 0x76620f30 in ?? () 00119F30 CFE::ResolveScreenDims()
  581. 2, 0x76620a10 in ?? () 00119A10 CFE::SetToUniformSpace()
  582. 31, 0x76659770 in ?? () 00152770 CFE::AttemptToStartVideoAdNetworks()
  583. 64, 0x7665a884 in ?? () 00153884 CFE::AllowInterstitials()
  584. 67, 0x7665a99c in ?? () 0015399C CFE::CouldHaveInterstitials()
  585. 32, 0x76659864 in ?? () 00152864 CFE::AllowVideoAds(EVideoAdZones)
  586. 66, 0x7665a908 in ?? () 00153908 CFE::CouldHaveVideoAds(EVideoAdZones)
  587. 63, 0x7665a820 in ?? () 00153820 CFE::SetInitialAdvertTimings()
  588. 75, 0x7665ab4c in ?? () 00153B4C CFE::ShowNativeDialogForTerms()
  589. 18, 0x766592ac in ?? () 001522AC CFE::Init()
  590. 19, 0x76659394 in ?? () 00152394 CFE::Forward(int a1, bool b1, bool b2)
  591. 53, 0x7665a348 in ?? () 00153348 CFE::NewScreen(int)
  592. 43, 0x76659d94 in ?? () 00152D94 CFE::Process(float f)
  593. 27, 0x766595cc in ?? () 001525CC CFE::CheckMusic()
  594. 52, 0x7665a318 in ?? () 00153318 CFE::GetScreenID()
  595. 50, 0x7665a20c in ?? () 0015320C CFE::Render()
  596. 51, 0x7665a274 in ?? () 00153274 CFE::RenderInner()
  597. 3, 0x76620ac0 in ?? () 00119AC0 CFE::SetViewport_Uniform()
  598. 4, 0x76620bcc in ?? () 00119BCC CFE::Begin2DScene()
  599. 5, 0x76620be0 in ?? () 00119BE0 CFE::SetupUniformRes()
  600. 47, 0x7665a190 in ?? () 00153190 CFE::RenderScreen(int a1)
  601. 9, 0x76620d8c in ?? () 00119D8C CFE::End2DScene()
  602. 21, 0x7665949c in ?? () 0015249C CFE::InitialiseBannerAds()
  603. 22, 0x766594bc in ?? () 001524BC CFE::AllowBannerAds()
  604. 78, 0x7665ac3c in ?? () 00153C3C CFE::PerformHousekeeping()
  605. 55, 0x7665a5b4 in ?? () 001535B4 CFE::GetBGTexture()
  606. 56, 0x7665a618 in ?? () 00153618 CFE::DisplayInitialMessage()
  607. */