Advertisement
EliteAnax17

shop.c

Feb 13th, 2017
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.36 KB | None | 0 0
  1. #include "global.h"
  2. #include "menu.h"
  3. #include "script.h"
  4. #include "task.h"
  5. #include "main.h"
  6. #include "sound.h"
  7. #include "weather.h"
  8. #include "palette.h"
  9. #include "sprite.h"
  10. #include "asm.h"
  11. #include "decompress.h"
  12. #include "money.h"
  13.  
  14. struct UnknownShopStruct
  15. {
  16. /* 0x0 */ void (* callback) (void);
  17. /* 0x4 */ u16 *itemList;
  18. /* 0x8 */ u8 itemCount;
  19. /* 0x9 */ u8 unk9;
  20. /* 0xA */ u8 unkA;
  21. /* 0xB */ u8 unkB;
  22. /* 0xC */ bool8 unkC;
  23. // unknown size
  24. };
  25.  
  26. extern struct UnknownShopStruct gUnknown_03000708;
  27. extern struct MenuAction gUnknown_083CC6D0[];
  28.  
  29. extern u8 gUnknown_083CC6E8[];
  30. extern u8 gUnknown_083CC6EB[];
  31. extern u8 gOtherText_CanIHelpYou[];
  32. extern u8 gOtherText_AnythingElse[];
  33.  
  34. extern void sub_80A6300(void);
  35. extern void sub_80BE3BC(void);
  36. extern void DisplayItemMessageOnField(u8, u8*, TaskFunc, u16);
  37. extern u8 sub_807D770(void);
  38. extern void pal_fill_black(void);
  39.  
  40. void sub_80B2E38(u8);
  41. void HandleShopMenuQuit(u8);
  42. void sub_80B2FA0(u8);
  43. void BuyMenuDrawGraphics(void);
  44.  
  45. u8 CreateShopMenu(bool8 var)
  46. {
  47. ScriptContext2_Enable();
  48. gUnknown_03000708.unkC = var;
  49. gUnknown_03000708.unk9 = 0;
  50.  
  51. if(var == FALSE)
  52. {
  53. gUnknown_03000708.unkA = 2;
  54. MenuDrawTextWindow(0, 0, 10, 7);
  55. PrintMenuItemsReordered(1, 1, 3, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8);
  56. }
  57. else
  58. {
  59. gUnknown_03000708.unkA = 1;
  60. MenuDrawTextWindow(0, 0, 10, 5);
  61. PrintMenuItemsReordered(1, 1, 2, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6EB);
  62. }
  63. InitMenu(0, 1, 1, gUnknown_03000708.unkA + 1, 0, 9);
  64.  
  65. return CreateTask(sub_80B2E38, 8);
  66. }
  67.  
  68. void SetShopMenuCallback(void *callbackPtr)
  69. {
  70. gUnknown_03000708.callback = callbackPtr;
  71. }
  72.  
  73. void SetShopItemsForSale(u16 *items)
  74. {
  75. u16 i = 0;
  76.  
  77. gUnknown_03000708.itemList = items;
  78. gUnknown_03000708.itemCount = 0;
  79.  
  80. while (gUnknown_03000708.itemList[i])
  81. {
  82. gUnknown_03000708.itemCount++;
  83. i++;
  84. }
  85. }
  86.  
  87. void sub_80B2E38(u8 var)
  88. {
  89. const u8 local = var;
  90.  
  91. if(gMain.newAndRepeatedKeys & 0x40)
  92. {
  93. if(gUnknown_03000708.unk9)
  94. {
  95. PlaySE(0x5);
  96. gUnknown_03000708.unk9 = MoveMenuCursor(-1);
  97. }
  98. }
  99. else if(gMain.newAndRepeatedKeys & 0x80)
  100. {
  101. if(gUnknown_03000708.unk9 != gUnknown_03000708.unkA)
  102. {
  103. PlaySE(0x5);
  104. gUnknown_03000708.unk9 = MoveMenuCursor(1);
  105. }
  106. }
  107. else if (gMain.newKeys & 1)
  108. {
  109. PlaySE(0x5);
  110. if(!gUnknown_03000708.unkC)
  111. {
  112. gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.unk9]].func(local);
  113. }
  114. else
  115. {
  116. gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.unk9]].func(local);
  117. }
  118. }
  119. else if(gMain.newKeys & 2)
  120. {
  121. PlaySE(0x5);
  122. HandleShopMenuQuit(local);
  123. }
  124. }
  125.  
  126. void sub_80B2EFC(u8 taskId)
  127. {
  128. gTasks[taskId].data[8] = (u32)BuyMenuDrawGraphics >> 16;
  129. gTasks[taskId].data[9] = (u32)BuyMenuDrawGraphics;
  130. gTasks[taskId].func = sub_80B2FA0;
  131. fade_screen(1, 0);
  132. }
  133.  
  134. void sub_80B2F30(u8 taskId)
  135. {
  136. gTasks[taskId].data[8] = (u32)sub_80A6300 >> 16;
  137. gTasks[taskId].data[9] = (u32)sub_80A6300;
  138. gTasks[taskId].func = sub_80B2FA0;
  139. fade_screen(1, 0);
  140. }
  141.  
  142. void HandleShopMenuQuit(u8 taskId)
  143. {
  144. sub_8072DEC();
  145. MenuZeroFillWindowRect(0, 0, 11, 8);
  146. sub_80BE3BC(); // in tv.s?
  147. ScriptContext2_Disable();
  148. DestroyTask(taskId);
  149.  
  150. if(gUnknown_03000708.callback)
  151. gUnknown_03000708.callback(); // run the callback if it exists.
  152. }
  153.  
  154. void sub_80B2FA0(u8 taskId)
  155. {
  156. if(!gPaletteFade.active)
  157. {
  158. SetMainCallback2((void *)((u16)gTasks[taskId].data[8] << 16 | (u16)gTasks[taskId].data[9]));
  159. DestroyTask(taskId);
  160. }
  161. }
  162.  
  163. void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
  164. {
  165. CreateShopMenu(gUnknown_03000708.unkC);
  166. DestroyTask(taskId);
  167. }
  168.  
  169. void Task_ExitSellMenu(u8 taskId)
  170. {
  171. if(sub_807D770() == 1)
  172. {
  173. if(gUnknown_03000708.unkC == 2)
  174. DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0);
  175. else
  176. DisplayItemMessageOnField(taskId, gOtherText_AnythingElse, ReturnToShopMenuAfterExitingSellMenu, 0);
  177. }
  178. }
  179.  
  180. void sub_80B3050(void)
  181. {
  182. pal_fill_black();
  183. CreateTask(Task_ExitSellMenu, 0x8);
  184. }
  185.  
  186. void sub_80B3068(u8 taskId)
  187. {
  188. Task_ExitSellMenu(taskId);
  189. }
  190.  
  191. void unref_sub_80B3078(u8 taskId)
  192. {
  193. gTasks[taskId].func = Task_ExitSellMenu;
  194. }
  195.  
  196. void sub_80B3094(void)
  197. {
  198. AnimateSprites();
  199. BuildOamBuffer();
  200. RunTasks();
  201. UpdatePaletteFade();
  202. }
  203.  
  204. void sub_80B30AC(void)
  205. {
  206. void *addr;
  207. void *addr2;
  208. void *addr3;
  209. u16 *tempArr;
  210. u16 *tempArr2;
  211. u16 *tempArr3;
  212.  
  213. LoadOam();
  214. ProcessSpriteCopyRequests();
  215. TransferPlttBuffer();
  216.  
  217. // temp vars needed to match for some dumb reason
  218. tempArr = gBGTilemapBuffers[1];
  219. addr = (void *)(VRAM + 0xE800);
  220. DmaCopy16(3, tempArr, addr, 0x800);
  221. tempArr2 = gBGTilemapBuffers[2];
  222. addr2 = (void *)(VRAM + 0xE000);
  223. DmaCopy16(3, tempArr2, addr2, 0x800);
  224. tempArr3 = gBGTilemapBuffers[3];
  225. addr3 = (void *)(VRAM + 0xF000);
  226. DmaCopy16(3, tempArr3, addr3, 0x800);
  227. }
  228.  
  229. extern u8 gBuyMenuFrame_Gfx[];
  230. extern void sub_80B3764(int, int);
  231. extern void sub_80B37EC(void);
  232. extern void sub_80B3270(void);
  233. extern void sub_80B40E8(u8);
  234. extern void sub_80B3240(void);
  235. extern void BuyMenuDrawMapGraphics(void);
  236.  
  237. extern u16 gBuyMenuFrame_Tilemap[];
  238. extern u16 gMenuMoneyPal[];
  239.  
  240. void BuyMenuDrawGraphics(void)
  241. {
  242. void *addr;
  243. register s16 zero asm("r6");
  244. register s16 zero2 asm("r5");
  245.  
  246. sub_80F9438();
  247. remove_some_task();
  248. REG_BG1HOFS = (zero2 = 0);
  249. REG_BG1VOFS = zero2;
  250. REG_BG2HOFS = zero2;
  251. REG_BG2VOFS = zero2;
  252. REG_BG3HOFS = zero2;
  253. REG_BG3VOFS = zero2;
  254. gPaletteFade.bufferTransferDisabled = 1;
  255. addr = (void*)OAM;
  256. zero = 0;
  257. DmaFill32(3, zero, addr, OAM_SIZE);
  258. LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00));
  259. sub_800D238(gBuyMenuFrame_Tilemap, (void *)0x02018000);
  260. LoadCompressedPalette(gMenuMoneyPal, 0xC0, 0x20);
  261. FreeAllSpritePalettes();
  262. ResetPaletteFade();
  263. ResetSpriteData();
  264. ResetTasks();
  265. SetUpWindowConfig(&gWindowConfig_81E6DFC);
  266. InitMenuWindow(&gWindowConfig_81E6DFC);
  267. BuyMenuDrawMapGraphics();
  268. gUnknown_03000708.unk9 = zero;
  269. gUnknown_03000708.unkB = zero2;
  270. MenuZeroFillWindowRect(zero, zero, 0x20, 0x20);
  271. sub_80B7C14(gSaveBlock1.money, zero, zero);
  272. sub_80B3764(zero, 7);
  273. sub_80B37EC();
  274. sub_80B3270();
  275. CreateTask(sub_80B40E8, 0x8);
  276. sub_80B3240();
  277. BeginNormalPaletteFade(0xFFFFFFFF, zero, 0x10, zero, zero);
  278. gPaletteFade.bufferTransferDisabled = 0;
  279. SetVBlankCallback(sub_80B30AC);
  280. SetMainCallback2(sub_80B3094);
  281. }
  282.  
  283. /*
  284. thumb_func_start BuyMenuDrawGraphics
  285. BuyMenuDrawGraphics: @ 80B3108
  286. push {r4-r6,lr}
  287. mov r6, r8
  288. push {r6}
  289. sub sp, 0x8
  290. bl sub_80F9438
  291. bl remove_some_task
  292. ldr r0, _080B3204 @ =REG_BG1HOFS
  293. movs r5, 0
  294. strh r5, [r0]
  295. adds r0, 0x2
  296. strh r5, [r0]
  297. adds r0, 0x2
  298. strh r5, [r0]
  299. adds r0, 0x2
  300. strh r5, [r0]
  301. adds r0, 0x2
  302. strh r5, [r0]
  303. adds r0, 0x2
  304. strh r5, [r0]
  305. ldr r0, _080B3208 @ =gPaletteFade
  306. mov r8, r0
  307. ldrb r0, [r0, 0x8]
  308. movs r1, 0x80
  309. orrs r0, r1
  310. mov r1, r8
  311. strb r0, [r1, 0x8]
  312. movs r1, 0xE0
  313. lsls r1, 19
  314. movs r6, 0
  315. str r6, [sp, 0x4]
  316. ldr r0, _080B320C @ =0x040000d4
  317. add r2, sp, 0x4
  318. str r2, [r0]
  319. str r1, [r0, 0x4]
  320. ldr r1, _080B3210 @ =0x85000100
  321. str r1, [r0, 0x8]
  322. ldr r0, [r0, 0x8]
  323. ldr r0, _080B3214 @ =gBuyMenuFrame_Gfx
  324. ldr r1, _080B3218 @ =0x06007c00
  325. bl LZDecompressVram
  326. ldr r0, _080B321C @ =gBuyMenuFrame_Tilemap
  327. ldr r1, _080B3220 @ =0x02018000
  328. bl sub_800D238
  329. ldr r0, _080B3224 @ =gMenuMoneyPal
  330. movs r1, 0xC0
  331. movs r2, 0x20
  332. bl LoadCompressedPalette
  333. bl FreeAllSpritePalettes
  334. bl ResetPaletteFade
  335. bl ResetSpriteData
  336. bl ResetTasks
  337. ldr r4, _080B3228 @ =gWindowConfig_81E6DFC
  338. adds r0, r4, 0
  339. bl SetUpWindowConfig
  340. adds r0, r4, 0
  341. bl InitMenuWindow
  342. bl BuyMenuDrawMapGraphics
  343. ldr r0, _080B322C @ =gUnknown_03000708
  344. strb r6, [r0, 0x9]
  345. strb r5, [r0, 0xB]
  346. movs r0, 0
  347. movs r1, 0
  348. movs r2, 0x20
  349. movs r3, 0x20
  350. bl MenuZeroFillWindowRect
  351. ldr r0, _080B3230 @ =gSaveBlock1
  352. movs r1, 0x92
  353. lsls r1, 3
  354. adds r0, r1
  355. ldr r0, [r0]
  356. movs r1, 0
  357. movs r2, 0
  358. bl sub_80B7C14
  359. movs r0, 0
  360. movs r1, 0x7
  361. bl sub_80B3764
  362. bl sub_80B37EC
  363. bl sub_80B3270
  364. ldr r0, _080B3234 @ =sub_80B40E8
  365. movs r1, 0x8
  366. bl CreateTask
  367. bl sub_80B3240
  368. movs r0, 0x1
  369. negs r0, r0
  370. str r6, [sp]
  371. movs r1, 0
  372. movs r2, 0x10
  373. movs r3, 0
  374. bl BeginNormalPaletteFade
  375. mov r2, r8
  376. ldrb r1, [r2, 0x8]
  377. movs r0, 0x7F
  378. ands r0, r1
  379. strb r0, [r2, 0x8]
  380. ldr r0, _080B3238 @ =sub_80B30AC
  381. bl SetVBlankCallback
  382. ldr r0, _080B323C @ =sub_80B3094
  383. bl SetMainCallback2
  384. add sp, 0x8
  385. pop {r3}
  386. mov r8, r3
  387. pop {r4-r6}
  388. pop {r0}
  389. bx r0
  390. .align 2, 0
  391. _080B3204: .4byte REG_BG1HOFS
  392. _080B3208: .4byte gPaletteFade
  393. _080B320C: .4byte 0x040000d4
  394. _080B3210: .4byte 0x85000100
  395. _080B3214: .4byte gBuyMenuFrame_Gfx
  396. _080B3218: .4byte 0x06007c00
  397. _080B321C: .4byte gBuyMenuFrame_Tilemap
  398. _080B3220: .4byte 0x02018000
  399. _080B3224: .4byte gMenuMoneyPal
  400. _080B3228: .4byte gWindowConfig_81E6DFC
  401. _080B322C: .4byte gUnknown_03000708
  402. _080B3230: .4byte gSaveBlock1
  403. _080B3234: .4byte sub_80B40E8
  404. _080B3238: .4byte sub_80B30AC
  405. _080B323C: .4byte sub_80B3094
  406. thumb_func_end BuyMenuDrawGraphics
  407. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement