summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2020-06-24 13:57:19 -0400
committerluckytyphlosion <10688458+luckytyphlosion@users.noreply.github.com>2020-06-24 13:57:19 -0400
commit114a5b9b6f75163849e031684b154f754a03d08a (patch)
tree4f1ca6c073ab2360645c370222a9cd293410405d
parenta04106a011429db1a474fedd1fd30d892309e4dd (diff)
pokemon_summary_screen.c, part 5.
-rw-r--r--asm/pokemon_summary_screen.s397
-rw-r--r--include/pokemon_summary_screen.h11
-rw-r--r--src/pokemon_summary_screen.c195
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