diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-15 21:26:46 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-15 21:26:46 -0400 |
commit | 7e1c966eb36db080c43d9aad2419ee68356656ef (patch) | |
tree | bc99a464bd1f3c518079c012d5018c9507cbe13d | |
parent | e28c7676126d31efa690f686152be19d5b62f743 (diff) |
item_pc: through sub_810D4C0
-rw-r--r-- | asm/item_pc.s | 356 | ||||
-rw-r--r-- | include/item_menu_icons.h | 2 | ||||
-rw-r--r-- | include/menu_helpers.h | 1 | ||||
-rw-r--r-- | include/pc_screen_effect.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/item_pc.c | 238 | ||||
-rw-r--r-- | sym_ewram.txt | 19 |
7 files changed, 264 insertions, 359 deletions
diff --git a/asm/item_pc.s b/asm/item_pc.s index 93ca91ff9..b8844a406 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -5,334 +5,6 @@ .text - thumb_func_start sub_810D3F4 -sub_810D3F4: @ 810D3F4 - push {r4-r6,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - cmp r5, 0x1 - bhi _0810D410 - ldr r6, _0810D418 @ =gUnknown_203ADBC - movs r0, 0x14 - bl Alloc - str r0, [r6] - cmp r0, 0 - bne _0810D41C -_0810D410: - adds r0, r4, 0 - bl SetMainCallback2 - b _0810D462 - .align 2, 0 -_0810D418: .4byte gUnknown_203ADBC -_0810D41C: - cmp r5, 0x1 - beq _0810D42A - ldr r0, _0810D468 @ =gUnknown_203ADCC - str r4, [r0] - movs r1, 0 - strh r1, [r0, 0x6] - strh r1, [r0, 0x4] -_0810D42A: - ldr r1, [r6] - movs r0, 0xFF - strb r0, [r1, 0x4] - ldr r0, [r6] - movs r2, 0 - strb r2, [r0, 0x5] - ldr r1, [r6] - movs r0, 0x1 - negs r0, r0 - strb r0, [r1, 0x8] - ldr r0, [r6] - str r2, [r0] - ldr r5, _0810D46C @ =sub_810D4A0 - adds r4, r6, 0 - movs r3, 0 -_0810D448: - ldr r0, [r4] - lsls r1, r2, 1 - adds r0, 0xC - adds r0, r1 - strh r3, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x2 - bls _0810D448 - adds r0, r5, 0 - bl SetMainCallback2 -_0810D462: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0810D468: .4byte gUnknown_203ADCC -_0810D46C: .4byte sub_810D4A0 - thumb_func_end sub_810D3F4 - - thumb_func_start sub_810D470 -sub_810D470: @ 810D470 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl do_scheduled_bg_tilemap_copies_to_vram - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_810D470 - - thumb_func_start sub_810D48C -sub_810D48C: @ 810D48C - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_810D48C - - thumb_func_start sub_810D4A0 -sub_810D4A0: @ 810D4A0 - push {lr} -_0810D4A2: - bl sub_810D4C0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810D4BA - bl sub_80BF708 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0810D4A2 -_0810D4BA: - pop {r0} - bx r0 - thumb_func_end sub_810D4A0 - - thumb_func_start sub_810D4C0 -sub_810D4C0: @ 810D4C0 - push {r4,lr} - sub sp, 0x4 - ldr r0, _0810D4E0 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x14 - bls _0810D4D4 - b _0810D688 -_0810D4D4: - lsls r0, 2 - ldr r1, _0810D4E4 @ =_0810D4E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0810D4E0: .4byte gMain -_0810D4E4: .4byte _0810D4E8 - .align 2, 0 -_0810D4E8: - .4byte _0810D53C - .4byte _0810D546 - .4byte _0810D54C - .4byte _0810D552 - .4byte _0810D558 - .4byte _0810D55E - .4byte _0810D564 - .4byte _0810D56A - .4byte _0810D584 - .4byte _0810D594 - .4byte _0810D59A - .4byte _0810D5A8 - .4byte _0810D5BA - .4byte _0810D5C0 - .4byte _0810D5C6 - .4byte _0810D5CC - .4byte _0810D608 - .4byte _0810D60E - .4byte _0810D616 - .4byte _0810D630 - .4byte _0810D668 -_0810D53C: - bl VblankHblankHandlerSetZero - bl clear_scheduled_bg_copies_to_vram - b _0810D674 -_0810D546: - bl ScanlineEffect_Stop - b _0810D674 -_0810D54C: - bl FreeAllSpritePalettes - b _0810D674 -_0810D552: - bl ResetPaletteFade - b _0810D674 -_0810D558: - bl ResetSpriteData - b _0810D674 -_0810D55E: - bl sub_80984D8 - b _0810D674 -_0810D564: - bl ResetTasks - b _0810D674 -_0810D56A: - bl sub_810D71C - lsls r0, 24 - cmp r0, 0 - beq _0810D5B2 - ldr r0, _0810D580 @ =gUnknown_203ADBC - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0xC] - b _0810D674 - .align 2, 0 -_0810D580: .4byte gUnknown_203ADBC -_0810D584: - bl sub_810D78C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810D592 - b _0810D6A0 -_0810D592: - b _0810D674 -_0810D594: - bl sub_810E8F0 - b _0810D674 -_0810D59A: - bl sub_810DDA4 - bl sub_810DBF0 - bl sub_810DE08 - b _0810D674 -_0810D5A8: - bl sub_810D83C - lsls r0, 24 - cmp r0, 0 - bne _0810D674 -_0810D5B2: - bl sub_810D6AC - movs r0, 0x1 - b _0810D6A2 -_0810D5BA: - bl sub_810D878 - b _0810D674 -_0810D5C0: - bl sub_810DB34 - b _0810D674 -_0810D5C6: - bl sub_80985E4 - b _0810D674 -_0810D5CC: - ldr r0, _0810D5F8 @ =sub_810DEA0 - movs r1, 0 - bl CreateTask - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0810D5FC @ =gMultiuseListMenuTemplate - ldr r2, _0810D600 @ =gUnknown_203ADCC - ldrh r1, [r2, 0x4] - ldrh r2, [r2, 0x6] - bl ListMenuInit - ldr r2, _0810D604 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r2 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r1, 0x8] - b _0810D674 - .align 2, 0 -_0810D5F8: .4byte sub_810DEA0 -_0810D5FC: .4byte gMultiuseListMenuTemplate -_0810D600: .4byte gUnknown_203ADCC -_0810D604: .4byte gTasks -_0810D608: - bl sub_810DB5C - b _0810D674 -_0810D60E: - movs r0, 0x1D - bl HelpSystem_SetSomeVariable2 - b _0810D674 -_0810D616: - ldr r0, _0810D62C @ =gUnknown_203ADCC - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _0810D674 - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _0810D674 - .align 2, 0 -_0810D62C: .4byte gUnknown_203ADCC -_0810D630: - ldr r0, _0810D64C @ =gUnknown_203ADCC - ldrb r0, [r0, 0x8] - cmp r0, 0x1 - bne _0810D650 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _0810D674 - .align 2, 0 -_0810D64C: .4byte gUnknown_203ADCC -_0810D650: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_80A0A48 - movs r0, 0x1 - bl sub_810DE94 - movs r0, 0x2 - bl PlaySE - b _0810D674 -_0810D668: - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810D6A0 -_0810D674: - ldr r1, _0810D684 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0810D6A0 - .align 2, 0 -_0810D684: .4byte gMain -_0810D688: - ldr r0, _0810D698 @ =sub_810D48C - bl SetVBlankCallback - ldr r0, _0810D69C @ =sub_810D470 - bl SetMainCallback2 - movs r0, 0x1 - b _0810D6A2 - .align 2, 0 -_0810D698: .4byte sub_810D48C -_0810D69C: .4byte sub_810D470 -_0810D6A0: - movs r0, 0 -_0810D6A2: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_810D4C0 - thumb_func_start sub_810D6AC sub_810D6AC: @ 810D6AC push {lr} @@ -935,7 +607,7 @@ sub_810DB5C: @ 810DB5C movs r0, 0x6E str r0, [sp, 0x4] str r0, [sp, 0x8] - ldr r0, _0810DB94 @ =gUnknown_203ADD0 + ldr r0, _0810DB94 @ =gUnknown_203ADCC + 0x4 str r0, [sp, 0xC] movs r0, 0x2 movs r1, 0x80 @@ -950,7 +622,7 @@ sub_810DB5C: @ 810DB5C bx r0 .align 2, 0 _0810DB90: .4byte gUnknown_203ADBC -_0810DB94: .4byte gUnknown_203ADD0 +_0810DB94: .4byte gUnknown_203ADCC + 0x4 thumb_func_end sub_810DB5C thumb_func_start sub_810DB98 @@ -1151,7 +823,7 @@ sub_810DCE4: @ 810DCE4 cmp r0, 0 bne _0810DD4E ldrb r0, [r4] - ldr r4, _0810DD30 @ =gUnknown_203ADD0 + ldr r4, _0810DD30 @ =gUnknown_203ADCC + 0x4 adds r2, r4, 0x2 adds r1, r4, 0 bl DestroyListMenu @@ -1165,7 +837,7 @@ sub_810DCE4: @ 810DCE4 .align 2, 0 _0810DD28: .4byte gTasks+0x8 _0810DD2C: .4byte gPaletteFade -_0810DD30: .4byte gUnknown_203ADD0 +_0810DD30: .4byte gUnknown_203ADCC + 0x4 _0810DD34: .4byte gUnknown_203ADBC _0810DD38: subs r0, r4, 0x4 @@ -1434,7 +1106,7 @@ _0810DF20: bl ListMenuHandleInput adds r4, r0, 0 ldrb r0, [r6] - ldr r1, _0810DF44 @ =gUnknown_203ADD0 + ldr r1, _0810DF44 @ =gUnknown_203ADCC + 0x4 adds r2, r1, 0x2 bl ListMenuGetScrollAndRow movs r0, 0x2 @@ -1446,7 +1118,7 @@ _0810DF20: bne _0810DF6C b _0810DF9E .align 2, 0 -_0810DF44: .4byte gUnknown_203ADD0 +_0810DF44: .4byte gUnknown_203ADCC + 0x4 _0810DF48: movs r0, 0x5 bl PlaySE @@ -1627,7 +1299,7 @@ sub_810E0B4: @ 810E0B4 ldrb r0, [r4] bl ListMenuHandleInput ldrb r0, [r4] - ldr r7, _0810E120 @ =gUnknown_203ADD0 + ldr r7, _0810E120 @ =gUnknown_203ADCC + 0x4 adds r2, r7, 0x2 adds r1, r7, 0 bl ListMenuGetScrollAndRow @@ -1661,7 +1333,7 @@ sub_810E0B4: @ 810E0B4 b _0810E150 .align 2, 0 _0810E11C: .4byte gTasks+0x8 -_0810E120: .4byte gUnknown_203ADD0 +_0810E120: .4byte gUnknown_203ADCC + 0x4 _0810E124: .4byte gMain _0810E128: .4byte gUnknown_203ADBC _0810E12C: @@ -1728,7 +1400,7 @@ _0810E194: adds r2, r4, 0 bl sub_8108D60 ldrb r0, [r6] - ldr r5, _0810E1F4 @ =gUnknown_203ADD0 + ldr r5, _0810E1F4 @ =gUnknown_203ADCC + 0x4 adds r2, r5, 0x2 adds r1, r5, 0 bl DestroyListMenu @@ -1765,7 +1437,7 @@ _0810E1E6: bx r0 .align 2, 0 _0810E1F0: .4byte gSaveBlock1Ptr -_0810E1F4: .4byte gUnknown_203ADD0 +_0810E1F4: .4byte gUnknown_203ADCC + 0x4 _0810E1F8: .4byte gMultiuseListMenuTemplate _0810E1FC: .4byte sub_810DEA0 thumb_func_end sub_810E160 @@ -1785,7 +1457,7 @@ sub_810E200: @ 810E200 mov r8, r0 adds r6, r7, r0 ldrb r0, [r6] - ldr r5, _0810E268 @ =gUnknown_203ADD0 + ldr r5, _0810E268 @ =gUnknown_203ADCC + 0x4 adds r2, r5, 0x2 adds r1, r5, 0 bl DestroyListMenu @@ -1821,7 +1493,7 @@ _0810E234: bx r0 .align 2, 0 _0810E264: .4byte gTasks+0x8 -_0810E268: .4byte gUnknown_203ADD0 +_0810E268: .4byte gUnknown_203ADCC + 0x4 _0810E26C: .4byte gMultiuseListMenuTemplate _0810E270: .4byte sub_810DEA0 thumb_func_end sub_810E200 @@ -2202,7 +1874,7 @@ sub_810E578: @ 810E578 movs r0, 0x1 bl PutWindowTilemap ldrb r0, [r5] - ldr r4, _0810E5D8 @ =gUnknown_203ADD0 + ldr r4, _0810E5D8 @ =gUnknown_203ADCC + 0x4 adds r2, r4, 0x2 adds r1, r4, 0 bl DestroyListMenu @@ -2226,7 +1898,7 @@ sub_810E578: @ 810E578 bx r0 .align 2, 0 _0810E5D4: .4byte gTasks+0x8 -_0810E5D8: .4byte gUnknown_203ADD0 +_0810E5D8: .4byte gUnknown_203ADCC + 0x4 _0810E5DC: .4byte gMultiuseListMenuTemplate thumb_func_end sub_810E578 diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h index 7fcd6d5e1..47a873c36 100644 --- a/include/item_menu_icons.h +++ b/include/item_menu_icons.h @@ -3,6 +3,8 @@ #include "global.h" +void sub_80984D8(void); +void sub_80985E4(void); u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3); #endif // GUARD_ITEM_MENU_ICONS diff --git a/include/menu_helpers.h b/include/menu_helpers.h index f8b57034a..a42b3c76b 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -2,6 +2,7 @@ #define GUARD_MENU_HELPERS_H #include "global.h" +#include "task.h" // Exported type declarations diff --git a/include/pc_screen_effect.h b/include/pc_screen_effect.h new file mode 100644 index 000000000..cdd7a96fe --- /dev/null +++ b/include/pc_screen_effect.h @@ -0,0 +1,6 @@ +#ifndef GUARD_PC_SCREEN_EFFECT_H +#define GUARD_PC_SCREEN_EFFECT_H + +void sub_80A0A48(u16, u16, u8); + +#endif //GUARD_PC_SCREEN_EFFECT_H diff --git a/ld_script.txt b/ld_script.txt index f3d24a9ec..341980802 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -231,6 +231,7 @@ SECTIONS { src/bag.o(.text); src/trainer_pokemon_sprites.o(.text); src/vs_seeker.o(.text); + src/item_pc.o(.text); asm/item_pc.o(.text); asm/mailbox_pc.o(.text); asm/menu.o(.text); diff --git a/src/item_pc.c b/src/item_pc.c new file mode 100644 index 000000000..8e4502430 --- /dev/null +++ b/src/item_pc.c @@ -0,0 +1,238 @@ +#include "global.h" +#include "help_system.h" +#include "item_menu_icons.h" +#include "list_menu.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" +#include "palette.h" +#include "pc_screen_effect.h" +#include "scanline_effect.h" +#include "sound.h" +#include "task.h" +#include "constants/songs.h" + +struct ItemPcResources +{ + u32 field_00; + u8 field_04; + u8 field_05; + u8 filler_06[2]; + u8 field_08; + u8 filler_09[3]; + u16 field_0C[3]; +}; + +struct ItemPcStaticResources +{ + MainCallback field_0; + u16 field_4; + u16 field_6; + u8 field_8; +}; + +EWRAM_DATA struct ItemPcResources * gUnknown_203ADBC = NULL; +EWRAM_DATA u32 gUnknown_203ADC0 = 0; +EWRAM_DATA u32 gUnknown_203ADC4 = 0; +EWRAM_DATA u32 gUnknown_203ADC8 = 0; +EWRAM_DATA struct ItemPcStaticResources gUnknown_203ADCC = {}; + +void sub_810D4A0(void); +bool8 sub_810D4C0(void); +void sub_810D6AC(void); +bool8 sub_810D71C(void); +bool8 sub_810D78C(void); +bool8 sub_810D83C(void); +void sub_810D878(void); +void sub_810E8F0(void); +void sub_810DB34(void); +void sub_810DB5C(void); +void sub_810DBF0(void); +void sub_810DDA4(void); +void sub_810DE08(void); +void sub_810DE94(u8); +void sub_810DEA0(u8 taskId); + +void sub_810D3F4(u8 a0, MainCallback callback) +{ + u8 i; + + if (a0 >= 2) + { + SetMainCallback2(callback); + return; + } + if ((gUnknown_203ADBC = Alloc(sizeof(struct ItemPcResources))) == NULL) + { + SetMainCallback2(callback); + return; + } + if (a0 != 1) + { + gUnknown_203ADCC.field_0 = callback; + gUnknown_203ADCC.field_4 = gUnknown_203ADCC.field_6 = 0; + } + gUnknown_203ADBC->field_04 = 0xFF; + gUnknown_203ADBC->field_05 = 0; + gUnknown_203ADBC->field_08 = 0xFF; + gUnknown_203ADBC->field_00 = 0; + for (i = 0; i < 3; i++) + { + gUnknown_203ADBC->field_0C[i] = 0; + } + SetMainCallback2(sub_810D4A0); +} + +void sub_810D470(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void sub_810D48C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_810D4A0(void) +{ + while (1) + { + if (sub_810D4C0() == TRUE) + break; + if (sub_80BF708() == TRUE) + break; + } +} + +bool8 sub_810D4C0(void) +{ + u8 taskId; + switch (gMain.state) + { + case 0: + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + ResetPaletteFade(); + gMain.state++; + break; + case 4: + ResetSpriteData(); + gMain.state++; + break; + case 5: + sub_80984D8(); + gMain.state++; + break; + case 6: + ResetTasks(); + gMain.state++; + break; + case 7: + if (sub_810D71C()) + { + gUnknown_203ADBC->field_0C[0] = 0; + gMain.state++; + } + else + { + sub_810D6AC(); + return TRUE; + } + break; + case 8: + if (sub_810D78C() == TRUE) + gMain.state++; + break; + case 9: + sub_810E8F0(); + gMain.state++; + break; + case 10: + sub_810DDA4(); + sub_810DBF0(); + sub_810DE08(); + gMain.state++; + break; + case 11: + if (sub_810D83C()) + gMain.state++; + else + { + sub_810D6AC(); + return TRUE; + } + break; + case 12: + sub_810D878(); + gMain.state++; + break; + case 13: + sub_810DB34(); + gMain.state++; + break; + case 14: + sub_80985E4(); + gMain.state++; + break; + case 15: + taskId = CreateTask(sub_810DEA0, 0); + gTasks[taskId].data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_203ADCC.field_4, gUnknown_203ADCC.field_6); + gMain.state++; + break; + case 16: + sub_810DB5C(); + gMain.state++; + break; + case 17: + HelpSystem_SetSomeVariable2(29); + gMain.state++; + break; + case 18: + if (gUnknown_203ADCC.field_8 == 1) + { + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + } + gMain.state++; + break; + case 19: + if (gUnknown_203ADCC.field_8 == 1) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + } + else + { + sub_80A0A48(0, 0, 0); + sub_810DE94(1); + PlaySE(SE_PC_LOGON); + } + gMain.state++; + break; + case 20: + if (sub_80BF72C() != TRUE) + gMain.state++; + break; + default: + SetVBlankCallback(sub_810D48C); + SetMainCallback2(sub_810D470); + return TRUE; + } + return FALSE; +} diff --git a/sym_ewram.txt b/sym_ewram.txt index d06fb5c5a..2afd86a0a 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1318,23 +1318,8 @@ gSpecialVar_ItemId: @ 203AD30 .align 2 .include "src/vs_seeker.o" -gUnknown_203ADBC: @ 203ADBC - .space 0x4 - -gUnknown_203ADC0: @ 203ADC0 - .space 0x4 - -gUnknown_203ADC4: @ 203ADC4 - .space 0x4 - -gUnknown_203ADC8: @ 203ADC8 - .space 0x4 - -gUnknown_203ADCC: @ 203ADCC - .space 0x4 - -gUnknown_203ADD0: @ 203ADD0 - .space 0x8 + .align 2 + .include "src/item_pc.o" gUnknown_203ADD8: @ 203ADD8 .space 0x4 |