Advertisement
EliteAnax17

sound_check_menu.c

Jun 25th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.04 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.  
  11. // local task defines
  12. #define UNK_DATA0 data[0]
  13. #define BGM_INDEX data[1]
  14. #define SE_INDEX data[2]
  15. #define UNK_DATA3 data[3]
  16.  
  17. extern void sub_80BA6B8(u8);
  18. extern void sub_80BA700(u16, u8, u8);
  19. extern void sub_80BA79C(u8 *, u8, u8);
  20. extern void sub_80BA65C(u8);
  21.  
  22. extern u8 gUnknown_020387B0;
  23.  
  24. extern u8 *gBGMNames[];
  25. extern u8 *gSENames[];
  26.  
  27. extern u8 gDebugText_SoundCheckJap[];
  28. extern u8 gDebugText_BGM[];
  29. extern u8 gDebugText_SE[];
  30. extern u8 gDebugText_ABDesc[];
  31. extern u8 gDebugText_UpDown[];
  32. extern u8 gDebugText_DriverTest[];
  33.  
  34. void sub_80BA258(u8);
  35. void sub_80BA384(u8);
  36.  
  37. void sub_80BA0A8(void)
  38. {
  39. RunTasks();
  40. AnimateSprites();
  41. BuildOamBuffer();
  42. UpdatePaletteFade();
  43. }
  44.  
  45. void sub_80BA0C0(void)
  46. {
  47. LoadOam();
  48. ProcessSpriteCopyRequests();
  49. TransferPlttBuffer();
  50.  
  51. if(gUnknown_020387B0 != 0)
  52. {
  53. m4aSoundMain();
  54. m4aSoundMain();
  55. m4aSoundMain();
  56. }
  57. }
  58.  
  59. // unused
  60. void CB2_StartSoundCheckMenu(void)
  61. {
  62. u8 taskId;
  63.  
  64. SetVBlankCallback(NULL);
  65. REG_DISPCNT = 0;
  66. REG_BG2CNT = 0;
  67. REG_BG1CNT = 0;
  68. REG_BG0CNT = 0;
  69. REG_BG2HOFS = 0;
  70. REG_BG2VOFS = 0;
  71. REG_BG1HOFS = 0;
  72. REG_BG1VOFS = 0;
  73. REG_BG0HOFS = 0;
  74. REG_BG0VOFS = 0;
  75. DmaFill16(3, 0, VRAM, VRAM_SIZE);
  76. DmaFill32(3, 0, OAM, OAM_SIZE);
  77. DmaFill16(3, 0, PLTT, PLTT_SIZE);
  78. ResetPaletteFade();
  79. ResetTasks();
  80. ResetSpriteData();
  81. SetUpWindowConfig(&gWindowConfig_81E6C3C);
  82. InitMenuWindow(&gWindowConfig_81E6CE4);
  83. BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
  84. REG_WIN0H = 0;
  85. REG_WIN0V = 0;
  86. REG_WIN1H = 0;
  87. REG_WIN1V = 0;
  88. REG_WININ = 0x1111;
  89. REG_WINOUT = 0x31;
  90. REG_BLDCNT = 0xE1;
  91. REG_BLDALPHA = 0;
  92. REG_BLDY = 7;
  93. REG_IE = 1; // could be a typo of REG_IME
  94. REG_IE |= 1;
  95. REG_DISPSTAT |= 8;
  96. SetVBlankCallback(sub_80BA0C0);
  97. SetMainCallback2(sub_80BA0A8);
  98. REG_DISPCNT = 0x7140;
  99. taskId = CreateTask(sub_80BA258, 0);
  100. TASK.UNK_DATA0 = 0;
  101. TASK.BGM_INDEX = 0;
  102. TASK.SE_INDEX = 0;
  103. TASK.UNK_DATA3 = 0;
  104. gUnknown_020387B0 = 0;
  105. TASK.UNK_DATA3 = 0; // why?
  106. m4aSoundInit();
  107. }
  108.  
  109. // Task_InitSoundCheckMenu
  110. void sub_80BA258(u8 taskId)
  111. {
  112. u8 soundcheckStr[9];
  113. u8 bgmStr[4];
  114. u8 seStr[4];
  115. u8 abDescStr[13];
  116. u8 upDownStr[12];
  117. u8 driverStr[14];
  118.  
  119. // these probably used size of the strings themselves, but they are not in the C file yet.
  120. memcpy(soundcheckStr, gDebugText_SoundCheckJap, sizeof soundcheckStr);
  121. memcpy(bgmStr, gDebugText_BGM, sizeof bgmStr);
  122. memcpy(seStr, gDebugText_SE, sizeof seStr);
  123. memcpy(abDescStr, gDebugText_ABDesc, sizeof abDescStr);
  124. memcpy(upDownStr, gDebugText_UpDown, sizeof upDownStr);
  125. memcpy(driverStr, gDebugText_DriverTest, sizeof driverStr);
  126.  
  127. if(!gPaletteFade.active)
  128. {
  129. MenuDrawTextWindow(0x2, 0, 0x1B, 0x3);
  130. MenuDrawTextWindow(0x2, 0x5, 0x1B, 0xA);
  131. MenuDrawTextWindow(0x2, 0xC, 0x1B, 0x11);
  132. MenuPrint(soundcheckStr, 4, 1);
  133. MenuPrint(abDescStr, 14, 1);
  134. MenuPrint(bgmStr, 4, 6);
  135. MenuPrint(upDownStr, 14, 6);
  136. MenuPrint(seStr, 4, 13);
  137. MenuPrint(upDownStr, 14, 13);
  138. MenuPrint(driverStr, 14, 18);
  139. TASK.FUNC = sub_80BA384;
  140. REG_WIN0H = 0x11DF;
  141. REG_WIN0V = 0x11F;
  142. }
  143. }
  144.  
  145. void sub_80BA384(u8 taskId)
  146. {
  147. sub_80BA6B8(TASK.UNK_DATA0);
  148. sub_80BA700(TASK.BGM_INDEX + BGM_STOP, 7, 8); // print by BGM index
  149. sub_80BA79C(gBGMNames[TASK.BGM_INDEX], 11, 8);
  150. sub_80BA700(TASK.SE_INDEX, 7, 15);
  151. sub_80BA79C(gSENames[TASK.SE_INDEX], 11, 15);
  152. TASK.FUNC = sub_80BA65C;
  153. }
  154.  
  155. extern void sub_80BA800(u8);
  156. extern void sub_80BAF84(u8);
  157. extern void sub_80BB25C(u8);
  158. extern void sub_80BA68C(u8);
  159.  
  160. // Task_ProcessSoundCheckMenuInput
  161. bool8 sub_80BA400(u8 taskId)
  162. {
  163. if(gMain.newKeys & R_BUTTON) // driver test
  164. {
  165. gTasks[taskId].func = sub_80BA800;
  166. return FALSE;
  167. }
  168. if(gMain.newKeys & L_BUTTON)
  169. {
  170. gTasks[taskId].func = sub_80BAF84;
  171. return FALSE;
  172. }
  173. if(gMain.newKeys & START_BUTTON)
  174. {
  175. gTasks[taskId].func = sub_80BB25C;
  176. return FALSE;
  177. }
  178. if(gMain.newKeys & A_BUTTON)
  179. {
  180. if(gTasks[taskId].data[0] != 0) // is playing?
  181. {
  182. if(gTasks[taskId].data[4] != 0)
  183. {
  184. s16 data2 = gTasks[taskId].data[2];
  185. if(data2 != 0) // why are you insiting on a non signed halfword?
  186. {
  187. m4aSongNumStop(gTasks[taskId].data[4]);
  188. m4aSongNumStart(gTasks[taskId].data[2]);
  189. gTasks[taskId].data[4] = data2;
  190. }
  191. else
  192. {
  193. m4aSongNumStop(gTasks[taskId].data[4]);
  194. gTasks[taskId].data[4] = data2;
  195. }
  196. }
  197. else if(gTasks[taskId].data[2] != 0) // _080BA4BA
  198. {
  199. m4aSongNumStart(gTasks[taskId].data[2]);
  200. gTasks[taskId].data[4] = gTasks[taskId].data[2];
  201. }
  202. }
  203. else // _080BA4D0
  204. {
  205. if(gTasks[taskId].data[3] != 0) // why not use data3?
  206. {
  207. if(gTasks[taskId].data[1] != 0)
  208. {
  209. m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP);
  210. m4aSongNumStart(gTasks[taskId].data[1] + BGM_STOP);
  211. gTasks[taskId].data[3] = gTasks[taskId].data[1];
  212. }
  213. else // _080BA500
  214. {
  215. m4aSongNumStop(gTasks[taskId].data[3] + BGM_STOP);
  216. gTasks[taskId].data[3] = gTasks[taskId].data[1];
  217. }
  218. }
  219. else if(gTasks[taskId].data[1] != 0) // _080BA514
  220. {
  221. m4aSongNumStart(gTasks[taskId].data[1] + BGM_STOP);
  222. gTasks[taskId].data[3] = gTasks[taskId].data[1];
  223. }
  224. }
  225. return FALSE;
  226. }
  227. if(gMain.newKeys & B_BUTTON)
  228. {
  229. m4aSongNumStart(5);
  230. BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
  231. gTasks[taskId].func = sub_80BA68C;
  232. return FALSE;
  233. }
  234. if(gMain.newAndRepeatedKeys & DPAD_UP)
  235. {
  236. gTasks[taskId].data[8] ^= A_BUTTON; // huh?
  237. return TRUE;
  238. }
  239. if(gMain.newAndRepeatedKeys & DPAD_DOWN)
  240. {
  241. gTasks[taskId].data[8] ^= A_BUTTON; // huh?
  242. return TRUE;
  243. }
  244. else
  245. {
  246. u16 keys = gMain.newAndRepeatedKeys & DPAD_RIGHT;
  247. if(keys)
  248. {
  249. if(gTasks[taskId].data[0] != 0)
  250. {
  251. if(gTasks[taskId].data[2] > 0)
  252. {
  253. gTasks[taskId].data[2]--;
  254. }
  255. else
  256. {
  257. gTasks[taskId].data[2] = 0xF7;
  258. }
  259. }
  260. else if(gTasks[taskId].data[1] > 0)
  261. {
  262. gTasks[taskId].data[1]--;
  263. }
  264. else
  265. {
  266. gTasks[taskId].data[1] = 0x75;
  267. }
  268. return TRUE;
  269. }
  270. if(gMain.newAndRepeatedKeys & DPAD_LEFT)
  271. {
  272. if(gTasks[taskId].data[0] != 0)
  273. {
  274. if(gTasks[taskId].data[2] < 0xF7)
  275. {
  276. gTasks[taskId].data[2]++;
  277. }
  278. else
  279. {
  280. gTasks[taskId].data[2] = keys; // ??
  281. }
  282. }
  283. else if(gTasks[taskId].data[1] < 0x75)
  284. {
  285. gTasks[taskId].data[1]++;
  286. }
  287. else
  288. {
  289. gTasks[taskId].data[1] = gTasks[taskId].data[0];
  290. }
  291. return TRUE;
  292. }
  293. if(gMain.heldKeys & SELECT_BUTTON)
  294. {
  295. gUnknown_020387B0 = A_BUTTON;
  296. return FALSE;
  297. }
  298. else
  299. {
  300. gUnknown_020387B0 = (gMain.heldKeys & SELECT_BUTTON);
  301. return FALSE;
  302. }
  303. }
  304. }
  305.  
  306. /*
  307. thumb_func_start sub_80BA400
  308. sub_80BA400: @ 80BA400
  309. push {r4-r6,lr}
  310. sub sp, 0x4
  311. lsls r0, 24
  312. lsrs r4, r0, 24
  313. ldr r2, _080BA428 @ =gMain
  314. ldrh r1, [r2, 0x2E]
  315. movs r0, 0x80
  316. lsls r0, 1
  317. ands r0, r1
  318. cmp r0, 0
  319. beq _080BA434
  320. ldr r0, _080BA42C @ =gTasks
  321. lsls r1, r4, 2
  322. adds r1, r4
  323. lsls r1, 3
  324. adds r1, r0
  325. ldr r0, _080BA430 @ =sub_80BA800
  326. str r0, [r1]
  327. b _080BA64C
  328. .align 2, 0
  329. _080BA428: .4byte gMain
  330. _080BA42C: .4byte gTasks
  331. _080BA430: .4byte sub_80BA800
  332. _080BA434:
  333. movs r0, 0x80
  334. lsls r0, 2
  335. ands r0, r1
  336. cmp r0, 0
  337. beq _080BA458
  338. ldr r0, _080BA450 @ =gTasks
  339. lsls r1, r4, 2
  340. adds r1, r4
  341. lsls r1, 3
  342. adds r1, r0
  343. ldr r0, _080BA454 @ =sub_80BAF84
  344. str r0, [r1]
  345. b _080BA64C
  346. .align 2, 0
  347. _080BA450: .4byte gTasks
  348. _080BA454: .4byte sub_80BAF84
  349. _080BA458:
  350. movs r0, 0x8
  351. ands r0, r1
  352. cmp r0, 0
  353. beq _080BA478
  354. ldr r0, _080BA470 @ =gTasks
  355. lsls r1, r4, 2
  356. adds r1, r4
  357. lsls r1, 3
  358. adds r1, r0
  359. ldr r0, _080BA474 @ =sub_80BB25C
  360. str r0, [r1]
  361. b _080BA64C
  362. .align 2, 0
  363. _080BA470: .4byte gTasks
  364. _080BA474: .4byte sub_80BB25C
  365. _080BA478:
  366. movs r6, 0x1
  367. movs r5, 0x1
  368. ands r5, r1
  369. cmp r5, 0
  370. beq _080BA538
  371. ldr r0, _080BA4AC @ =gTasks
  372. lsls r1, r4, 2
  373. adds r1, r4
  374. lsls r1, 3
  375. adds r5, r1, r0
  376. movs r1, 0x8
  377. ldrsh r0, [r5, r1]
  378. cmp r0, 0
  379. beq _080BA4D0
  380. movs r2, 0x10
  381. ldrsh r0, [r5, r2]
  382. cmp r0, 0
  383. beq _080BA4BA
  384. movs r3, 0xC
  385. ldrsh r4, [r5, r3]
  386. cmp r4, 0
  387. beq _080BA4B0
  388. ldrh r0, [r5, 0x10]
  389. bl m4aSongNumStop
  390. b _080BA4C4
  391. .align 2, 0
  392. _080BA4AC: .4byte gTasks
  393. _080BA4B0:
  394. ldrh r0, [r5, 0x10]
  395. bl m4aSongNumStop
  396. strh r4, [r5, 0x10]
  397. b _080BA64C
  398. _080BA4BA:
  399. movs r4, 0xC
  400. ldrsh r0, [r5, r4]
  401. cmp r0, 0
  402. bne _080BA4C4
  403. b _080BA64C
  404. _080BA4C4:
  405. ldrh r0, [r5, 0xC]
  406. bl m4aSongNumStart
  407. ldrh r0, [r5, 0xC]
  408. strh r0, [r5, 0x10]
  409. b _080BA64C
  410. _080BA4D0:
  411. ldrh r1, [r5, 0xE]
  412. movs r2, 0xE
  413. ldrsh r0, [r5, r2]
  414. cmp r0, 0
  415. beq _080BA514
  416. movs r3, 0xA
  417. ldrsh r4, [r5, r3]
  418. cmp r4, 0
  419. beq _080BA500
  420. ldr r0, _080BA4FC @ =0x0000015d
  421. adds r4, r0, 0
  422. adds r0, r1, r4
  423. lsls r0, 16
  424. lsrs r0, 16
  425. bl m4aSongNumStop
  426. ldrh r1, [r5, 0xA]
  427. adds r4, r1
  428. lsls r4, 16
  429. lsrs r4, 16
  430. adds r0, r4, 0
  431. b _080BA528
  432. .align 2, 0
  433. _080BA4FC: .4byte 0x0000015d
  434. _080BA500:
  435. ldr r2, _080BA510 @ =0x0000015d
  436. adds r0, r1, r2
  437. lsls r0, 16
  438. lsrs r0, 16
  439. bl m4aSongNumStop
  440. strh r4, [r5, 0xE]
  441. b _080BA64C
  442. .align 2, 0
  443. _080BA510: .4byte 0x0000015d
  444. _080BA514:
  445. ldrh r1, [r5, 0xA]
  446. movs r3, 0xA
  447. ldrsh r0, [r5, r3]
  448. cmp r0, 0
  449. bne _080BA520
  450. b _080BA64C
  451. _080BA520:
  452. ldr r4, _080BA534 @ =0x0000015d
  453. adds r0, r1, r4
  454. lsls r0, 16
  455. lsrs r0, 16
  456. _080BA528:
  457. bl m4aSongNumStart
  458. ldrh r0, [r5, 0xA]
  459. strh r0, [r5, 0xE]
  460. b _080BA64C
  461. .align 2, 0
  462. _080BA534: .4byte 0x0000015d
  463. _080BA538:
  464. movs r0, 0x2
  465. ands r0, r1
  466. cmp r0, 0
  467. beq _080BA570
  468. movs r0, 0x5
  469. bl m4aSongNumStart
  470. movs r0, 0x1
  471. negs r0, r0
  472. str r5, [sp]
  473. movs r1, 0
  474. movs r2, 0
  475. movs r3, 0x10
  476. bl BeginNormalPaletteFade
  477. ldr r1, _080BA568 @ =gTasks
  478. lsls r0, r4, 2
  479. adds r0, r4
  480. lsls r0, 3
  481. adds r0, r1
  482. ldr r1, _080BA56C @ =sub_80BA68C
  483. str r1, [r0]
  484. b _080BA64C
  485. .align 2, 0
  486. _080BA568: .4byte gTasks
  487. _080BA56C: .4byte sub_80BA68C
  488. _080BA570:
  489. ldrh r1, [r2, 0x30]
  490. movs r0, 0x40
  491. ands r0, r1
  492. cmp r0, 0
  493. bne _080BA582
  494. movs r0, 0x80
  495. ands r0, r1
  496. cmp r0, 0
  497. beq _080BA59C
  498. _080BA582:
  499. ldr r0, _080BA598 @ =gTasks
  500. lsls r1, r4, 2
  501. adds r1, r4
  502. lsls r1, 3
  503. adds r1, r0
  504. ldrh r0, [r1, 0x8]
  505. eors r0, r6
  506. strh r0, [r1, 0x8]
  507. _080BA592:
  508. movs r0, 0x1
  509. b _080BA64E
  510. .align 2, 0
  511. _080BA598: .4byte gTasks
  512. _080BA59C:
  513. movs r0, 0x10
  514. ands r0, r1
  515. lsls r0, 16
  516. lsrs r3, r0, 16
  517. cmp r3, 0
  518. beq _080BA5EA
  519. ldr r0, _080BA5CC @ =gTasks
  520. lsls r1, r4, 2
  521. adds r1, r4
  522. lsls r1, 3
  523. adds r1, r0
  524. movs r2, 0x8
  525. ldrsh r0, [r1, r2]
  526. cmp r0, 0
  527. beq _080BA5D6
  528. ldrh r2, [r1, 0xC]
  529. movs r3, 0xC
  530. ldrsh r0, [r1, r3]
  531. cmp r0, 0
  532. ble _080BA5D0
  533. subs r0, r2, 0x1
  534. strh r0, [r1, 0xC]
  535. b _080BA592
  536. .align 2, 0
  537. _080BA5CC: .4byte gTasks
  538. _080BA5D0:
  539. movs r0, 0xF7
  540. strh r0, [r1, 0xC]
  541. b _080BA592
  542. _080BA5D6:
  543. ldrh r2, [r1, 0xA]
  544. movs r4, 0xA
  545. ldrsh r0, [r1, r4]
  546. cmp r0, 0
  547. ble _080BA5E4
  548. subs r0, r2, 0x1
  549. b _080BA5E6
  550. _080BA5E4:
  551. movs r0, 0x75
  552. _080BA5E6:
  553. strh r0, [r1, 0xA]
  554. b _080BA592
  555. _080BA5EA:
  556. movs r0, 0x20
  557. ands r0, r1
  558. cmp r0, 0
  559. beq _080BA630
  560. ldr r1, _080BA614 @ =gTasks
  561. lsls r0, r4, 2
  562. adds r0, r4
  563. lsls r0, 3
  564. adds r1, r0, r1
  565. movs r0, 0x8
  566. ldrsh r2, [r1, r0]
  567. cmp r2, 0
  568. beq _080BA61C
  569. ldrh r2, [r1, 0xC]
  570. movs r4, 0xC
  571. ldrsh r0, [r1, r4]
  572. cmp r0, 0xF6
  573. bgt _080BA618
  574. adds r0, r2, 0x1
  575. strh r0, [r1, 0xC]
  576. b _080BA592
  577. .align 2, 0
  578. _080BA614: .4byte gTasks
  579. _080BA618:
  580. strh r3, [r1, 0xC]
  581. b _080BA592
  582. _080BA61C:
  583. ldrh r3, [r1, 0xA]
  584. movs r4, 0xA
  585. ldrsh r0, [r1, r4]
  586. cmp r0, 0x74
  587. bgt _080BA62C
  588. adds r0, r3, 0x1
  589. strh r0, [r1, 0xA]
  590. b _080BA592
  591. _080BA62C:
  592. strh r2, [r1, 0xA]
  593. b _080BA592
  594. _080BA630:
  595. ldrh r1, [r2, 0x2C]
  596. movs r0, 0x4
  597. ands r0, r1
  598. lsls r0, 16
  599. lsrs r1, r0, 16
  600. cmp r1, 0
  601. beq _080BA648
  602. ldr r0, _080BA644 @ =gUnknown_020387B0
  603. strb r6, [r0]
  604. b _080BA64C
  605. .align 2, 0
  606. _080BA644: .4byte gUnknown_020387B0
  607. _080BA648:
  608. ldr r0, _080BA658 @ =gUnknown_020387B0
  609. strb r1, [r0]
  610. _080BA64C:
  611. movs r0, 0
  612. _080BA64E:
  613. add sp, 0x4
  614. pop {r4-r6}
  615. pop {r1}
  616. bx r1
  617. .align 2, 0
  618. _080BA658: .4byte gUnknown_020387B0
  619. thumb_func_end sub_80BA400
  620. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement