Advertisement
EliteAnax17

send help

Jun 27th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.82 KB | None | 0 0
  1. #include "global.h"
  2. #include "sprite.h"
  3. #include "palette.h"
  4. #include "task.h"
  5. #include "m4a.h"
  6. #include "main.h"
  7. #include "text.h"
  8. #include "menu.h"
  9. #include "songs.h"
  10. #include "title_screen.h"
  11.  
  12. // local task defines
  13. #define WINDOW_SELECTED data[0]
  14. #define BGM_INDEX data[1]
  15. #define SE_INDEX data[2]
  16. #define UNK_DATA3 data[3]
  17.  
  18. // window selections
  19. enum
  20. {
  21. BGM_WINDOW,
  22. SE_WINDOW
  23. };
  24.  
  25. // driver test cry enums
  26. enum
  27. {
  28. CRY_TEST_UNK0,
  29. CRY_TEST_VOLUME,
  30. CRY_TEST_PANPOT,
  31. CRY_TEST_PITCH,
  32. CRY_TEST_LENGTH,
  33. CRY_TEST_RELEASE,
  34. CRY_TEST_PROGRESS,
  35. CRY_TEST_CHORUS,
  36. CRY_TEST_PRIORITY
  37. };
  38.  
  39. extern void sub_80BAF84(u8);
  40. extern void sub_80BB25C(u8);
  41. extern void sub_80BA68C(u8);
  42. extern void sub_80BAD5C(void);
  43. extern void sub_80BAE10(u8, u8);
  44.  
  45. extern struct ToneData voicegroup_84537C0[];
  46. extern struct ToneData voicegroup_8452590[];
  47. extern struct ToneData voicegroup_8453DC0[];
  48. extern struct ToneData voicegroup_8452B90[];
  49. extern struct ToneData voicegroup_84543C0[];
  50. extern struct ToneData voicegroup_8453190[];
  51. extern struct ToneData voicegroup_84549C0[];
  52. extern struct ToneData voicegroup_8453790[];
  53.  
  54. extern int gUnknown_020387B4[9];
  55.  
  56. extern s8 gUnknown_020387B3;
  57. extern u8 gUnknown_020387B1;
  58. extern u8 gUnknown_020387B2;
  59. extern u8 gUnknown_020387D8;
  60. extern u8 gUnknown_020387D9;
  61. extern u8 gUnknown_020387B0;
  62.  
  63. extern struct MusicPlayerInfo *gUnknown_03005D30;
  64.  
  65. extern u8 *gBGMNames[];
  66. extern u8 *gSENames[];
  67.  
  68. extern u8 gDebugText_SoundCheckJap[];
  69. extern u8 gDebugText_BGM[];
  70. extern u8 gDebugText_SE[];
  71. extern u8 gDebugText_ABDesc[];
  72. extern u8 gDebugText_UpDown[];
  73. extern u8 gDebugText_DriverTest[];
  74. extern u8 gDebugText_BBack[];
  75. extern u8 gDebugText_APlay[];
  76. extern u8 gDebugText_Voice[];
  77. extern u8 gDebugText_Volume[];
  78. extern u8 gDebugText_Panpot[];
  79. extern u8 gDebugText_Pitch[];
  80. extern u8 gDebugText_Length[];
  81. extern u8 gDebugText_Release[];
  82. extern u8 gDebugText_Progress[];
  83. extern u8 gDebugText_Chorus[];
  84. extern u8 gDebugText_Priority[];
  85. extern u8 gDebugText_Playing[];
  86. extern u8 gDebugText_Reverse[];
  87. extern u8 gDebugText_Stereo[];
  88.  
  89. void sub_80BA258(u8);
  90. void sub_80BA384(u8);
  91. void sub_80BA65C(u8);
  92. void sub_80BA6B8(u8);
  93. void sub_80BA700(u16, u16, u16);
  94. void sub_80BA79C(u8 *, u16, u16);
  95. void sub_80BA800(u8);
  96. void sub_80BAA48(u8);
  97. void sub_80BACDC(s8);
  98.  
  99. void sub_80BA0A8(void)
  100. {
  101. RunTasks();
  102. AnimateSprites();
  103. BuildOamBuffer();
  104. UpdatePaletteFade();
  105. }
  106.  
  107. void sub_80BA0C0(void)
  108. {
  109. LoadOam();
  110. ProcessSpriteCopyRequests();
  111. TransferPlttBuffer();
  112.  
  113. if(gUnknown_020387B0 != 0)
  114. {
  115. m4aSoundMain();
  116. m4aSoundMain();
  117. m4aSoundMain();
  118. }
  119. }
  120.  
  121. // unused
  122. void CB2_StartSoundCheckMenu(void)
  123. {
  124. u8 taskId;
  125.  
  126. SetVBlankCallback(NULL);
  127. REG_DISPCNT = 0;
  128. REG_BG2CNT = 0;
  129. REG_BG1CNT = 0;
  130. REG_BG0CNT = 0;
  131. REG_BG2HOFS = 0;
  132. REG_BG2VOFS = 0;
  133. REG_BG1HOFS = 0;
  134. REG_BG1VOFS = 0;
  135. REG_BG0HOFS = 0;
  136. REG_BG0VOFS = 0;
  137. DmaFill16(3, 0, VRAM, VRAM_SIZE);
  138. DmaFill32(3, 0, OAM, OAM_SIZE);
  139. DmaFill16(3, 0, PLTT, PLTT_SIZE);
  140. ResetPaletteFade();
  141. ResetTasks();
  142. ResetSpriteData();
  143. SetUpWindowConfig(&gWindowConfig_81E6C3C);
  144. InitMenuWindow(&gWindowConfig_81E6CE4);
  145. BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
  146. REG_WIN0H = 0;
  147. REG_WIN0V = 0;
  148. REG_WIN1H = 0;
  149. REG_WIN1V = 0;
  150. REG_WININ = 0x1111;
  151. REG_WINOUT = 0x31;
  152. REG_BLDCNT = 0xE1;
  153. REG_BLDALPHA = 0;
  154. REG_BLDY = 7;
  155. REG_IE = 1; // could be a typo of REG_IME
  156. REG_IE |= 1;
  157. REG_DISPSTAT |= 8;
  158. SetVBlankCallback(sub_80BA0C0);
  159. SetMainCallback2(sub_80BA0A8);
  160. REG_DISPCNT = 0x7140;
  161. taskId = CreateTask(sub_80BA258, 0);
  162. TASK.WINDOW_SELECTED = BGM_WINDOW;
  163. TASK.BGM_INDEX = 0;
  164. TASK.SE_INDEX = 0;
  165. TASK.UNK_DATA3 = 0;
  166. gUnknown_020387B0 = 0;
  167. TASK.UNK_DATA3 = 0; // why?
  168. m4aSoundInit();
  169. }
  170.  
  171. // Task_InitSoundCheckMenu
  172. void sub_80BA258(u8 taskId)
  173. {
  174. u8 soundcheckStr[9];
  175. u8 bgmStr[4];
  176. u8 seStr[4];
  177. u8 abDescStr[13];
  178. u8 upDownStr[12];
  179. u8 driverStr[14];
  180.  
  181. // these probably used size of the strings themselves, but they are not in the C file yet.
  182. memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof soundcheckStr);
  183. memcpy(bgmStr, gDebugText_BGM, sizeof bgmStr);
  184. memcpy(seStr, gDebugText_SE, sizeof seStr);
  185. memcpy(abDescStr, gDebugText_ABDesc, sizeof abDescStr);
  186. memcpy(upDownStr, gDebugText_UpDown, sizeof upDownStr);
  187. memcpy(driverStr, gDebugText_DriverTest, sizeof driverStr);
  188.  
  189. if(!gPaletteFade.active)
  190. {
  191. MenuDrawTextWindow(0x2, 0, 0x1B, 0x3);
  192. MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA);
  193. MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11);
  194. MenuPrint(soundcheckStr, 4, 1);
  195. MenuPrint(abDescStr, 14, 1);
  196. MenuPrint(bgmStr, 4, 6);
  197. MenuPrint(upDownStr, 14, 6);
  198. MenuPrint(seStr, 4, 13);
  199. MenuPrint(upDownStr, 14, 13);
  200. MenuPrint(driverStr, 14, 18);
  201. TASK.FUNC = sub_80BA384;
  202. REG_WIN0H = 0x11DF;
  203. REG_WIN0V = 0x11F;
  204. }
  205. }
  206.  
  207. void sub_80BA384(u8 taskId) // Task_HandleDrawingSoundCheckMenuText
  208. {
  209. sub_80BA6B8(TASK.WINDOW_SELECTED);
  210. sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index
  211. sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8);
  212. sub_80BA700(TASK.SE_INDEX, 7, 15);
  213. sub_80BA79C(gSENames[TASK.SE_INDEX], 11, 15);
  214. TASK.FUNC = sub_80BA65C;
  215. }
  216.  
  217. #ifdef NONMATCHING
  218. bool8 sub_80BA400(u8 taskId) // Task_ProcessSoundCheckMenuInput
  219. {
  220. if(gMain.newKeys & R_BUTTON) // driver test
  221. {
  222. gTasks[taskId].func = sub_80BA800;
  223. return FALSE;
  224. }
  225. if(gMain.newKeys & L_BUTTON)
  226. {
  227. gTasks[taskId].func = sub_80BAF84;
  228. return FALSE;
  229. }
  230. if(gMain.newKeys & START_BUTTON)
  231. {
  232. gTasks[taskId].func = sub_80BB25C;
  233. return FALSE;
  234. }
  235. if(gMain.newKeys & A_BUTTON) // both these cases insist on non reuses of certain data variables and cause the function to not match.
  236. {
  237. if(gTasks[taskId].data[0] != 0) // is playing?
  238. {
  239. if(gTasks[taskId].data[4] != 0)
  240. {
  241. if(gTasks[taskId].data[2] != 0) // why are you insiting on a non signed halfword?
  242. {
  243. m4aSongNumStop(gTasks[taskId].data[4]);
  244. }
  245. else
  246. {
  247. m4aSongNumStop(gTasks[taskId].data[2]);
  248. gTasks[taskId].data[4] = gTasks[taskId].data[2];
  249. return FALSE;
  250. }
  251. }
  252. else if(gTasks[taskId].data[2] == 0) // _080BA4BA
  253. {
  254. return FALSE;
  255. }
  256. // _080BA4C4
  257. m4aSongNumStart(gTasks[taskId].data[2]);
  258. gTasks[taskId].data[4] = gTasks[taskId].data[2];
  259. return FALSE;
  260. }
  261. else // _080BA4D0
  262. {
  263. if(gTasks[taskId].data[3] != 0)
  264. {
  265. if(gTasks[taskId].data[1] != 0)
  266. {
  267. m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP);
  268. }
  269. else // _080BA500
  270. {
  271. m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP);
  272. gTasks[taskId].data[3] = gTasks[taskId].data[1];
  273. return FALSE;
  274. }
  275. }
  276. else if(gTasks[taskId].data[1] == 0) // _080BA514
  277. return FALSE;
  278.  
  279. m4aSongNumStart(gTasks[taskId].data[1] + BGM_STOP);
  280. gTasks[taskId].data[3] = gTasks[taskId].data[1];
  281. }
  282. return FALSE;
  283. }
  284. if(gMain.newKeys & B_BUTTON)
  285. {
  286. m4aSongNumStart(5);
  287. BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
  288. gTasks[taskId].func = sub_80BA68C;
  289. return FALSE;
  290. }
  291. if(gMain.newAndRepeatedKeys & DPAD_UP)
  292. {
  293. gTasks[taskId].data[8] ^= A_BUTTON; // huh?
  294. return TRUE;
  295. }
  296. if(gMain.newAndRepeatedKeys & DPAD_DOWN)
  297. {
  298. gTasks[taskId].data[8] ^= A_BUTTON; // huh?
  299. return TRUE;
  300. }
  301. else
  302. {
  303. u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT;
  304. if(keys)
  305. {
  306. if(gTasks[taskId].data[0] != 0)
  307. {
  308. if(gTasks[taskId].data[2] > 0)
  309. {
  310. gTasks[taskId].data[2]--;
  311. }
  312. else
  313. {
  314. gTasks[taskId].data[2] = 0xF7;
  315. }
  316. }
  317. else if(gTasks[taskId].data[1] > 0)
  318. {
  319. gTasks[taskId].data[1]--;
  320. }
  321. else
  322. {
  323. gTasks[taskId].data[1] = 0x75;
  324. }
  325. return TRUE;
  326. }
  327. if(gMain.newAndRepeatedKeys & DPAD_LEFT)
  328. {
  329. if(gTasks[taskId].data[0] != 0)
  330. {
  331. if(gTasks[taskId].data[2] < 0xF7)
  332. {
  333. gTasks[taskId].data[2]++;
  334. }
  335. else
  336. {
  337. gTasks[taskId].data[2] = keys; // ??
  338. }
  339. }
  340. else if(gTasks[taskId].data[1] < 0x75)
  341. {
  342. gTasks[taskId].data[1]++;
  343. return TRUE;
  344. }
  345. else
  346. {
  347. gTasks[taskId].data[1] = gTasks[taskId].data[2];
  348. return TRUE;
  349. }
  350. return TRUE;
  351. }
  352. if(gMain.heldKeys & SELECT_BUTTON)
  353. {
  354. gUnknown_020387B0 = A_BUTTON;
  355. return FALSE;
  356. }
  357. else
  358. {
  359. gUnknown_020387B0 = (gMain.heldKeys & SELECT_BUTTON);
  360. return FALSE;
  361. }
  362. }
  363. }
  364. #else
  365. __attribute__((naked))
  366. bool8 sub_80BA400(u8 taskId)
  367. {
  368. asm(".syntax unified\n\
  369. push {r4-r6,lr}\n\
  370. sub sp, 0x4\n\
  371. lsls r0, 24\n\
  372. lsrs r4, r0, 24\n\
  373. ldr r2, _080BA428 @ =gMain\n\
  374. ldrh r1, [r2, 0x2E]\n\
  375. movs r0, 0x80\n\
  376. lsls r0, 1\n\
  377. ands r0, r1\n\
  378. cmp r0, 0\n\
  379. beq _080BA434\n\
  380. ldr r0, _080BA42C @ =gTasks\n\
  381. lsls r1, r4, 2\n\
  382. adds r1, r4\n\
  383. lsls r1, 3\n\
  384. adds r1, r0\n\
  385. ldr r0, _080BA430 @ =sub_80BA800\n\
  386. str r0, [r1]\n\
  387. b _080BA64C\n\
  388. .align 2, 0\n\
  389. _080BA428: .4byte gMain\n\
  390. _080BA42C: .4byte gTasks\n\
  391. _080BA430: .4byte sub_80BA800\n\
  392. _080BA434:\n\
  393. movs r0, 0x80\n\
  394. lsls r0, 2\n\
  395. ands r0, r1\n\
  396. cmp r0, 0\n\
  397. beq _080BA458\n\
  398. ldr r0, _080BA450 @ =gTasks\n\
  399. lsls r1, r4, 2\n\
  400. adds r1, r4\n\
  401. lsls r1, 3\n\
  402. adds r1, r0\n\
  403. ldr r0, _080BA454 @ =sub_80BAF84\n\
  404. str r0, [r1]\n\
  405. b _080BA64C\n\
  406. .align 2, 0\n\
  407. _080BA450: .4byte gTasks\n\
  408. _080BA454: .4byte sub_80BAF84\n\
  409. _080BA458:\n\
  410. movs r0, 0x8\n\
  411. ands r0, r1\n\
  412. cmp r0, 0\n\
  413. beq _080BA478\n\
  414. ldr r0, _080BA470 @ =gTasks\n\
  415. lsls r1, r4, 2\n\
  416. adds r1, r4\n\
  417. lsls r1, 3\n\
  418. adds r1, r0\n\
  419. ldr r0, _080BA474 @ =sub_80BB25C\n\
  420. str r0, [r1]\n\
  421. b _080BA64C\n\
  422. .align 2, 0\n\
  423. _080BA470: .4byte gTasks\n\
  424. _080BA474: .4byte sub_80BB25C\n\
  425. _080BA478:\n\
  426. movs r6, 0x1\n\
  427. movs r5, 0x1\n\
  428. ands r5, r1\n\
  429. cmp r5, 0\n\
  430. beq _080BA538\n\
  431. ldr r0, _080BA4AC @ =gTasks\n\
  432. lsls r1, r4, 2\n\
  433. adds r1, r4\n\
  434. lsls r1, 3\n\
  435. adds r5, r1, r0\n\
  436. movs r1, 0x8\n\
  437. ldrsh r0, [r5, r1]\n\
  438. cmp r0, 0\n\
  439. beq _080BA4D0\n\
  440. movs r2, 0x10\n\
  441. ldrsh r0, [r5, r2]\n\
  442. cmp r0, 0\n\
  443. beq _080BA4BA\n\
  444. movs r3, 0xC\n\
  445. ldrsh r4, [r5, r3]\n\
  446. cmp r4, 0\n\
  447. beq _080BA4B0\n\
  448. ldrh r0, [r5, 0x10]\n\
  449. bl m4aSongNumStop\n\
  450. b _080BA4C4\n\
  451. .align 2, 0\n\
  452. _080BA4AC: .4byte gTasks\n\
  453. _080BA4B0:\n\
  454. ldrh r0, [r5, 0x10]\n\
  455. bl m4aSongNumStop\n\
  456. strh r4, [r5, 0x10]\n\
  457. b _080BA64C\n\
  458. _080BA4BA:\n\
  459. movs r4, 0xC\n\
  460. ldrsh r0, [r5, r4]\n\
  461. cmp r0, 0\n\
  462. bne _080BA4C4\n\
  463. b _080BA64C\n\
  464. _080BA4C4:\n\
  465. ldrh r0, [r5, 0xC]\n\
  466. bl m4aSongNumStart\n\
  467. ldrh r0, [r5, 0xC]\n\
  468. strh r0, [r5, 0x10]\n\
  469. b _080BA64C\n\
  470. _080BA4D0:\n\
  471. ldrh r1, [r5, 0xE]\n\
  472. movs r2, 0xE\n\
  473. ldrsh r0, [r5, r2]\n\
  474. cmp r0, 0\n\
  475. beq _080BA514\n\
  476. movs r3, 0xA\n\
  477. ldrsh r4, [r5, r3]\n\
  478. cmp r4, 0\n\
  479. beq _080BA500\n\
  480. ldr r0, _080BA4FC @ =0x0000015d\n\
  481. adds r4, r0, 0\n\
  482. adds r0, r1, r4\n\
  483. lsls r0, 16\n\
  484. lsrs r0, 16\n\
  485. bl m4aSongNumStop\n\
  486. ldrh r1, [r5, 0xA]\n\
  487. adds r4, r1\n\
  488. lsls r4, 16\n\
  489. lsrs r4, 16\n\
  490. adds r0, r4, 0\n\
  491. b _080BA528\n\
  492. .align 2, 0\n\
  493. _080BA4FC: .4byte 0x0000015d\n\
  494. _080BA500:\n\
  495. ldr r2, _080BA510 @ =0x0000015d\n\
  496. adds r0, r1, r2\n\
  497. lsls r0, 16\n\
  498. lsrs r0, 16\n\
  499. bl m4aSongNumStop\n\
  500. strh r4, [r5, 0xE]\n\
  501. b _080BA64C\n\
  502. .align 2, 0\n\
  503. _080BA510: .4byte 0x0000015d\n\
  504. _080BA514:\n\
  505. ldrh r1, [r5, 0xA]\n\
  506. movs r3, 0xA\n\
  507. ldrsh r0, [r5, r3]\n\
  508. cmp r0, 0\n\
  509. bne _080BA520\n\
  510. b _080BA64C\n\
  511. _080BA520:\n\
  512. ldr r4, _080BA534 @ =0x0000015d\n\
  513. adds r0, r1, r4\n\
  514. lsls r0, 16\n\
  515. lsrs r0, 16\n\
  516. _080BA528:\n\
  517. bl m4aSongNumStart\n\
  518. ldrh r0, [r5, 0xA]\n\
  519. strh r0, [r5, 0xE]\n\
  520. b _080BA64C\n\
  521. .align 2, 0\n\
  522. _080BA534: .4byte 0x0000015d\n\
  523. _080BA538:\n\
  524. movs r0, 0x2\n\
  525. ands r0, r1\n\
  526. cmp r0, 0\n\
  527. beq _080BA570\n\
  528. movs r0, 0x5\n\
  529. bl m4aSongNumStart\n\
  530. movs r0, 0x1\n\
  531. negs r0, r0\n\
  532. str r5, [sp]\n\
  533. movs r1, 0\n\
  534. movs r2, 0\n\
  535. movs r3, 0x10\n\
  536. bl BeginNormalPaletteFade\n\
  537. ldr r1, _080BA568 @ =gTasks\n\
  538. lsls r0, r4, 2\n\
  539. adds r0, r4\n\
  540. lsls r0, 3\n\
  541. adds r0, r1\n\
  542. ldr r1, _080BA56C @ =sub_80BA68C\n\
  543. str r1, [r0]\n\
  544. b _080BA64C\n\
  545. .align 2, 0\n\
  546. _080BA568: .4byte gTasks\n\
  547. _080BA56C: .4byte sub_80BA68C\n\
  548. _080BA570:\n\
  549. ldrh r1, [r2, 0x30]\n\
  550. movs r0, 0x40\n\
  551. ands r0, r1\n\
  552. cmp r0, 0\n\
  553. bne _080BA582\n\
  554. movs r0, 0x80\n\
  555. ands r0, r1\n\
  556. cmp r0, 0\n\
  557. beq _080BA59C\n\
  558. _080BA582:\n\
  559. ldr r0, _080BA598 @ =gTasks\n\
  560. lsls r1, r4, 2\n\
  561. adds r1, r4\n\
  562. lsls r1, 3\n\
  563. adds r1, r0\n\
  564. ldrh r0, [r1, 0x8]\n\
  565. eors r0, r6\n\
  566. strh r0, [r1, 0x8]\n\
  567. _080BA592:\n\
  568. movs r0, 0x1\n\
  569. b _080BA64E\n\
  570. .align 2, 0\n\
  571. _080BA598: .4byte gTasks\n\
  572. _080BA59C:\n\
  573. movs r0, 0x10\n\
  574. ands r0, r1\n\
  575. lsls r0, 16\n\
  576. lsrs r3, r0, 16\n\
  577. cmp r3, 0\n\
  578. beq _080BA5EA\n\
  579. ldr r0, _080BA5CC @ =gTasks\n\
  580. lsls r1, r4, 2\n\
  581. adds r1, r4\n\
  582. lsls r1, 3\n\
  583. adds r1, r0\n\
  584. movs r2, 0x8\n\
  585. ldrsh r0, [r1, r2]\n\
  586. cmp r0, 0\n\
  587. beq _080BA5D6\n\
  588. ldrh r2, [r1, 0xC]\n\
  589. movs r3, 0xC\n\
  590. ldrsh r0, [r1, r3]\n\
  591. cmp r0, 0\n\
  592. ble _080BA5D0\n\
  593. subs r0, r2, 0x1\n\
  594. strh r0, [r1, 0xC]\n\
  595. b _080BA592\n\
  596. .align 2, 0\n\
  597. _080BA5CC: .4byte gTasks\n\
  598. _080BA5D0:\n\
  599. movs r0, 0xF7\n\
  600. strh r0, [r1, 0xC]\n\
  601. b _080BA592\n\
  602. _080BA5D6:\n\
  603. ldrh r2, [r1, 0xA]\n\
  604. movs r4, 0xA\n\
  605. ldrsh r0, [r1, r4]\n\
  606. cmp r0, 0\n\
  607. ble _080BA5E4\n\
  608. subs r0, r2, 0x1\n\
  609. b _080BA5E6\n\
  610. _080BA5E4:\n\
  611. movs r0, 0x75\n\
  612. _080BA5E6:\n\
  613. strh r0, [r1, 0xA]\n\
  614. b _080BA592\n\
  615. _080BA5EA:\n\
  616. movs r0, 0x20\n\
  617. ands r0, r1\n\
  618. cmp r0, 0\n\
  619. beq _080BA630\n\
  620. ldr r1, _080BA614 @ =gTasks\n\
  621. lsls r0, r4, 2\n\
  622. adds r0, r4\n\
  623. lsls r0, 3\n\
  624. adds r1, r0, r1\n\
  625. movs r0, 0x8\n\
  626. ldrsh r2, [r1, r0]\n\
  627. cmp r2, 0\n\
  628. beq _080BA61C\n\
  629. ldrh r2, [r1, 0xC]\n\
  630. movs r4, 0xC\n\
  631. ldrsh r0, [r1, r4]\n\
  632. cmp r0, 0xF6\n\
  633. bgt _080BA618\n\
  634. adds r0, r2, 0x1\n\
  635. strh r0, [r1, 0xC]\n\
  636. b _080BA592\n\
  637. .align 2, 0\n\
  638. _080BA614: .4byte gTasks\n\
  639. _080BA618:\n\
  640. strh r3, [r1, 0xC]\n\
  641. b _080BA592\n\
  642. _080BA61C:\n\
  643. ldrh r3, [r1, 0xA]\n\
  644. movs r4, 0xA\n\
  645. ldrsh r0, [r1, r4]\n\
  646. cmp r0, 0x74\n\
  647. bgt _080BA62C\n\
  648. adds r0, r3, 0x1\n\
  649. strh r0, [r1, 0xA]\n\
  650. b _080BA592\n\
  651. _080BA62C:\n\
  652. strh r2, [r1, 0xA]\n\
  653. b _080BA592\n\
  654. _080BA630:\n\
  655. ldrh r1, [r2, 0x2C]\n\
  656. movs r0, 0x4\n\
  657. ands r0, r1\n\
  658. lsls r0, 16\n\
  659. lsrs r1, r0, 16\n\
  660. cmp r1, 0\n\
  661. beq _080BA648\n\
  662. ldr r0, _080BA644 @ =gUnknown_020387B0\n\
  663. strb r6, [r0]\n\
  664. b _080BA64C\n\
  665. .align 2, 0\n\
  666. _080BA644: .4byte gUnknown_020387B0\n\
  667. _080BA648:\n\
  668. ldr r0, _080BA658 @ =gUnknown_020387B0\n\
  669. strb r1, [r0]\n\
  670. _080BA64C:\n\
  671. movs r0, 0\n\
  672. _080BA64E:\n\
  673. add sp, 0x4\n\
  674. pop {r4-r6}\n\
  675. pop {r1}\n\
  676. bx r1\n\
  677. .align 2, 0\n\
  678. _080BA658: .4byte gUnknown_020387B0\n\
  679. .syntax divided");
  680. }
  681. #endif
  682.  
  683. void sub_80BA65C(u8 taskId)
  684. {
  685. if(sub_80BA400(taskId) != FALSE)
  686. gTasks[taskId].func = sub_80BA384;
  687. }
  688.  
  689. void sub_80BA68C(u8 taskId)
  690. {
  691. if(!gPaletteFade.active)
  692. {
  693. DestroyTask(taskId);
  694. SetMainCallback2(CB2_InitTitleScreen);
  695. }
  696. }
  697.  
  698. void sub_80BA6B8(u8 windowType)
  699. {
  700. switch(windowType)
  701. {
  702. case BGM_WINDOW:
  703. default:
  704. REG_WIN1H = 0x11DF;
  705. REG_WIN1V = 0x2957;
  706. break;
  707. case SE_WINDOW:
  708. REG_WIN1H = 0x11DF;
  709. REG_WIN1V = 0x618F;
  710. break;
  711. }
  712. }
  713.  
  714. void sub_80BA700(u16 soundIndex, u16 x, u16 y) // PrintSoundNumber ?
  715. {
  716. u8 i;
  717. u8 str[5];
  718. bool8 someBool;
  719. u8 divisorValue;
  720.  
  721. for(i = 0; i < 3; i++)
  722. str[i] = 0; // initialize array
  723.  
  724. str[3] = 0xB0;
  725. str[4] = 0xFF;
  726. someBool = FALSE;
  727.  
  728. divisorValue = soundIndex / 100;
  729. if(divisorValue)
  730. {
  731. str[0] = divisorValue + 0xA1;
  732. someBool = TRUE;
  733. }
  734.  
  735. divisorValue = (soundIndex % 100) / 10;
  736. if(divisorValue || someBool != FALSE)
  737. str[1] = divisorValue + 0xA1;
  738.  
  739. str[2] = ((soundIndex % 100) % 10) + 0xA1;
  740. MenuPrint(str, x, y);
  741. }
  742.  
  743. void sub_80BA79C(u8 *string, u16 x, u16 y)
  744. {
  745. u8 i;
  746. u8 str[11];
  747.  
  748. for(i = 0; i < 11; i++)
  749. str[i] = 0; // format string.
  750.  
  751. str[10] = 0xFF; // the above for loop formats the last element of the array unnecessarily.
  752.  
  753. for(i = 0; string[i] != 0xFF && i < 10; i++)
  754. str[i] = string[i];
  755.  
  756. MenuPrint(str, x, y);
  757. }
  758.  
  759. void sub_80BA800(u8 taskId) // Task_DrawDriverTestMenu
  760. {
  761. u8 bbackStr[10];
  762. u8 aplayStr[11];
  763. u8 voiceStr[10];
  764. u8 volumeStr[10];
  765. u8 panpotStr[10];
  766. u8 pitchStr[10];
  767. u8 lengthStr[10];
  768. u8 releaseStr[10];
  769. u8 progressStr[10];
  770. u8 chorusStr[10];
  771. u8 priorityStr[10];
  772. u8 playingStr[9];
  773. u8 reverseStr[9];
  774. u8 stereoStr[9];
  775.  
  776. memcpy(bbackStr, gDebugText_BBack, sizeof bbackStr);
  777. memcpy(aplayStr, gDebugText_APlay, sizeof aplayStr);
  778. memcpy(voiceStr, gDebugText_Voice, sizeof voiceStr);
  779. memcpy(volumeStr, gDebugText_Volume, sizeof volumeStr);
  780. memcpy(panpotStr, gDebugText_Panpot, sizeof panpotStr);
  781. memcpy(pitchStr, gDebugText_Pitch, sizeof pitchStr);
  782. memcpy(lengthStr, gDebugText_Length, sizeof lengthStr);
  783. memcpy(releaseStr, gDebugText_Release, sizeof releaseStr);
  784. memcpy(progressStr, gDebugText_Progress, sizeof progressStr);
  785. memcpy(chorusStr, gDebugText_Chorus, sizeof chorusStr);
  786. memcpy(priorityStr, gDebugText_Priority, sizeof priorityStr);
  787. memcpy(playingStr, gDebugText_Playing, sizeof playingStr);
  788. memcpy(reverseStr, gDebugText_Reverse, sizeof reverseStr);
  789. memcpy(stereoStr, gDebugText_Stereo, sizeof stereoStr);
  790.  
  791. REG_DISPCNT = 0x3140;
  792. MenuDrawTextWindow(0, 0, 0x1D, 0x13);
  793. MenuPrint(bbackStr, 0x13, 0x4);
  794. MenuPrint(aplayStr, 0x13, 0x2);
  795. MenuPrint(voiceStr, 0x2, 0x1);
  796. MenuPrint(volumeStr, 0x2, 0x3);
  797. MenuPrint(panpotStr, 0x2, 0x5);
  798. MenuPrint(pitchStr, 0x2, 0x7);
  799. MenuPrint(lengthStr, 0x2, 0x9);
  800. MenuPrint(releaseStr, 0x2, 0xB);
  801. MenuPrint(progressStr, 0x2, 0xD);
  802. MenuPrint(chorusStr, 0x2, 0xF);
  803. MenuPrint(priorityStr, 0x2, 0x11);
  804. MenuPrint(playingStr, 0x13, 0x10);
  805. MenuPrint(reverseStr, 0x13, 0xE);
  806. MenuPrint(stereoStr, 0x13, 0xC);
  807. REG_WIN0H = 0xF0;
  808. REG_WIN0V = 0xA0;
  809. gUnknown_020387B3 = 0;
  810. gUnknown_020387B1 = 0;
  811. gUnknown_020387B2 = 0;
  812. gUnknown_03005D30 = NULL;
  813. gUnknown_020387D8 = 0;
  814. gUnknown_020387D9 = 1;
  815. gUnknown_020387B4[0] = 0;
  816. gUnknown_020387B4[1] = 0x78;
  817. gUnknown_020387B4[2] = 0;
  818. gUnknown_020387B4[3] = 0x3C00;
  819. gUnknown_020387B4[4] = 0xB4;
  820. gUnknown_020387B4[6] = 0;
  821. gUnknown_020387B4[5] = 0;
  822. gUnknown_020387B4[7] = 0;
  823. gUnknown_020387B4[8] = 2;
  824. sub_80BAD5C();
  825. sub_80BAE10(0, 0);
  826. gTasks[taskId].func = sub_80BAA48;
  827. }
  828.  
  829. void sub_80BAA48(u8 taskId) // Task_ProcessDriverTestInput
  830. {
  831. if(gMain.newKeys & 0x2)
  832. {
  833. REG_DISPCNT = 0x7140;
  834. REG_WIN0H = 0x11DF;
  835. REG_WIN0V = 0x11F;
  836. MenuZeroFillWindowRect(0, 0, 0x1D, 0x13);
  837. gTasks[taskId].func = sub_80BA258;
  838. return;
  839. }
  840. if(gMain.newAndRepeatedKeys & 0x40) // _080BAAA8
  841. {
  842. u8 backupVar = gUnknown_020387B3;
  843. if(--gUnknown_020387B3 < 0)
  844. gUnknown_020387B3 = 8;
  845.  
  846. sub_80BAE10(backupVar, gUnknown_020387B3);
  847. return;
  848. }
  849. if(gMain.newAndRepeatedKeys & 0x80) // _080BAAD0
  850. {
  851. u8 backupVar = gUnknown_020387B3;
  852. if(++gUnknown_020387B3 > 8)
  853. gUnknown_020387B3 = 0;
  854.  
  855. sub_80BAE10(backupVar, gUnknown_020387B3);
  856. return;
  857. }
  858. if(gMain.newKeys & 0x8) // _080BAAF8
  859. {
  860. gUnknown_020387D8 ^= 1;
  861. sub_80BAD5C();
  862. return;
  863. }
  864. if(gMain.newKeys & 0x4) // _080BAB14
  865. {
  866. gUnknown_020387D9 ^= 1;
  867. sub_80BAD5C();
  868. SetPokemonCryStereo(gUnknown_020387D9);
  869. return;
  870. }
  871. if(gMain.newAndRepeatedKeys & 0x100) // _080BAB38
  872. {
  873. sub_80BACDC(10);
  874. sub_80BAD5C();
  875. return;
  876. }
  877. if(gMain.newAndRepeatedKeys & 0x200) // _080BAB46
  878. {
  879. sub_80BACDC(-10);
  880. sub_80BAD5C();
  881. return;
  882. }
  883. if(gMain.newAndRepeatedKeys & 0x20) // _080BAB56
  884. {
  885. sub_80BACDC(-1);
  886. sub_80BAD5C();
  887. return;
  888. }
  889. if(gMain.newAndRepeatedKeys & 0x10) // _080BAB64
  890. {
  891. sub_80BACDC(1);
  892. sub_80BAD5C();
  893. return;
  894. }
  895. if(gMain.newKeys & 0x1) // _080BAB78
  896. {
  897. u8 divide, remaining;
  898.  
  899. SetPokemonCryVolume(gUnknown_020387B4[1]);
  900. SetPokemonCryPanpot(gUnknown_020387B4[2]);
  901. SetPokemonCryPitch(gUnknown_020387B4[3]);
  902. SetPokemonCryLength(gUnknown_020387B4[4]);
  903. SetPokemonCryProgress(gUnknown_020387B4[6]);
  904. SetPokemonCryRelease(gUnknown_020387B4[5]);
  905. SetPokemonCryChorus(gUnknown_020387B4[7]);
  906. SetPokemonCryPriority(gUnknown_020387B4[8]);
  907.  
  908. remaining = gUnknown_020387B4[0] % 128;
  909. divide = gUnknown_020387B4[0] / 128;
  910.  
  911. switch(divide)
  912. {
  913. case 0:
  914. if(gUnknown_020387D8)
  915. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84537C0[remaining]);
  916. else
  917. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452590[remaining]);
  918. break;
  919. case 1:
  920. if(gUnknown_020387D8)
  921. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453DC0[remaining]);
  922. else
  923. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8452B90[remaining]);
  924. break;
  925. case 2:
  926. if(gUnknown_020387D8)
  927. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84543C0[remaining]);
  928. else
  929. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453190[remaining]);
  930. break;
  931. case 3:
  932. if(gUnknown_020387D8)
  933. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_84549C0[remaining]);
  934. else
  935. gUnknown_03005D30 = SetPokemonCryTone(&voicegroup_8453790[remaining]);
  936. break;
  937. }
  938. }
  939.  
  940. // _080BACA2
  941. if(gUnknown_03005D30 != NULL)
  942. {
  943. gUnknown_020387B1 = IsPokemonCryPlaying(gUnknown_03005D30);
  944.  
  945. if(gUnknown_020387B1 != gUnknown_020387B2)
  946. sub_80BAD5C();
  947.  
  948. gUnknown_020387B2 = gUnknown_020387B1;
  949. }
  950. }
  951.  
  952. enum
  953. {
  954. MIN,
  955. MAX
  956. };
  957.  
  958. extern s16 gUnknown_083D039C[32];
  959.  
  960. void sub_80BACDC(s8 var)
  961. {
  962. s16 copyArray[32];
  963.  
  964. memcpy(copyArray, gUnknown_083D039C, sizeof copyArray);
  965. gUnknown_020387B4[gUnknown_020387B3] += var;
  966.  
  967. if(gUnknown_020387B4[gUnknown_020387B3] > copyArray[1 + (gUnknown_020387B3 * 2)])
  968. gUnknown_020387B4[gUnknown_020387B3] = copyArray[(gUnknown_020387B3 * 2)];
  969.  
  970. if(gUnknown_020387B4[gUnknown_020387B3] < copyArray[(gUnknown_020387B3 * 2)])
  971. gUnknown_020387B4[gUnknown_020387B3] = copyArray[1 + (gUnknown_020387B3 * 2)];
  972. }
  973.  
  974. /*
  975. thumb_func_start sub_80BACDC
  976. sub_80BACDC: @ 80BACDC
  977. push {r4-r6,lr}
  978. sub sp, 0x40
  979. adds r4, r0, 0
  980. lsls r4, 24
  981. lsrs r4, 24
  982. ldr r1, _080BAD50 @ =gUnknown_083D039C
  983. mov r0, sp
  984. movs r2, 0x40
  985. bl memcpy
  986. ldr r6, _080BAD54 @ =gUnknown_020387B4
  987. ldr r5, _080BAD58 @ =gUnknown_020387B3
  988. movs r1, 0
  989. ldrsb r1, [r5, r1]
  990. lsls r1, 2
  991. adds r1, r6
  992. lsls r4, 24
  993. asrs r4, 24
  994. ldr r0, [r1]
  995. adds r0, r4
  996. str r0, [r1]
  997. movs r2, 0
  998. ldrsb r2, [r5, r2]
  999. lsls r0, r2, 2
  1000. adds r3, r0, r6
  1001. lsls r0, r2, 1
  1002. adds r0, 0x1
  1003. lsls r0, 2
  1004. add r0, sp
  1005. ldr r1, [r3]
  1006. ldr r0, [r0]
  1007. cmp r1, r0
  1008. ble _080BAD26
  1009. lsls r0, r2, 3
  1010. add r0, sp
  1011. ldr r0, [r0]
  1012. str r0, [r3]
  1013. _080BAD26:
  1014. movs r2, 0
  1015. ldrsb r2, [r5, r2]
  1016. lsls r0, r2, 2
  1017. adds r3, r0, r6
  1018. lsls r0, r2, 3
  1019. add r0, sp
  1020. ldr r1, [r3]
  1021. ldr r0, [r0]
  1022. cmp r1, r0
  1023. bge _080BAD46
  1024. lsls r0, r2, 1
  1025. adds r0, 0x1
  1026. lsls r0, 2
  1027. add r0, sp
  1028. ldr r0, [r0]
  1029. str r0, [r3]
  1030. _080BAD46:
  1031. add sp, 0x40
  1032. pop {r4-r6}
  1033. pop {r0}
  1034. bx r0
  1035. .align 2, 0
  1036. _080BAD50: .4byte gUnknown_083D039C
  1037. _080BAD54: .4byte gUnknown_020387B4
  1038. _080BAD58: .4byte gUnknown_020387B3
  1039. thumb_func_end sub_80BACDC
  1040. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement