diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-16 12:36:34 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-06-16 12:36:34 -0400 |
commit | 4f4b03af6077787ceef226d9085242966c69b6bd (patch) | |
tree | 9df26defae89203e8b7d8dade37c038fecf837dd | |
parent | 7e1c966eb36db080c43d9aad2419ee68356656ef (diff) |
item_pc: sub_810D878
-rw-r--r-- | asm/item_pc.s | 330 | ||||
-rw-r--r-- | data/data_835B488.s | 4 | ||||
-rw-r--r-- | data/data_83FECCC.s | 3 | ||||
-rw-r--r-- | graphics/item_pc/unk_8E85090.png | bin | 0 -> 746 bytes | |||
-rw-r--r-- | graphics/item_pc/unk_8E85458.bin | bin | 0 -> 2048 bytes | |||
-rw-r--r-- | graphics_file_rules.mk | 4 | ||||
-rw-r--r-- | include/graphics.h | 7 | ||||
-rw-r--r-- | include/strings.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/item_pc.c | 156 |
10 files changed, 165 insertions, 341 deletions
diff --git a/asm/item_pc.s b/asm/item_pc.s index b8844a406..f70f0c7f1 100644 --- a/asm/item_pc.s +++ b/asm/item_pc.s @@ -5,336 +5,6 @@ .text - thumb_func_start sub_810D6AC -sub_810D6AC: @ 810D6AC - push {lr} - sub sp, 0x4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0810D6DC @ =sub_810D6E8 - movs r1, 0 - bl CreateTask - ldr r0, _0810D6E0 @ =sub_810D48C - bl SetVBlankCallback - ldr r0, _0810D6E4 @ =sub_810D470 - bl SetMainCallback2 - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0810D6DC: .4byte sub_810D6E8 -_0810D6E0: .4byte sub_810D48C -_0810D6E4: .4byte sub_810D470 - thumb_func_end sub_810D6AC - - thumb_func_start sub_810D6E8 -sub_810D6E8: @ 810D6E8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0810D714 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0810D70C - ldr r0, _0810D718 @ =gUnknown_203ADCC - ldr r0, [r0] - bl SetMainCallback2 - bl sub_810DC40 - adds r0, r4, 0 - bl DestroyTask -_0810D70C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0810D714: .4byte gPaletteFade -_0810D718: .4byte gUnknown_203ADCC - thumb_func_end sub_810D6E8 - - thumb_func_start sub_810D71C -sub_810D71C: @ 810D71C - push {r4,r5,lr} - bl InitBgReg - ldr r5, _0810D77C @ =gUnknown_203ADC0 - movs r4, 0x80 - lsls r4, 4 - adds r0, r4, 0 - bl Alloc - str r0, [r5] - cmp r0, 0 - beq _0810D784 - movs r1, 0 - adds r2, r4, 0 - bl memset - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0810D780 @ =gUnknown_8453F6C - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - ldr r1, [r5] - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0x1 - 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, 0x1 - b _0810D786 - .align 2, 0 -_0810D77C: .4byte gUnknown_203ADC0 -_0810D780: .4byte gUnknown_8453F6C -_0810D784: - movs r0, 0 -_0810D786: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_810D71C - - thumb_func_start sub_810D78C -sub_810D78C: @ 810D78C - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _0810D7A8 @ =gUnknown_203ADBC - ldr r0, [r5] - movs r1, 0xC - ldrsh r4, [r0, r1] - cmp r4, 0x1 - beq _0810D7D0 - cmp r4, 0x1 - bgt _0810D7AC - cmp r4, 0 - beq _0810D7B6 - b _0810D814 - .align 2, 0 -_0810D7A8: .4byte gUnknown_203ADBC -_0810D7AC: - cmp r4, 0x2 - beq _0810D7F0 - cmp r4, 0x3 - beq _0810D800 - b _0810D814 -_0810D7B6: - bl reset_temp_tile_data_buffers - ldr r1, _0810D7CC @ =gUnknown_8E85090 - str r4, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - b _0810D806 - .align 2, 0 -_0810D7CC: .4byte gUnknown_8E85090 -_0810D7D0: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0810D830 - ldr r0, _0810D7E8 @ =gUnknown_8E85458 - ldr r1, _0810D7EC @ =gUnknown_203ADC0 - ldr r1, [r1] - bl LZDecompressWram - b _0810D806 - .align 2, 0 -_0810D7E8: .4byte gUnknown_8E85458 -_0810D7EC: .4byte gUnknown_203ADC0 -_0810D7F0: - ldr r0, _0810D7FC @ =gUnknown_8E85408 - movs r1, 0 - movs r2, 0x60 - bl LoadCompressedPalette - b _0810D806 - .align 2, 0 -_0810D7FC: .4byte gUnknown_8E85408 -_0810D800: - ldr r0, _0810D810 @ =gUnknown_83D4240 - bl LoadCompressedObjectPic -_0810D806: - ldr r1, [r5] - ldrh r0, [r1, 0xC] - adds r0, 0x1 - strh r0, [r1, 0xC] - b _0810D830 - .align 2, 0 -_0810D810: .4byte gUnknown_83D4240 -_0810D814: - ldr r0, _0810D828 @ =gUnknown_83D4248 - bl LoadCompressedObjectPalette - ldr r0, _0810D82C @ =gUnknown_203ADBC - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0xC] - movs r0, 0x1 - b _0810D832 - .align 2, 0 -_0810D828: .4byte gUnknown_83D4248 -_0810D82C: .4byte gUnknown_203ADBC -_0810D830: - movs r0, 0 -_0810D832: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_810D78C - - thumb_func_start sub_810D83C -sub_810D83C: @ 810D83C - push {r4,lr} - ldr r4, _0810D860 @ =gUnknown_203ADC4 - movs r0, 0xF8 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0810D868 - ldr r4, _0810D864 @ =gUnknown_203ADC8 - movs r0, 0xD9 - lsls r0, 1 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0810D868 - movs r0, 0x1 - b _0810D872 - .align 2, 0 -_0810D860: .4byte gUnknown_203ADC4 -_0810D864: .4byte gUnknown_203ADC8 -_0810D868: - bl sub_810DC40 - bl sub_810D6AC - movs r0, 0 -_0810D872: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_810D83C - - thumb_func_start sub_810D878 -sub_810D878: @ 810D878 - push {r4,r5,lr} - movs r4, 0 - b _0810D8A4 -_0810D87E: - ldr r0, _0810D938 @ =gSaveBlock1Ptr - ldr r0, [r0] - lsls r1, r4, 2 - adds r0, r1 - movs r1, 0xA6 - lsls r1, 2 - adds r0, r1 - ldrh r0, [r0] - bl ItemId_GetItem - ldr r1, _0810D93C @ =gUnknown_203ADC4 - ldr r2, [r1] - lsls r1, r4, 3 - adds r1, r2 - str r0, [r1] - str r4, [r1, 0x4] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 -_0810D8A4: - ldr r0, _0810D940 @ =gUnknown_203ADBC - ldr r0, [r0] - ldrb r0, [r0, 0x7] - cmp r4, r0 - bcc _0810D87E - ldr r0, _0810D93C @ =gUnknown_203ADC4 - ldr r3, [r0] - lsls r0, r4, 3 - adds r0, r3 - ldr r1, _0810D944 @ =gFameCheckerText_Cancel - str r1, [r0] - movs r1, 0x2 - negs r1, r1 - str r1, [r0, 0x4] - ldr r2, _0810D948 @ =gMultiuseListMenuTemplate - str r3, [r2] - ldr r0, _0810D940 @ =gUnknown_203ADBC - ldr r3, [r0] - ldrb r0, [r3, 0x7] - adds r0, 0x1 - movs r1, 0 - strh r0, [r2, 0xC] - strb r1, [r2, 0x10] - strb r1, [r2, 0x11] - movs r0, 0x9 - strb r0, [r2, 0x12] - movs r1, 0x1 - movs r0, 0x1 - strb r0, [r2, 0x13] - ldrb r0, [r2, 0x16] - movs r4, 0x8 - negs r4, r4 - ands r4, r0 - orrs r4, r1 - 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, 0x6] - 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, _0810D94C @ =sub_810D954 - str r0, [r2, 0x4] - ldr r0, _0810D950 @ =sub_810DA20 - str r0, [r2, 0x8] - movs r0, 0x3F - ands r4, r0 - strb r4, [r2, 0x16] - ands r3, r0 - strb r3, [r2, 0x17] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0810D938: .4byte gSaveBlock1Ptr -_0810D93C: .4byte gUnknown_203ADC4 -_0810D940: .4byte gUnknown_203ADBC -_0810D944: .4byte gFameCheckerText_Cancel -_0810D948: .4byte gMultiuseListMenuTemplate -_0810D94C: .4byte sub_810D954 -_0810D950: .4byte sub_810DA20 - thumb_func_end sub_810D878 - thumb_func_start sub_810D954 sub_810D954: @ 810D954 push {r4,r5,lr} diff --git a/data/data_835B488.s b/data/data_835B488.s index 7970f26c4..0f7851b83 100644 --- a/data/data_835B488.s +++ b/data/data_835B488.s @@ -557,10 +557,10 @@ gUnknown_83D41FC:: @ 83D41FC .incbin "baserom.gba", 0x3D41FC, 0x44 gUnknown_83D4240:: @ 83D4240 - .incbin "baserom.gba", 0x3D4240, 0x8 + obj_tiles gFile_graphics_interface_bag_swap_sheet, 0x0100, 0x0065 gUnknown_83D4248:: @ 83D4248 - .incbin "baserom.gba", 0x3D4248, 0x8 + obj_pal gFile_graphics_interface_bag_swap_palette, 0x0065 gUnknown_83D4250:: @ 83D4250 .incbin "baserom.gba", 0x3D4250, 0x2C diff --git a/data/data_83FECCC.s b/data/data_83FECCC.s index e84c93578..33feb4cee 100644 --- a/data/data_83FECCC.s +++ b/data/data_83FECCC.s @@ -3071,9 +3071,6 @@ gUnknown_8453094:: @ 8453094 .section .rodata.8453F6C // item_pc.o -gUnknown_8453F6C:: @ 8453F6C - .incbin "baserom.gba", 0x453F6C, 0x8 - gUnknown_8453F74:: @ 8453F74 .incbin "baserom.gba", 0x453F74, 0x18 diff --git a/graphics/item_pc/unk_8E85090.png b/graphics/item_pc/unk_8E85090.png Binary files differnew file mode 100644 index 000000000..6c6748683 --- /dev/null +++ b/graphics/item_pc/unk_8E85090.png diff --git a/graphics/item_pc/unk_8E85458.bin b/graphics/item_pc/unk_8E85458.bin Binary files differnew file mode 100644 index 000000000..046ef83b4 --- /dev/null +++ b/graphics/item_pc/unk_8E85458.bin diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk index 64d9d5c34..dfe15881a 100644 --- a/graphics_file_rules.mk +++ b/graphics_file_rules.mk @@ -21,6 +21,7 @@ MISCGFXDIR := graphics/misc TEXTWINDOWGFXDIR := graphics/text_window TEACHYTVGFXDIR := graphics/teachy_tv SSANNEGFXDIR := graphics/ss_anne +ITEMPCGFXDIR := graphics/item_pc types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark contest_types := cool beauty cute smart tough @@ -482,3 +483,6 @@ $(TEACHYTVGFXDIR)/tiles.4bpp: %.4bpp: %.png $(SSANNEGFXDIR)/unk_8479A38.4bpp: %.4bpp: %.png $(GFX) $< $@ -num_tiles 17 + +$(ITEMPCGFXDIR)/unk_8E85090.4bpp: %.4bpp: %.png + $(GFX) $< $@ -num_tiles 82 diff --git a/include/graphics.h b/include/graphics.h index 98f9750d4..96a39ae7c 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -176,7 +176,6 @@ extern const u8 gUnknown_8E86D6C[]; extern const u8 gUnknown_8E86F98[]; // berry_fix_program - extern const u8 gBerryFixGameboy_Gfx[]; extern const u8 gBerryFixGameboy_Tilemap[]; extern const u8 gBerryFixGameboy_Pal[]; @@ -196,4 +195,10 @@ extern const u8 gBerryFixWindow_Gfx[]; extern const u8 gBerryFixWindow_Tilemap[]; extern const u8 gBerryFixWindow_Pal[]; +// item_pc + +extern const u8 gUnknown_8E85090[]; +extern const u8 gUnknown_8E85408[]; +extern const u8 gUnknown_8E85458[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/strings.h b/include/strings.h index 0a8af28d1..e624fe407 100644 --- a/include/strings.h +++ b/include/strings.h @@ -113,6 +113,7 @@ extern const u8 gText_ICanPayThisMuch_WouldThatBeOkay[]; extern const u8 gText_TurnedOverItemsWorthYen[]; extern const u8 gPokeDudeText_TMTypes[]; extern const u8 gPokeDudeText_ReadTMDescription[]; +extern const u8 gFameCheckerText_Cancel[]; // teachy_tv extern const u8 gTeachyTvString_TeachBattle[]; diff --git a/ld_script.txt b/ld_script.txt index 341980802..6360e600f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -417,6 +417,7 @@ SECTIONS { src/bag.o(.rodata); src/trainer_pokemon_sprites.o(.rodata); src/vs_seeker.o(.rodata); + src/item_pc.o(.rodata); data/data_83FECCC.o(.rodata.8453F6C); src/quest_log.o(.rodata); data/data_83FECCC.o(.rodata.8456C74); diff --git a/src/item_pc.c b/src/item_pc.c index 8e4502430..2b63651e7 100644 --- a/src/item_pc.c +++ b/src/item_pc.c @@ -1,5 +1,10 @@ #include "global.h" +#include "bg.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "graphics.h" #include "help_system.h" +#include "item.h" #include "item_menu_icons.h" #include "list_menu.h" #include "main.h" @@ -10,6 +15,7 @@ #include "pc_screen_effect.h" #include "scanline_effect.h" #include "sound.h" +#include "strings.h" #include "task.h" #include "constants/songs.h" @@ -18,10 +24,11 @@ struct ItemPcResources u32 field_00; u8 field_04; u8 field_05; - u8 filler_06[2]; + u8 field_06; + u8 field_07; u8 field_08; u8 filler_09[3]; - u16 field_0C[3]; + s16 field_0C[3]; }; struct ItemPcStaticResources @@ -33,27 +40,48 @@ struct ItemPcStaticResources }; 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 u8 * gUnknown_203ADC0 = NULL; +EWRAM_DATA struct ListMenuItem * gUnknown_203ADC4 = NULL; +EWRAM_DATA void * gUnknown_203ADC8 = NULL; EWRAM_DATA struct ItemPcStaticResources gUnknown_203ADCC = {}; +extern const struct CompressedSpriteSheet gUnknown_83D4240; +extern const struct CompressedSpritePalette gUnknown_83D4248; + void sub_810D4A0(void); bool8 sub_810D4C0(void); void sub_810D6AC(void); +void sub_810D6E8(u8 taskId); bool8 sub_810D71C(void); bool8 sub_810D78C(void); bool8 sub_810D83C(void); void sub_810D878(void); +void sub_810D954(s32 itemIndex, bool8 onInit, struct ListMenu * list); +void sub_810DA20(u8 windowId, s32 itemId, u8 y); void sub_810E8F0(void); void sub_810DB34(void); void sub_810DB5C(void); void sub_810DBF0(void); +void sub_810DC40(void); void sub_810DDA4(void); void sub_810DE08(void); void sub_810DE94(u8); void sub_810DEA0(u8 taskId); +const struct BgTemplate gUnknown_8453F6C[2] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .priority = 0 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 30, + .priority = 1 + } +}; + void sub_810D3F4(u8 a0, MainCallback callback) { u8 i; @@ -236,3 +264,121 @@ bool8 sub_810D4C0(void) } return FALSE; } + +void sub_810D6AC(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + CreateTask(sub_810D6E8, 0); + SetVBlankCallback(sub_810D48C); + SetMainCallback2(sub_810D470); +} + +void sub_810D6E8(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_203ADCC.field_0); + sub_810DC40(); + DestroyTask(taskId); + } +} + +bool8 sub_810D71C(void) +{ + InitBgReg(); + gUnknown_203ADC0 = Alloc(0x800); + if (gUnknown_203ADC0 == NULL) + return FALSE; + memset(gUnknown_203ADC0, 0, 0x800); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8453F6C, NELEMS(gUnknown_8453F6C)); + SetBgTilemapBuffer(1, gUnknown_203ADC0); + schedule_bg_copy_tilemap_to_vram(1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetGpuReg(REG_OFFSET_BLDCNT , 0); + ShowBg(0); + ShowBg(1); + return TRUE; +} + +bool8 sub_810D78C(void) +{ + switch (gUnknown_203ADBC->field_0C[0]) + { + case 0: + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8E85090, 0, 0, 0); + gUnknown_203ADBC->field_0C[0]++; + break; + case 1: + if (free_temp_tile_data_buffers_if_possible() != TRUE) + { + LZDecompressWram(gUnknown_8E85458, gUnknown_203ADC0); + gUnknown_203ADBC->field_0C[0]++; + } + break; + case 2: + LoadCompressedPalette(gUnknown_8E85408, 0x00, 0x60); + gUnknown_203ADBC->field_0C[0]++; + break; + case 3: + LoadCompressedObjectPic(&gUnknown_83D4240); + gUnknown_203ADBC->field_0C[0]++; + break; + default: + LoadCompressedObjectPalette(&gUnknown_83D4248); + gUnknown_203ADBC->field_0C[0] = 0; + return TRUE; + } + return FALSE; +} + +#define sub_810D83C_sub(ptr__, size) ({ \ + void ** ptr = (void **)&(ptr__); \ + *ptr = Alloc(size); \ + if (*ptr == NULL) \ + { \ + sub_810DC40(); \ + sub_810D6AC(); \ + return FALSE; \ + } \ +}) + +bool8 sub_810D83C(void) +{ + sub_810D83C_sub(gUnknown_203ADC4, 0x0F8); + sub_810D83C_sub(gUnknown_203ADC8, 0x1B2); + return TRUE; +} + +void sub_810D878(void) +{ + u16 i; + + for (i = 0; i < gUnknown_203ADBC->field_07; i++) + { + gUnknown_203ADC4[i].label = ItemId_GetItem(gSaveBlock1Ptr->pcItems[i].itemId)->name; + gUnknown_203ADC4[i].index = i; + } + gUnknown_203ADC4[i].label = gFameCheckerText_Cancel; + gUnknown_203ADC4[i].index = -2; + + gMultiuseListMenuTemplate.items = gUnknown_203ADC4; + gMultiuseListMenuTemplate.totalItems = gUnknown_203ADBC->field_07 + 1; + gMultiuseListMenuTemplate.windowId = 0; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 1; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.maxShowed = gUnknown_203ADBC->field_06; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.cursorPal = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorShadowPal = 3; + gMultiuseListMenuTemplate.moveCursorFunc = sub_810D954; + gMultiuseListMenuTemplate.itemPrintFunc = sub_810DA20; + gMultiuseListMenuTemplate.scrollMultiple = 0; + gMultiuseListMenuTemplate.cursorKind = 0; +} |