diff options
author | luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> | 2020-06-24 13:57:19 -0400 |
---|---|---|
committer | luckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com> | 2020-06-24 13:57:19 -0400 |
commit | 114a5b9b6f75163849e031684b154f754a03d08a (patch) | |
tree | 4f1ca6c073ab2360645c370222a9cd293410405d | |
parent | a04106a011429db1a474fedd1fd30d892309e4dd (diff) |
pokemon_summary_screen.c, part 5.
-rw-r--r-- | asm/pokemon_summary_screen.s | 397 | ||||
-rw-r--r-- | include/pokemon_summary_screen.h | 11 | ||||
-rw-r--r-- | src/pokemon_summary_screen.c | 195 |
3 files changed, 200 insertions, 403 deletions
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index c5e8ad801..2d129650d 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -5,403 +5,6 @@ .text - thumb_func_start sub_8136AEC -sub_8136AEC: @ 8136AEC - push {lr} - ldr r0, _08136B08 @ =gMonSummaryScreen - ldr r0, [r0] - ldr r1, _08136B0C @ =0x0000327c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bhi _08136B86 - lsls r0, 2 - ldr r1, _08136B10 @ =_08136B14 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08136B08: .4byte gMonSummaryScreen -_08136B0C: .4byte 0x0000327c -_08136B10: .4byte _08136B14 - .align 2, 0 -_08136B14: - .4byte _08136B38 - .4byte _08136B42 - .4byte _08136B4C - .4byte _08136B52 - .4byte _08136B5C - .4byte _08136B66 - .4byte _08136B70 - .4byte _08136B7A - .4byte _08136B80 -_08136B38: - movs r0, 0xA0 - movs r1, 0xA0 - bl sub_813ADA8 - b _08136B8E -_08136B42: - movs r0, 0x96 - movs r1, 0x96 - bl sub_813ABAC - b _08136B8E -_08136B4C: - bl sub_813AFFC - b _08136B8E -_08136B52: - movs r0, 0x64 - movs r1, 0x64 - bl sub_8139F64 - b _08136B8E -_08136B5C: - movs r0, 0x6E - movs r1, 0x6E - bl sub_813A254 - b _08136B8E -_08136B66: - movs r0, 0x78 - movs r1, 0x78 - bl sub_813A45C - b _08136B8E -_08136B70: - movs r0, 0x82 - movs r1, 0x82 - bl sub_813A874 - b _08136B8E -_08136B7A: - bl sub_8139CB0 - b _08136B8E -_08136B80: - bl sub_8139DBC - b _08136B8E -_08136B86: - bl sub_813995C - movs r0, 0x1 - b _08136B9E -_08136B8E: - ldr r0, _08136BA4 @ =gMonSummaryScreen - ldr r1, [r0] - ldr r0, _08136BA8 @ =0x0000327c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - movs r0, 0 -_08136B9E: - pop {r1} - bx r1 - .align 2, 0 -_08136BA4: .4byte gMonSummaryScreen -_08136BA8: .4byte 0x0000327c - thumb_func_end sub_8136AEC - - thumb_func_start sub_8136BAC -sub_8136BAC: @ 8136BAC - push {lr} - bl ResetSpriteData - bl ResetPaletteFade - bl FreeAllSpritePalettes - bl ScanlineEffect_Stop - pop {r0} - bx r0 - thumb_func_end sub_8136BAC - - thumb_func_start sub_8136BC4 -sub_8136BC4: @ 8136BC4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0x4 - mov r8, r0 - mov r2, sp - movs r6, 0 - ldr r1, _08136D38 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _08136D3C @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_08136BEA: - strh r6, [r2] - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _08136BEA - strh r6, [r2] - mov r2, sp - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0x4] - ldr r2, _08136D38 @ =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - mov r0, sp - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08136D40 @ =gUnknown_8463EFC - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - bl DeactivateAllTextPrinters - ldr r1, _08136D44 @ =0x00005040 - movs r0, 0 - bl SetGpuReg - ldr r4, _08136D48 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r2, _08136D4C @ =0x00003214 - adds r0, r2 - ldrb r0, [r0] - bl sub_813B750 - movs r1, 0xF8 - lsls r1, 5 - movs r0, 0x48 - bl SetGpuReg - movs r0, 0x4A - movs r1, 0xF - bl SetGpuReg - ldr r1, _08136D50 @ =0x00002087 - movs r0, 0x46 - bl SetGpuReg - movs r1, 0xBC - lsls r1, 2 - movs r0, 0x42 - bl SetGpuReg - ldr r1, [r4] - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - movs r0, 0x80 - lsls r0, 5 - adds r1, r0 - movs r0, 0x2 - bl SetBgTilemapBuffer - ldr r1, [r4] - movs r2, 0x80 - lsls r2, 6 - adds r1, r2 - movs r0, 0x3 - bl SetBgTilemapBuffer - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08136D38: .4byte 0x040000d4 -_08136D3C: .4byte 0x81000800 -_08136D40: .4byte gUnknown_8463EFC -_08136D44: .4byte 0x00005040 -_08136D48: .4byte gMonSummaryScreen -_08136D4C: .4byte 0x00003214 -_08136D50: .4byte 0x00002087 - thumb_func_end sub_8136BC4 - - thumb_func_start sub_8136D54 -sub_8136D54: @ 8136D54 - push {r4,lr} - ldr r4, _08136D70 @ =gMonSummaryScreen - ldr r0, [r4] - ldr r1, _08136D74 @ =0x00003208 - adds r0, r1 - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08136D7C - ldr r0, _08136D78 @ =sub_81393D4 - b _08136D7E - .align 2, 0 -_08136D70: .4byte gMonSummaryScreen -_08136D74: .4byte 0x00003208 -_08136D78: .4byte sub_81393D4 -_08136D7C: - ldr r0, _08136D98 @ =sub_8134840 -_08136D7E: - movs r1, 0 - bl CreateTask - ldr r1, [r4] - ldr r2, _08136D9C @ =0x00003018 - adds r1, r2 - strb r0, [r1] - ldr r0, _08136DA0 @ =sub_8137EE8 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08136D98: .4byte sub_8134840 -_08136D9C: .4byte 0x00003018 -_08136DA0: .4byte sub_8137EE8 - thumb_func_end sub_8136D54 - - thumb_func_start sub_8136DA4 -sub_8136DA4: @ 8136DA4 - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r5, _08136DE8 @ =gMonSummaryScreen - ldr r0, [r5] - movs r4, 0xC0 - lsls r4, 6 - adds r0, r4 - ldrb r0, [r0] - movs r1, 0 - bl FillWindowPixelBuffer - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - ldr r1, _08136DEC @ =gUnknown_8463FA7 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - str r6, [sp, 0x8] - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl PutWindowTilemap - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08136DE8: .4byte gMonSummaryScreen -_08136DEC: .4byte gUnknown_8463FA7 - thumb_func_end sub_8136DA4 - - thumb_func_start sub_8136DF0 -sub_8136DF0: @ 8136DF0 - push {r4-r6,lr} - sub sp, 0xC - adds r6, r0, 0 - ldr r5, _08136E44 @ =gMonSummaryScreen - ldr r0, [r5] - ldr r4, _08136E48 @ =0x00003001 - adds r0, r4 - ldrb r0, [r0] - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - adds r1, r6, 0 - movs r2, 0 - bl GetStringWidth - ldr r1, [r5] - adds r1, r4 - ldrb r1, [r1] - movs r2, 0x54 - subs r2, r0 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _08136E4C @ =gUnknown_8463FA7 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r6, [sp, 0x8] - adds r0, r1, 0 - movs r1, 0 - movs r3, 0 - bl AddTextPrinterParameterized3 - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - bl PutWindowTilemap - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08136E44: .4byte gMonSummaryScreen -_08136E48: .4byte 0x00003001 -_08136E4C: .4byte gUnknown_8463FA7 - thumb_func_end sub_8136DF0 - thumb_func_start sub_8136E50 sub_8136E50: @ 8136E50 push {r4-r7,lr} diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h index 0c1a2f221..c28dccfee 100644 --- a/include/pokemon_summary_screen.h +++ b/include/pokemon_summary_screen.h @@ -58,4 +58,15 @@ s32 GetLastViewedMonIndex(void); void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4); void sub_8138B38(u8); +#define TAG_PSS_UNK_64 0x64 +#define TAG_PSS_UNK_65 0x65 +#define TAG_PSS_UNK_66 0x66 +#define TAG_PSS_UNK_67 0x67 +#define TAG_PSS_UNK_6E 0x6E +#define TAG_PSS_UNK_78 0x78 +#define TAG_PSS_UNK_82 0x82 +#define TAG_PSS_UNK_8C 0x8C +#define TAG_PSS_UNK_96 0x96 +#define TAG_PSS_UNK_A0 0xA0 + #endif // GUARD_POKEMON_SUMMARY_SCREEN_H diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index e566fe6fc..fcf850ea7 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -18,6 +18,7 @@ #include "constants/party_menu.h" #include "trade.h" #include "battle_main.h" +#include "scanline_effect.h" extern void sub_8138B8C(struct Pokemon * mon); void sub_8135C34(void); @@ -45,8 +46,8 @@ extern void sub_8136F4C(void); extern void sub_81374E8(void); extern void sub_8137BD0(void); extern void sub_8138A38(void); -extern void sub_8136DA4(const u8 * str); -extern void sub_8136DF0(const u8 * str); +void sub_8136DA4(const u8 * str); +void sub_8136DF0(const u8 * str); extern void sub_8136E50(const u8 * str); void sub_81358DC(u8, u8); extern void sub_813A838(u8 invisible); @@ -60,15 +61,15 @@ extern void sub_813AEB0(u8 invisible); extern void sub_813A0E8(u8 invisible); extern void sub_8139EE4(u8 invisible); extern void sub_81381AC(void); -extern void sub_8136BC4(void); -extern void sub_8136BAC(void); +void sub_8136BC4(void); +void sub_8136BAC(void); u8 sub_8135F20(void); -extern u8 sub_8136AEC(void); +u8 sub_8136AEC(void); extern void sub_81381D0(void); u8 sub_8136040(void); extern void sub_8137E28(void); extern void sub_81381C0(void); -extern void sub_8136D54(void); +void sub_8136D54(void); extern void sub_81360D4(void); extern void sub_8136350(void); extern void sub_81367B0(void); @@ -76,6 +77,18 @@ extern u8 sub_8138C5C(u32 status); void sub_81367E8(u8); extern u16 sub_8138BEC(struct Pokemon * mon, u8 i); extern u16 sub_8138C24(struct Pokemon * mon, u8 i); +extern void sub_813ADA8(u16, u16); +extern void sub_813ABAC(u16, u16); +extern void sub_813AFFC(void); +extern void sub_8139F64(u16, u16); +extern void sub_813A254(u16, u16); +extern void sub_813A45C(u16, u16); +extern void sub_813A874(u16, u16); +extern void sub_8139CB0(void); +extern void sub_8139DBC(void); +extern void sub_813995C(void); +extern void sub_81393D4(u8 taskId); +extern void sub_8137EE8(void); struct PokemonSummaryScreenData { u16 unk0[0x800]; @@ -254,6 +267,10 @@ extern const u32 gUnknown_8E9A460[]; extern const u32 gUnknown_84636C0[]; extern const u32 gUnknown_8463700[]; +extern const struct BgTemplate gUnknown_8463EFC[4]; + +extern const u8 gUnknown_8463FA7[][3]; + void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, MainCallback savedCallback, u8 mode) { gMonSummaryScreen = AllocZeroed(sizeof(struct PokemonSummaryScreenData)); @@ -1583,3 +1600,169 @@ void sub_81367E8(u8 i) ConvertIntToDecimalStringN(gMonSummaryScreen->summary.unk3188[i], gBattleMoves[gMonSummaryScreen->unk325A[i]].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); } +u8 sub_8136AEC(void) +{ + switch (gMonSummaryScreen->unk327C) + { + case 0: + sub_813ADA8(TAG_PSS_UNK_A0, TAG_PSS_UNK_A0); + break; + case 1: + sub_813ABAC(TAG_PSS_UNK_96, TAG_PSS_UNK_96); + break; + case 2: + sub_813AFFC(); + break; + case 3: + sub_8139F64(TAG_PSS_UNK_64, TAG_PSS_UNK_64); + break; + case 4: + sub_813A254(TAG_PSS_UNK_6E, TAG_PSS_UNK_6E); + break; + case 5: + sub_813A45C(TAG_PSS_UNK_78, TAG_PSS_UNK_78); + break; + case 6: + sub_813A874(TAG_PSS_UNK_82, TAG_PSS_UNK_82); + break; + case 7: + sub_8139CB0(); + break; + case 8: + sub_8139DBC(); + break; + default: + sub_813995C(); + return TRUE; + } + + gMonSummaryScreen->unk327C++; + return FALSE; +} + +void sub_8136BAC(void) +{ + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ScanlineEffect_Stop(); +} + +void sub_8136BC4(void) +{ + DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000); + DmaClear32(3, (void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + + SetGpuReg(REG_OFFSET_DISPCNT, 0); + + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8463EFC, ARRAY_COUNT(gUnknown_8463EFC)); + + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + + DeactivateAllTextPrinters(); + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON | DISPCNT_WIN1_ON); + + sub_813B750(gMonSummaryScreen->curPageIndex); + + SetGpuReg(REG_OFFSET_WININ, (WININ_WIN0_OBJ | WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3) << 8); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3); + SetGpuReg(REG_OFFSET_WIN1V, 32 << 8 | 135); + SetGpuReg(REG_OFFSET_WIN1H, 2 << 8 | 240); + + SetBgTilemapBuffer(1, gMonSummaryScreen->unk0); + SetBgTilemapBuffer(2, gMonSummaryScreen->unk1000); + SetBgTilemapBuffer(3, gMonSummaryScreen->unk2000); + + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); +} + +void sub_8136D54(void) +{ + if (gMonSummaryScreen->mode == PSS_MODE_SELECT_MOVE || gMonSummaryScreen->mode == PSS_MODE_FORGET_MOVE) + gMonSummaryScreen->unk3018 = CreateTask(sub_81393D4, 0); + else + gMonSummaryScreen->unk3018 = CreateTask(sub_8134840, 0); + + SetMainCallback2(sub_8137EE8); +} + +void sub_8136DA4(const u8 * str) +{ + FillWindowPixelBuffer(gMonSummaryScreen->unk3000[0], 0); + AddTextPrinterParameterized3(gMonSummaryScreen->unk3000[0], 2, 4, 1, gUnknown_8463FA7[0], 0, str); + PutWindowTilemap(gMonSummaryScreen->unk3000[0]); +} + +#ifdef NONMATCHING +void sub_8136DF0(const u8 * str) +{ + u8 v0; + + FillWindowPixelBuffer(gMonSummaryScreen->unk3000[1], 0); + v0 = (u8)(0x54 - GetStringWidth(0, str, 0)); + AddTextPrinterParameterized3(gMonSummaryScreen->unk3000[1], 0, v0, 0, gUnknown_8463FA7[0], 0, str); + PutWindowTilemap(gMonSummaryScreen->unk3000[1]); +} +#else +NAKED +void sub_8136DF0(const u8 * str) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0xC\n" + "\tadds r6, r0, 0\n" + "\tldr r5, _08136E44 @ =gMonSummaryScreen\n" + "\tldr r0, [r5]\n" + "\tldr r4, _08136E48 @ =0x00003001\n" + "\tadds r0, r4\n" + "\tldrb r0, [r0]\n" + "\tmovs r1, 0\n" + "\tbl FillWindowPixelBuffer\n" + "\tmovs r0, 0\n" + "\tadds r1, r6, 0\n" + "\tmovs r2, 0\n" + "\tbl GetStringWidth\n" + "\tldr r1, [r5]\n" + "\tadds r1, r4\n" + "\tldrb r1, [r1]\n" + "\tmovs r2, 0x54\n" + "\tsubs r2, r0\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tldr r0, _08136E4C @ =gUnknown_8463FA7\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r6, [sp, 0x8]\n" + "\tadds r0, r1, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "\tldr r0, [r5]\n" + "\tadds r0, r4\n" + "\tldrb r0, [r0]\n" + "\tbl PutWindowTilemap\n" + "\tadd sp, 0xC\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08136E44: .4byte gMonSummaryScreen\n" + "_08136E48: .4byte 0x00003001\n" + "_08136E4C: .4byte gUnknown_8463FA7\n"); +} +#endif + +
\ No newline at end of file |