diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/sprite.c | 2 | ||||
-rw-r--r-- | src/pokemon/mail.c | 1706 |
2 files changed, 341 insertions, 1367 deletions
diff --git a/src/engine/sprite.c b/src/engine/sprite.c index df8c66750..a9d84e01a 100644 --- a/src/engine/sprite.c +++ b/src/engine/sprite.c @@ -815,7 +815,7 @@ void ProcessSpriteCopyRequests(void) } } -/*static*/ void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images) +static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images) { if (gSpriteCopyRequestCount < MAX_SPRITE_COPY_REQUESTS) { diff --git a/src/pokemon/mail.c b/src/pokemon/mail.c index 11851410b..16252af64 100644 --- a/src/pokemon/mail.c +++ b/src/pokemon/mail.c @@ -1,7 +1,10 @@ #include "global.h" #include "mail.h" +#include "data2.h" #include "easy_chat.h" #include "constants/items.h" +#include "constants/species.h" +#include "field_fadetransition.h" #include "graphics.h" #include "mail_data.h" #include "menu.h" @@ -10,6 +13,7 @@ #include "palette.h" #include "pokemon_icon.h" #include "overworld.h" +#include "script.h" #include "sprite.h" #include "string_util.h" #include "strings2.h" @@ -18,6 +22,8 @@ #include "scanline_effect.h" #include "ewram.h" +extern u8 (*gMenuCallback)(void); + struct UnkMailStruct { u8 unk_0_0:2; @@ -287,31 +293,6 @@ const u8 Str_8411608[] = _("メールをけす"); // Delete Mail // XXX: what is this? static u8 *const sSharedMemPtr = gSharedMem; -#if DEBUG - -const u8 Str_841160F[] = _("{STR_VAR_1} {STR_VAR_2}"); -const u8 Str_841161A[] = _("メール{STR_VAR_1} {STR_VAR_2}"); -const u8 Str_8411623[] = _("メール{STR_VAR_1}を だれに もたせる?"); -const u8 Str_8411634[] = _("000 {STR_VAR_1}"); -const u8 Str_841163B[] = _("せいきの データが とうろくずみ です\n" - "しんき とうろく できません"); -const u8 Str_841165E[] = _("せいきに とうろくされたメールデータは\n" - "へんこう できません"); -const u8 Str_841167D[] = _("メール{STR_VAR_1} とうろく かいじょ"); -const u8 Str_841168D[] = _("デバッグメニューから とうろくした\n" - "メール いがいは けせません"); -const u8 Str_84116AE[] = _("メール{STR_VAR_1} {STR_VAR_2} {STR_VAR_3}"); - -const struct MenuAction _84116BC[] = -{ - {Str_84115F4, NULL}, - {Str_84115FB, NULL}, - {Str_8411603, NULL}, - {Str_8411608, NULL}, -}; - -#endif - static u8 sub_80F8A28(void); /*static*/ void sub_80F8D50(void); static void sub_80F8DA0(void); @@ -322,226 +303,44 @@ static void sub_80F8F58(void); static void sub_80F8F78(void); static void sub_80F8FB4(void); +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u16 gSpecialVar_0x8006; + #if DEBUG -// some debug variable, I guess. -// TODO: where exactly is this located? -__attribute__((section(".bss"))) /*static*/ u8 gUnknown_0300074C = 0; +static u8 gUnknown_Debug_0300079C; #endif -#if DEBUG -__attribute__((naked)) -void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) -{ - asm( - " push {r4, r5, r6, lr}\n" - " add sp, sp, #0xfffffffc\n" - " add r4, r0, #0\n" - " add r6, r1, #0\n" - " lsl r2, r2, #0x18\n" - " lsr r5, r2, #0x18\n" - " ldr r0, .__3\n" - " ldrb r3, [r0]\n" - " cmp r3, #0\n" - " beq .__1 @cond_branch\n" - " ldr r2, .__3 + 4\n" - " add r1, r2, #0\n" - " add r1, r1, #0xff\n" - " mov r0, #0x5\n" - " strb r0, [r1]\n" - " ldr r0, .__3 + 8\n" - " ldrh r1, [r0]\n" - " mov r3, #0x80\n" - " lsl r3, r3, #0x1\n" - " add r0, r2, r3\n" - " strb r1, [r0]\n" - " mov r0, #0x82\n" - " lsl r0, r0, #0x1\n" - " add r1, r2, r0\n" - " ldr r0, .__3 + 12\n" - " str r0, [r1]\n" - " add r3, r3, #0x8\n" - " add r1, r2, r3\n" - " ldr r0, .__3 + 16\n" - " str r0, [r1]\n" - " ldr r0, .__3 + 20\n" - " ldrh r1, [r0]\n" - " b .__2\n" - ".__4:\n" - " .align 2, 0\n" - ".__3:\n" - " .word gUnknown_0300074C\n" - " .word +0x2000000\n" - " .word gSpecialVar_0x8004\n" - " .word EasyChat_GetWordText+1\n" - " .word ConvertEasyChatWordsToString+1\n" - " .word gSpecialVar_0x8006\n" - ".__1:\n" - " ldr r2, .__7\n" - " add r1, r2, #0\n" - " add r1, r1, #0xff\n" - " mov r0, #0x5\n" - " strb r0, [r1]\n" - " add r0, r0, #0xfb\n" - " add r1, r2, r0\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " mov r0, #0x82\n" - " lsl r0, r0, #0x1\n" - " add r1, r2, r0\n" - " ldr r0, .__7 + 4\n" - " str r0, [r1]\n" - " mov r0, #0x84\n" - " lsl r0, r0, #0x1\n" - " add r1, r2, r0\n" - " ldr r0, .__7 + 8\n" - " str r0, [r1]\n" - " ldrh r1, [r4, #0x20]\n" - " add r0, r1, #0\n" - " sub r0, r0, #0x79\n" - " lsl r0, r0, #0x10\n" - " lsr r0, r0, #0x10\n" - " cmp r0, #0xb\n" - " bhi .__5 @cond_branch\n" - " sub r1, r1, #0x79\n" - ".__2:\n" - " add r0, r2, #0\n" - " add r0, r0, #0xfa\n" - " strb r1, [r0]\n" - " b .__6\n" - ".__8:\n" - " .align 2, 0\n" - ".__7:\n" - " .word +0x2000000\n" - " .word EasyChat_GetWordText+1\n" - " .word ConvertEasyChatWordsToString+1\n" - ".__5:\n" - " add r0, r2, #0\n" - " add r0, r0, #0xfa\n" - " strb r3, [r0]\n" - " mov r5, #0x0\n" - ".__6:\n" - " ldr r1, .__12\n" - " mov r2, #0x80\n" - " lsl r2, r2, #0x1\n" - " add r0, r1, r2\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq .__9 @cond_branch\n" - " cmp r0, #0x1\n" - " beq .__10 @cond_branch\n" - ".__9:\n" - " mov r3, #0x86\n" - " lsl r3, r3, #0x1\n" - " add r2, r1, r3\n" - " add r0, r1, #0\n" - " add r0, r0, #0xfa\n" - " ldrb r0, [r0]\n" - " lsl r0, r0, #0x3\n" - " ldr r1, .__12 + 4\n" - " b .__11\n" - ".__13:\n" - " .align 2, 0\n" - ".__12:\n" - " .word +0x2000000\n" - " .word gUnknown_083E5730\n" - ".__10:\n" - " mov r0, #0x86\n" - " lsl r0, r0, #0x1\n" - " add r2, r1, r0\n" - " add r0, r1, #0\n" - " add r0, r0, #0xfa\n" - " ldrb r0, [r0]\n" - " lsl r0, r0, #0x3\n" - " ldr r1, .__18\n" - ".__11:\n" - " add r0, r0, r1\n" - " str r0, [r2]\n" - " ldrh r0, [r4, #0x1e]\n" - " mov r1, sp\n" - " bl MailSpeciesToSpecies\n" - " lsl r0, r0, #0x10\n" - " ldr r1, .__18 + 4\n" - " add r0, r0, r1\n" - " mov r1, #0xcd\n" - " lsl r1, r1, #0x11\n" - " cmp r0, r1\n" - " bhi .__14 @cond_branch\n" - " ldr r0, .__18 + 8\n" - " add r1, r0, #0\n" - " add r1, r1, #0xfa\n" - " ldrb r2, [r1]\n" - " add r1, r0, #0\n" - " cmp r2, #0x6\n" - " beq .__15 @cond_branch\n" - " cmp r2, #0x9\n" - " beq .__16 @cond_branch\n" - " b .__17\n" - ".__19:\n" - " .align 2, 0\n" - ".__18:\n" - " .word gUnknown_083E57A4\n" - " .word 0xffff0000\n" - " .word +0x2000000\n" - ".__15:\n" - " add r2, r1, #0\n" - " add r2, r2, #0xfb\n" - " mov r0, #0x1\n" - " b .__21\n" - ".__16:\n" - " add r2, r1, #0\n" - " add r2, r2, #0xfb\n" - " mov r0, #0x2\n" - " b .__21\n" - ".__14:\n" - " ldr r1, .__22\n" - ".__17:\n" - " add r2, r1, #0\n" - " add r2, r2, #0xfb\n" - " mov r0, #0x0\n" - ".__21:\n" - " strb r0, [r2]\n" - " add r0, r1, #0\n" - " add r0, r0, #0xf4\n" - " str r4, [r0]\n" - " sub r0, r0, #0x8\n" - " str r6, [r0]\n" - " add r0, r0, #0xc\n" - " strb r5, [r0]\n" - " ldr r0, .__22 + 4\n" - " bl SetMainCallback2\n" - " add sp, sp, #0x4\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - ".__23:\n" - " .align 2, 0\n" - ".__22:\n" - " .word +0x2000000\n" - " .word sub_80F8D50+1\n" - "\n" - ); -} -#else void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) { - u16 mailDesign; u16 buffer[2]; + u16 species; - ewram0_4.varFF = GAME_LANGUAGE; - ewram0_4.var100 = 1; - ewram0_4.var104 = (MainCallback)EasyChat_GetWordText; - ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString; - - mailDesign = arg0->itemId - ITEM_ORANGE_MAIL; - - if (mailDesign <= 11) +#if DEBUG + if (gUnknown_Debug_0300079C != 0) { - ewram0_4.varFA = arg0->itemId - ITEM_ORANGE_MAIL; + ewram0_4.varFF = GAME_LANGUAGE; + ewram0_4.var100 = gSpecialVar_0x8004; + ewram0_4.var104 = (MainCallback)EasyChat_GetWordText; + ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString; + ewram0_4.varFA = gSpecialVar_0x8006; } else +#endif { - ewram0_4.varFA = 0; - arg2 = FALSE; + ewram0_4.varFF = GAME_LANGUAGE; + ewram0_4.var100 = 1; + ewram0_4.var104 = (MainCallback)EasyChat_GetWordText; + ewram0_4.var108 = (MainCallback)ConvertEasyChatWordsToString; + if (IS_ITEM_MAIL(arg0->itemId)) + { + ewram0_4.varFA = arg0->itemId - 0x79; + } + else + { + ewram0_4.varFA = 0; + arg2 = FALSE; + } } switch (ewram0_4.var100) @@ -550,24 +349,22 @@ void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) default: ewram0_4.var10C = &gUnknown_083E5730[ewram0_4.varFA]; break; - case 1: ewram0_4.var10C = &gUnknown_083E57A4[ewram0_4.varFA]; break; } - if (((MailSpeciesToSpecies(arg0->species, buffer) << 16) + 0xFFFF0000) <= (410 << 16)) + species = MailSpeciesToSpecies(arg0->species, buffer); + if (species >= 1 && species <= 411) { switch (ewram0_4.varFA) { case 6: ewram0_4.varFB = 1; break; - case 9: ewram0_4.varFB = 2; break; - default: ewram0_4.varFB = 0; break; @@ -578,14 +375,12 @@ void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2) ewram0_4.varFB = 0; } - ewram0_4.varF4 = arg0; ewram0_4.varEC = arg1; ewram0_4.varF8 = arg2; SetMainCallback2(sub_80F8D50); } -#endif #define RETURN_UP_STATE break #define RETURN_SKIP_STATE return FALSE @@ -849,1180 +644,359 @@ static void sub_80F8F78(void) } } -#if DEBUG -__attribute__((naked)) -void sub_80F8FB4() -{ - asm( - " push {r4, lr}\n" - " bl UpdatePaletteFade\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._135 @cond_branch\n" - " ldr r4, ._138\n" - " add r0, r4, #0\n" - " add r0, r0, #0xec\n" - " ldr r0, [r0]\n" - " bl SetMainCallback2\n" - " add r0, r4, #0\n" - " add r0, r0, #0xfb\n" - " ldrb r0, [r0]\n" - " cmp r0, #0x2\n" - " bgt ._137 @cond_branch\n" - " cmp r0, #0x1\n" - " blt ._137 @cond_branch\n" - " add r0, r4, #0\n" - " add r0, r0, #0xf4\n" - " ldr r0, [r0]\n" - " ldrh r0, [r0, #0x1e]\n" - " bl sub_809D4A8\n" - " lsl r0, r0, #0x10\n" - " lsr r0, r0, #0x10\n" - " bl sub_809D608\n" - " add r0, r4, #0\n" - " add r0, r0, #0xfc\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._138 + 4\n" - " add r0, r0, r1\n" - " bl sub_809D510\n" - "._137:\n" - " bl ResetPaletteFade\n" - "._135:\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - "._139:\n" - " .align 2, 0\n" - "._138:\n" - " .word +0x2000000\n" - " .word gSprites\n" - "\n" - ); -} -#else static void sub_80F8FB4(void) { - u16 local1; - - if (UpdatePaletteFade()) + if (!UpdatePaletteFade()) { - return; + SetMainCallback2(ewram0_4.varEC); + switch (ewram0_4.varFB) + { + case 2: + case 1: + sub_809D608(sub_809D4A8(ewram0_4.varF4->species)); + sub_809D510(&gSprites[ewram0_4.varFC]); + break; + } +#if !DEBUG + memset(&ewram0_4, 0, 0x110); +#endif + ResetPaletteFade(); } +} - SetMainCallback2(ewram0_4.varEC); - switch (ewram0_4.varFB) - { - case 2: - case 1: - local1 = sub_809D4A8(ewram0_4.varF4->species); - sub_809D608(local1); +#if DEBUG - sub_809D510(&gSprites[ewram0_4.varFC]); - break; - } +void debug_sub_810CA7C(u8); +void debug_sub_810CE1C(u8); +void debug_sub_810D388(void); +void debug_sub_810D340(void); - memset(&ewram0_4, 0, 0x110); - ResetPaletteFade(); +void debug_sub_810C910(u8 taskId) +{ + if (!gPaletteFade.active) + { + gUnknown_Debug_0300079C = 1; + Menu_EraseScreen(); + DestroyTask(taskId); + if (gSaveBlock1.mail[gSpecialVar_0x8005].itemId == 0) + HandleReadMail(&gSaveBlock1.mail[gSpecialVar_0x8005], debug_sub_810D388, 0); + else + HandleReadMail(&gSaveBlock1.mail[gSpecialVar_0x8005], debug_sub_810D388, 1); + } } -#endif -#if DEBUG -__attribute__((naked)) -void debug_sub_810C910() +void debug_sub_810C990(u8 taskId) { - asm( - " push {r4, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " ldr r0, ._143\n" - " ldrb r1, [r0, #0x7]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._142 @cond_branch\n" - " ldr r1, ._143 + 4\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " bl Menu_EraseScreen\n" - " add r0, r4, #0\n" - " bl DestroyTask\n" - " ldr r2, ._143 + 8\n" - " ldr r0, ._143 + 12\n" - " ldrh r1, [r0]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r1, r0, #0x2\n" - " add r0, r1, r2\n" - " ldr r3, ._143 + 16\n" - " add r0, r0, r3\n" - " ldrh r0, [r0]\n" - " cmp r0, #0\n" - " bne ._141 @cond_branch\n" - " sub r3, r3, #0x20\n" - " add r0, r2, r3\n" - " add r0, r1, r0\n" - " ldr r1, ._143 + 20\n" - " mov r2, #0x0\n" - " bl HandleReadMail\n" - " b ._142\n" - "._144:\n" - " .align 2, 0\n" - "._143:\n" - " .word gPaletteFade\n" - " .word gUnknown_0300074C\n" - " .word gSaveBlock1\n" - " .word gSpecialVar_0x8005\n" - " .word 0x2b6c\n" - " .word debug_sub_810D388+1\n" - "._141:\n" - " ldr r3, ._145\n" - " add r0, r2, r3\n" - " add r0, r1, r0\n" - " ldr r1, ._145 + 4\n" - " mov r2, #0x1\n" - " bl HandleReadMail\n" - "._142:\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - "._146:\n" - " .align 2, 0\n" - "._145:\n" - " .word 0x2b4c\n" - " .word debug_sub_810D388+1\n" - "\n" - ); + if (gMain.newKeys & (DPAD_LEFT | DPAD_DOWN)) + { + gSpecialVar_0x8006 = (gSpecialVar_0x8006 + 11) % 12; + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_84115C4[gSpecialVar_0x8006], 2, 2); + } + else if (gMain.newKeys & (DPAD_UP | DPAD_RIGHT)) + { + gSpecialVar_0x8006 = (gSpecialVar_0x8006 + 1) % 12; + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_84115C4[gSpecialVar_0x8006], 2, 2); + } + else if (gMain.newKeys & A_BUTTON) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].func = debug_sub_810C910; + } + else if (gMain.newKeys & B_BUTTON) + { + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_8411540, 4, 15); + Menu_PrintText(_8411560[gSpecialVar_0x8004], 2, 2); + gTasks[taskId].func = debug_sub_810CA7C; + } } -__attribute__((naked)) -void debug_sub_810C990() +void debug_sub_810CA7C(u8 taskId) { - asm( - " push {r4, r5, lr}\n" - " add sp, sp, #0xfffffffc\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " add r5, r4, #0\n" - " ldr r0, ._149\n" - " ldrh r1, [r0, #0x2e]\n" - " mov r0, #0xa0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._147 @cond_branch\n" - " ldr r4, ._149 + 4\n" - " ldrh r0, [r4]\n" - " add r0, r0, #0xb\n" - " b ._148\n" - "._150:\n" - " .align 2, 0\n" - "._149:\n" - " .word gMain\n" - " .word gSpecialVar_0x8006\n" - "._147:\n" - " mov r2, #0x50\n" - " and r2, r2, r1\n" - " cmp r2, #0\n" - " beq ._151 @cond_branch\n" - " ldr r4, ._153\n" - " ldrh r0, [r4]\n" - " add r0, r0, #0x1\n" - "._148:\n" - " mov r1, #0xc\n" - " bl __modsi3\n" - " strh r0, [r4]\n" - " mov r0, #0x1\n" - " mov r1, #0x1\n" - " mov r2, #0xa\n" - " mov r3, #0x4\n" - " bl Menu_DrawStdWindowFrame\n" - " ldr r1, ._153 + 4\n" - " ldrh r0, [r4]\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov r1, #0x2\n" - " mov r2, #0x2\n" - " bl Menu_PrintText\n" - " b ._159\n" - "._154:\n" - " .align 2, 0\n" - "._153:\n" - " .word gSpecialVar_0x8006\n" - " .word _84115C4\n" - "._151:\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._155 @cond_branch\n" - " mov r0, #0x1\n" - " neg r0, r0\n" - " str r2, [sp]\n" - " mov r1, #0x0\n" - " mov r2, #0x0\n" - " mov r3, #0x10\n" - " bl BeginNormalPaletteFade\n" - " ldr r1, ._157\n" - " lsl r0, r4, #0x2\n" - " add r0, r0, r4\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldr r1, ._157 + 4\n" - " b ._156\n" - "._158:\n" - " .align 2, 0\n" - "._157:\n" - " .word gTasks\n" - " .word debug_sub_810C910+1\n" - "._155:\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._159 @cond_branch\n" - " bl Menu_DisplayDialogueFrame\n" - " ldr r0, ._160\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " ldr r1, ._160 + 4\n" - " ldr r0, ._160 + 8\n" - " ldrh r0, [r0]\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov r1, #0x2\n" - " mov r2, #0x2\n" - " bl Menu_PrintText\n" - " ldr r1, ._160 + 12\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldr r1, ._160 + 16\n" - "._156:\n" - " str r1, [r0]\n" - "._159:\n" - " add sp, sp, #0x4\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._161:\n" - " .align 2, 0\n" - "._160:\n" - " .word Str_8411540\n" - " .word _8411560\n" - " .word gSpecialVar_0x8004\n" - " .word gTasks\n" - " .word debug_sub_810CA7C+1\n" - "\n" - ); + if (gMain.newKeys & 0xF0) + { + gSpecialVar_0x8004 ^= 1; + Menu_PrintText(_8411560[gSpecialVar_0x8004], 2, 2); + } + else if (gMain.newKeys & A_BUTTON) + { + if (gMain.watchedKeysPressed) + { + gMain.watchedKeysPressed = FALSE; + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_8411540, 4, 15); + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_8411560[gSpecialVar_0x8004], 2, 2); + } + else + { + Menu_DisplayDialogueFrame(); + Menu_PrintText(Str_8411568, 4, 15); + Menu_DrawStdWindowFrame(1, 1, 10, 4); + Menu_PrintText(_84115C4[gSpecialVar_0x8006], 2, 2); + gTasks[taskId].func = debug_sub_810C990; + } + } } -__attribute__((naked)) -void debug_sub_810CA7C() +void debug_sub_810CB50(u8 taskId) { - asm( - " push {r4, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " ldr r3, ._164\n" - " ldrh r1, [r3, #0x2e]\n" - " mov r2, #0xf0\n" - " and r2, r2, r1\n" - " cmp r2, #0\n" - " beq ._162 @cond_branch\n" - " ldr r2, ._164 + 4\n" - " ldrh r0, [r2]\n" - " mov r1, #0x1\n" - " eor r0, r0, r1\n" - " strh r0, [r2]\n" - " ldr r1, ._164 + 8\n" - " ldrh r0, [r2]\n" - " b ._163\n" - "._165:\n" - " .align 2, 0\n" - "._164:\n" - " .word gMain\n" - " .word gSpecialVar_0x8004\n" - " .word _8411560\n" - "._162:\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._168 @cond_branch\n" - " ldrh r0, [r3, #0x34]\n" - " cmp r0, #0\n" - " beq ._167 @cond_branch\n" - " strh r2, [r3, #0x34]\n" - " bl Menu_DisplayDialogueFrame\n" - " ldr r0, ._169\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " mov r0, #0x1\n" - " mov r1, #0x1\n" - " mov r2, #0xa\n" - " mov r3, #0x4\n" - " bl Menu_DrawStdWindowFrame\n" - " ldr r1, ._169 + 4\n" - " ldr r0, ._169 + 8\n" - " ldrh r0, [r0]\n" - "._163:\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov r1, #0x2\n" - " mov r2, #0x2\n" - " bl Menu_PrintText\n" - " b ._168\n" - "._170:\n" - " .align 2, 0\n" - "._169:\n" - " .word Str_8411540\n" - " .word _8411560\n" - " .word gSpecialVar_0x8004\n" - "._167:\n" - " bl Menu_DisplayDialogueFrame\n" - " ldr r0, ._171\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " mov r0, #0x1\n" - " mov r1, #0x1\n" - " mov r2, #0xa\n" - " mov r3, #0x4\n" - " bl Menu_DrawStdWindowFrame\n" - " ldr r1, ._171 + 4\n" - " ldr r0, ._171 + 8\n" - " ldrh r0, [r0]\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov r1, #0x2\n" - " mov r2, #0x2\n" - " bl Menu_PrintText\n" - " ldr r1, ._171 + 12\n" - " lsl r0, r4, #0x2\n" - " add r0, r0, r4\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldr r1, ._171 + 16\n" - " str r1, [r0]\n" - "._168:\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - "._172:\n" - " .align 2, 0\n" - "._171:\n" - " .word Str_8411568\n" - " .word _84115C4\n" - " .word gSpecialVar_0x8006\n" - " .word gTasks\n" - " .word debug_sub_810C990+1\n" - "\n" - ); + u8 sp0[] = _("{STR_VAR_1} {STR_VAR_2}"); + u8 sp8[] = _("メール{STR_VAR_1} {STR_VAR_2}"); + bool8 r2 = FALSE; + + if (gMain.newKeys & A_BUTTON) + { + ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_0x8005, 2, 1); + StringCopy(gStringVar2, gSpeciesNames[gTasks[taskId].data[0]]); + gSaveBlock1.mail[gSpecialVar_0x8005].species = gTasks[taskId].data[0]; + StringExpandPlaceholders(gStringVar4, sp8); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gStringVar4, 4, 15); + DestroyTask(taskId); + CreateTask(debug_sub_810CE1C, 0); + debug_sub_810D340(); + return; + } + else if (gMain.newKeys & B_BUTTON) + { + DestroyTask(taskId); + Menu_EraseScreen(); + CreateTask(debug_sub_810CE1C, 0); + debug_sub_810D340(); + return; + } + else if (gMain.newKeys & (DPAD_LEFT | DPAD_DOWN)) + { + gTasks[taskId].data[0] = (gTasks[taskId].data[0] + 0x19B) % 0x19C; + r2 = TRUE; + } + else if (gMain.newKeys & (DPAD_UP | DPAD_RIGHT)) + { + gTasks[taskId].data[0] = (gTasks[taskId].data[0] + 1) % 0x19C; + r2 = TRUE; + } + + if (r2) + { + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[0], 2, 3); + StringCopy(gStringVar2, gSpeciesNames[gTasks[taskId].data[0]]); + StringExpandPlaceholders(gStringVar4, sp0); + Menu_DrawStdWindowFrame(0, 0, 12, 3); + Menu_PrintText(gStringVar4, 1, 1); + } } -__attribute__((naked)) -void debug_sub_810CB50() +void debug_sub_810CCEC(u8 taskId) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " add sp, sp, #0xffffffec\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " ldr r1, ._175\n" - " mov r0, sp\n" - " mov r2, #0x6\n" - " bl memcpy\n" - " add r7, sp, #0x8\n" - " ldr r1, ._175 + 4\n" - " add r0, r7, #0\n" - " mov r2, #0x9\n" - " bl memcpy\n" - " mov r2, #0x0\n" - " ldr r0, ._175 + 8\n" - " ldrh r1, [r0, #0x2e]\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._173 @cond_branch\n" - " ldr r0, ._175 + 12\n" - " ldr r5, ._175 + 16\n" - " ldrh r1, [r5]\n" - " mov r2, #0x2\n" - " mov r3, #0x1\n" - " bl ConvertIntToDecimalStringN\n" - " ldr r0, ._175 + 20\n" - " ldr r1, ._175 + 24\n" - " lsl r4, r6, #0x2\n" - " add r4, r4, r6\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r1\n" - " mov r1, #0x8\n" - " ldsh r2, [r4, r1]\n" - " mov r1, #0xb\n" - " mul r1, r1, r2\n" - " ldr r2, ._175 + 28\n" - " add r1, r1, r2\n" - " bl StringCopy\n" - " ldr r2, ._175 + 32\n" - " ldrh r1, [r5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r2\n" - " ldrh r1, [r4, #0x8]\n" - " ldr r2, ._175 + 36\n" - " add r0, r0, r2\n" - " strh r1, [r0]\n" - " ldr r4, ._175 + 40\n" - " add r0, r4, #0\n" - " add r1, r7, #0\n" - " bl StringExpandPlaceholders\n" - " bl Menu_DisplayDialogueFrame\n" - " add r0, r4, #0\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " add r0, r6, #0\n" - " bl DestroyTask\n" - " b ._174\n" - "._176:\n" - " .align 2, 0\n" - "._175:\n" - " .word Str_841160F\n" - " .word Str_841161A\n" - " .word gMain\n" - " .word gStringVar1\n" - " .word gSpecialVar_0x8005\n" - " .word gStringVar2\n" - " .word gTasks\n" - " .word gSpeciesNames\n" - " .word gSaveBlock1\n" - " .word 0x2b6a\n" - " .word gStringVar4\n" - "._173:\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._177 @cond_branch\n" - " add r0, r6, #0\n" - " bl DestroyTask\n" - " bl Menu_EraseScreen\n" - "._174:\n" - " ldr r0, ._179\n" - " mov r1, #0x0\n" - " bl CreateTask\n" - " bl debug_sub_810D340\n" - " b ._186\n" - "._180:\n" - " .align 2, 0\n" - "._179:\n" - " .word debug_sub_810CE1C+1\n" - "._177:\n" - " mov r0, #0xa0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._181 @cond_branch\n" - " ldr r0, ._183\n" - " lsl r4, r6, #0x2\n" - " add r4, r4, r6\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " mov r1, #0x8\n" - " ldsh r0, [r4, r1]\n" - " ldr r2, ._183 + 4\n" - " add r0, r0, r2\n" - " mov r1, #0xce\n" - " lsl r1, r1, #0x1\n" - " bl __modsi3\n" - " strh r0, [r4, #0x8]\n" - " b ._182\n" - "._184:\n" - " .align 2, 0\n" - "._183:\n" - " .word gTasks\n" - " .word 0x19b\n" - "._181:\n" - " mov r0, #0x50\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._185 @cond_branch\n" - " ldr r0, ._187\n" - " lsl r4, r6, #0x2\n" - " add r4, r4, r6\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " mov r1, #0x8\n" - " ldsh r0, [r4, r1]\n" - " add r0, r0, #0x1\n" - " mov r1, #0xce\n" - " lsl r1, r1, #0x1\n" - " bl __modsi3\n" - " strh r0, [r4, #0x8]\n" - " mov r2, #0x1\n" - "._185:\n" - " cmp r2, #0\n" - " beq ._186 @cond_branch\n" - "._182:\n" - " ldr r0, ._187 + 4\n" - " ldr r1, ._187\n" - " lsl r4, r6, #0x2\n" - " add r4, r4, r6\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r1\n" - " mov r2, #0x8\n" - " ldsh r1, [r4, r2]\n" - " mov r2, #0x2\n" - " mov r3, #0x3\n" - " bl ConvertIntToDecimalStringN\n" - " ldr r0, ._187 + 8\n" - " mov r1, #0x8\n" - " ldsh r2, [r4, r1]\n" - " mov r1, #0xb\n" - " mul r1, r1, r2\n" - " ldr r2, ._187 + 12\n" - " add r1, r1, r2\n" - " bl StringCopy\n" - " ldr r4, ._187 + 16\n" - " add r0, r4, #0\n" - " mov r1, sp\n" - " bl StringExpandPlaceholders\n" - " mov r0, #0x0\n" - " mov r1, #0x0\n" - " mov r2, #0xc\n" - " mov r3, #0x3\n" - " bl Menu_DrawStdWindowFrame\n" - " add r0, r4, #0\n" - " mov r1, #0x1\n" - " mov r2, #0x1\n" - " bl Menu_PrintText\n" - "._186:\n" - " add sp, sp, #0x14\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._188:\n" - " .align 2, 0\n" - "._187:\n" - " .word gTasks\n" - " .word gStringVar1\n" - " .word gStringVar2\n" - " .word gSpeciesNames\n" - " .word gStringVar4\n" - "\n" - ); + u8 string1[] = _("メール{STR_VAR_1}を だれに もたせる?"); + u8 string2[] = _("000 {STR_VAR_1}"); + + ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_0x8005, 1, 1); + StringExpandPlaceholders(gStringVar4, string1); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gStringVar4, 4, 15); + + StringCopy(gStringVar1, gSpeciesNames[0]); + StringExpandPlaceholders(gStringVar4, string2); + Menu_DrawStdWindowFrame(0, 0, 12, 3); + Menu_PrintText(string2, 1, 1); // This probably should have been gStringVar4 + + gTasks[taskId].func = debug_sub_810CB50; } -__attribute__((naked)) -void debug_sub_810CCEC() +u8 debug_sub_810CD9C(void) { - asm( - " push {r4, r5, r6, lr}\n" - " mov r6, r8\n" - " push {r6}\n" - " add sp, sp, #0xffffffe4\n" - " add r5, r0, #0\n" - " lsl r5, r5, #0x18\n" - " lsr r5, r5, #0x18\n" - " ldr r1, ._189\n" - " mov r0, sp\n" - " mov r2, #0x11\n" - " bl memcpy\n" - " add r6, sp, #0x14\n" - " ldr r1, ._189 + 4\n" - " add r0, r6, #0\n" - " mov r2, #0x7\n" - " bl memcpy\n" - " ldr r0, ._189 + 8\n" - " mov r8, r0\n" - " ldr r0, ._189 + 12\n" - " ldrh r1, [r0]\n" - " mov r0, r8\n" - " mov r2, #0x1\n" - " mov r3, #0x1\n" - " bl ConvertIntToDecimalStringN\n" - " ldr r4, ._189 + 16\n" - " add r0, r4, #0\n" - " mov r1, sp\n" - " bl StringExpandPlaceholders\n" - " bl Menu_DisplayDialogueFrame\n" - " add r0, r4, #0\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - " ldr r1, ._189 + 20\n" - " mov r0, r8\n" - " bl StringCopy\n" - " add r0, r4, #0\n" - " add r1, r6, #0\n" - " bl StringExpandPlaceholders\n" - " mov r0, #0x0\n" - " mov r1, #0x0\n" - " mov r2, #0xc\n" - " mov r3, #0x3\n" - " bl Menu_DrawStdWindowFrame\n" - " add r0, r6, #0\n" - " mov r1, #0x1\n" - " mov r2, #0x1\n" - " bl Menu_PrintText\n" - " ldr r1, ._189 + 24\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldr r1, ._189 + 28\n" - " str r1, [r0]\n" - " add sp, sp, #0x1c\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._190:\n" - " .align 2, 0\n" - "._189:\n" - " .word Str_8411623\n" - " .word Str_8411634\n" - " .word gStringVar1\n" - " .word gSpecialVar_0x8005\n" - " .word gStringVar4\n" - " .word gSpeciesNames\n" - " .word gTasks\n" - " .word debug_sub_810CB50+1\n" - "\n" - ); + CloseMenu(); + ScriptContext1_Stop(); + ScriptContext2_Enable(); + gUnknown_Debug_0300079C = 0; + gSpecialVar_0x8004 = gSpecialVar_0x8005 = gSpecialVar_0x8006 = 0; + SetMainCallback2(debug_sub_810D388); + return 1; } -__attribute__((naked)) -void debug_sub_810CD9C() +void debug_sub_810CDE0(void) { - asm( - " push {lr}\n" - " bl CloseMenu\n" - " bl ScriptContext1_Stop\n" - " bl ScriptContext2_Enable\n" - " ldr r1, ._191\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " ldr r3, ._191 + 4\n" - " ldr r2, ._191 + 8\n" - " ldr r1, ._191 + 12\n" - " mov r0, #0x0\n" - " strh r0, [r1]\n" - " strh r0, [r2]\n" - " strh r0, [r3]\n" - " ldr r0, ._191 + 16\n" - " bl SetMainCallback2\n" - " mov r0, #0x1\n" - " pop {r1}\n" - " bx r1\n" - "._192:\n" - " .align 2, 0\n" - "._191:\n" - " .word gUnknown_0300074C\n" - " .word gSpecialVar_0x8004\n" - " .word gSpecialVar_0x8005\n" - " .word gSpecialVar_0x8006\n" - " .word debug_sub_810D388+1\n" - "\n" - ); + UpdatePaletteFade(); + RunTasks(); } -__attribute__((naked)) -void debug_sub_810CDE0() +void debug_sub_810CDF0(void) { - asm( - " push {lr}\n" - " bl UpdatePaletteFade\n" - " bl RunTasks\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + gMain.watchedKeysPressed = 0; + gMain.watchedKeysMask = 0; + gFieldCallback = mapldr_default; + SetMainCallback2(c2_exit_to_overworld_2_switch); } -__attribute__((naked)) -void debug_sub_810CDF0() +void debug_sub_810CE1C(u8 taskId) { - asm( - " push {lr}\n" - " ldr r1, ._193\n" - " mov r0, #0x0\n" - " strh r0, [r1, #0x34]\n" - " strh r0, [r1, #0x36]\n" - " ldr r1, ._193 + 4\n" - " ldr r0, ._193 + 8\n" - " str r0, [r1]\n" - " ldr r0, ._193 + 12\n" - " bl SetMainCallback2\n" - " pop {r0}\n" - " bx r0\n" - "._194:\n" - " .align 2, 0\n" - "._193:\n" - " .word gMain\n" - " .word gFieldCallback\n" - " .word mapldr_default+1\n" - " .word c2_exit_to_overworld_2_switch+1\n" - "\n" - ); + if (gMenuCallback() == TRUE) + { + CloseMenu(); + DestroyTask(taskId); + } } -__attribute__((naked)) -void debug_sub_810CE1C() +u8 debug_sub_810CE48(void) { - asm( - " push {r4, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " ldr r0, ._196\n" - " ldr r0, [r0]\n" - " bl _call_via_r0\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x1\n" - " bne ._195 @cond_branch\n" - " bl CloseMenu\n" - " add r0, r4, #0\n" - " bl DestroyTask\n" - "._195:\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - "._197:\n" - " .align 2, 0\n" - "._196:\n" - " .word gMenuCallback\n" - "\n" - ); + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + Menu_EraseScreen(); + debug_sub_810D340(); + return 0; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + gSpecialVar_0x8006 %= 12; + CreateTask(debug_sub_810CA7C, 0); + gMain.watchedKeysPressed = TRUE; // huh? + gMain.watchedKeysMask = 0; + return 1; + } } -__attribute__((naked)) -void debug_sub_810CE48() +u8 debug_sub_810CEA4(void) { - asm( - " push {r4, lr}\n" - " bl Menu_ProcessInput\n" - " lsl r0, r0, #0x18\n" - " asr r1, r0, #0x18\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " cmp r1, r0\n" - " beq ._198 @cond_branch\n" - " add r0, r0, #0x1\n" - " cmp r1, r0\n" - " bne ._199 @cond_branch\n" - " bl Menu_EraseScreen\n" - " bl debug_sub_810D340\n" - "._198:\n" - " mov r0, #0x0\n" - " b ._200\n" - "._199:\n" - " ldr r0, ._201\n" - " strh r1, [r0]\n" - " ldr r4, ._201 + 4\n" - " ldrh r0, [r4]\n" - " mov r1, #0xc\n" - " bl __umodsi3\n" - " strh r0, [r4]\n" - " ldr r0, ._201 + 8\n" - " mov r1, #0x0\n" - " bl CreateTask\n" - " ldr r1, ._201 + 12\n" - " mov r2, #0x0\n" - " mov r0, #0x1\n" - " strh r0, [r1, #0x34]\n" - " strh r2, [r1, #0x36]\n" - "._200:\n" - " pop {r4}\n" - " pop {r1}\n" - " bx r1\n" - "._202:\n" - " .align 2, 0\n" - "._201:\n" - " .word gSpecialVar_0x8005\n" - " .word gSpecialVar_0x8006\n" - " .word debug_sub_810CA7C+1\n" - " .word gMain\n" - "\n" - ); + if (!gPaletteFade.active) + { + gSpecialVar_0x8004 = 4; + sub_80E60D8(); + return 1; + } + return 0; } -__attribute__((naked)) -void debug_sub_810CEA4() +u8 debug_sub_810CED0(void) { - asm( - " push {lr}\n" - " ldr r0, ._205\n" - " ldrb r1, [r0, #0x7]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._203 @cond_branch\n" - " mov r0, #0x0\n" - " b ._204\n" - "._206:\n" - " .align 2, 0\n" - "._205:\n" - " .word gPaletteFade\n" - "._203:\n" - " ldr r1, ._207\n" - " mov r0, #0x4\n" - " strh r0, [r1]\n" - " bl sub_80E60D8\n" - " mov r0, #0x1\n" - "._204:\n" - " pop {r1}\n" - " bx r1\n" - "._208:\n" - " .align 2, 0\n" - "._207:\n" - " .word gSpecialVar_0x8004\n" - "\n" - ); + u8 text[] = _("せいきの データが とうろくずみ です\n" + "しんき とうろく できません"); + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + Menu_EraseScreen(); + break; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + if (IS_ITEM_MAIL(gSaveBlock1.mail[input].itemId)) + { + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(text, 4, 15); + } + else + { + gSaveBlock1.mail[gSpecialVar_0x8005].itemId = 0xFFFF; + StringCopy(gSaveBlock1.mail[gSpecialVar_0x8005].playerName, gSaveBlock2.playerName); + *(u32 *)gSaveBlock1.mail[gSpecialVar_0x8005].trainerId = *(u32 *)gSaveBlock2.playerTrainerId; + gMenuCallback = debug_sub_810CEA4; + return 0; + } + break; + } + debug_sub_810D340(); + return 0; } -__attribute__((naked)) -void debug_sub_810CED0() +u8 debug_sub_810CFA4(void) { - asm( - " push {r4, r5, r6, lr}\n" - " add sp, sp, #0xffffffdc\n" - " ldr r1, ._212\n" - " mov r0, sp\n" - " mov r2, #0x23\n" - " bl memcpy\n" - " bl Menu_ProcessInput\n" - " lsl r0, r0, #0x18\n" - " asr r1, r0, #0x18\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " cmp r1, r0\n" - " beq ._215 @cond_branch\n" - " add r0, r0, #0x1\n" - " cmp r1, r0\n" - " bne ._210 @cond_branch\n" - " bl Menu_EraseScreen\n" - " b ._211\n" - "._213:\n" - " .align 2, 0\n" - "._212:\n" - " .word Str_841163B\n" - "._210:\n" - " ldr r5, ._216\n" - " strh r1, [r5]\n" - " ldr r6, ._216 + 4\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r6\n" - " ldr r1, ._216 + 8\n" - " add r0, r0, r1\n" - " ldrh r0, [r0]\n" - " sub r0, r0, #0x79\n" - " lsl r0, r0, #0x10\n" - " lsr r0, r0, #0x10\n" - " cmp r0, #0xb\n" - " bls ._214 @cond_branch\n" - " ldrh r1, [r5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r6\n" - " ldr r2, ._216 + 8\n" - " add r0, r0, r2\n" - " ldr r1, ._216 + 12\n" - " strh r1, [r0]\n" - " ldrh r1, [r5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " sub r2, r2, #0xe\n" - " add r1, r6, r2\n" - " add r0, r0, r1\n" - " ldr r4, ._216 + 16\n" - " add r1, r4, #0\n" - " bl StringCopy\n" - " ldrh r1, [r5]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " ldr r2, ._216 + 20\n" - " add r1, r6, r2\n" - " add r0, r0, r1\n" - " add r4, r4, #0xa\n" - " ldr r1, [r4]\n" - " str r1, [r0]\n" - " ldr r1, ._216 + 24\n" - " ldr r0, ._216 + 28\n" - " str r0, [r1]\n" - " b ._215\n" - "._217:\n" - " .align 2, 0\n" - "._216:\n" - " .word gSpecialVar_0x8005\n" - " .word gSaveBlock1\n" - " .word 0x2b6c\n" - " .word 0xffff\n" - " .word gSaveBlock2\n" - " .word 0x2b66\n" - " .word gMenuCallback\n" - " .word debug_sub_810CEA4+1\n" - "._214:\n" - " bl Menu_EraseScreen\n" - " bl Menu_DisplayDialogueFrame\n" - " mov r0, sp\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - "._211:\n" - " bl debug_sub_810D340\n" - "._215:\n" - " mov r0, #0x0\n" - " add sp, sp, #0x24\n" - " pop {r4, r5, r6}\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + u8 text[] = _("せいきに とうろくされたメールデータは\n" + "へんこう できません"); + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + Menu_EraseScreen(); + debug_sub_810D340(); + return 0; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + if (IS_ITEM_MAIL(gSaveBlock1.mail[input].itemId)) + { + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(text, 4, 15); + debug_sub_810D340(); + return 0; + } + else + { + CreateTask(debug_sub_810CCEC, 0); + return 1; + } + } } -__attribute__((naked)) -void debug_sub_810CFA4() +u8 debug_sub_810D030(void) { - asm( - " push {lr}\n" - " add sp, sp, #0xffffffe0\n" - " ldr r1, ._221\n" - " mov r0, sp\n" - " mov r2, #0x1f\n" - " bl memcpy\n" - " bl Menu_ProcessInput\n" - " lsl r0, r0, #0x18\n" - " asr r2, r0, #0x18\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " cmp r2, r0\n" - " beq ._218 @cond_branch\n" - " add r0, r0, #0x1\n" - " cmp r2, r0\n" - " bne ._219 @cond_branch\n" - " bl Menu_EraseScreen\n" - " b ._220\n" - "._222:\n" - " .align 2, 0\n" - "._221:\n" - " .word Str_841165E\n" - "._219:\n" - " ldr r0, ._225\n" - " strh r2, [r0]\n" - " ldr r1, ._225 + 4\n" - " lsl r0, r2, #0x3\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r1\n" - " ldr r1, ._225 + 8\n" - " add r0, r0, r1\n" - " ldrh r0, [r0]\n" - " sub r0, r0, #0x79\n" - " lsl r0, r0, #0x10\n" - " lsr r0, r0, #0x10\n" - " cmp r0, #0xb\n" - " bls ._223 @cond_branch\n" - " ldr r0, ._225 + 12\n" - " mov r1, #0x0\n" - " bl CreateTask\n" - " mov r0, #0x1\n" - " b ._224\n" - "._226:\n" - " .align 2, 0\n" - "._225:\n" - " .word gSpecialVar_0x8005\n" - " .word gSaveBlock1\n" - " .word 0x2b6c\n" - " .word debug_sub_810CCEC+1\n" - "._223:\n" - " bl Menu_EraseScreen\n" - " bl Menu_DisplayDialogueFrame\n" - " mov r0, sp\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - "._220:\n" - " bl debug_sub_810D340\n" - "._218:\n" - " mov r0, #0x0\n" - "._224:\n" - " add sp, sp, #0x20\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + const u8 text1[] = _("メール{STR_VAR_1} とうろく かいじょ"); + const u8 text2[] = _("デバッグメニューから とうろくした\n" + "メール いがいは けせません"); + s8 input = Menu_ProcessInput(); + + switch (input) + { + case -1: + Menu_EraseScreen(); + debug_sub_810D340(); + return 0; + case -2: + return 0; + default: + gSpecialVar_0x8005 = input; + if (gSaveBlock1.mail[gSpecialVar_0x8005].itemId != 0xFFFF + && gSaveBlock1.mail[gSpecialVar_0x8005].itemId != 0) + { + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(text2, 4, 15); + debug_sub_810D340(); + return 0; + } + else + { + s8 i; + + gSaveBlock1.mail[gSpecialVar_0x8005].itemId = 0; + gSaveBlock1.mail[gSpecialVar_0x8005].species = 0; + gSaveBlock1.mail[gSpecialVar_0x8005].playerName[0] = EOS; + *(u32 *)gSaveBlock1.mail[gSpecialVar_0x8005].trainerId = 0; + for (i = 0; i < 9; i++) + gSaveBlock1.mail[gSpecialVar_0x8005].words[i] = 0xFFFF; + ConvertIntToDecimalStringN(gStringVar1, gSpecialVar_0x8005, 1, 1); + StringExpandPlaceholders(gStringVar4, text1); + Menu_EraseScreen(); + Menu_DisplayDialogueFrame(); + Menu_PrintText(gStringVar4, 4, 15); + debug_sub_810D340(); + return 0; + } + } } -__attribute__((naked)) -void debug_sub_810D030() +const u8 Str_84116AE[] = _("メール{STR_VAR_1} {STR_VAR_2} {STR_VAR_3}"); + +const struct MenuAction _84116BC[] = { - asm( - " push {r4, r5, r6, r7, lr}\n" - " add sp, sp, #0xffffffcc\n" - " ldr r1, ._230\n" - " mov r0, sp\n" - " mov r2, #0x10\n" - " bl memcpy\n" - " add r5, sp, #0x10\n" - " ldr r1, ._230 + 4\n" - " add r0, r5, #0\n" - " mov r2, #0x21\n" - " bl memcpy\n" - " bl Menu_ProcessInput\n" - " lsl r0, r0, #0x18\n" - " asr r1, r0, #0x18\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " cmp r1, r0\n" - " beq ._227 @cond_branch\n" - " add r0, r0, #0x1\n" - " cmp r1, r0\n" - " bne ._228 @cond_branch\n" - " bl Menu_EraseScreen\n" - " b ._229\n" - "._231:\n" - " .align 2, 0\n" - "._230:\n" - " .word Str_841167D\n" - " .word Str_841168D\n" - "._228:\n" - " ldr r2, ._235\n" - " strh r1, [r2]\n" - " ldr r3, ._235 + 4\n" - " ldrh r1, [r2]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r3\n" - " ldr r1, ._235 + 8\n" - " add r0, r0, r1\n" - " ldrh r1, [r0]\n" - " ldr r0, ._235 + 12\n" - " add r4, r2, #0\n" - " cmp r1, r0\n" - " beq ._233 @cond_branch\n" - " cmp r1, #0\n" - " beq ._233 @cond_branch\n" - " bl Menu_EraseScreen\n" - " bl Menu_DisplayDialogueFrame\n" - " add r0, r5, #0\n" - " b ._234\n" - "._236:\n" - " .align 2, 0\n" - "._235:\n" - " .word gSpecialVar_0x8005\n" - " .word gSaveBlock1\n" - " .word 0x2b6c\n" - " .word 0xffff\n" - "._233:\n" - " ldrh r1, [r4]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r3\n" - " ldr r5, ._238\n" - " add r0, r0, r5\n" - " mov r2, #0x0\n" - " strh r2, [r0]\n" - " ldrh r1, [r4]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r3\n" - " ldr r1, ._238 + 4\n" - " add r0, r0, r1\n" - " strh r2, [r0]\n" - " ldrh r1, [r4]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r3\n" - " sub r5, r5, #0xe\n" - " add r0, r0, r5\n" - " mov r1, #0xff\n" - " strb r1, [r0]\n" - " ldrh r1, [r4]\n" - " lsl r0, r1, #0x3\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r5, r5, #0x8\n" - " add r1, r3, r5\n" - " add r0, r0, r1\n" - " str r2, [r0]\n" - " mov r0, #0x0\n" - " ldr r1, ._238 + 8\n" - " mov ip, r1\n" - " sub r5, r5, #0x1a\n" - " add r7, r3, r5\n" - " add r6, r4, #0\n" - " ldr r1, ._238 + 12\n" - " add r5, r1, #0\n" - "._237:\n" - " lsl r1, r0, #0x18\n" - " asr r1, r1, #0x18\n" - " lsl r3, r1, #0x1\n" - " ldrh r2, [r6]\n" - " lsl r0, r2, #0x3\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x2\n" - " add r3, r3, r0\n" - " add r3, r3, r7\n" - " ldrh r0, [r3]\n" - " orr r0, r0, r5\n" - " strh r0, [r3]\n" - " add r1, r1, #0x1\n" - " lsl r1, r1, #0x18\n" - " lsr r0, r1, #0x18\n" - " asr r1, r1, #0x18\n" - " cmp r1, #0x8\n" - " ble ._237 @cond_branch\n" - " ldrh r1, [r4]\n" - " mov r0, ip\n" - " mov r2, #0x1\n" - " mov r3, #0x1\n" - " bl ConvertIntToDecimalStringN\n" - " ldr r4, ._238 + 16\n" - " add r0, r4, #0\n" - " mov r1, sp\n" - " bl StringExpandPlaceholders\n" - " bl Menu_EraseScreen\n" - " bl Menu_DisplayDialogueFrame\n" - " add r0, r4, #0\n" - "._234:\n" - " mov r1, #0x4\n" - " mov r2, #0xf\n" - " bl Menu_PrintText\n" - "._229:\n" - " bl debug_sub_810D340\n" - "._227:\n" - " mov r0, #0x0\n" - " add sp, sp, #0x34\n" - " pop {r4, r5, r6, r7}\n" - " pop {r1}\n" - " bx r1\n" - "._239:\n" - " .align 2, 0\n" - "._238:\n" - " .word 0x2b6c\n" - " .word 0x2b6a\n" - " .word gStringVar1\n" - " .word 0xffff\n" - " .word gStringVar4\n" - "\n" - ); -} + {Str_84115F4, NULL}, + {Str_84115FB, NULL}, + {Str_8411603, NULL}, + {Str_8411608, NULL}, +}; __attribute__((naked)) void debug_sub_810D174() @@ -2367,7 +1341,7 @@ void debug_sub_810D388() "._300:\n" " .align 2, 0\n" "._299:\n" - " .word gUnknown_0300074C\n" + " .word gUnknown_Debug_0300079C\n" " .word 0x43c\n" "._297:\n" " bl ScanlineEffect_Stop\n" |