frozenLake

BN3 Mettaur C-Code?

Jan 23rd, 2022 (edited)
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.94 KB | None | 0 0
  1. /* MettaurAI.s */
  2.  
  3. void MettaurAI(void)
  4.  
  5. {
  6. T1BattleObject *objT1;
  7.  
  8. switch(objT1.obj.CurState);
  9. case 0:
  10. MettaurAIIntiialize();
  11. case 4:
  12. MettaurAIUpdate();
  13. case 8:
  14. MettaurAIDestroy();
  15. return;
  16. }
  17.  
  18. void MettaurAIIntiialize(void)
  19.  
  20. {
  21. byte bVar1;
  22. byte *AIValues;
  23. undefined4 *puVar2;
  24. byte extraout_r1;
  25. T1BattleObject *objT1;
  26.  
  27. sprite_load(1,virusBattleSprite,Mettaur/BeastMan/);
  28. sprite_loadAnimationData();
  29. sprite_hasShadow();
  30. sprite_setPalette(objT1.obj.Param1);
  31. objT1.obj.CurAnim = 0;
  32. objT1.obj.CurAnimCopy = 0;
  33. sprite_setAnimation();
  34. sprite_loadAnimationData();
  35. VariousAIIntiialize_08014620();
  36. bVar1 = VariousAIIntiialize_08014530(old_sub_800E24C)(); /* outputs to bVar1 and extraout_r1 */
  37. objT1.obj.PanelX = bVar1;
  38. objT1.obj.PanelY = extraout_r1;
  39. AIValues = (byte *)CalculateAIConstantsAddress((undefined *)MettaurAISettings,3,(uint)objT1.obj.Param1);
  40. objT1.obj.Damage = (ushort)*AIValues; /* shockwave damage */
  41. puVar2 = VariousAIIntiialize_080aee74();
  42. if (puVar2 == NULL) {
  43. object_freeMemory();
  44. return;
  45. }
  46. VariousAIIntiialize_MovementAI?((undefined *)puVar2,0x58,0x59,3);
  47. *(undefined4 *)&objT1.obj.CurState = 4;
  48. objT1.obj.IsPhaseInitialized = 0x20;
  49. MettaurAIUpdate();
  50. return;
  51. }
  52.  
  53. void MettaurAIUpdate(void)
  54.  
  55. {
  56. VariousAIUpdate_080aca6e();
  57. /* r7,[.MettaurAIUpdateTable] */
  58. VariousAIUpdate_TablePosition_080ad710();
  59. VariousAIUpdate_080aef94();
  60. VariousAIUpdate_08000ef6();
  61. return;
  62. }
  63.  
  64. /*
  65. MettaurAIUpdateTable
  66. 080b5adc addr[12]
  67. 080b5adc VariousAIUpdate_MetUpdateStart?_080add82+1 [0x0]
  68. 080b5ae0 VariousAIUpdate_Paralysis+1 [0x1]
  69. 080b5ae4 VariousAIUpdate_Confusion?_080ade5c+1 [0x2]
  70. 080b5ae8 VariousAIUpdate_IceSlide+1 [0x3]
  71. 080b5aec VariousAIUpdate_TimeFreezePause+1 [0x4]
  72. 080b5af0 VariousAIUpdate_Shoved+1 [0x5]
  73. 080b5af4 VariousAIUpdate_Explode+1 [0x6]
  74. 080b5af8 VariousAIUpdate_EndExplosion+1 [0x7]
  75. 080b5afc MettaurAIIdle+1 [0x8]
  76. 080b5b00 MettaurAIDefend+1 [0x9]
  77. 080b5b04 MettaurAIAttack+1 [0xa]
  78. 080b5b08 MettaurAIAlignAttack+1 [0xb]
  79. */
  80.  
  81. void MettaurAIIdle(void)
  82.  
  83. {
  84. T1BattleObject *objT1;
  85.  
  86. switch(objT1.obj.CurPhase);
  87. case 0:
  88. MettaurAIIdleP0();
  89. case 4:
  90. MettaurAIIdleP1();
  91. return;
  92. }
  93.  
  94.  
  95. void MettaurAIIdleP0(void)
  96.  
  97. {
  98. byte bVar1;
  99. T1BattleObject *objT1;
  100.  
  101. bVar1 = objT1.LeveledObjectParamListPtr[2];
  102. objT1.obj.Timer = (ushort)objT1.LeveledObjectParamListPtr[1];
  103. objT1.obj.Timer2 = (ushort)bVar1;
  104. *(undefined2 *)&objT1.obj.CurPhase = 4;
  105. return;
  106. }
  107.  
  108.  
  109. void MettaurAIIdleP1(void)
  110.  
  111. {
  112. uint uVar1;
  113. int iVar2;
  114. T1BattleObject *objT1;
  115.  
  116. uVar1 = sprite_getFrameParameters();
  117. if ((uVar1 & 0x80) != 0) {
  118. iVar2 = VariousAIUpdate_08014608();
  119. if (iVar2 == 0) {
  120. if (objT1.obj.Param1 != 0) {
  121. objT1.obj.CurAction = 0x24; /* MettaurAIDefend */
  122. *(undefined2 *)&objT1.obj.CurPhase = 0;
  123. }
  124. }
  125. else {
  126. iVar2 = GetPlayer_PanelY_CompareEnemy();
  127. if (iVar2 == 0) {
  128. iVar2 = objT1.obj.Timer2 - 1;
  129. objT1.obj.Timer2 = (word)iVar2;
  130. if (iVar2 == 0) {
  131. objT1.obj.CurAction = 0x28; /* MettaurAIAttack */
  132. *(undefined2 *)&objT1.obj.CurPhase = 0;
  133. return;
  134. }
  135. }
  136. else {
  137. iVar2 = objT1.obj.Timer - 1;
  138. objT1.obj.Timer = (word)iVar2;
  139. if (iVar2 == 0) {
  140. objT1.obj.CurAction = 0x2c; /* MettaurAIAlignAttack */
  141. *(undefined2 *)&objT1.obj.CurPhase = 0;
  142. return;
  143. }
  144. }
  145. }
  146. }
  147. return;
  148. }
  149.  
  150.  
  151. void MettaurAIDefend(void)
  152.  
  153. {
  154. byte bVar1;
  155. int iVar2;
  156. T1BattleObject *objT1;
  157. BattleObjectMain *objRel2;
  158.  
  159. switch(objT1.obj.CurPhase);
  160. case 0:
  161. MettaurAIDefendP0();
  162. case 4:
  163. MettaurAIDefendP1();
  164. case 8:
  165. MettaurAIDefendP2();
  166. case 12:
  167. MettaurAIDefendP3();
  168. case 16:
  169. MettaurAIDefendP4();
  170. case 20:
  171. MettaurAIDefendP5();
  172.  
  173. iVar2 = VariousAIUpdate_08014608();
  174. if (iVar2 != 0) {
  175. objRel2 = objT1.obj.RelatedObject2Ptr;
  176. bVar1 = objRel2.Param2;
  177. if ((bVar1 & 4) != 0) {
  178. objRel2.Param2 = bVar1 & 0xfb;
  179. objT1.obj.CurAnim = 4;
  180. }
  181. objT1.obj.CurAction = 0x20;
  182. *(undefined2 *)&objT1.obj.CurPhase = 0;
  183. }
  184. return;
  185. }
  186.  
  187. void MettaurAIDefendP0(void)
  188.  
  189. {
  190. T1BattleObject *objT1;
  191.  
  192. objT1.obj.CurAnim = 2;
  193. objT1.obj.CurAnimCopy = 0xff;
  194. *(undefined2 *)&objT1.obj.CurPhase = 4;
  195. return;
  196. }
  197.  
  198. void MettaurAIDefendP1(void)
  199.  
  200. {
  201. uint uVar1;
  202. T1BattleObject *objT1;
  203.  
  204. uVar1 = sprite_getFrameParameters();
  205. if ((uVar1 & 0x81) != 0) {
  206. VariousAIUpdate_080af0a0(objT1.obj.RelatedObject2Ptr,4);
  207. *(undefined2 *)&objT1.obj.CurPhase = 8;
  208. }
  209. return;
  210. }
  211.  
  212. void MettaurAIDefendP2(void)
  213.  
  214. {
  215. uint uVar1;
  216. T1BattleObject *objT1;
  217.  
  218. VariousAIUpdate_080af0a0(objT1.obj.RelatedObject2Ptr,4);
  219. uVar1 = sprite_getFrameParameters();
  220. if ((uVar1 & 0x80) != 0) {
  221. objT1.obj.CurAnim = 3;
  222. objT1.obj.CurAnimCopy = 0xff;
  223. objT1.obj.Timer = 0x78;
  224. *(undefined2 *)&objT1.obj.CurPhase = 0xc;
  225. }
  226. return;
  227. }
  228.  
  229. void MettaurAIDefendP3(void)
  230.  
  231. {
  232. int iVar1;
  233. T1BattleObject *objT1;
  234.  
  235. VariousAIUpdate_080af0a0(objT1.obj.RelatedObject2Ptr,4);
  236. iVar1 = objT1.obj.Timer - 1;
  237. objT1.obj.Timer = (word)iVar1;
  238. if (iVar1 == 0) {
  239. VariousAIUpdate_080af0a8(objT1.obj.RelatedObject2Ptr,4);
  240. objT1.obj.CurAnim = 4;
  241. objT1.obj.CurAnimCopy = 0xff;
  242. *(undefined2 *)&objT1.obj.CurPhase = 0x10;
  243. }
  244. return;
  245. }
  246.  
  247. void MettaurAIDefendP4(void)
  248.  
  249. {
  250. uint uVar1;
  251. T1BattleObject *objT1;
  252.  
  253. uVar1 = sprite_getFrameParameters();
  254. if ((uVar1 & 0x80) != 0) {
  255. objT1.obj.Timer = 0x3c;
  256. *(undefined2 *)&objT1.obj.CurPhase = 0x14;
  257. }
  258. return;
  259. }
  260.  
  261. void MettaurAIDefendP5(void)
  262.  
  263. {
  264. int iVar1;
  265. T1BattleObject *objT1;
  266.  
  267. iVar1 = objT1.obj.Timer - 1;
  268. objT1.obj.Timer = (word)iVar1;
  269. if (iVar1 == 0) {
  270. *(undefined2 *)&objT1.obj.CurPhase = 0;
  271. }
  272. return;
  273. }
  274.  
  275.  
  276. void MettaurAIAttack(void)
  277.  
  278. {
  279. T1BattleObject *objT1;
  280.  
  281. switch(objT1.obj.CurPhase);
  282. case 0:
  283. MettaurAIAttackP0();
  284. case 4:
  285. MettaurAIAttackP1();
  286. case 8:
  287. MettaurAIAttackP2();
  288. return;
  289. }
  290.  
  291. void MettaurAIAttackP0(void)
  292.  
  293. {
  294. T1BattleObject *objT1;
  295.  
  296. objT1.obj.CurAnim = 1;
  297. objT1.obj.CurAnimCopy = 0xff;
  298. *(undefined2 *)&objT1.obj.CurPhase = 4;
  299. return;
  300. }
  301.  
  302. void MettaurAIAttackP1(void)
  303.  
  304. {
  305. uint uVar1;
  306. int PanelX;
  307. int iVar2;
  308. T1BattleObject *objT1;
  309. byte PanelY;
  310.  
  311. uVar1 = sprite_getFrameParameters();
  312. if ((uVar1 & 4) != 0) {
  313. objT1.obj.field_0x30 = 0x14;
  314. }
  315. uVar1 = sprite_getFrameParameters();
  316. if ((uVar1 & 0x81) != 0) {
  317. PanelX = InvertValueAtR5-0x16();
  318. PanelX += (uint)objT1.obj.PanelX;
  319. PanelY = objT1.obj.PanelY;
  320. iVar2 = GetPanelTeam(PanelX,PanelY,0x10,0);
  321. if (iVar2 != 0) {
  322. SpawnShockwave(iVar2,PanelX,PanelY,0);
  323. }
  324. *(undefined2 *)&objT1.obj.CurPhase = 8;
  325. }
  326. return;
  327. }
  328.  
  329. void MettaurAIAttackP2(void)
  330.  
  331. {
  332. uint uVar1;
  333. T1BattleObject *objT1;
  334.  
  335. uVar1 = sprite_getFrameParameters();
  336. if ((uVar1 & 0x80) != 0) {
  337. VariousAIDestroy_0801464a();
  338. VariousAIIntiialize_08014620();
  339. objT1.obj.CurAction = 0x20;
  340. *(undefined2 *)&objT1.obj.CurPhase = 0;
  341. }
  342. return;
  343. }
  344.  
  345. void MettaurAIAlignAttack(void)
  346.  
  347. {
  348. T1BattleObject *objT1;
  349.  
  350. switch(objT1.obj.CurPhase);
  351. case 0:
  352. MettaurAIAlignAttackP0();
  353. case 4:
  354. MettaurAIAlignAttackP1();
  355. case 8:
  356. MettaurAIAlignAttackP2();
  357. return;
  358. }
  359.  
  360.  
  361. uint MettaurAIAlignAttackP0(void)
  362.  
  363. {
  364. byte bVar1;
  365. uint uVar2;
  366. int iVar3;
  367. int iVar4;
  368. byte bVar5;
  369. T1BattleObject *objT1;
  370. undefined in_CY;
  371.  
  372. uVar2 = CheckIf-2E-BitmaskHasAny-20A-BitsSet();
  373. if (uVar2 != 0) {
  374. uVar2 = GetPlayer_PanelY_CompareEnemy();
  375. iVar4 = 1;
  376. bVar5 = 2;
  377. if (uVar2 != 0) {
  378. if (!(bool)in_CY || uVar2 == 0) {
  379. iVar4 = -1;
  380. bVar5 = 4;
  381. }
  382. iVar4 += (uint)objT1.obj.PanelY;
  383. bVar1 = objT1.obj.PanelX;
  384. uVar2 = (uint)bVar1;
  385. objT1.obj.FuturePanelX = bVar1;
  386. objT1.obj.FuturePanelY = (byte)iVar4;
  387. iVar3 = GetPanelTeam(uVar2,iVar4,0x30,0x3e080080);
  388. if (iVar3 != 0) {
  389. objT1.obj.field_0x1c = bVar5;
  390. VariousAI-MarkAreaOffLimitsInOpenSearch1?(uVar2,iVar4);
  391. objT1.obj.CurAnim = 0;
  392. objT1.obj.CurAnimCopy = 0xff;
  393. objT1.obj.Timer = 3;
  394. SpawnT4BattleObjectWithId0(3,objT1.obj.X,objT1.obj.Y,objT1.obj.Z + 0x60000);
  395. objT1.obj.Header.Flags = objT1.obj.Header.Flags & 0xfd;
  396. objT1.obj.StaminaDamageCounterDisabler = objT1.obj.StaminaDamageCounterDisabler | 0x20
  397. ;
  398. *(undefined2 *)&objT1.obj.CurPhase = 4;
  399. return 4;
  400. }
  401. }
  402. }
  403. objT1.obj.CurAction = 0x28;
  404. *(undefined2 *)&objT1.obj.CurPhase = 0;
  405. return uVar2;
  406. }
  407.  
  408.  
  409. void MettaurAI_080b5db6(void)
  410.  
  411. {
  412. T1BattleObject *objT1;
  413.  
  414. objT1.obj.CurAction = 0x20;
  415. *(undefined2 *)&objT1.obj.CurPhase = 0;
  416. return;
  417. }
  418.  
  419.  
  420. void MettaurAIAlignAttackP1(void)
  421.  
  422. {
  423. byte bVar1;
  424. byte bVar2;
  425. int iVar3;
  426. T1BattleObject *objT1;
  427. BattleObjectMain *objChild;
  428. dword adVar4 [2];
  429.  
  430. iVar3 = objT1.obj.Timer - 1;
  431. objT1.obj.Timer = (word)iVar3;
  432. if (iVar3 == 0) {
  433. bVar1 = objT1.obj.FuturePanelX;
  434. bVar2 = objT1.obj.FuturePanelY;
  435. objT1.obj.PanelX = bVar1;
  436. objT1.obj.PanelY = bVar2;
  437. objChild = objT1.obj.RelatedObject2Ptr;
  438. objChild.CurState = bVar1;
  439. objChild.CurAction = bVar2;
  440. VariousAI-MarkAreaOffLimitsInOpenSearch2?();
  441. adVar4 = object_setCoordinatesFromPanels();
  442. SpawnT4BattleObjectWithId0
  443. ((int)((ulonglong)adVar4 >> 0x20),objT1.obj.X,objT1.obj.Y,
  444. objT1.obj.Z + 0x60000);
  445. objT1.obj.Timer = 3;
  446. *(undefined2 *)&objT1.obj.CurPhase = 8;
  447. }
  448. return;
  449. }
  450.  
  451. void MettaurAIAlignAttackP2(void)
  452.  
  453. {
  454. int iVar1;
  455. T1BattleObject *objT1;
  456.  
  457. iVar1 = objT1.obj.Timer - 1;
  458. objT1.obj.Timer = (word)iVar1;
  459. if (iVar1 == 0) {
  460. objT1.obj.Header.Flags = objT1.obj.Header.Flags | 2;
  461. objT1.obj.StaminaDamageCounterDisabler = objT1.obj.StaminaDamageCounterDisabler & 0xffdf;
  462. objT1.obj.StaminaDamageCounterDisabler = objT1.obj.StaminaDamageCounterDisabler | 0x40;
  463. objT1.obj.CurAction = 0x20;
  464. *(undefined2 *)&objT1.obj.CurPhase = 0;
  465. }
  466. return;
  467. }
  468.  
  469. void MettaurAIDestroy(void)
  470.  
  471. {
  472. VariousAIDestroy_0801464a();
  473. VariousAIDestroy_080aeeb0();
  474. VariousAIDestroy_080147de();
  475. object_freeMemory();
  476. return;
  477. }
Add Comment
Please, Sign In to add comment