diff options
-rw-r--r-- | asm/tm_case.s | 739 | ||||
-rw-r--r-- | include/item.h | 4 | ||||
-rw-r--r-- | include/list_menu.h | 1 | ||||
-rw-r--r-- | include/menu_helpers.h | 3 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/tm_case.c | 368 | ||||
-rw-r--r-- | sym_ewram.txt | 25 |
7 files changed, 388 insertions, 753 deletions
diff --git a/asm/tm_case.s b/asm/tm_case.s index ac58fa0a2..28662fad3 100644 --- a/asm/tm_case.s +++ b/asm/tm_case.s @@ -5,725 +5,6 @@ .text - thumb_func_start sub_81317F8 -sub_81317F8: @ 81317F8 - push {r4-r7,lr} - adds r7, r1, 0 - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r6, r2, 24 - bl sub_8131A8C - ldr r4, _08131854 @ =gUnknown_203B118 - movs r0, 0x1C - bl Alloc - str r0, [r4] - movs r1, 0 - str r1, [r0] - movs r1, 0xFF - strb r1, [r0, 0x8] - ldr r1, [r4] - movs r0, 0x1 - negs r0, r0 - strb r0, [r1, 0x7] - cmp r5, 0x5 - beq _0813182A - ldr r0, _08131858 @ =gUnknown_203B10C - strb r5, [r0, 0x4] -_0813182A: - cmp r7, 0 - beq _08131832 - ldr r0, _08131858 @ =gUnknown_203B10C - str r7, [r0] -_08131832: - cmp r6, 0xFF - beq _0813183A - ldr r0, _08131858 @ =gUnknown_203B10C - strb r6, [r0, 0x5] -_0813183A: - ldr r2, _0813185C @ =gTextFlags - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r0, _08131860 @ =sub_8131894 - bl SetMainCallback2 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08131854: .4byte gUnknown_203B118 -_08131858: .4byte gUnknown_203B10C -_0813185C: .4byte gTextFlags -_08131860: .4byte sub_8131894 - thumb_func_end sub_81317F8 - - thumb_func_start sub_8131864 -sub_8131864: @ 8131864 - 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_8131864 - - thumb_func_start sub_8131880 -sub_8131880: @ 8131880 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_8131880 - - thumb_func_start sub_8131894 -sub_8131894: @ 8131894 - push {lr} -_08131896: - bl sub_80BF72C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081318BA - bl sub_81318C0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _081318BA - bl sub_80BF708 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08131896 -_081318BA: - pop {r0} - bx r0 - thumb_func_end sub_8131894 - - thumb_func_start sub_81318C0 -sub_81318C0: @ 81318C0 - push {r4,lr} - sub sp, 0x4 - ldr r0, _081318E0 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x12 - bls _081318D4 - b _08131A68 -_081318D4: - lsls r0, 2 - ldr r1, _081318E4 @ =_081318E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081318E0: .4byte gMain -_081318E4: .4byte _081318E8 - .align 2, 0 -_081318E8: - .4byte _08131934 - .4byte _0813193E - .4byte _08131944 - .4byte _0813194A - .4byte _08131950 - .4byte _08131956 - .4byte _0813195C - .4byte _08131970 - .4byte _08131976 - .4byte _08131984 - .4byte _08131990 - .4byte _0813199E - .4byte _081319A4 - .4byte _081319AE - .4byte _081319B4 - .4byte _08131A04 - .4byte _08131A0A - .4byte _08131A34 - .4byte _08131A42 -_08131934: - bl sub_80BF768 - bl clear_scheduled_bg_copies_to_vram - b _08131A52 -_0813193E: - bl ScanlineEffect_Stop - b _08131A52 -_08131944: - bl FreeAllSpritePalettes - b _08131A52 -_0813194A: - bl ResetPaletteFade - b _08131A52 -_08131950: - bl ResetSpriteData - b _08131A52 -_08131956: - bl ResetTasks - b _08131A52 -_0813195C: - bl sub_8131AB8 - ldr r0, _0813196C @ =gUnknown_203B118 - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x12] - b _08131A52 - .align 2, 0 -_0813196C: .4byte gUnknown_203B118 -_08131970: - bl sub_8133244 - b _08131A52 -_08131976: - bl sub_8131B20 - lsls r0, 24 - cmp r0, 0 - bne _08131982 - b _08131A80 -_08131982: - b _08131A52 -_08131984: - ldr r0, _0813198C @ =gUnknown_20398A4 - bl sub_809A5E4 - b _08131A52 - .align 2, 0 -_0813198C: .4byte gUnknown_20398A4 -_08131990: - bl sub_81320BC - bl sub_8132120 - bl sub_8132170 - b _08131A52 -_0813199E: - bl sub_8133404 - b _08131A52 -_081319A4: - bl sub_8131C10 - bl sub_8131C50 - b _08131A52 -_081319AE: - bl sub_81333C4 - b _08131A52 -_081319B4: - ldr r0, _081319C0 @ =gUnknown_203B10C - ldrb r0, [r0, 0x4] - cmp r0, 0x4 - bne _081319C8 - ldr r0, _081319C4 @ =sub_8132F20 - b _081319CA - .align 2, 0 -_081319C0: .4byte gUnknown_203B10C -_081319C4: .4byte sub_8132F20 -_081319C8: - ldr r0, _081319F4 @ =sub_81322D4 -_081319CA: - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _081319F8 @ =gUnknown_3005E70 - ldr r2, _081319FC @ =gUnknown_203B10C - ldrh r1, [r2, 0xA] - ldrh r2, [r2, 0x8] - bl ListMenuInit - ldr r2, _08131A00 @ =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 _08131A52 - .align 2, 0 -_081319F4: .4byte sub_81322D4 -_081319F8: .4byte gUnknown_3005E70 -_081319FC: .4byte gUnknown_203B10C -_08131A00: .4byte gTasks -_08131A04: - bl sub_8132018 - b _08131A52 -_08131A0A: - ldr r0, _08131A2C @ =gUnknown_203B10C - ldrh r1, [r0, 0x8] - ldrh r0, [r0, 0xA] - adds r1, r0 - lsls r1, 16 - lsrs r1, 16 - movs r0, 0x4 - bl sub_809A798 - lsls r0, 16 - lsrs r0, 16 - bl sub_813368C - ldr r1, _08131A30 @ =gUnknown_203B118 - ldr r1, [r1] - strb r0, [r1, 0x4] - b _08131A52 - .align 2, 0 -_08131A2C: .4byte gUnknown_203B10C -_08131A30: .4byte gUnknown_203B118 -_08131A34: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - b _08131A52 -_08131A42: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_08131A52: - ldr r1, _08131A64 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _08131A80 - .align 2, 0 -_08131A64: .4byte gMain -_08131A68: - ldr r0, _08131A78 @ =sub_8131880 - bl SetVBlankCallback - ldr r0, _08131A7C @ =sub_8131864 - bl SetMainCallback2 - movs r0, 0x1 - b _08131A82 - .align 2, 0 -_08131A78: .4byte sub_8131880 -_08131A7C: .4byte sub_8131864 -_08131A80: - movs r0, 0 -_08131A82: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81318C0 - - thumb_func_start sub_8131A8C -sub_8131A8C: @ 8131A8C - ldr r0, _08131AA4 @ =gUnknown_203B118 - movs r1, 0 - str r1, [r0] - ldr r0, _08131AA8 @ =gUnknown_203B120 - str r1, [r0] - ldr r0, _08131AAC @ =gUnknown_203B124 - str r1, [r0] - ldr r0, _08131AB0 @ =gUnknown_203B128 - str r1, [r0] - ldr r0, _08131AB4 @ =gUnknown_203B12C - str r1, [r0] - bx lr - .align 2, 0 -_08131AA4: .4byte gUnknown_203B118 -_08131AA8: .4byte gUnknown_203B120 -_08131AAC: .4byte gUnknown_203B124 -_08131AB0: .4byte gUnknown_203B128 -_08131AB4: .4byte gUnknown_203B12C - thumb_func_end sub_8131A8C - - thumb_func_start sub_8131AB8 -sub_8131AB8: @ 8131AB8 - push {r4,lr} - bl sub_80BF7C8 - ldr r4, _08131B18 @ =gUnknown_203B120 - movs r0, 0x80 - lsls r0, 4 - bl AllocZeroed - str r0, [r4] - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08131B1C @ =gUnknown_8463134 - movs r0, 0 - movs r2, 0x3 - bl InitBgsFromTemplates - ldr r1, [r4] - movs r0, 0x2 - bl SetBgTilemapBuffer - movs r0, 0x1 - bl schedule_bg_copy_tilemap_to_vram - movs r0, 0x2 - bl schedule_bg_copy_tilemap_to_vram - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08131B18: .4byte gUnknown_203B120 -_08131B1C: .4byte gUnknown_8463134 - thumb_func_end sub_8131AB8 - - thumb_func_start sub_8131B20 -sub_8131B20: @ 8131B20 - push {r4,lr} - sub sp, 0x4 - ldr r4, _08131B3C @ =gUnknown_203B118 - ldr r0, [r4] - movs r1, 0x12 - ldrsh r0, [r0, r1] - cmp r0, 0x4 - bhi _08131BF8 - lsls r0, 2 - ldr r1, _08131B40 @ =_08131B44 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08131B3C: .4byte gUnknown_203B118 -_08131B40: .4byte _08131B44 - .align 2, 0 -_08131B44: - .4byte _08131B58 - .4byte _08131B74 - .4byte _08131B94 - .4byte _08131BAC - .4byte _08131BDC -_08131B58: - bl reset_temp_tile_data_buffers - ldr r1, _08131B70 @ =gUnknown_8E845D8 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - b _08131BE2 - .align 2, 0 -_08131B70: .4byte gUnknown_8E845D8 -_08131B74: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08131C06 - ldr r0, _08131B8C @ =gUnknown_8E84A24 - ldr r1, _08131B90 @ =gUnknown_203B120 - ldr r1, [r1] - bl LZDecompressWram - b _08131BE2 - .align 2, 0 -_08131B8C: .4byte gUnknown_8E84A24 -_08131B90: .4byte gUnknown_203B120 -_08131B94: - ldr r4, _08131BA8 @ =gUnknown_8E84B70 - movs r0, 0x1 - bl GetBgTilemapBuffer - adds r1, r0, 0 - adds r0, r4, 0 - bl LZDecompressWram - b _08131BE2 - .align 2, 0 -_08131BA8: .4byte gUnknown_8E84B70 -_08131BAC: - ldr r0, _08131BC4 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _08131BCC - ldr r0, _08131BC8 @ =gUnknown_8E84CB0 - movs r1, 0 - movs r2, 0x80 - bl LoadCompressedPalette - b _08131BE2 - .align 2, 0 -_08131BC4: .4byte gSaveBlock2Ptr -_08131BC8: .4byte gUnknown_8E84CB0 -_08131BCC: - ldr r0, _08131BD8 @ =gUnknown_8E84D20 - movs r1, 0 - movs r2, 0x80 - bl LoadCompressedPalette - b _08131BE2 - .align 2, 0 -_08131BD8: .4byte gUnknown_8E84D20 -_08131BDC: - ldr r0, _08131BF0 @ =gUnknown_8463218 - bl LoadCompressedObjectPic -_08131BE2: - ldr r0, _08131BF4 @ =gUnknown_203B118 - ldr r1, [r0] - ldrh r0, [r1, 0x12] - adds r0, 0x1 - strh r0, [r1, 0x12] - b _08131C06 - .align 2, 0 -_08131BF0: .4byte gUnknown_8463218 -_08131BF4: .4byte gUnknown_203B118 -_08131BF8: - bl sub_81338A8 - ldr r1, [r4] - movs r0, 0 - strh r0, [r1, 0x12] - movs r0, 0x1 - b _08131C08 -_08131C06: - movs r0, 0 -_08131C08: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8131B20 - - thumb_func_start sub_8131C10 -sub_8131C10: @ 8131C10 - push {r4,lr} - ldr r0, _08131C40 @ =gUnknown_20398A4 - ldr r4, _08131C44 @ =gUnknown_203B124 - ldrb r0, [r0, 0x4] - adds r0, 0x1 - lsls r0, 3 - bl Alloc - str r0, [r4] - ldr r4, _08131C48 @ =gUnknown_203B128 - ldr r0, _08131C4C @ =gUnknown_203B118 - ldr r0, [r0] - ldrb r1, [r0, 0x6] - lsls r0, r1, 3 - subs r0, r1 - lsls r0, 2 - adds r0, r1 - bl Alloc - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08131C40: .4byte gUnknown_20398A4 -_08131C44: .4byte gUnknown_203B124 -_08131C48: .4byte gUnknown_203B128 -_08131C4C: .4byte gUnknown_203B118 - thumb_func_end sub_8131C10 - - thumb_func_start sub_8131C50 -sub_8131C50: @ 8131C50 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _08131D28 @ =gUnknown_20398A4 - mov r8, r0 - movs r6, 0 - ldr r0, _08131D2C @ =gUnknown_203B118 - ldr r0, [r0] - ldrb r0, [r0, 0x6] - cmp r6, r0 - bcs _08131CA0 - ldr r7, _08131D30 @ =gUnknown_203B128 -_08131C68: - lsls r5, r6, 3 - subs r4, r5, r6 - lsls r4, 2 - adds r4, r6 - ldr r0, [r7] - adds r0, r4 - mov r1, r8 - ldr r2, [r1] - lsls r1, r6, 2 - adds r1, r2 - ldrh r1, [r1] - bl sub_8131D48 - ldr r0, _08131D34 @ =gUnknown_203B124 - ldr r0, [r0] - adds r5, r0 - ldr r0, [r7] - adds r0, r4 - str r0, [r5] - str r6, [r5, 0x4] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, _08131D2C @ =gUnknown_203B118 - ldr r0, [r0] - ldrb r0, [r0, 0x6] - cmp r6, r0 - bcc _08131C68 -_08131CA0: - ldr r0, _08131D34 @ =gUnknown_203B124 - ldr r3, [r0] - lsls r0, r6, 3 - adds r0, r3 - ldr r1, _08131D38 @ =gUnknown_84166DB - str r1, [r0] - movs r1, 0x2 - negs r1, r1 - str r1, [r0, 0x4] - ldr r2, _08131D3C @ =gUnknown_3005E70 - str r3, [r2] - ldr r0, _08131D2C @ =gUnknown_203B118 - ldr r3, [r0] - ldrb r0, [r3, 0x6] - adds r0, 0x1 - movs r1, 0 - strh r0, [r2, 0xC] - strb r1, [r2, 0x10] - strb r1, [r2, 0x11] - movs r0, 0x8 - strb r0, [r2, 0x12] - strb r1, [r2, 0x13] - ldrb r0, [r2, 0x16] - movs r4, 0x8 - negs r4, r4 - ands r4, r0 - movs r0, 0x39 - negs r0, r0 - ands r4, r0 - movs r0, 0x10 - orrs r4, r0 - strb r4, [r2, 0x16] - ldrb r1, [r2, 0x14] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - movs r5, 0x2 - orrs r0, r5 - strb r0, [r2, 0x14] - ldrb r1, [r3, 0x5] - strh r1, [r2, 0xE] - ldrb r1, [r2, 0x17] - movs r3, 0x40 - negs r3, r3 - ands r3, r1 - orrs r3, r5 - movs r1, 0xF - ands r0, r1 - movs r1, 0x20 - orrs r0, r1 - strb r0, [r2, 0x14] - movs r0, 0x30 - strb r0, [r2, 0x15] - ldr r0, _08131D40 @ =sub_8131E18 - str r0, [r2, 0x4] - ldr r0, _08131D44 @ =sub_8131E68 - str r0, [r2, 0x8] - movs r0, 0x3F - ands r3, r0 - strb r3, [r2, 0x17] - ands r4, r0 - strb r4, [r2, 0x16] - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08131D28: .4byte gUnknown_20398A4 -_08131D2C: .4byte gUnknown_203B118 -_08131D30: .4byte gUnknown_203B128 -_08131D34: .4byte gUnknown_203B124 -_08131D38: .4byte gUnknown_84166DB -_08131D3C: .4byte gUnknown_3005E70 -_08131D40: .4byte sub_8131E18 -_08131D44: .4byte sub_8131E68 - thumb_func_end sub_8131C50 - - thumb_func_start sub_8131D48 -sub_8131D48: @ 8131D48 - push {r4-r7,lr} - adds r7, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - ldr r5, _08131D8C @ =gStringVar4 - ldr r1, _08131D90 @ =gUnknown_84166FF - adds r0, r5, 0 - bl StringCopy - movs r0, 0xA9 - lsls r0, 1 - cmp r6, r0 - bls _08131DA4 - ldr r1, _08131D94 @ =gUnknown_8463178 - adds r0, r5, 0 - bl StringAppend - ldr r1, _08131D98 @ =gUnknown_8416226 - adds r0, r5, 0 - bl StringAppend - ldr r4, _08131D9C @ =gStringVar1 - ldr r0, _08131DA0 @ =0xfffffeae - adds r1, r6, r0 - adds r0, r4, 0 - movs r2, 0x2 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - adds r0, r5, 0 - adds r1, r4, 0 - bl StringAppend - b _08131DC4 - .align 2, 0 -_08131D8C: .4byte gStringVar4 -_08131D90: .4byte gUnknown_84166FF -_08131D94: .4byte gUnknown_8463178 -_08131D98: .4byte gUnknown_8416226 -_08131D9C: .4byte gStringVar1 -_08131DA0: .4byte 0xfffffeae -_08131DA4: - ldr r1, _08131DFC @ =gUnknown_8416226 - adds r0, r5, 0 - bl StringAppend - ldr r4, _08131E00 @ =gStringVar1 - ldr r0, _08131E04 @ =0xfffffee0 - adds r1, r6, r0 - adds r0, r4, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - adds r0, r5, 0 - adds r1, r4, 0 - bl StringAppend -_08131DC4: - ldr r4, _08131E08 @ =gStringVar4 - ldr r1, _08131E0C @ =gUnknown_846317C - adds r0, r4, 0 - bl StringAppend - ldr r1, _08131E10 @ =gUnknown_8416703 - adds r0, r4, 0 - bl StringAppend - adds r0, r6, 0 - bl ItemIdToBattleMoveId - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xD - muls r1, r0 - ldr r0, _08131E14 @ =gMoveNames - adds r1, r0 - adds r0, r4, 0 - bl StringAppend - adds r0, r7, 0 - adds r1, r4, 0 - bl StringCopy - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08131DFC: .4byte gUnknown_8416226 -_08131E00: .4byte gStringVar1 -_08131E04: .4byte 0xfffffee0 -_08131E08: .4byte gStringVar4 -_08131E0C: .4byte gUnknown_846317C -_08131E10: .4byte gUnknown_8416703 -_08131E14: .4byte gMoveNames - thumb_func_end sub_8131D48 - thumb_func_start sub_8131E18 sub_8131E18: @ 8131E18 push {r4-r6,lr} @@ -996,7 +277,7 @@ sub_8132018: @ 8132018 movs r0, 0x6E str r0, [sp, 0x4] str r0, [sp, 0x8] - ldr r0, _08132050 @ =gUnknown_203B116 + ldr r0, _08132050 @ =gUnknown_203B10C + 10 str r0, [sp, 0xC] movs r0, 0x2 movs r1, 0xA0 @@ -1011,7 +292,7 @@ sub_8132018: @ 8132018 bx r0 .align 2, 0 _0813204C: .4byte gUnknown_203B118 -_08132050: .4byte gUnknown_203B116 +_08132050: .4byte gUnknown_203B10C + 10 thumb_func_end sub_8132018 thumb_func_start sub_8132054 @@ -1321,7 +602,7 @@ sub_813226C: @ 813226C cmp r0, 0 bne _081322CC ldrb r0, [r2] - ldr r4, _081322AC @ =gUnknown_203B116 + ldr r4, _081322AC @ =gUnknown_203B10C + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl sub_810713C @@ -1335,7 +616,7 @@ sub_813226C: @ 813226C .align 2, 0 _081322A4: .4byte gTasks+0x8 _081322A8: .4byte gPaletteFade -_081322AC: .4byte gUnknown_203B116 +_081322AC: .4byte gUnknown_203B10C + 10 _081322B0: .4byte gUnknown_203B118 _081322B4: adds r0, r4, 0 @@ -1383,7 +664,7 @@ sub_81322D4: @ 81322D4 bl ListMenuHandleInput adds r5, r0, 0 ldrb r0, [r6] - ldr r4, _08132348 @ =gUnknown_203B116 + ldr r4, _08132348 @ =gUnknown_203B10C + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl get_coro_args_x18_x1A @@ -1407,7 +688,7 @@ sub_81322D4: @ 81322D4 .align 2, 0 _08132340: .4byte gTasks+0x8 _08132344: .4byte gPaletteFade -_08132348: .4byte gUnknown_203B116 +_08132348: .4byte gUnknown_203B10C + 10 _0813234C: .4byte gMain _08132350: .4byte gSpecialVar_ItemId _08132354: @@ -1911,7 +1192,7 @@ sub_8132780: @ 8132780 ldr r0, _081327F0 @ =gTasks+0x8 adds r5, r0 ldrb r0, [r5] - ldr r4, _081327F4 @ =gUnknown_203B116 + ldr r4, _081327F4 @ =gUnknown_203B10C + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl sub_810713C @@ -1947,7 +1228,7 @@ sub_8132780: @ 8132780 bx r0 .align 2, 0 _081327F0: .4byte gTasks+0x8 -_081327F4: .4byte gUnknown_203B116 +_081327F4: .4byte gUnknown_203B10C + 10 _081327F8: .4byte gUnknown_3005E70 thumb_func_end sub_8132780 @@ -2592,7 +1873,7 @@ sub_8132D34: @ 8132D34 bl sub_809C09C mov r3, r8 ldrb r0, [r3] - ldr r4, _08132E00 @ =gUnknown_203B116 + ldr r4, _08132E00 @ =gUnknown_203B10C + 10 subs r2, r4, 0x2 adds r1, r4, 0 bl sub_810713C @@ -2634,7 +1915,7 @@ sub_8132D34: @ 8132D34 _08132DF4: .4byte gTasks+0x8 _08132DF8: .4byte gSpecialVar_ItemId _08132DFC: .4byte gSaveBlock1Ptr -_08132E00: .4byte gUnknown_203B116 +_08132E00: .4byte gUnknown_203B10C + 10 _08132E04: .4byte gUnknown_3005E70 _08132E08: .4byte sub_8132E0C thumb_func_end sub_8132D34 diff --git a/include/item.h b/include/item.h index 25177cb6e..37cc6ca70 100644 --- a/include/item.h +++ b/include/item.h @@ -28,6 +28,7 @@ struct BagPocket }; extern struct BagPocket gBagPockets[]; +extern struct BagPocket gUnknown_20398A4; void GetBerryCountString(u8* dst, const u8* berryName, u32 quantity); void CopyItemName(u16 itemId, u8 *string); @@ -66,4 +67,7 @@ void CopyItemName(u16, u8 *); void sub_809A824(u16 itemId); bool8 AddBagItem(u16 itemId, u16 amount); +void sub_809A5E4(struct BagPocket *); +u16 sub_809A798(u8 a0, u16 a1); + #endif // ITEM_H diff --git a/include/list_menu.h b/include/list_menu.h index 8834e5215..22be687be 100644 --- a/include/list_menu.h +++ b/include/list_menu.h @@ -48,6 +48,7 @@ struct ListMenu { }; extern struct ListMenuTemplate gUnknown_03006310; +extern struct ListMenuTemplate gUnknown_3005E70; // Exported ROM declarations diff --git a/include/menu_helpers.h b/include/menu_helpers.h index b193388e5..7bfd605c4 100644 --- a/include/menu_helpers.h +++ b/include/menu_helpers.h @@ -18,6 +18,9 @@ void sub_812225C(u16 *, u16 *, u8, u8); void sub_8122298(u16 *, u16 *, u8, u8, u8); void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data); bool8 sub_81221AC(void); +bool8 sub_80BF72C(void); bool8 sub_80BF708(void); +void sub_80BF768(void); +void sub_80BF7C8(void); #endif //GUARD_MENU_HELPERS_H diff --git a/ld_script.txt b/ld_script.txt index 1bd106cca..53575e49c 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -229,6 +229,7 @@ SECTIONS { src/fame_checker.o(.text); src/menu2.o(.text); src/oak_speech.o(.text); + src/tm_case.o(.text); asm/tm_case.o(.text); asm/menu_indicators.o(.text); asm/pokedex_area_markers.o(.text); diff --git a/src/tm_case.c b/src/tm_case.c new file mode 100644 index 000000000..011af5d94 --- /dev/null +++ b/src/tm_case.c @@ -0,0 +1,368 @@ +#include "global.h" +#include "malloc.h" +#include "bg.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "palette.h" +#include "task.h" +#include "text.h" +#include "menu.h" +#include "menu_helpers.h" +#include "list_menu.h" +#include "item.h" +#include "string_util.h" +#include "party_menu.h" +#include "data2.h" +#include "scanline_effect.h" +#include "constants/items.h" + +struct UnkStruct_203B10C +{ + void (* unk_00)(void); + u8 unk_04; + u8 unk_05; + u8 unk_06; + u16 unk_08; + u16 unk_0a; +}; + +struct UnkStruct_203B118 +{ + u32 unk_00; + u8 unk_04; + u8 unk_05; + u8 unk_06; + u8 unk_07; + u8 unk_08; + u8 filler_09[9]; + s16 unk_12; + u8 filler_14[8]; +}; + +struct UnkStruct_203B11C +{ + struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT]; + struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT]; + u16 unk_160; + u16 unk_162; +}; + +EWRAM_DATA struct UnkStruct_203B10C gUnknown_203B10C = {}; +EWRAM_DATA struct UnkStruct_203B118 * gUnknown_203B118 = NULL; +EWRAM_DATA struct UnkStruct_203B11C * gUnknown_203B11C = NULL; +EWRAM_DATA void * gUnknown_203B120 = NULL; // tilemap buffer +EWRAM_DATA struct ListMenuItem * gUnknown_203B124 = NULL; +EWRAM_DATA u8 (* gUnknown_203B128)[29] = NULL; +EWRAM_DATA u16 * gUnknown_203B12C = NULL; + +void sub_8131894(void); +bool8 sub_81318C0(void); +void sub_8131A8C(void); +void sub_8131AB8(void); +bool8 sub_8131B20(void); +void sub_8131C10(void); +void sub_8131C50(void); +void sub_8131D48(u8 * dest, u16 itemId); +void sub_8131E18(s32 itemIndex, bool8 onInit, struct ListMenu *list); +void sub_8131E68(u8 windowId, s32 itemId, u8 y); +void sub_8132018(void); +void sub_81320BC(void); +void sub_8132120(void); +void sub_8132170(void); +void sub_81322D4(u8 taskId); +void sub_8132F20(u8 taskId); +void sub_8133244(void); +void sub_81333C4(void); +void sub_8133404(void); +u8 sub_813368C(u16 itemId); +void sub_81338A8(void); + +extern const struct BgTemplate gUnknown_8463134[3]; +extern const u32 gUnknown_8E845D8[]; +extern const u32 gUnknown_8E84A24[]; +extern const u32 gUnknown_8E84B70[]; +extern const u32 gUnknown_8E84CB0[]; +extern const u32 gUnknown_8E84D20[]; +extern const struct CompressedSpriteSheet gUnknown_8463218; + +extern const u8 gUnknown_84166DB[]; +extern const u8 gUnknown_84166FF[]; +extern const u8 gUnknown_8463178[]; +extern const u8 gUnknown_8416226[]; +extern const u8 gUnknown_846317C[]; +extern const u8 gUnknown_8416703[]; + +void sub_81317F8(u8 a0, void (* a1)(void), u8 a2) +{ + sub_8131A8C(); + gUnknown_203B118 = Alloc(sizeof(struct UnkStruct_203B118)); + gUnknown_203B118->unk_00 = 0; + gUnknown_203B118->unk_08 = 0xFF; + gUnknown_203B118->unk_07 = 0xFF; + if (a0 != 5) + gUnknown_203B10C.unk_04 = a0; + if (a1 != NULL) + gUnknown_203B10C.unk_00 = a1; + if (a2 != 0xFF) + gUnknown_203B10C.unk_05 = a2; + gTextFlags.flag_2 = FALSE; + SetMainCallback2(sub_8131894); +} + +void sub_8131864(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void sub_8131880(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8131894(void) +{ + while (1) + { + if (sub_80BF72C() == TRUE) + break; + if (sub_81318C0() == TRUE) + break; + if (sub_80BF708() == TRUE) + break; + } +} + +bool8 sub_81318C0(void) +{ + u8 taskId; + + switch (gMain.state) + { + case 0: + sub_80BF768(); + 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: + ResetTasks(); + gMain.state++; + break; + case 6: + sub_8131AB8(); + gUnknown_203B118->unk_12 = 0; + gMain.state++; + break; + case 7: + sub_8133244(); + gMain.state++; + break; + case 8: + if (sub_8131B20()) + gMain.state++; + break; + case 9: + sub_809A5E4(&gUnknown_20398A4); + gMain.state++; + break; + case 10: + sub_81320BC(); + sub_8132120(); + sub_8132170(); + gMain.state++; + break; + case 11: + sub_8133404(); + gMain.state++; + break; + case 12: + sub_8131C10(); + sub_8131C50(); + gMain.state++; + break; + case 13: + sub_81333C4(); + gMain.state++; + break; + case 14: + if (gUnknown_203B10C.unk_04 == 4) + taskId = CreateTask(sub_8132F20, 0); + else + taskId = CreateTask(sub_81322D4, 0); + gTasks[taskId].data[0] = ListMenuInit(&gUnknown_3005E70, gUnknown_203B10C.unk_0a, gUnknown_203B10C.unk_08); + gMain.state++; + break; + case 15: + sub_8132018(); + gMain.state++; + break; + case 16: + gUnknown_203B118->unk_04 = sub_813368C(sub_809A798(POCKET_TM_CASE, gUnknown_203B10C.unk_0a + gUnknown_203B10C.unk_08)); + gMain.state++; + break; + case 17: + BlendPalettes(0xFFFFFFFF, 16, 0); + gMain.state++; + break; + case 18: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + break; + default: + SetVBlankCallback(sub_8131880); + SetMainCallback2(sub_8131864); + return TRUE; + } + + return FALSE; +} + +void sub_8131A8C(void) +{ + gUnknown_203B118 = NULL; + gUnknown_203B120 = NULL; + gUnknown_203B124 = NULL; + gUnknown_203B128 = NULL; + gUnknown_203B12C = NULL; +} + +void sub_8131AB8(void) +{ + void ** ptr; + sub_80BF7C8(); + ptr = &gUnknown_203B120; + *ptr = AllocZeroed(0x800); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8463134, NELEMS(gUnknown_8463134)); + SetBgTilemapBuffer(2, *ptr); + schedule_bg_copy_tilemap_to_vram(1); + schedule_bg_copy_tilemap_to_vram(2); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); +} + +bool8 sub_8131B20(void) +{ + switch (gUnknown_203B118->unk_12) + { + case 0: + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8E845D8, 0, 0, 0); + gUnknown_203B118->unk_12++; + break; + case 1: + if (free_temp_tile_data_buffers_if_possible() != TRUE) + { + LZDecompressWram(gUnknown_8E84A24, gUnknown_203B120); + gUnknown_203B118->unk_12++; + } + break; + case 2: + LZDecompressWram(gUnknown_8E84B70, GetBgTilemapBuffer(1)); + gUnknown_203B118->unk_12++; + break; + case 3: + if (gSaveBlock2Ptr->playerGender == MALE) + LoadCompressedPalette(gUnknown_8E84CB0, 0, 0x80); + else + LoadCompressedPalette(gUnknown_8E84D20, 0, 0x80); + gUnknown_203B118->unk_12++; + break; + case 4: + LoadCompressedObjectPic(&gUnknown_8463218); + gUnknown_203B118->unk_12++; + break; + default: + sub_81338A8(); + gUnknown_203B118->unk_12 = 0; + return TRUE; + } + + return FALSE; +} + +void sub_8131C10(void) +{ + struct BagPocket * pocket = &gUnknown_20398A4; + gUnknown_203B124 = Alloc((pocket->capacity + 1) * sizeof(struct ListMenuItem)); + gUnknown_203B128 = Alloc(gUnknown_203B118->unk_06 * 29); +} + +void sub_8131C50(void) +{ + struct BagPocket * pocket = &gUnknown_20398A4; + u16 i; + + for (i = 0; i < gUnknown_203B118->unk_06; i++) + { + sub_8131D48(gUnknown_203B128[i], pocket->itemSlots[i].itemId); + gUnknown_203B124[i].unk_00 = gUnknown_203B128[i]; + gUnknown_203B124[i].unk_04 = i; + } + gUnknown_203B124[i].unk_00 = gUnknown_84166DB; + gUnknown_203B124[i].unk_04 = -2; + gUnknown_3005E70.items = gUnknown_203B124; + gUnknown_3005E70.totalItems = gUnknown_203B118->unk_06 + 1; + gUnknown_3005E70.windowId = 0; + gUnknown_3005E70.header_X = 0; + gUnknown_3005E70.item_X = 8; + gUnknown_3005E70.cursor_X = 0; + gUnknown_3005E70.lettersSpacing = 0; + gUnknown_3005E70.itemVerticalPadding = 2; + gUnknown_3005E70.upText_Y = 2; + gUnknown_3005E70.maxShowed = gUnknown_203B118->unk_05; + gUnknown_3005E70.fontId = 2; + gUnknown_3005E70.cursorPal = 2; + gUnknown_3005E70.fillValue = 0; + gUnknown_3005E70.cursorShadowPal = 3; + gUnknown_3005E70.moveCursorFunc = sub_8131E18; + gUnknown_3005E70.itemPrintFunc = sub_8131E68; + gUnknown_3005E70.cursorKind = 0; + gUnknown_3005E70.scrollMultiple = 0; +} + +void sub_8131D48(u8 * dest, u16 itemId) +{ + StringCopy(gStringVar4, gUnknown_84166FF); + if (itemId >= ITEM_HM01) + { + StringAppend(gStringVar4, gUnknown_8463178); + StringAppend(gStringVar4, gUnknown_8416226); + ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 1); + StringAppend(gStringVar4, gStringVar1); + } + else + { + StringAppend(gStringVar4, gUnknown_8416226); + ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(gStringVar4, gStringVar1); + } + StringAppend(gStringVar4, gUnknown_846317C); + StringAppend(gStringVar4, gUnknown_8416703); + StringAppend(gStringVar4, gMoveNames[ItemIdToBattleMoveId(itemId)]); + StringCopy(dest, gStringVar4); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index 36b7c991c..0d1a18e6d 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1511,30 +1511,7 @@ gUnknown_203B0EE: @ 203B0EE .include "src/fame_checker.o" .include "src/oak_speech.o" - -gUnknown_203B10C: @ 203B10C - .space 0xA - -gUnknown_203B116: @ 203B116 - .space 0x2 - -gUnknown_203B118: @ 203B118 - .space 0x4 - -gUnknown_203B11C: @ 203B11C - .space 0x4 - -gUnknown_203B120: @ 203B120 - .space 0x4 - -gUnknown_203B124: @ 203B124 - .space 0x4 - -gUnknown_203B128: @ 203B128 - .space 0x4 - -gUnknown_203B12C: @ 203B12C - .space 0x4 + .include "src/tm_case.o" gUnknown_203B130: @ 203B130 .space 0x10 |