diff options
29 files changed, 1344 insertions, 2445 deletions
diff --git a/asm/learn_move.s b/asm/learn_move.s deleted file mode 100644 index 36b88bc20..000000000 --- a/asm/learn_move.s +++ /dev/null @@ -1,1954 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80E4620 -sub_80E4620: @ 80E4620 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80E4620 - - thumb_func_start DisplayMoveTutorMenu -DisplayMoveTutorMenu: @ 80E4634 - push {lr} - sub sp, 0x4 - bl ScriptContext2_Enable - ldr r0, _080E465C @ =sub_80E4660 - movs r1, 0xA - bl CreateTask - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080E465C: .4byte sub_80E4660 - thumb_func_end DisplayMoveTutorMenu - - thumb_func_start sub_80E4660 -sub_80E4660: @ 80E4660 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080E468C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080E4684 - ldr r0, _080E4690 @ =sub_80E478C - bl SetMainCallback2 - ldr r1, _080E4694 @ =gFieldCallback - ldr r0, _080E4698 @ =FieldCallback_ReturnToEventScript2 - str r0, [r1] - adds r0, r4, 0 - bl DestroyTask -_080E4684: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E468C: .4byte gPaletteFade -_080E4690: .4byte sub_80E478C -_080E4694: .4byte gFieldCallback -_080E4698: .4byte FieldCallback_ReturnToEventScript2 - thumb_func_end sub_80E4660 - - thumb_func_start sub_80E469C -sub_80E469C: @ 80E469C - push {r4,r5,lr} - sub sp, 0xC - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080E4774 @ =gUnknown_83FFA3C - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - bl ResetTempTileDataBuffers - ldr r0, _080E4778 @ =gUnknown_83FFA44 - bl InitWindows - lsls r0, 16 - cmp r0, 0 - beq _080E476C - bl DeactivateAllTextPrinters - movs r5, 0 -_080E46C6: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl ClearWindowTilemap - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r5, 0x1 - cmp r5, 0x8 - bls _080E46C6 - movs r0, 0x7 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0xF - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - ldr r0, _080E477C @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x99 - lsls r0, 2 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0 - movs r1, 0x1 - movs r2, 0xE0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0xD0 - movs r1, 0x1 - bl sub_8107D38 - ldr r0, _080E4780 @ =gUnknown_8E97DDC - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _080E4784 @ =gUnknown_8E97DFC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndLoadBgGfxUsingHeap - ldr r1, _080E4788 @ =gUnknown_8E97EC4 - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x12 - movs r1, 0 - bl SetGpuReg - movs r0, 0x10 - movs r1, 0 - bl SetGpuReg - movs r0, 0x16 - movs r1, 0 - bl SetGpuReg - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg -_080E476C: - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E4774: .4byte gUnknown_83FFA3C -_080E4778: .4byte gUnknown_83FFA44 -_080E477C: .4byte gUnknown_203AAB4 -_080E4780: .4byte gUnknown_8E97DDC -_080E4784: .4byte gUnknown_8E97DFC -_080E4788: .4byte gUnknown_8E97EC4 - thumb_func_end sub_80E469C - - thumb_func_start sub_80E478C -sub_80E478C: @ 80E478C - push {r4,lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - ldr r4, _080E47EC @ =gUnknown_203AAB4 - ldr r0, _080E47F0 @ =0x00000a6c - bl AllocZeroed - str r0, [r4] - bl sub_80E4F54 - ldr r0, [r4] - ldr r1, _080E47F4 @ =gSpecialVar_0x8004 - ldrh r1, [r1] - movs r2, 0x98 - lsls r2, 2 - adds r0, r2 - strb r1, [r0] - bl sub_80E50CC - ldr r0, _080E47F8 @ =sub_80E4620 - bl SetVBlankCallback - bl sub_80E469C - bl sub_80E5004 - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080E47FC @ =sub_80E4870 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E47EC: .4byte gUnknown_203AAB4 -_080E47F0: .4byte 0x00000a6c -_080E47F4: .4byte gSpecialVar_0x8004 -_080E47F8: .4byte sub_80E4620 -_080E47FC: .4byte sub_80E4870 - thumb_func_end sub_80E478C - - thumb_func_start sub_80E4800 -sub_80E4800: @ 80E4800 - push {lr} - movs r0, 0 - movs r1, 0 - bl SetGpuReg - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - bl sub_80E50CC - ldr r0, _080E485C @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E4860 @ =gSpecialVar_0x8005 - ldrh r1, [r1] - ldr r2, _080E4864 @ =0x00000261 - adds r0, r2 - strb r1, [r0] - ldr r0, _080E4868 @ =sub_80E4620 - bl SetVBlankCallback - bl sub_80E469C - bl sub_80E5004 - movs r0, 0 - movs r1, 0 - movs r2, 0x2 - bl FillPalette - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - ldr r0, _080E486C @ =sub_80E4870 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080E485C: .4byte gUnknown_203AAB4 -_080E4860: .4byte gSpecialVar_0x8005 -_080E4864: .4byte 0x00000261 -_080E4868: .4byte sub_80E4620 -_080E486C: .4byte sub_80E4870 - thumb_func_end sub_80E4800 - - thumb_func_start sub_80E4870 -sub_80E4870: @ 80E4870 - push {r4,lr} - movs r0, 0x7 - bl IsTextPrinterActive - lsls r0, 16 - cmp r0, 0 - bne _080E4882 - bl sub_80E48F4 -_080E4882: - ldr r4, _080E48B8 @ =gUnknown_203AAB4 - ldr r0, [r4] - ldr r1, _080E48BC @ =0x0000025f - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _080E489E - bl sub_80E54C0 - ldr r0, [r4] - ldr r1, _080E48BC @ =0x0000025f - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_080E489E: - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E48B8: .4byte gUnknown_203AAB4 -_080E48BC: .4byte 0x0000025f - thumb_func_end sub_80E4870 - - thumb_func_start sub_80E48C0 -sub_80E48C0: @ 80E48C0 - push {r4,lr} - sub sp, 0x8 - adds r1, r0, 0 - ldr r4, _080E48F0 @ =gStringVar4 - adds r0, r4, 0 - bl StringExpandPlaceholders - bl GetTextSpeedSetting - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x7 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl sub_80E559C - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E48F0: .4byte gStringVar4 - thumb_func_end sub_80E48C0 - - thumb_func_start sub_80E48F4 -sub_80E48F4: @ 80E48F4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - ldr r1, _080E4918 @ =gUnknown_203AAB4 - ldr r0, [r1] - ldrb r0, [r0] - adds r7, r1, 0 - cmp r0, 0x21 - bls _080E490C - b _080E4EDA -_080E490C: - lsls r0, 2 - ldr r1, _080E491C @ =_080E4920 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080E4918: .4byte gUnknown_203AAB4 -_080E491C: .4byte _080E4920 - .align 2, 0 -_080E4920: - .4byte _080E49A8 - .4byte _080E49F4 - .4byte _080E4A0C - .4byte _080E4A14 - .4byte _080E4A38 - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4A3E - .4byte _080E4A68 - .4byte _080E4EDA - .4byte _080E4EDA - .4byte _080E4AF4 - .4byte _080E4B20 - .4byte _080E4CFA - .4byte _080E4D18 - .4byte _080E4B58 - .4byte _080E4B70 - .4byte _080E4B98 - .4byte _080E4C5A - .4byte _080E4C70 - .4byte _080E4CE4 - .4byte _080E4CE8 - .4byte _080E4EDA - .4byte _080E4BDC - .4byte _080E4BF4 - .4byte _080E4C1C - .4byte _080E4C54 - .4byte _080E4D48 - .4byte _080E4D8C - .4byte _080E4E70 - .4byte _080E4E90 - .4byte _080E4EA8 - .4byte _080E4EC0 -_080E49A8: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - bl sub_80E5444 - ldr r4, _080E49EC @ =gUnknown_203AAB4 - ldr r1, [r4] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_80E4EF0 - movs r0, 0 - bl sub_80E4F0C - bl sub_80E5300 - ldr r0, [r4] - ldr r1, _080E49F0 @ =0x0000025f - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _080E4EDA - .align 2, 0 -_080E49EC: .4byte gUnknown_203AAB4 -_080E49F0: .4byte 0x0000025f -_080E49F4: - ldr r0, _080E4A08 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4A02 - b _080E4EDA -_080E4A02: - ldr r1, [r7] - movs r0, 0x4 - b _080E4ED8 - .align 2, 0 -_080E4A08: .4byte gPaletteFade -_080E4A0C: - ldr r1, [r7] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 -_080E4A14: - movs r0, 0 - bl sub_80E4F0C - ldr r2, _080E4A30 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r3, _080E4A34 @ =0x0000025f - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - ldr r1, [r2] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4A30: .4byte gUnknown_203AAB4 -_080E4A34: .4byte 0x0000025f -_080E4A38: - bl sub_80E5204 - b _080E4EDA -_080E4A3E: - ldr r0, _080E4A60 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4A64 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4A60: .4byte gUnknown_83FFA8C -_080E4A64: .4byte gUnknown_203AAB4 -_080E4A68: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4A88 - cmp r1, 0 - bgt _080E4A82 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4AE6 - b _080E4EDA -_080E4A82: - cmp r1, 0x1 - beq _080E4AE6 - b _080E4EDA -_080E4A88: - ldr r4, _080E4AC8 @ =gUnknown_203AAB4 - ldr r2, [r4] - movs r6, 0x98 - lsls r6, 2 - adds r0, r2, r6 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E4ACC @ =gPlayerParty - adds r0, r1 - ldr r3, _080E4AD0 @ =0x00000a67 - adds r1, r2, r3 - ldrb r1, [r1] - lsls r1, 1 - adds r2, 0xE8 - adds r2, r1 - ldrh r1, [r2] - bl GiveMoveToMon - lsls r0, 16 - ldr r1, _080E4AD4 @ =0xffff0000 - cmp r0, r1 - beq _080E4AE0 - ldr r0, _080E4AD8 @ =gUnknown_841E405 - bl sub_80E48C0 - ldr r1, _080E4ADC @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - ldr r1, [r4] - movs r0, 0x1F - b _080E4ED8 - .align 2, 0 -_080E4AC8: .4byte gUnknown_203AAB4 -_080E4ACC: .4byte gPlayerParty -_080E4AD0: .4byte 0x00000a67 -_080E4AD4: .4byte 0xffff0000 -_080E4AD8: .4byte gUnknown_841E405 -_080E4ADC: .4byte gSpecialVar_0x8004 -_080E4AE0: - ldr r1, [r4] - movs r0, 0x10 - b _080E4ED8 -_080E4AE6: - ldr r0, _080E4AF0 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x3 - b _080E4ED8 - .align 2, 0 -_080E4AF0: .4byte gUnknown_203AAB4 -_080E4AF4: - ldr r0, _080E4B18 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4B1C @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4B18: .4byte gUnknown_83FFA8C -_080E4B1C: .4byte gUnknown_203AAB4 -_080E4B20: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4B40 - cmp r1, 0 - bgt _080E4B3A - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4B4C - b _080E4EDA -_080E4B3A: - cmp r1, 0x1 - beq _080E4B4C - b _080E4EDA -_080E4B40: - ldr r0, _080E4B48 @ =gSpecialVar_0x8004 - strh r1, [r0] - b _080E4ED2 - .align 2, 0 -_080E4B48: .4byte gSpecialVar_0x8004 -_080E4B4C: - ldr r0, _080E4B54 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x3 - b _080E4ED8 - .align 2, 0 -_080E4B54: .4byte gUnknown_203AAB4 -_080E4B58: - ldr r0, _080E4B68 @ =gUnknown_841E414 - bl sub_80E48C0 - ldr r0, _080E4B6C @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4B68: .4byte gUnknown_841E414 -_080E4B6C: .4byte gUnknown_203AAB4 -_080E4B70: - ldr r0, _080E4B90 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4B94 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x12 - b _080E4ED8 - .align 2, 0 -_080E4B90: .4byte gUnknown_83FFA8C -_080E4B94: .4byte gUnknown_203AAB4 -_080E4B98: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4BB8 - cmp r1, 0 - bgt _080E4BB2 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4BD0 - b _080E4EDA -_080E4BB2: - cmp r1, 0x1 - beq _080E4BD0 - b _080E4EDA -_080E4BB8: - ldr r0, _080E4BC8 @ =gUnknown_841E50C - bl sub_80E48C0 - ldr r0, _080E4BCC @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x13 - b _080E4ED8 - .align 2, 0 -_080E4BC8: .4byte gUnknown_841E50C -_080E4BCC: .4byte gUnknown_203AAB4 -_080E4BD0: - ldr r0, _080E4BD8 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x18 - b _080E4ED8 - .align 2, 0 -_080E4BD8: .4byte gUnknown_203AAB4 -_080E4BDC: - ldr r0, _080E4BEC @ =gUnknown_841E481 - bl sub_80E48C0 - ldr r0, _080E4BF0 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4BEC: .4byte gUnknown_841E481 -_080E4BF0: .4byte gUnknown_203AAB4 -_080E4BF4: - ldr r0, _080E4C14 @ =gUnknown_83FFA8C - movs r1, 0x1 - str r1, [sp] - movs r1, 0xE - str r1, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - movs r1, 0x3 - movs r2, 0 - movs r3, 0x2 - bl CreateYesNoMenu - ldr r0, _080E4C18 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1A - b _080E4ED8 - .align 2, 0 -_080E4C14: .4byte gUnknown_83FFA8C -_080E4C18: .4byte gUnknown_203AAB4 -_080E4C1C: - bl sub_80E5574 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _080E4C3C - cmp r1, 0 - bgt _080E4C36 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080E4C48 - b _080E4EDA -_080E4C36: - cmp r1, 0x1 - beq _080E4C48 - b _080E4EDA -_080E4C3C: - ldr r0, _080E4C44 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1B - b _080E4ED8 - .align 2, 0 -_080E4C44: .4byte gUnknown_203AAB4 -_080E4C48: - ldr r0, _080E4C50 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x10 - b _080E4ED8 - .align 2, 0 -_080E4C50: .4byte gUnknown_203AAB4 -_080E4C54: - ldr r1, [r7] - movs r0, 0x3 - b _080E4ED8 -_080E4C5A: - ldr r1, [r7] - movs r2, 0 - movs r0, 0x14 - strb r0, [r1] - subs r0, 0x15 - str r2, [sp] - movs r1, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _080E4EDA -_080E4C70: - ldr r0, _080E4CC8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4C7E - b _080E4EDA -_080E4C7E: - ldr r2, [r7] - ldr r6, _080E4CCC @ =0x00000263 - adds r0, r2, r6 - ldrb r0, [r0] - ldr r3, _080E4CD0 @ =0x00000a68 - adds r1, r2, r3 - ldr r6, _080E4CD4 @ =0x00000a6a - adds r2, r6 - bl ListMenuGetScrollAndRow - bl FreeAllWindowBuffers - ldr r0, _080E4CD8 @ =gPlayerParty - ldr r5, [r7] - movs r2, 0x98 - lsls r2, 2 - adds r1, r5, r2 - ldrb r1, [r1] - ldr r2, _080E4CDC @ =gPlayerPartyCount - ldrb r2, [r2] - subs r2, 0x1 - lsls r2, 24 - lsrs r2, 24 - ldr r3, _080E4CE0 @ =sub_80E4800 - subs r6, 0x3 - adds r4, r5, r6 - ldrb r4, [r4] - lsls r4, 1 - adds r5, 0xE8 - adds r5, r4 - ldrh r4, [r5] - str r4, [sp] - bl ShowSelectMovePokemonSummaryScreen - ldr r1, [r7] - movs r0, 0x1C - b _080E4ED8 - .align 2, 0 -_080E4CC8: .4byte gPaletteFade -_080E4CCC: .4byte 0x00000263 -_080E4CD0: .4byte 0x00000a68 -_080E4CD4: .4byte 0x00000a6a -_080E4CD8: .4byte gPlayerParty -_080E4CDC: .4byte gPlayerPartyCount -_080E4CE0: .4byte sub_80E4800 -_080E4CE4: - ldr r1, [r7] - b _080E4ED6 -_080E4CE8: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080E4EDA -_080E4CFA: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _080E4D14 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - b _080E4ED8 - .align 2, 0 -_080E4D14: .4byte gUnknown_203AAB4 -_080E4D18: - ldr r0, _080E4D3C @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4D26 - b _080E4EDA -_080E4D26: - bl FreeAllWindowBuffers - ldr r0, _080E4D40 @ =gUnknown_203AAB4 - ldr r0, [r0] - bl Free - ldr r0, _080E4D44 @ =CB2_ReturnToField - bl SetMainCallback2 - b _080E4EDA - .align 2, 0 -_080E4D3C: .4byte gPaletteFade -_080E4D40: .4byte gUnknown_203AAB4 -_080E4D44: .4byte CB2_ReturnToField -_080E4D48: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - ldr r0, _080E4D88 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - bl sub_80E5444 - bl sub_80E4EF0 - bl sub_80E5300 - movs r0, 0x1 - bl sub_80E4F0C - bl sub_80E54C0 - b _080E4EDA - .align 2, 0 -_080E4D88: .4byte gUnknown_203AAB4 -_080E4D8C: - ldr r0, _080E4DAC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080E4D9A - b _080E4EDA -_080E4D9A: - ldr r1, [r7] - ldr r0, _080E4DB0 @ =0x00000261 - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, 0x4 - bne _080E4DB4 - movs r0, 0x18 - b _080E4ED8 - .align 2, 0 -_080E4DAC: .4byte gPaletteFade -_080E4DB0: .4byte 0x00000261 -_080E4DB4: - movs r4, 0x98 - lsls r4, 2 - adds r0, r1, r4 - ldrb r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080E4E50 @ =gPlayerParty - adds r0, r5 - ldrb r1, [r2] - adds r1, 0xD - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080E4E54 @ =gStringVar3 - movs r1, 0xD - mov r9, r1 - mov r1, r9 - muls r1, r0 - ldr r3, _080E4E58 @ =gMoveNames - mov r8, r3 - add r1, r8 - adds r0, r2, 0 - bl StringCopy - ldr r1, [r7] - adds r0, r1, r4 - ldrb r0, [r0] - muls r0, r6 - adds r0, r5 - ldr r2, _080E4E5C @ =0x00000261 - adds r1, r2 - ldrb r1, [r1] - bl RemoveMonPPBonus - ldr r3, [r7] - adds r4, r3, r4 - ldrb r0, [r4] - muls r0, r6 - adds r0, r5 - ldr r4, _080E4E60 @ =0x00000a67 - adds r1, r3, r4 - ldrb r2, [r1] - lsls r2, 1 - adds r1, r3, 0 - adds r1, 0xE8 - adds r1, r2 - ldrh r1, [r1] - ldr r6, _080E4E5C @ =0x00000261 - adds r3, r6 - ldrb r2, [r3] - bl SetMonMoveSlot - ldr r0, _080E4E64 @ =gStringVar2 - ldr r2, [r7] - adds r4, r2, r4 - ldrb r1, [r4] - lsls r1, 1 - adds r2, 0xE8 - adds r2, r1 - ldrh r1, [r2] - mov r2, r9 - muls r2, r1 - adds r1, r2, 0 - add r1, r8 - bl StringCopy - ldr r0, _080E4E68 @ =gUnknown_841E493 - bl sub_80E48C0 - ldr r1, [r7] - movs r0, 0x1E - strb r0, [r1] - ldr r1, _080E4E6C @ =gSpecialVar_0x8004 - movs r0, 0x1 - strh r0, [r1] - b _080E4EDA - .align 2, 0 -_080E4E50: .4byte gPlayerParty -_080E4E54: .4byte gStringVar3 -_080E4E58: .4byte gMoveNames -_080E4E5C: .4byte 0x00000261 -_080E4E60: .4byte 0x00000a67 -_080E4E64: .4byte gStringVar2 -_080E4E68: .4byte gUnknown_841E493 -_080E4E6C: .4byte gSpecialVar_0x8004 -_080E4E70: - ldr r0, _080E4E88 @ =gUnknown_841E4C0 - bl sub_80E48C0 - ldr r0, _080E4E8C @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x1F - strb r0, [r1] - adds r0, 0xE2 - bl PlayFanfare - b _080E4EDA - .align 2, 0 -_080E4E88: .4byte gUnknown_841E4C0 -_080E4E8C: .4byte gUnknown_203AAB4 -_080E4E90: - ldr r0, _080E4EA0 @ =0x00000101 - bl PlayFanfare - ldr r0, _080E4EA4 @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x20 - b _080E4ED8 - .align 2, 0 -_080E4EA0: .4byte 0x00000101 -_080E4EA4: .4byte gUnknown_203AAB4 -_080E4EA8: - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _080E4EDA - ldr r0, _080E4EBC @ =gUnknown_203AAB4 - ldr r1, [r0] - movs r0, 0x21 - b _080E4ED8 - .align 2, 0 -_080E4EBC: .4byte gUnknown_203AAB4 -_080E4EC0: - ldr r0, _080E4EE8 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080E4EDA - movs r0, 0x5 - bl PlaySE -_080E4ED2: - ldr r0, _080E4EEC @ =gUnknown_203AAB4 - ldr r1, [r0] -_080E4ED6: - movs r0, 0xE -_080E4ED8: - strb r0, [r1] -_080E4EDA: - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E4EE8: .4byte gMain -_080E4EEC: .4byte gUnknown_203AAB4 - thumb_func_end sub_80E48F4 - - thumb_func_start sub_80E4EF0 -sub_80E4EF0: @ 80E4EF0 - push {r4,lr} - movs r4, 0x6 -_080E4EF4: - lsls r0, r4, 24 - lsrs r0, 24 - movs r1, 0x1 - movs r2, 0xE - bl DrawTextBorderOuter - adds r4, 0x1 - cmp r4, 0x7 - ble _080E4EF4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E4EF0 - - thumb_func_start sub_80E4F0C -sub_80E4F0C: @ 80E4F0C - push {r4,r5,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080E4F42 - ldr r4, _080E4F4C @ =gStringVar4 - ldr r1, _080E4F50 @ =gUnknown_841E3E3 - adds r0, r4, 0 - bl StringExpandPlaceholders - str r5, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x7 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl sub_80E559C - movs r0, 0x7 - bl PutWindowTilemap - movs r0, 0x7 - movs r1, 0x3 - bl CopyWindowToVram -_080E4F42: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E4F4C: .4byte gStringVar4 -_080E4F50: .4byte gUnknown_841E3E3 - thumb_func_end sub_80E4F0C - - thumb_func_start sub_80E4F54 -sub_80E4F54: @ 80E4F54 - push {r4,lr} - ldr r2, _080E4FA4 @ =gUnknown_203AAB4 - ldr r0, [r2] - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - strb r1, [r0, 0x2] - ldr r0, [r2] - strb r1, [r0, 0x19] - ldr r0, [r2] - strb r1, [r0, 0x18] - ldr r0, [r2] - strb r1, [r0, 0x1C] - ldr r0, [r2] - strb r1, [r0, 0x1A] - ldr r0, [r2] - strb r1, [r0, 0x1B] - ldr r0, [r2] - strb r1, [r0, 0x1D] - ldr r0, [r2] - strb r1, [r0, 0x1E] - ldr r0, [r2] - ldr r3, _080E4FA8 @ =0x0000025f - adds r0, r3 - strb r1, [r0] - movs r3, 0 - adds r4, r2, 0 - movs r2, 0 -_080E4F8C: - ldr r0, [r4] - lsls r1, r3, 1 - adds r0, 0xE8 - adds r0, r1 - strh r2, [r0] - adds r3, 0x1 - cmp r3, 0x13 - ble _080E4F8C - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E4FA4: .4byte gUnknown_203AAB4 -_080E4FA8: .4byte 0x0000025f - thumb_func_end sub_80E4F54 - - thumb_func_start sub_80E4FAC -sub_80E4FAC: @ 80E4FAC - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x30 - ldrsh r0, [r4, r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 1 - movs r0, 0xFF - ands r1, r0 - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0x1 - beq _080E4FD0 - cmp r0, 0x1 - ble _080E4FF6 - cmp r0, 0x2 - beq _080E4FE4 - b _080E4FF6 -_080E4FD0: - adds r0, r1, 0 - movs r1, 0x3 - bl Sin - ldrh r1, [r4, 0x32] - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - strh r0, [r4, 0x24] - b _080E4FF6 -_080E4FE4: - adds r0, r1, 0 - movs r1, 0x1 - bl Sin - ldrh r1, [r4, 0x32] - adds r2, r0, 0 - muls r2, r1 - adds r0, r2, 0 - strh r0, [r4, 0x26] -_080E4FF6: - ldrh r0, [r4, 0x30] - adds r0, 0x1 - strh r0, [r4, 0x30] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80E4FAC - - thumb_func_start sub_80E5004 -sub_80E5004: @ 80E5004 - push {r4-r6,lr} - mov r6, r8 - push {r6} - ldr r0, _080E50B4 @ =gUnknown_83FF9F4 - bl LoadSpriteSheet - ldr r0, _080E50B8 @ =gUnknown_83FF9FC - bl LoadSpritePalette - ldr r0, _080E50BC @ =gUnknown_83FFA24 - mov r8, r0 - movs r1, 0xC8 - movs r2, 0x4 - movs r3, 0 - bl CreateSprite - ldr r5, _080E50C0 @ =gUnknown_203AAB4 - ldr r1, [r5] - strb r0, [r1, 0x3] - ldr r0, [r5] - ldrb r1, [r0, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080E50C4 @ =gSprites - adds r0, r4 - movs r1, 0x1 - bl StartSpriteAnim - ldr r2, [r5] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r6, 0x2 - strh r6, [r0, 0x2E] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080E50C8 @ =0x0000ffff - strh r1, [r0, 0x32] - mov r0, r8 - movs r1, 0xC8 - movs r2, 0x6C - movs r3, 0 - bl CreateSprite - ldr r1, [r5] - strb r0, [r1, 0x3] - ldr r2, [r5] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - strh r6, [r0, 0x2E] - ldrb r1, [r2, 0x3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - strh r1, [r0, 0x32] - movs r2, 0 - movs r3, 0x4 -_080E508C: - ldr r0, [r5] - adds r0, 0x3 - adds r0, r2 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - adds r0, 0x3E - ldrb r1, [r0] - orrs r1, r3 - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x1 - ble _080E508C - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080E50B4: .4byte gUnknown_83FF9F4 -_080E50B8: .4byte gUnknown_83FF9FC -_080E50BC: .4byte gUnknown_83FFA24 -_080E50C0: .4byte gUnknown_203AAB4 -_080E50C4: .4byte gSprites -_080E50C8: .4byte 0x0000ffff - thumb_func_end sub_80E5004 - - thumb_func_start sub_80E50CC -sub_80E50CC: @ 80E50CC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - ldr r7, _080E51E8 @ =gUnknown_203AAB4 - ldr r1, [r7] - movs r4, 0x98 - lsls r4, 2 - adds r0, r1, r4 - ldrb r0, [r0] - movs r6, 0x64 - muls r0, r6 - ldr r5, _080E51EC @ =gPlayerParty - adds r0, r5 - adds r1, 0xE8 - bl GetMoveRelearnerMoves - ldr r1, [r7] - strb r0, [r1, 0x1A] - ldr r1, [r7] - adds r4, r1, r4 - ldrb r0, [r4] - muls r0, r6 - adds r0, r5 - adds r1, 0xE8 - bl GetMoveRelearnerMoves - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r5, 0 - ldr r0, [r7] - ldrb r0, [r0, 0x1A] - cmp r5, r0 - bge _080E513C - adds r6, r7, 0 - movs r7, 0xD - movs r4, 0x8D - lsls r4, 1 -_080E511A: - ldr r1, [r6] - adds r0, r1, r4 - lsls r2, r5, 1 - adds r1, 0xE8 - adds r1, r2 - ldrh r1, [r1] - muls r1, r7 - ldr r2, _080E51F0 @ =gMoveNames - adds r1, r2 - bl StringCopy - adds r4, 0xD - adds r5, 0x1 - ldr r0, [r6] - ldrb r0, [r0, 0x1A] - cmp r5, r0 - blt _080E511A -_080E513C: - ldr r4, _080E51E8 @ =gUnknown_203AAB4 - ldr r0, [r4] - movs r1, 0x98 - lsls r1, 2 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x64 - muls r0, r1 - ldr r1, _080E51EC @ =gPlayerParty - adds r0, r1 - movs r1, 0x2 - mov r2, sp - bl GetMonData - ldr r0, _080E51F4 @ =gStringVar1 - mov r1, sp - bl StringCopy10 - ldr r0, [r4] - ldrb r2, [r0, 0x1A] - movs r1, 0xD - muls r1, r2 - movs r7, 0x8D - lsls r7, 1 - adds r1, r7 - adds r0, r1 - ldr r1, _080E51F8 @ =gFameCheckerText_Cancel - bl StringCopy - ldr r1, [r4] - ldrb r0, [r1, 0x1A] - adds r0, 0x1 - strb r0, [r1, 0x1A] - movs r5, 0 - movs r3, 0x1 - add r3, r8 - mov r12, r3 - cmp r5, r8 - bge _080E51AA - adds r6, r4, 0 - adds r4, r7, 0 -_080E518E: - ldr r0, [r6] - lsls r3, r5, 3 - adds r1, r0, 0 - adds r1, 0x20 - adds r1, r3 - adds r2, r0, r4 - str r2, [r1] - adds r0, 0x24 - adds r0, r3 - str r5, [r0] - adds r4, 0xD - adds r5, 0x1 - cmp r5, r8 - blt _080E518E -_080E51AA: - ldr r4, _080E51E8 @ =gUnknown_203AAB4 - ldr r2, [r4] - lsls r3, r5, 3 - adds r0, r2, 0 - adds r0, 0x20 - adds r0, r3 - ldr r1, _080E51F8 @ =gFameCheckerText_Cancel - str r1, [r0] - adds r2, 0x24 - adds r2, r3 - movs r0, 0xFE - str r0, [r2] - ldr r2, _080E51FC @ =gMultiuseListMenuTemplate - adds r1, r2, 0 - ldr r0, _080E5200 @ =gUnknown_83FFA94 - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldm r0!, {r3,r5,r6} - stm r1!, {r3,r5,r6} - ldr r0, [r4] - adds r0, 0x20 - str r0, [r2] - mov r5, r12 - strh r5, [r2, 0xC] - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E51E8: .4byte gUnknown_203AAB4 -_080E51EC: .4byte gPlayerParty -_080E51F0: .4byte gMoveNames -_080E51F4: .4byte gStringVar1 -_080E51F8: .4byte gFameCheckerText_Cancel -_080E51FC: .4byte gMultiuseListMenuTemplate -_080E5200: .4byte gUnknown_83FFA94 - thumb_func_end sub_80E50CC - - thumb_func_start sub_80E5204 -sub_80E5204: @ 80E5204 - push {r4,r5,lr} - ldr r4, _080E5258 @ =gUnknown_203AAB4 - ldr r0, [r4] - ldr r1, _080E525C @ =0x00000263 - adds r0, r1 - ldrb r0, [r0] - bl ListMenu_ProcessInput - ldr r0, _080E5260 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080E5284 - movs r0, 0x5 - bl PlaySE - ldr r1, [r4] - ldr r2, _080E5264 @ =0x00000a67 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0xFE - beq _080E5270 - movs r0, 0x8 - strb r0, [r1] - ldr r0, _080E5268 @ =gStringVar2 - ldr r1, [r4] - adds r2, r1, r2 - ldrb r3, [r2] - movs r2, 0xD - muls r2, r3 - movs r3, 0x8D - lsls r3, 1 - adds r2, r3 - adds r1, r2 - bl StringCopy - ldr r0, _080E526C @ =gUnknown_841E3FB - bl sub_80E48C0 - b _080E529E - .align 2, 0 -_080E5258: .4byte gUnknown_203AAB4 -_080E525C: .4byte 0x00000263 -_080E5260: .4byte gMain -_080E5264: .4byte 0x00000a67 -_080E5268: .4byte gStringVar2 -_080E526C: .4byte gUnknown_841E3FB -_080E5270: - ldr r0, _080E5280 @ =gUnknown_841E4E2 - bl sub_80E48C0 - ldr r1, [r4] - movs r0, 0xC - strb r0, [r1] - b _080E529E - .align 2, 0 -_080E5280: .4byte gUnknown_841E4E2 -_080E5284: - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080E529E - movs r0, 0x5 - bl PlaySE - ldr r0, [r4] - movs r1, 0xC - strb r1, [r0] - ldr r0, _080E52DC @ =gUnknown_841E4E2 - bl sub_80E48C0 -_080E529E: - ldr r0, _080E52E0 @ =gUnknown_203AAB4 - ldr r4, [r0] - ldrb r0, [r4, 0x1A] - cmp r0, 0x6 - bls _080E52FA - ldr r2, _080E52E4 @ =gSprites - movs r0, 0x3E - adds r0, r2 - mov r12, r0 - ldrb r0, [r0] - movs r1, 0x5 - negs r1, r1 - adds r3, r1, 0 - ands r3, r0 - mov r0, r12 - strb r3, [r0] - adds r5, r2, 0 - adds r5, 0x82 - ldrb r0, [r5] - adds r2, r1, 0 - ands r2, r0 - strb r2, [r5] - ldrb r0, [r4, 0x19] - cmp r0, 0 - bne _080E52E8 - movs r1, 0x4 - adds r0, r3, 0 - orrs r0, r1 - mov r1, r12 - strb r0, [r1] - b _080E52FA - .align 2, 0 -_080E52DC: .4byte gUnknown_841E4E2 -_080E52E0: .4byte gUnknown_203AAB4 -_080E52E4: .4byte gSprites -_080E52E8: - ldrb r1, [r4, 0x19] - ldrb r0, [r4, 0x1A] - subs r0, 0x6 - cmp r1, r0 - bne _080E52FA - movs r1, 0x4 - adds r0, r2, 0 - orrs r0, r1 - strb r0, [r5] -_080E52FA: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E5204 - - thumb_func_start sub_80E5300 -sub_80E5300: @ 80E5300 - push {r4,lr} - ldr r0, _080E5330 @ =gMultiuseListMenuTemplate - ldr r4, _080E5334 @ =gUnknown_203AAB4 - ldr r2, [r4] - ldr r3, _080E5338 @ =0x00000a68 - adds r1, r2, r3 - ldrh r1, [r1] - adds r3, 0x2 - adds r2, r3 - ldrh r2, [r2] - bl ListMenuInit - ldr r1, [r4] - ldr r2, _080E533C @ =0x00000263 - adds r1, r2 - strb r0, [r1] - movs r0, 0x6 - movs r1, 0x1 - bl CopyWindowToVram - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5330: .4byte gMultiuseListMenuTemplate -_080E5334: .4byte gUnknown_203AAB4 -_080E5338: .4byte 0x00000a68 -_080E533C: .4byte 0x00000263 - thumb_func_end sub_80E5300 - - thumb_func_start sub_80E5340 -sub_80E5340: @ 80E5340 - push {r4,r5,lr} - sub sp, 0x3C - lsls r0, 16 - lsrs r5, r0, 16 - ldr r1, _080E5380 @ =gBattleMoves - lsls r0, r5, 1 - adds r0, r5 - lsls r0, 2 - adds r4, r0, r1 - ldrb r1, [r4, 0x2] - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0x2 - movs r2, 0x1 - movs r3, 0x4 - bl BlitMoveInfoIcon - ldrb r0, [r4, 0x1] - cmp r0, 0x1 - bhi _080E5388 - ldr r1, _080E5384 @ =gText_ThreeHyphens - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80E559C - b _080E53A6 - .align 2, 0 -_080E5380: .4byte gBattleMoves -_080E5384: .4byte gText_ThreeHyphens -_080E5388: - ldrb r1, [r4, 0x1] - add r0, sp, 0x8 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0x3 - add r1, sp, 0x8 - movs r2, 0x1 - movs r3, 0x4 - bl sub_80E559C -_080E53A6: - ldr r2, _080E53CC @ =gBattleMoves - lsls r1, r5, 1 - adds r0, r1, r5 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x3] - adds r4, r1, 0 - cmp r2, 0 - bne _080E53D4 - ldr r1, _080E53D0 @ =gText_ThreeHyphens - str r2, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x3 - movs r2, 0x1 - movs r3, 0x12 - bl sub_80E559C - b _080E53F4 - .align 2, 0 -_080E53CC: .4byte gBattleMoves -_080E53D0: .4byte gText_ThreeHyphens -_080E53D4: - ldrb r1, [r0, 0x3] - add r0, sp, 0x8 - movs r2, 0x1 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - str r0, [sp, 0x4] - movs r0, 0x3 - add r1, sp, 0x8 - movs r2, 0x1 - movs r3, 0x12 - bl sub_80E559C -_080E53F4: - ldr r1, _080E543C @ =gBattleMoves - adds r0, r4, r5 - lsls r0, 2 - adds r0, r1 - ldrb r1, [r0, 0x4] - add r0, sp, 0x8 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - movs r4, 0 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x4 - add r1, sp, 0x8 - movs r2, 0x2 - movs r3, 0x2 - bl sub_80E559C - ldr r1, _080E5440 @ =gMoveDescriptionPointers - subs r0, r5, 0x1 - lsls r0, 2 - adds r0, r1 - ldr r1, [r0] - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x5 - movs r2, 0x1 - movs r3, 0 - bl sub_80E559C - add sp, 0x3C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080E543C: .4byte gBattleMoves -_080E5440: .4byte gMoveDescriptionPointers - thumb_func_end sub_80E5340 - - thumb_func_start sub_80E5444 -sub_80E5444: @ 80E5444 - push {lr} - movs r0, 0 - movs r1, 0x13 - movs r2, 0x1 - movs r3, 0x4 - bl BlitMoveInfoIcon - movs r0, 0x1 - movs r1, 0x14 - movs r2, 0 - movs r3, 0x4 - bl BlitMoveInfoIcon - movs r0, 0x1 - movs r1, 0x15 - movs r2, 0 - movs r3, 0x13 - bl BlitMoveInfoIcon - movs r0, 0 - movs r1, 0x16 - movs r2, 0x1 - movs r3, 0x13 - bl BlitMoveInfoIcon - movs r0, 0 - movs r1, 0x17 - movs r2, 0x1 - movs r3, 0x22 - bl BlitMoveInfoIcon - movs r0, 0 - bl PutWindowTilemap - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x4 - bl PutWindowTilemap - movs r0, 0x3 - bl PutWindowTilemap - movs r0, 0x5 - bl PutWindowTilemap - movs r0, 0x2 - bl PutWindowTilemap - movs r0, 0x7 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_80E5444 - - thumb_func_start sub_80E54C0 -sub_80E54C0: @ 80E54C0 - push {r4,r5,lr} - ldr r0, _080E54E0 @ =gUnknown_203AAB4 - ldr r1, [r0] - ldr r0, _080E54E4 @ =0x00000a67 - adds r2, r1, r0 - ldrb r0, [r2] - cmp r0, 0xFE - beq _080E54E8 - lsls r0, 1 - adds r1, 0xE8 - adds r1, r0 - ldrh r0, [r1] - bl sub_80E5340 - b _080E5504 - .align 2, 0 -_080E54E0: .4byte gUnknown_203AAB4 -_080E54E4: .4byte 0x00000a67 -_080E54E8: - movs r5, 0x2 -_080E54EA: - lsls r4, r5, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r4, 0 - movs r1, 0x2 - bl CopyWindowToVram - adds r5, 0x1 - cmp r5, 0x5 - ble _080E54EA -_080E5504: - movs r0, 0x3 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x4 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x5 - movs r1, 0x2 - bl CopyWindowToVram - movs r0, 0x7 - movs r1, 0x3 - bl CopyWindowToVram - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80E54C0 - - thumb_func_start sub_80E553C -sub_80E553C: @ 80E553C - push {r4,lr} - adds r4, r0, 0 - lsls r1, 24 - cmp r1, 0 - bne _080E5560 - movs r0, 0x5 - bl PlaySE - ldr r2, _080E5568 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E556C @ =0x0000025f - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5570 @ =0x00000a67 - adds r0, r1 - strb r4, [r0] -_080E5560: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080E5568: .4byte gUnknown_203AAB4 -_080E556C: .4byte 0x0000025f -_080E5570: .4byte 0x00000a67 - thumb_func_end sub_80E553C - - thumb_func_start sub_80E5574 -sub_80E5574: @ 80E5574 - push {r4,lr} - bl Menu_ProcessInputNoWrapClearOnChoose - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _080E5594 - movs r0, 0x6 - bl PutWindowTilemap - movs r0, 0x6 - movs r1, 0x1 - bl CopyWindowToVram -_080E5594: - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80E5574 - - thumb_func_start sub_80E559C -sub_80E559C: @ 80E559C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r10, r1 - ldr r4, [sp, 0x38] - lsls r0, 24 - lsrs r5, r0, 24 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r6, r3, 24 - movs r0, 0x1 - mov r8, r0 - mov r9, r0 - cmp r4, 0x1 - bhi _080E55C8 - movs r1, 0 - mov r8, r1 - mov r9, r1 -_080E55C8: - cmp r4, 0 - blt _080E5622 - cmp r4, 0x1 - ble _080E55D6 - cmp r4, 0x2 - beq _080E5604 - b _080E5622 -_080E55D6: - ldr r2, _080E55F4 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E55F8 @ =0x00000a64 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E55FC @ =0x00000a65 - adds r0, r1 - movs r1, 0x2 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5600 @ =0x00000a66 - b _080E561C - .align 2, 0 -_080E55F4: .4byte gUnknown_203AAB4 -_080E55F8: .4byte 0x00000a64 -_080E55FC: .4byte 0x00000a65 -_080E5600: .4byte 0x00000a66 -_080E5604: - ldr r2, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r2] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r2] - ldr r1, _080E5680 @ =0x00000a65 - adds r0, r1 - strb r4, [r0] - ldr r0, [r2] - adds r1, 0x1 -_080E561C: - adds r0, r1 - movs r1, 0x3 - strb r1, [r0] -_080E5622: - cmp r4, 0x1 - beq _080E563E - ldr r0, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - ldrb r0, [r0] - lsls r1, r0, 4 - orrs r1, r0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl FillWindowPixelBuffer -_080E563E: - mov r0, r8 - str r0, [sp] - mov r1, r9 - str r1, [sp, 0x4] - ldr r0, _080E5678 @ =gUnknown_203AAB4 - ldr r0, [r0] - ldr r1, _080E567C @ =0x00000a64 - adds r0, r1 - str r0, [sp, 0x8] - ldr r0, [sp, 0x34] - lsls r0, 24 - asrs r0, 24 - str r0, [sp, 0xC] - mov r0, r10 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x3 - adds r2, r7, 0 - adds r3, r6, 0 - bl AddTextPrinterParameterized4 - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080E5678: .4byte gUnknown_203AAB4 -_080E567C: .4byte 0x00000a64 -_080E5680: .4byte 0x00000a65 - thumb_func_end sub_80E559C - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/save_menu_util.s b/asm/save_menu_util.s deleted file mode 100644 index 8ebfc3731..000000000 --- a/asm/save_menu_util.s +++ /dev/null @@ -1,149 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start SaveStatToString -SaveStatToString: @ 80F7FCC - push {r4-r7,lr} - lsls r0, 24 - lsrs r3, r0, 24 - lsls r2, 24 - lsrs r2, 24 - adds r5, r1, 0 - movs r1, 0xFC - strb r1, [r5] - adds r5, 0x1 - movs r0, 0x1 - strb r0, [r5] - adds r5, 0x1 - strb r2, [r5] - adds r5, 0x1 - strb r1, [r5] - adds r5, 0x1 - movs r0, 0x3 - strb r0, [r5] - adds r5, 0x1 - adds r2, 0x1 - strb r2, [r5] - adds r5, 0x1 - cmp r3, 0x5 - bhi _080F80D8 - lsls r0, r3, 2 - ldr r1, _080F8008 @ =_080F800C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F8008: .4byte _080F800C - .align 2, 0 -_080F800C: - .4byte _080F8024 - .4byte _080F8034 - .4byte _080F805C - .4byte _080F8098 - .4byte _080F80A8 - .4byte _080F806C -_080F8024: - ldr r0, _080F8030 @ =gSaveBlock2Ptr - ldr r1, [r0] - adds r0, r5, 0 - bl StringCopy - b _080F80D8 - .align 2, 0 -_080F8030: .4byte gSaveBlock2Ptr -_080F8034: - bl IsNationalPokedexEnabled - cmp r0, 0 - beq _080F8044 - movs r0, 0x1 - bl GetNationalPokedexCount - b _080F804A -_080F8044: - movs r0, 0x1 - bl GetKantoPokedexCount -_080F804A: - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - b _080F80D8 -_080F805C: - ldr r4, _080F8068 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldrh r1, [r0, 0xE] - adds r0, r5, 0 - movs r2, 0 - b _080F8076 - .align 2, 0 -_080F8068: .4byte gSaveBlock2Ptr -_080F806C: - ldr r4, _080F8094 @ =gSaveBlock2Ptr - ldr r0, [r4] - ldrh r1, [r0, 0xE] - adds r0, r5, 0 - movs r2, 0x1 -_080F8076: - movs r3, 0x3 - bl ConvertIntToDecimalStringN - adds r5, r0, 0 - movs r0, 0xF0 - strb r0, [r5] - adds r5, 0x1 - ldr r0, [r4] - ldrb r1, [r0, 0x10] - adds r0, r5, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - b _080F80D8 - .align 2, 0 -_080F8094: .4byte gSaveBlock2Ptr -_080F8098: - ldr r0, _080F80A4 @ =gMapHeader - ldrb r1, [r0, 0x14] - adds r0, r5, 0 - bl sub_80C4DF8 - b _080F80D8 - .align 2, 0 -_080F80A4: .4byte gMapHeader -_080F80A8: - movs r4, 0x82 - lsls r4, 4 - movs r6, 0 - adds r7, r5, 0x1 -_080F80B0: - lsls r0, r4, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - beq _080F80C0 - adds r6, 0x1 -_080F80C0: - adds r4, 0x1 - ldr r0, _080F80E0 @ =0x00000827 - cmp r4, r0 - ble _080F80B0 - adds r0, r6, 0 - subs r0, 0x5F - strb r0, [r5] - adds r5, r7, 0 - movs r0, 0xA - strb r0, [r5] - movs r0, 0xFF - strb r0, [r5, 0x1] -_080F80D8: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F80E0: .4byte 0x00000827 - thumb_func_end SaveStatToString - - .align 2, 0 @ Don't pad with nop. diff --git a/baserom.ips b/baserom.ips Binary files differindex 370073252..07a82d3b0 100644 --- a/baserom.ips +++ b/baserom.ips diff --git a/data/battle_anim_effects_3.s b/data/battle_anim_effects_3.s index 23dd1e1fd..58fb29794 100644 --- a/data/battle_anim_effects_3.s +++ b/data/battle_anim_effects_3.s @@ -67,4 +67,4 @@ gUnknown_83FF65C:: @ 83FF65C .incbin "baserom.gba", 0x3FF65C, 0x14C gUnknown_83FF7A8:: @ 83FF7A8 - .incbin "baserom.gba", 0x3FF7A8, 0x24C + .incbin "baserom.gba", 0x3FF7A8, 0x30 diff --git a/data/berry_crush.s b/data/berry_crush.s new file mode 100644 index 000000000..c17f2c8af --- /dev/null +++ b/data/berry_crush.s @@ -0,0 +1,120 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .section .rodata +gUnknown_846E2E0:: @ 846E2E0 + .incbin "baserom.gba", 0x46E2E0, 0x8 + +gUnknown_846E2E8:: @ 846E2E8 + .incbin "baserom.gba", 0x46E2E8, 0x8 + +gUnknown_846E2F0:: @ 846E2F0 + .incbin "baserom.gba", 0x46E2F0, 0x24 + +gUnknown_846E314:: @ 846E314 + .incbin "baserom.gba", 0x46E314, 0x14 + +gUnknown_846E328:: @ 846E328 + .incbin "baserom.gba", 0x46E328, 0x24 + +gUnknown_846E34C:: @ 846E34C + .incbin "baserom.gba", 0x46E34C, 0x68 + +gUnknown_846E3B4:: @ 846E3B4 + .incbin "baserom.gba", 0x46E3B4, 0x10 + +gUnknown_846E3C4:: @ 846E3C4 + .incbin "baserom.gba", 0x46E3C4, 0x4 + +gUnknown_846E3C8:: @ 846E3C8 + .incbin "baserom.gba", 0x46E3C8, 0x4 + +gUnknown_846E3CC:: @ 846E3CC + .incbin "baserom.gba", 0x46E3CC, 0x4 + +gUnknown_846E3D0:: @ 846E3D0 + .incbin "baserom.gba", 0x46E3D0, 0xC + +gUnknown_846E3DC:: @ 846E3DC + .incbin "baserom.gba", 0x46E3DC, 0x3 + +gUnknown_846E3DF:: @ 846E3DF + .incbin "baserom.gba", 0x46E3DF, 0x3 + +gUnknown_846E3E2:: @ 846E3E2 + .incbin "baserom.gba", 0x46E3E2, 0x3 + +gUnknown_846E3E5:: @ 846E3E5 + .incbin "baserom.gba", 0x46E3E5, 0x6 + +gUnknown_846E3EB:: @ 846E3EB + .incbin "baserom.gba", 0x46E3EB, 0x5 + +gUnknown_846E3F0:: @ 846E3F0 + .incbin "baserom.gba", 0x46E3F0, 0x8 + +gUnknown_846E3F8:: @ 846E3F8 + .incbin "baserom.gba", 0x46E3F8, 0x50 + +gUnknown_846E448:: @ 846E448 + .incbin "baserom.gba", 0x46E448, 0x8 + +gUnknown_846E450:: @ 846E450 + .incbin "baserom.gba", 0x46E450, 0x940 + +gUnknown_846ED90:: @ 846ED90 + .incbin "baserom.gba", 0x46ED90, 0x130 + +gUnknown_846EEC0:: @ 846EEC0 + .incbin "baserom.gba", 0x46EEC0, 0x198 + +gUnknown_846F058:: @ 846F058 + .incbin "baserom.gba", 0x46F058, 0x228 + +gUnknown_846F280:: @ 846F280 + .incbin "baserom.gba", 0x46F280, 0x14 + +gUnknown_846F294:: @ 846F294 + .incbin "baserom.gba", 0x46F294, 0x3C + +gUnknown_846F2D0:: @ 846F2D0 + .incbin "baserom.gba", 0x46F2D0, 0x1 + +gUnknown_846F2D1:: @ 846F2D1 + .incbin "baserom.gba", 0x46F2D1, 0x5 + +gUnknown_846F2D6:: @ 846F2D6 + .incbin "baserom.gba", 0x46F2D6, 0x1 + +gUnknown_846F2D7:: @ 846F2D7 + .incbin "baserom.gba", 0x46F2D7, 0x15 + +gUnknown_846F2EC:: @ 846F2EC + .incbin "baserom.gba", 0x46F2EC, 0xC + +gUnknown_846F2F8:: @ 846F2F8 + .incbin "baserom.gba", 0x46F2F8, 0x28 + +gUnknown_846F320:: @ 846F320 + .incbin "baserom.gba", 0x46F320, 0xF0 + +gUnknown_846F410:: @ 846F410 + .incbin "baserom.gba", 0x46F410, 0x18 + +gUnknown_846F428:: @ 846F428 + .incbin "baserom.gba", 0x46F428, 0x18 + +gUnknown_846F440:: @ 846F440 + .incbin "baserom.gba", 0x46F440, 0x18 + +gUnknown_846F458:: @ 846F458 + .incbin "baserom.gba", 0x46F458, 0x18 + +gUnknown_846F470:: @ 846F470 + .incbin "baserom.gba", 0x46F470, 0x18 + +gUnknown_846F488:: @ 846F488 + .incbin "baserom.gba", 0x46F488, 0x30 + +gUnknown_846F4B8:: @ 846F4B8 + .incbin "baserom.gba", 0x46F4B8, 0x18 diff --git a/data/data_8466FB8.s b/data/data_8466FB8.s deleted file mode 100644 index 9436bc4fd..000000000 --- a/data/data_8466FB8.s +++ /dev/null @@ -1,12 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - - .align 2 -gUnknown_84687A0:: - .string "You have collected all STAMPs!\n" - .string "Want to input a CARD as a prize?$" - - .include "data/mevent/script_ish.inc" - .include "data/mevent/script_common.inc" diff --git a/data/field_effect_helpers.s b/data/field_effect_helpers.s index 429df9f61..7ad7b168a 100644 --- a/data/field_effect_helpers.s +++ b/data/field_effect_helpers.s @@ -7,22 +7,28 @@ .align 2 gUnknown_83FECCC:: @ 83FECCC - .byte 0x0c, 0x00, 0x1c, 0x00, 0x2c, 0x00 + .2byte 0x0c, 0x1c, 0x2c gUnknown_83FECD2:: @ 83FECD2 - .incbin "baserom.gba", 0x3FECD2, 0x4 + .byte 0, 1, 2, 3 gUnknown_83FECD6:: @ 83FECD6 - .incbin "baserom.gba", 0x3FECD6, 0xA + .2byte 0x0004, 0x0004, 0x0004, 0x0010 + .align 2 gUnknown_83FECE0:: @ 83FECE0 - .incbin "baserom.gba", 0x3FECE0, 0x8 + .4byte sub_80DBB18 + .4byte sub_80DBB3C + .align 2 gUnknown_83FECE8:: @ 83FECE8 - .incbin "baserom.gba", 0x3FECE8, 0xC + .4byte sub_80DC318 + .4byte sub_80DC348 + .4byte sub_80DC3A8 gUnknown_83FECF4:: @ 83FECF4 - .incbin "baserom.gba", 0x3FECF4, 0x6 + .byte 0, 0, 1, 2, 3 + .align 1 gUnknown_83FECFA:: @ 83FECFA - .incbin "baserom.gba", 0x3FECFA, 0x6 + .2byte 0x0007, 0x000f diff --git a/data/field_map_obj.s b/data/field_map_obj.s index 9c36b523e..e4fe9ceca 100644 --- a/data/field_map_obj.s +++ b/data/field_map_obj.s @@ -531,7 +531,15 @@ gUnknown_8398008:: @ 8398008 gUnknown_8398028:: @ 8398028 .incbin "graphics/map_objects/12.gbapal" - .incbin "baserom.gba", 0x398048, 0x1340 + .incbin "baserom.gba", 0x398048, 0x600 + +gUnknown_8398648:: + .incbin "graphics/map_objects/fldeff_cut.4bpp" + .incbin "graphics/map_objects/fldeff_cut.4bpp" + +gUnknown_8398688:: + .incbin "graphics/map_objects/fldeff_cut.gbapal" + .incbin "baserom.gba", 0x3986A8, 0xCE0 gUnknown_8399388:: @ 8399388 .incbin "baserom.gba", 0x399388, 0x908 diff --git a/data/fldeff_cut.s b/data/fldeff_cut.s index 5436b51e4..ca25b396a 100644 --- a/data/fldeff_cut.s +++ b/data/fldeff_cut.s @@ -7,10 +7,34 @@ .align 2 gUnknown_83D4100:: @ 83D4100 - .incbin "baserom.gba", 0x3D4100, 0x44 + .2byte 0x000d, 0x0001 + .2byte 0x000a, 0x0013 + .2byte 0x000b, 0x000e + .2byte 0x000c, 0x000f + .2byte 0x0352, 0x033e + .2byte 0x0300, 0x0310 + .2byte 0x0301, 0x0311 + .2byte 0x0302, 0x0312 + .2byte 0x0284, 0x0281 + .2byte 0xffff, 0xffff + + .align 2 +gOamData_83D4128:: + .4byte 0x00000000, 0x00001401 + +gAnimCmd_83D4130:: + obj_image_anim_frame 0, 30 + obj_image_anim_jump 0 + +gSpriteAnimTable_83D4138:: + .4byte gAnimCmd_83D4130 + +gUnknown_83D413C:: + obj_frame_tiles gUnknown_8398648, 0x20 gUnknown_83D4144:: - .incbin "baserom.gba", 0x3D4144, 0x8 + obj_pal gUnknown_8398688, 4096 gUnknown_83D414C:: @ 83D414C - .incbin "baserom.gba", 0x3D414C, 0x18 + spr_template 0xFFFF, 4096, gOamData_83D4128, gSpriteAnimTable_83D4138, gUnknown_83D413C, gDummySpriteAffineAnimTable, objc_8097BA8 + diff --git a/data/learn_move.s b/data/learn_move.s deleted file mode 100644 index ff3f2e3d1..000000000 --- a/data/learn_move.s +++ /dev/null @@ -1,28 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_83FF9F4:: @ 83FF9F4 - .incbin "baserom.gba", 0x3FF9F4, 0x8 - -gUnknown_83FF9FC:: @ 83FF9FC - .incbin "baserom.gba", 0x3FF9FC, 0x28 - -gUnknown_83FFA24:: @ 83FFA24 - .incbin "baserom.gba", 0x3FFA24, 0x18 - -gUnknown_83FFA3C:: @ 83FFA3C - .incbin "baserom.gba", 0x3FFA3C, 0x8 - -gUnknown_83FFA44:: @ 83FFA44 - .incbin "baserom.gba", 0x3FFA44, 0x48 - -gUnknown_83FFA8C:: @ 83FFA8C - .incbin "baserom.gba", 0x3FFA8C, 0x8 - -gUnknown_83FFA94:: @ 83FFA94 - .incbin "baserom.gba", 0x3FFA94, 0x30 diff --git a/data/mevent/script_common.inc b/data/mevent/script_common.inc deleted file mode 100644 index f3ca09e3d..000000000 --- a/data/mevent/script_common.inc +++ /dev/null @@ -1,87 +0,0 @@ -gMEventSrvScript_UnableToSend:: - .4byte 0x12, 0x10, gMEventClientScript_UnableToRecv @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x0a, NULL @ RETURN (can't send) - - .4byte 0x12, 0x10, gMEventClientScript_CommError @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x0b, NULL @ RETURN (comm error) - - .4byte 0x12, 0x10, gMEventClientScript_OtherTrainerCanceled @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x09, NULL @ RETURN (other trn canceled) - -gMEventSrvScript_OtherTrnHasNews:: - .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadNews @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x07, NULL @ RETURN (other trn has news) - -gMEventSrvScript_SentNewsSuccess:: - .4byte 0x12, 0x28, gMEventClientScript_ReceiveNewsAndValidate @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0e, 0x00, NULL @ SEND_NEWS - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x13, NULL @ RECV - .4byte 0x08, 0x00, NULL @ READWORD - .4byte 0x04, 0x01, gMEventSrvScript_OtherTrnHasNews @ BRANCH_EQ - .4byte 0x12, 0x10, gMEventClientScript_RecvNewsSuccess @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x03, NULL @ RETURN (news sent to) - -gMEventSrvScript_SendCardSuccess:: - .4byte 0x12, 0x30, gMEventClientScript_ReceiveCardAndReturnSuccess @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0d, 0x00, NULL @ SEND_CARD - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x0f, 0x00, NULL @ BUFFER_SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x02, NULL @ RETURN (card sent to) - -gMEventSrvScript_AskClientToOverwriteCard:: - .4byte 0x12, 0x28, gMEventClientScript_AskWouldLikeToTossCard @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x13, NULL @ RECV - .4byte 0x08, 0x00, NULL @ READWORD - .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_OtherTrainerCanceled @ BRANCH - -gMEventSrvScript_OtherTrnHasCard:: - .4byte 0x12, 0x10, gMEventClientScript_AlreadyHadCard @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x05, NULL @ RETURN (other trn has card) - - .4byte 0x12, 0x10, gMEventClientScript_NothingSentOver @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x14, NULL @ RECV - .4byte 0x00, 0x00, NULL @ RETURN (nothing sent over) - -gMEventSrvScript_SendNews:: @ 8468B6C - .4byte 0x1b, 0x00, NULL @ BUFFER_SAVED_NEWS - .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x11, NULL @ RECV - .4byte 0x05, 0x00, NULL @ READ_1442CC - .4byte 0x06, 0x00, NULL @ VALID_1442CC - .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_SentNewsSuccess @ BRANCH - -gMEventSrvScript_SendCard:: @ 8468BCC - .4byte 0x1a, 0x00, NULL @ BUFFER_SAVED_CARD - .4byte 0x1c, 0x00, NULL @ RAM_SCRIPT_IF_VALID - .4byte 0x12, 0x20, gMEventClientScript_Send1442CC @ SEND - .4byte 0x01, 0x00, NULL @ WAIT SEND - .4byte 0x02, 0x11, NULL @ RECV - .4byte 0x05, 0x00, NULL @ READ_1442CC - .4byte 0x06, 0x00, NULL @ VALID_1442CC - .4byte 0x04, 0x00, gMEventSrvScript_UnableToSend @ BRANCH_EQ - .4byte 0x07, 0x00, NULL @ CHECK_1442CC_14 - .4byte 0x04, 0x02, gMEventSrvScript_AskClientToOverwriteCard @ BRANCH_EQ - .4byte 0x04, 0x00, gMEventSrvScript_SendCardSuccess @ BRANCH_EQ - .4byte 0x03, 0x00, gMEventSrvScript_OtherTrnHasCard @ BRANCH diff --git a/data/mevent/script_ish.inc b/data/mevent/script_ish.inc deleted file mode 100644 index ed6b639da..000000000 --- a/data/mevent/script_ish.inc +++ /dev/null @@ -1,65 +0,0 @@ -gMEventClientScript_InotialListen:: @ 84687E0 - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER - -gMEventClientScript_Send1442CC:: - .4byte 0x08, 0x00 @ SEND HEADER MAYBE - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER - -gMEventClientScript_UnableToRecv:: @ can't accept card or news - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0a @ RETURN 0x0a - -gMEventClientScript_CommError:: @ comm error - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0b @ RETURN 0x0b - -gMEventClientScript_NothingSentOver:: @ nothing sent - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x00 @ RETURN 0x00 - -gMEventClientScript_ReceiveCardAndReturnSuccess:: @ card success - .4byte 0x02, 0x16 @ RECEIVE ID(0x16) - .4byte 0x0a, 0x00 @ RECEIVE_TO_SAVE_FILE - .4byte 0x02, 0x19 @ RECEIVE ID(0x19) - .4byte 0x11, 0x00 @ RECEIVE_TO_RAM_SCRIPT - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x02 @ RETURN 0x02 - -gMEventClientScript_ReceiveNewsAndValidate:: - .4byte 0x02, 0x17 @ RECEIVE ID(0x17) - .4byte 0x09, 0x00 @ VALIDATE NEWS - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER - -gMEventClientScript_AlreadyHadNews:: @ already had news - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x07 @ RETURN 0x07 - -gMEventClientScript_RecvNewsSuccess:: @ news success - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x03 @ RETURN 0x03 - -gMEventClientScript_AskWouldLikeToTossCard:: - .4byte 0x0d, 0x00 @ REQUEST PARAMETER - .4byte 0x0e, 0x00 @ SEND PARAMETER - .4byte 0x03, 0x00 @ WAIT SEND - .4byte 0x02, 0x10 @ RECEIVE ID(0x10) - .4byte 0x04, 0x00 @ JUMP TO RECEIVE BUFFER - -gMEventClientScript_OtherTrainerCanceled:: @ comm canceled - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x09 @ RETURN 0x09 - -gMEventClientScript_AlreadyHadCard:: @ already had card - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x05 @ RETURN 0x05 - -gMEventClientScript_SuccessFromBuffer:: @ success from buffer - .4byte 0x02, 0x15 @ RECEIVE ID(0x15) - .4byte 0x0c, 0x00 @ READ PACKET AND COMPUTE SOMETHING - .4byte 0x14, 0x00 @ SEND ALL - .4byte 0x01, 0x0d @ RETURN 0x0d diff --git a/data/data_8468C98.s b/data/pokemon_jump.s index 7ce7c3a02..bddff8c3a 100644 --- a/data/data_8468C98.s +++ b/data/pokemon_jump.s @@ -179,120 +179,3 @@ gUnknown_846E2CC:: @ 846E2CC gUnknown_846E2D4:: @ 846E2D4 .incbin "baserom.gba", 0x46E2D4, 0xC - -gUnknown_846E2E0:: @ 846E2E0 - .incbin "baserom.gba", 0x46E2E0, 0x8 - -gUnknown_846E2E8:: @ 846E2E8 - .incbin "baserom.gba", 0x46E2E8, 0x8 - -gUnknown_846E2F0:: @ 846E2F0 - .incbin "baserom.gba", 0x46E2F0, 0x24 - -gUnknown_846E314:: @ 846E314 - .incbin "baserom.gba", 0x46E314, 0x14 - -gUnknown_846E328:: @ 846E328 - .incbin "baserom.gba", 0x46E328, 0x24 - -gUnknown_846E34C:: @ 846E34C - .incbin "baserom.gba", 0x46E34C, 0x68 - -gUnknown_846E3B4:: @ 846E3B4 - .incbin "baserom.gba", 0x46E3B4, 0x10 - -gUnknown_846E3C4:: @ 846E3C4 - .incbin "baserom.gba", 0x46E3C4, 0x4 - -gUnknown_846E3C8:: @ 846E3C8 - .incbin "baserom.gba", 0x46E3C8, 0x4 - -gUnknown_846E3CC:: @ 846E3CC - .incbin "baserom.gba", 0x46E3CC, 0x4 - -gUnknown_846E3D0:: @ 846E3D0 - .incbin "baserom.gba", 0x46E3D0, 0xC - -gUnknown_846E3DC:: @ 846E3DC - .incbin "baserom.gba", 0x46E3DC, 0x3 - -gUnknown_846E3DF:: @ 846E3DF - .incbin "baserom.gba", 0x46E3DF, 0x3 - -gUnknown_846E3E2:: @ 846E3E2 - .incbin "baserom.gba", 0x46E3E2, 0x3 - -gUnknown_846E3E5:: @ 846E3E5 - .incbin "baserom.gba", 0x46E3E5, 0x6 - -gUnknown_846E3EB:: @ 846E3EB - .incbin "baserom.gba", 0x46E3EB, 0x5 - -gUnknown_846E3F0:: @ 846E3F0 - .incbin "baserom.gba", 0x46E3F0, 0x8 - -gUnknown_846E3F8:: @ 846E3F8 - .incbin "baserom.gba", 0x46E3F8, 0x50 - -gUnknown_846E448:: @ 846E448 - .incbin "baserom.gba", 0x46E448, 0x8 - -gUnknown_846E450:: @ 846E450 - .incbin "baserom.gba", 0x46E450, 0x940 - -gUnknown_846ED90:: @ 846ED90 - .incbin "baserom.gba", 0x46ED90, 0x130 - -gUnknown_846EEC0:: @ 846EEC0 - .incbin "baserom.gba", 0x46EEC0, 0x198 - -gUnknown_846F058:: @ 846F058 - .incbin "baserom.gba", 0x46F058, 0x228 - -gUnknown_846F280:: @ 846F280 - .incbin "baserom.gba", 0x46F280, 0x14 - -gUnknown_846F294:: @ 846F294 - .incbin "baserom.gba", 0x46F294, 0x3C - -gUnknown_846F2D0:: @ 846F2D0 - .incbin "baserom.gba", 0x46F2D0, 0x1 - -gUnknown_846F2D1:: @ 846F2D1 - .incbin "baserom.gba", 0x46F2D1, 0x5 - -gUnknown_846F2D6:: @ 846F2D6 - .incbin "baserom.gba", 0x46F2D6, 0x1 - -gUnknown_846F2D7:: @ 846F2D7 - .incbin "baserom.gba", 0x46F2D7, 0x15 - -gUnknown_846F2EC:: @ 846F2EC - .incbin "baserom.gba", 0x46F2EC, 0xC - -gUnknown_846F2F8:: @ 846F2F8 - .incbin "baserom.gba", 0x46F2F8, 0x28 - -gUnknown_846F320:: @ 846F320 - .incbin "baserom.gba", 0x46F320, 0xF0 - -gUnknown_846F410:: @ 846F410 - .incbin "baserom.gba", 0x46F410, 0x18 - -gUnknown_846F428:: @ 846F428 - .incbin "baserom.gba", 0x46F428, 0x18 - -gUnknown_846F440:: @ 846F440 - .incbin "baserom.gba", 0x46F440, 0x18 - -gUnknown_846F458:: @ 846F458 - .incbin "baserom.gba", 0x46F458, 0x18 - -gUnknown_846F470:: @ 846F470 - .incbin "baserom.gba", 0x46F470, 0x18 - -gUnknown_846F488:: @ 846F488 - .incbin "baserom.gba", 0x46F488, 0x30 - -gUnknown_846F4B8:: @ 846F4B8 - .incbin "baserom.gba", 0x46F4B8, 0x18 diff --git a/data/strings.s b/data/strings.s index 9b223df62..101946475 100644 --- a/data/strings.s +++ b/data/strings.s @@ -4535,17 +4535,17 @@ gDaycareText_PlayOther:: @ 841E3A8 .string "The two prefer to play with other\n" .string "POKéMON than each other.$" -gUnknown_841E3E3:: @ 841E3E3 +gText_TeachWhichMoveToMon:: @ 841E3E3 .string "Teach which move to {STR_VAR_1}?$" -gUnknown_841E3FB:: @ 841E3FB +gText_TeachMoveQues:: @ 841E3FB .string "Teach {STR_VAR_2}?$" -gUnknown_841E405:: @ 841E405 +gText_MonLearnedMove:: @ 841E405 .string "{STR_VAR_1} learned\n" .string "{STR_VAR_2}.$" -gUnknown_841E414:: @ 841E414 +gText_MonIsTryingToLearnMove:: @ 841E414 .string "{STR_VAR_1} is trying to learn\n" .string "{STR_VAR_2}.\p" .string "But {STR_VAR_1} can't learn more\n" @@ -4553,24 +4553,24 @@ gUnknown_841E414:: @ 841E414 .string "Delete an older move to make\n" .string "room for {STR_VAR_2}?$" -gUnknown_841E481:: @ 841E481 +gText_StopLearningMove:: @ 841E481 .string "Stop learning {STR_VAR_2}?$" -gUnknown_841E493:: @ 841E493 +gText_1_2_and_Poof:: @ 841E493 .string "{PAUSE 0x20}1, {PAUSE 0x0F}2, and {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}‥ {PAUSE 0x0F}{PLAY_SE SE_KON}Poof!\p" .string "$" -gUnknown_841E4C0:: @ 841E4C0 +gText_MonForgotOldMoveAndMonLearnedNewMove:: @ 841E4C0 .string "{STR_VAR_1} forgot {STR_VAR_3}.\p" .string "And‥\p" .string "{STR_VAR_1}\n" .string "learned {STR_VAR_2}.$" -gUnknown_841E4E2:: @ 841E4E2 +gText_GiveUpTryingToTeachNewMove:: @ 841E4E2 .string "Give up trying to teach a new\n" .string "move to {STR_VAR_1}?$" -gUnknown_841E50C:: @ 841E50C +gText_WhichMoveShouldBeForgotten:: @ 841E50C .string "Which move should be forgotten?\p" .string "$" diff --git a/data/unknown_serial_data.s b/data/unknown_serial_data.s index 57c979340..ec5818604 100644 --- a/data/unknown_serial_data.s +++ b/data/unknown_serial_data.s @@ -1,5 +1,5 @@ .section .rodata gUnknownSerialData_Start:: @ 86FC50C - .incbin "baserom.gba", 0x6FC50C, 0x3760 + .incbin "data/unknown_serial_data.bin" gUnknownSerialData_End:: diff --git a/graphics/learn_move/interface_sprites.png b/graphics/learn_move/interface_sprites.png Binary files differnew file mode 100644 index 000000000..4fa3d4a1b --- /dev/null +++ b/graphics/learn_move/interface_sprites.png diff --git a/graphics/map_objects/fldeff_cut.png b/graphics/map_objects/fldeff_cut.png Binary files differnew file mode 100644 index 000000000..031d04b40 --- /dev/null +++ b/graphics/map_objects/fldeff_cut.png diff --git a/include/graphics.h b/include/graphics.h index bc87e4d53..c057da386 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4226,7 +4226,13 @@ extern const u16 gTradeMenuMonBox_Tilemap[]; extern const u16 gUnknown_8E9CBBC[]; extern const u16 gUnknown_8E9CB9C[]; +// hall_of_fame extern const u32 gFile_graphics_misc_confetti_sheet[]; extern const u32 gFile_graphics_misc_confetti_palette[]; +// learn_move +extern const u16 gUnknown_8E97DDC[]; +extern const u32 gUnknown_8E97DFC[]; +extern const u32 gUnknown_8E97EC4[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/link_rfu.h b/include/link_rfu.h index 6e6e5f7a3..671488be0 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -43,4 +43,7 @@ void sub_80FBB20(void); bool8 sub_80FA484(bool32 a0); void var_800D_set_xB(void); +#include "mevent_server.h" +extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; + #endif //GUARD_LINK_RFU_H diff --git a/include/mevent_server.h b/include/mevent_server.h index ddc00b978..b691e9e1f 100644 --- a/include/mevent_server.h +++ b/include/mevent_server.h @@ -37,6 +37,20 @@ struct mevent_client_cmd u32 parameter; }; +// Client commands +#define CLI_RETURN(x) {.instr = 1, .parameter = x} +#define CLI_RECEIVE(x) {.instr = 2, .parameter = x} +#define CLI_WAITSND {.instr = 3, .parameter = 0} +#define CLI_JUMPBUF {.instr = 4, .parameter = 0} +#define CLI_SNDHEAD {.instr = 8, .parameter = 0} +#define CLI_VLDNEWS {.instr = 9, .parameter = 0} +#define CLI_RECVSAV {.instr = 10, .parameter = 0} +#define CLI_RECVBUF {.instr = 12, .parameter = 0} +#define CLI_REQWORD {.instr = 13, .parameter = 0} +#define CLI_SNDWORD {.instr = 14, .parameter = 0} +#define CLI_RECVRAM {.instr = 17, .parameter = 0} +#define CLI_SENDALL {.instr = 20, .parameter = 0} + struct mevent_client { u32 unk_00; @@ -58,6 +72,24 @@ struct mevent_server_cmd void * parameter; }; +// Server commands +#define SRV_RETURN(x) {.instr = 0, .flag = x} +#define SRV_WAITSND {.instr = 1} +#define SRV_RECV(x) {.instr = 2, .flag = x} +#define SRV_BRANCH(y) {.instr = 3, .parameter = (void *)y} +#define SRV_BRANCHIF(x, y) {.instr = 4, .flag = x, .parameter = (void *)y} +#define SRV_READ_1442CC {.instr = 5} +#define SRV_VALID_1442CC {.instr = 6} +#define SRV_CHECK_1442CC_14 {.instr = 7} +#define SRV_READWORD {.instr = 8} +#define SRV_SEND_CARD {.instr = 13} +#define SRV_SEND_NEWS {.instr = 14} +#define SRV_BUFFER_SEND {.instr = 15} +#define SRV_SEND(x, y) {.instr = 18, .flag = x, .parameter = (void *)y} +#define SRV_BUFFER_CARD {.instr = 26} +#define SRV_BUFFER_NEWS {.instr = 27} +#define SRV_RAM_SCRIPT_IF_VALID {.instr = 28} + struct mevent_srv_common { u32 unk_00; diff --git a/include/save_menu_util.h b/include/save_menu_util.h index f2a18a777..7085520b4 100644 --- a/include/save_menu_util.h +++ b/include/save_menu_util.h @@ -7,7 +7,8 @@ enum SaveStat SAVE_STAT_POKEDEX, SAVE_STAT_TIME, SAVE_STAT_LOCATION, - SAVE_STAT_BADGES + SAVE_STAT_BADGES, + SAVE_STAT_TIME_HR_RT_ALIGN }; void SaveStatToString(u8 a0, u8 *a1, u8 a2); diff --git a/include/strings.h b/include/strings.h index 80ede79ef..f39f4f553 100644 --- a/include/strings.h +++ b/include/strings.h @@ -724,4 +724,15 @@ extern const u8 gText_IDNumber[]; extern const u8 gText_Name[]; extern const u8 gText_MainMenuTime[]; +// learn_move +extern const u8 gText_TeachWhichMoveToMon[]; +extern const u8 gText_MonLearnedMove[]; +extern const u8 gText_MonIsTryingToLearnMove[]; +extern const u8 gText_StopLearningMove[]; +extern const u8 gText_1_2_and_Poof[]; +extern const u8 gText_MonForgotOldMoveAndMonLearnedNewMove[]; +extern const u8 gText_WhichMoveShouldBeForgotten[]; +extern const u8 gText_TeachMoveQues[]; +extern const u8 gText_GiveUpTryingToTeachNewMove[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index b2a1f11e7..d40c88c0a 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -206,7 +206,7 @@ SECTIONS { src/battle_controller_safari.o(.text); src/fldeff_sweetscent.o(.text); asm/battle_anim_effects_3.o(.text); - asm/learn_move.o(.text); + src/learn_move.o(.text); src/fldeff_softboiled.o(.text); src/battle_tower.o(.text); src/battle_controller_oak_old_man.o(.text); @@ -222,7 +222,7 @@ SECTIONS { src/fldeff_teleport.o(.text); src/new_menu_helpers.o(.text); asm/box_party_pokemon_dropdown.o(.text); - asm/save_menu_util.o(.text); + src/save_menu_util.o(.text); src/map_preview_screen.o(.text); asm/link_rfu_2.o(.text); asm/link_rfu.o(.text); @@ -478,7 +478,7 @@ SECTIONS { data/field_effect_helpers.o(.rodata); src/battle_controller_safari.o(.rodata); data/battle_anim_effects_3.o(.rodata); - data/learn_move.o(.rodata); + src/learn_move.o(.rodata); src/battle_tower.o(.rodata); src/battle_controller_oak_old_man.o(.rodata); src/player_pc.o(.rodata); @@ -536,12 +536,13 @@ SECTIONS { src/mevent_client.o(.rodata); src/mevent_server.o(.rodata); src/mevent_8145654.o(.rodata); - data/data_8466FB8.o(.rodata); + src/mevent_scripts.o(.rodata); src/menews_jisan.o(.rodata); src/menews_jisan.o(.rodata.str1.4); . = ALIGN(4); src/seagallop.o(.rodata); - data/data_8468C98.o(.rodata); + data/pokemon_jump.o(.rodata); + data/berry_crush.o(.rodata); src/wireless_communication_status_screen.o(.rodata); src/braille_text.o(.rodata); src/text_window_graphics.o(.rodata); diff --git a/src/battle_tower.c b/src/battle_tower.c index 6720e9f1b..dfbef8fe5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -43,6 +43,14 @@ static u16 GetCurrentBattleTowerWinStreak(u8 levelType); static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer * eReaderTrainer); static void PrintEReaderTrainerFarewellMessage(void); +const u8 unref_83FFAAC[] = { + 0x05, 0x04, 0x01, 0x10, 0x04, 0x02, 0x05, 0x06, + 0x03, 0x10, 0x06, 0x04, 0x00, 0x01, 0x02, 0x03, + 0x00, 0x02, 0x03 +}; + +const u8 unref_83FFABF[] = _("100"); + #include "data/battle_tower/trainers.h" static const u16 sBattleTowerHeldItems[] = { diff --git a/src/learn_move.c b/src/learn_move.c new file mode 100644 index 000000000..e22922528 --- /dev/null +++ b/src/learn_move.c @@ -0,0 +1,842 @@ +#include "global.h" +#include "bg.h" +#include "malloc.h" +#include "gpu_regs.h" +#include "palette.h" +#include "script.h" +#include "task.h" +#include "data.h" +#include "trig.h" +#include "window.h" +#include "field_fadetransition.h" +#include "overworld.h" +#include "new_menu_helpers.h" +#include "menu.h" +#include "list_menu.h" +#include "event_data.h" +#include "text_window.h" +#include "string_util.h" +#include "pokemon_summary_screen.h" +#include "graphics.h" +#include "sound.h" +#include "strings.h" +#include "constants/songs.h" +#include "constants/moves.h" + +struct MoveTutorMoveInfoHeaders +{ + const u8 *text; + u8 left; + u8 right; + u8 index; // unused +}; + +struct LearnMoveGfxResources +{ + u8 state; + u8 unk_01; + u8 unk_02; + u8 spriteIds[2]; + u8 filler_05[0x13]; + u8 unk_18; + u8 scrollPositionMaybe; + u8 numLearnableMoves; + u8 unk_1B; + u8 unk_1C; + u8 unk_1D; + u8 unk_1E; + struct ListMenuItem listMenuItems[25]; + u16 learnableMoves[25]; + u8 listMenuStrbufs[25][13]; + bool8 scheduleMoveInfoUpdate; + u8 selectedPartyMember; + u8 selectedMoveSlot; + u8 unk_262; + u8 listMenuTaskId; + u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; // 264 + u8 textColor[3]; // A64 + u8 selectedIndex; + u16 listMenuScrollPos; + u16 listMenuScrollRow; +}; + +static EWRAM_DATA struct LearnMoveGfxResources * sMoveRelearner = NULL; + +static void Task_InitMoveRelearnerMenu(u8 taskId); +static void CB2_MoveRelearner_Init(void); +static void CB2_MoveRelearner(void); +static void MoveRelearnerStateMachine(void); +static void DrawTextBorderOnWindows6and7(void); +static void PrintTeachWhichMoveToStrVar1(bool8 onInit); +static void InitMoveRelearnerStateVariables(void); +static void SpriteCB_ListMenuScrollIndicators(struct Sprite * sprite); +static void SpawnListMenuScrollIndicatorSprites(void); +static void MoveRelearnerInitListMenuBuffersEtc(void); +static void MoveRelearnerMenuHandleInput(void); +static void MoveLearnerInitListMenu(void); +static void LoadMoveInfoUI(void); +static void PrintMoveInfoHandleCancel_CopyToVram(void); +static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static s8 YesNoMenuProcessInput(void); +static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx); + +static const u16 sLearnMoveInterfaceSpritesPalette[] = INCBIN_U16("graphics/learn_move/interface_sprites.gbapal"); +static const u16 sLearnMoveInterfaceSpritesTiles[] = INCBIN_U16("graphics/learn_move/interface_sprites.4bpp"); + +static const u8 sMoveTutorMenuWindowFrameDimensions[][4] = +{ + { 0, 0, 19, 13}, + {20, 0, 29, 13}, + { 2, 14, 27, 19} +}; + +static const u8 sJPText_TatakauWaza[] = _("たたかうわざ"); +static const u8 sJPText_Taipu[] = _("タイプ/"); +static const u8 sJPText_PP[] = _("PP/"); +static const u8 sJPText_Iryoku[] = _("いりょく/"); +static const u8 sJPText_Meichuu[] = _("めいちゅう/"); + +static const struct MoveTutorMoveInfoHeaders sMoveTutorMoveInfoHeaders[][5] = +{ + { + {sJPText_TatakauWaza, 7, 1, 0}, + {sJPText_Taipu, 1, 4, 1}, + {sJPText_Iryoku, 11, 4, 2}, + {sJPText_PP, 2, 6, 3}, + {sJPText_Meichuu, 10, 6, 4}, + }, + { + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + {NULL, 0, 0, 0}, + }, +}; + +static const struct SpriteSheet sSpriteSheet_ListMenuScrollIndicators = { + sLearnMoveInterfaceSpritesTiles, 0x180, 5525 +}; + +static const struct SpritePalette sSpritePalette_ListMenuScrollIndicators = { + sLearnMoveInterfaceSpritesPalette, 5526 +}; + +static const struct OamData sOamdata_MoveRelearnerListMenuScrollIndicators = { + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8) +}; + +static const union AnimCmd sAnimCmd_ScrollIndicatorDown[] = { + ANIMCMD_FRAME(4, 5), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_ScrollIndicatorUp[] = { + ANIMCMD_FRAME(6, 5), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_MoveRelearnerListMenuScrollIndicators[] = { + sAnimCmd_ScrollIndicatorDown, + sAnimCmd_ScrollIndicatorUp +}; + +static const struct SpriteTemplate sSpriteTemplate_MoveRelearnerListMenuScrollIndicators = { + 5525, 5526, &sOamdata_MoveRelearnerListMenuScrollIndicators, sSpriteAnimTable_MoveRelearnerListMenuScrollIndicators, NULL, gDummySpriteAffineAnimTable, SpriteCB_ListMenuScrollIndicators +}; + +static const struct BgTemplate sBgTemplates[2] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .priority = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 8, + .priority = 1 + } +}; + +static const struct WindowTemplate sWindowTemplates[9] = { + { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 6, + .height = 7, + .paletteNum = 0x0d, + .baseBlock = 0x014 + }, + { + .bg = 0, + .tilemapLeft = 10, + .tilemapTop = 0, + .width = 5, + .height = 5, + .paletteNum = 0x0d, + .baseBlock = 0x03e + }, + { + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 0, + .width = 5, + .height = 2, + .paletteNum = 0x0d, + .baseBlock = 0x057 + }, + { + .bg = 0, + .tilemapLeft = 15, + .tilemapTop = 0, + .width = 3, + .height = 5, + .paletteNum = 0x0f, + .baseBlock = 0x061 + }, + { + .bg = 0, + .tilemapLeft = 5, + .tilemapTop = 2, + .width = 3, + .height = 3, + .paletteNum = 0x0f, + .baseBlock = 0x070 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 6, + .width = 15, + .height = 8, + .paletteNum = 0x0f, + .baseBlock = 0x079 + }, + { + .bg = 0, + .tilemapLeft = 19, + .tilemapTop = 1, + .width = 10, + .height = 12, + .paletteNum = 0x0f, + .baseBlock = 0x0f1 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 15, + .width = 26, + .height = 4, + .paletteNum = 0x0f, + .baseBlock = 0x169 + }, DUMMY_WIN_TEMPLATE +}; + +static const struct WindowTemplate gUnknown_83FFA8C = { + .bg = 0, + .tilemapLeft = 21, + .tilemapTop = 8, + .width = 6, + .height = 4, + .paletteNum = 0x0f, + .baseBlock = 0x1d1 +}; + +static const struct ListMenuTemplate sMoveRelearnerListMenuTemplate = { + .items = NULL, + .moveCursorFunc = MoveRelearnerMenu_MoveCursorFunc, + .itemPrintFunc = NULL, + .totalItems = 0, + .maxShowed = 7, + .windowId = 6, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 0, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 1, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 2, + .cursorKind = 0, +}; + +static void VBlankCB_MoveRelearner(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void DisplayMoveTutorMenu(void) +{ + ScriptContext2_Enable(); + CreateTask(Task_InitMoveRelearnerMenu, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); +} + +static void Task_InitMoveRelearnerMenu(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_MoveRelearner_Init); + gFieldCallback = FieldCallback_ReturnToEventScript2; + DestroyTask(taskId); + } +} + +static void MoveRelearnerLoadBgGfx(void) +{ + int i; + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, sBgTemplates, NELEMS(sBgTemplates)); + ResetTempTileDataBuffers(); + if (InitWindows(sWindowTemplates)) + { + DeactivateAllTextPrinters(); + for (i = 0; i < NELEMS(sWindowTemplates); i++) + { + ClearWindowTilemap(i); + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + } + FillWindowPixelBuffer(7, PIXEL_FILL(1)); + FillBgTilemapBufferRect(0, 0x000, 0, 0, 30, 20, 0xF); + SetBgTilemapBuffer(1, sMoveRelearner->bg1TilemapBuffer); + TextWindow_SetUserSelectedFrame(0, 1, 0xE0); + sub_8107D38(0xD0, 1); + LoadPalette(gUnknown_8E97DDC, 0x00, 0x20); + DecompressAndLoadBgGfxUsingHeap(1, gUnknown_8E97DFC, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnknown_8E97EC4, 0, 0); + CopyBgTilemapBufferToVram(1); + SetGpuReg(REG_OFFSET_BG0VOFS, 0); + SetGpuReg(REG_OFFSET_BG0HOFS, 0); + SetGpuReg(REG_OFFSET_BG1VOFS, 0); + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + } +} + +static void CB2_MoveRelearner_Init(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + sMoveRelearner = AllocZeroed(sizeof(struct LearnMoveGfxResources)); + InitMoveRelearnerStateVariables(); + sMoveRelearner->selectedPartyMember = gSpecialVar_0x8004; + MoveRelearnerInitListMenuBuffersEtc(); + SetVBlankCallback(VBlankCB_MoveRelearner); + MoveRelearnerLoadBgGfx(); + SpawnListMenuScrollIndicatorSprites(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(CB2_MoveRelearner); +} + +static void CB2_MoveRelearner_Resume(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + MoveRelearnerInitListMenuBuffersEtc(); + sMoveRelearner->selectedMoveSlot = gSpecialVar_0x8005; + SetVBlankCallback(VBlankCB_MoveRelearner); + MoveRelearnerLoadBgGfx(); + SpawnListMenuScrollIndicatorSprites(); + FillPalette(RGB_BLACK, 0, 2); + + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(CB2_MoveRelearner); +} + +static void CB2_MoveRelearner(void) +{ + if (!IsTextPrinterActive(7)) + MoveRelearnerStateMachine(); + if (sMoveRelearner->scheduleMoveInfoUpdate) + { + PrintMoveInfoHandleCancel_CopyToVram(); + sMoveRelearner->scheduleMoveInfoUpdate = FALSE; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void StringExpandPlaceholdersAndPrintTextOnWindow7Color2(const u8 *str) +{ + StringExpandPlaceholders(gStringVar4, str); + PrintTextOnWindow(7, gStringVar4, 0, 2, GetTextSpeedSetting(), 2); +} + +static void MoveRelearnerStateMachine(void) +{ + u16 move; + + switch (sMoveRelearner->state) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + ShowBg(1); + LoadMoveInfoUI(); + sMoveRelearner->state++; + DrawTextBorderOnWindows6and7(); + PrintTeachWhichMoveToStrVar1(FALSE); + MoveLearnerInitListMenu(); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + break; + case 1: + if (!gPaletteFade.active) + sMoveRelearner->state = 4; + break; + case 2: + sMoveRelearner->state++; + break; + case 3: + PrintTeachWhichMoveToStrVar1(FALSE); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + sMoveRelearner->state++; + break; + case 4: + MoveRelearnerMenuHandleInput(); + break; + case 8: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state++; + break; + case 9: + switch (YesNoMenuProcessInput()) + { + case 0: + if (GiveMoveToMon(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]) != 0xFFFF) + { + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonLearnedMove); + gSpecialVar_0x8004 = TRUE; + sMoveRelearner->state = 31; + } + else + { + sMoveRelearner->state = 16; + } + break; + case 1: + case -1: + sMoveRelearner->state = 3; + break; + } + break; + case 12: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state++; + break; + case 13: + switch (YesNoMenuProcessInput()) + { + case 0: + gSpecialVar_0x8004 = FALSE; + sMoveRelearner->state = 14; + break; + case 1: + case -1: + sMoveRelearner->state = 3; + break; + } + break; + case 16: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonIsTryingToLearnMove); + sMoveRelearner->state++; + break; + case 17: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state = 18; + break; + case 18: + switch (YesNoMenuProcessInput()) + { + case 0: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_WhichMoveShouldBeForgotten); + sMoveRelearner->state = 19; + break; + case 1: + case -1: + sMoveRelearner->state = 24; + break; + } + break; + case 24: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_StopLearningMove); + sMoveRelearner->state++; + break; + case 25: + CreateYesNoMenu(&gUnknown_83FFA8C, 3, 0, 2, 0x001, 0xE, 0); + sMoveRelearner->state = 26; + break; + case 26: + switch (YesNoMenuProcessInput()) + { + case 0: + sMoveRelearner->state = 27; + break; + case 1: + case -1: + sMoveRelearner->state = 16; + break; + } + break; + case 27: + sMoveRelearner->state = 3; + break; + case 19: + sMoveRelearner->state = 20; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + break; + case 20: + if (!gPaletteFade.active) + { + ListMenuGetScrollAndRow(sMoveRelearner->listMenuTaskId, &sMoveRelearner->listMenuScrollPos, &sMoveRelearner->listMenuScrollRow); + FreeAllWindowBuffers(); + ShowSelectMovePokemonSummaryScreen(gPlayerParty, sMoveRelearner->selectedPartyMember, gPlayerPartyCount - 1, CB2_MoveRelearner_Resume, sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); + sMoveRelearner->state = 28; + } + break; + case 21: + sMoveRelearner->state = 14; + break; + case 22: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + sMoveRelearner->state++; + break; + case 15: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + Free(sMoveRelearner); + SetMainCallback2(CB2_ReturnToField); + } + break; + case 28: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + ShowBg(0); + ShowBg(1); + sMoveRelearner->state++; + LoadMoveInfoUI(); + DrawTextBorderOnWindows6and7(); + MoveLearnerInitListMenu(); + PrintTeachWhichMoveToStrVar1(TRUE); + PrintMoveInfoHandleCancel_CopyToVram(); + break; + case 29: + if (!gPaletteFade.active) + { + if (sMoveRelearner->selectedMoveSlot == 4) + { + sMoveRelearner->state = 24; + } + else + { + move = GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_MOVE1 + sMoveRelearner->selectedMoveSlot); + StringCopy(gStringVar3, gMoveNames[move]); + RemoveMonPPBonus(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->selectedMoveSlot); + SetMonMoveSlot(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex], sMoveRelearner->selectedMoveSlot); + StringCopy(gStringVar2, gMoveNames[sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]]); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_1_2_and_Poof); + sMoveRelearner->state = 30; + gSpecialVar_0x8004 = TRUE; + } + } + break; + case 30: + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_MonForgotOldMoveAndMonLearnedNewMove); + sMoveRelearner->state = 31; + PlayFanfare(MUS_FANFA1); + break; + case 31: + PlayFanfare(MUS_FANFA1); + sMoveRelearner->state = 32; + break; + case 32: + if (IsFanfareTaskInactive()) + sMoveRelearner->state = 33; + break; + case 33: + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sMoveRelearner->state = 14; + } + break; + } +} + +static void DrawTextBorderOnWindows6and7(void) +{ + int i; + for (i = 6; i < 8; i++) + DrawTextBorderOuter(i, 0x001, 0xE); +} + +static void PrintTeachWhichMoveToStrVar1(bool8 onInit) +{ + if (!onInit) + { + StringExpandPlaceholders(gStringVar4, gText_TeachWhichMoveToMon); + PrintTextOnWindow(7, gStringVar4, 0, 2, 0, 2); + PutWindowTilemap(7); + CopyWindowToVram(7, 3); + } +} + +static void InitMoveRelearnerStateVariables(void) +{ + int i; + sMoveRelearner->state = 0; + sMoveRelearner->unk_02 = 0; + sMoveRelearner->scrollPositionMaybe = 0; + sMoveRelearner->unk_18 = 0; + sMoveRelearner->unk_1C = 0; + sMoveRelearner->numLearnableMoves = 0; + sMoveRelearner->unk_1B = 0; + sMoveRelearner->unk_1D = 0; + sMoveRelearner->unk_1E = 0; + sMoveRelearner->scheduleMoveInfoUpdate = FALSE; + for (i = 0; i < 20; i++) + sMoveRelearner->learnableMoves[i] = MOVE_NONE; +} + +static void SpriteCB_ListMenuScrollIndicators(struct Sprite * sprite) +{ + s16 abcissa = (sprite->data[1] * 10) & 0xFF; + switch (sprite->data[0]) + { + case 0: + break; + case 1: + sprite->pos2.x = Sin(abcissa, 3) * sprite->data[2]; + break; + case 2: + sprite->pos2.y = Sin(abcissa, 1) * sprite->data[2]; + break; + } + sprite->data[1]++; +} + +static void SpawnListMenuScrollIndicatorSprites(void) +{ + int i; + LoadSpriteSheet(&sSpriteSheet_ListMenuScrollIndicators); + LoadSpritePalette(&sSpritePalette_ListMenuScrollIndicators); + sMoveRelearner->spriteIds[0] = CreateSprite(&sSpriteTemplate_MoveRelearnerListMenuScrollIndicators, 200, 4, 0); + StartSpriteAnim(&gSprites[sMoveRelearner->spriteIds[0]], 1); + gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; + gSprites[sMoveRelearner->spriteIds[0]].data[2] = -1; + + // Bug: This should be using the second element of spriteIds. + sMoveRelearner->spriteIds[0] = CreateSprite(&sSpriteTemplate_MoveRelearnerListMenuScrollIndicators, 200, 108, 0); + gSprites[sMoveRelearner->spriteIds[0]].data[0] = 2; + gSprites[sMoveRelearner->spriteIds[0]].data[2] = 1; + for (i = 0; i < 2; i++) + gSprites[sMoveRelearner->spriteIds[i]].invisible = TRUE; +} + +static void MoveRelearnerInitListMenuBuffersEtc(void) +{ + int i; + s32 count; + u8 nickname[11]; + + sMoveRelearner->numLearnableMoves = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves); + count = GetMoveRelearnerMoves(&gPlayerParty[sMoveRelearner->selectedPartyMember], sMoveRelearner->learnableMoves); + for (i = 0; i < sMoveRelearner->numLearnableMoves; i++) + StringCopy(sMoveRelearner->listMenuStrbufs[i], gMoveNames[sMoveRelearner->learnableMoves[i]]); + GetMonData(&gPlayerParty[sMoveRelearner->selectedPartyMember], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(sMoveRelearner->listMenuStrbufs[sMoveRelearner->numLearnableMoves], gFameCheckerText_Cancel); + sMoveRelearner->numLearnableMoves++; + for (i = 0; i < count; i++) + { + sMoveRelearner->listMenuItems[i].label = sMoveRelearner->listMenuStrbufs[i]; + sMoveRelearner->listMenuItems[i].index = i; + } + sMoveRelearner->listMenuItems[i].label = gFameCheckerText_Cancel; + sMoveRelearner->listMenuItems[i].index = 0xFE; + gMultiuseListMenuTemplate = sMoveRelearnerListMenuTemplate; + gMultiuseListMenuTemplate.items = sMoveRelearner->listMenuItems; + gMultiuseListMenuTemplate.totalItems = count + 1; +} + +static void MoveRelearnerMenuHandleInput(void) +{ + ListMenu_ProcessInput(sMoveRelearner->listMenuTaskId); + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + if (sMoveRelearner->selectedIndex != 0xFE) + { + sMoveRelearner->state = 8; + StringCopy(gStringVar2, sMoveRelearner->listMenuStrbufs[sMoveRelearner->selectedIndex]); + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_TeachMoveQues); + } + else + { + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_GiveUpTryingToTeachNewMove); + sMoveRelearner->state = 12; + } + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sMoveRelearner->state = 12; + StringExpandPlaceholdersAndPrintTextOnWindow7Color2(gText_GiveUpTryingToTeachNewMove); + } + if (sMoveRelearner->numLearnableMoves > 6) + { + gSprites[0].invisible = FALSE; + gSprites[1].invisible = FALSE; + if (sMoveRelearner->scrollPositionMaybe == 0) + gSprites[0].invisible = TRUE; + else if (sMoveRelearner->scrollPositionMaybe == sMoveRelearner->numLearnableMoves - 6) + gSprites[1].invisible = TRUE; + } +} + +static void MoveLearnerInitListMenu(void) +{ + sMoveRelearner->listMenuTaskId = ListMenuInit(&gMultiuseListMenuTemplate, sMoveRelearner->listMenuScrollPos, sMoveRelearner->listMenuScrollRow); + CopyWindowToVram(6, 1); +} + +static void PrintMoveInfo(u16 move) +{ + u8 buffer[50]; + BlitMoveInfoIcon(2, gBattleMoves[move].type + 1, 1, 4); + + if (gBattleMoves[move].power < 2) + { + PrintTextOnWindow(3, gText_ThreeHyphens, 1, 4, 0, 0); + } + else + { + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].power, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintTextOnWindow(3, buffer, 1, 4, 0, 0); + } + + if (gBattleMoves[move].accuracy == 0) + { + PrintTextOnWindow(3, gText_ThreeHyphens, 1, 18, 0, 1); + } + else + { + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].accuracy, STR_CONV_MODE_RIGHT_ALIGN, 3); + PrintTextOnWindow(3, buffer, 1, 18, 0, 1); + } + ConvertIntToDecimalStringN(buffer, gBattleMoves[move].pp, STR_CONV_MODE_LEFT_ALIGN, 2); + PrintTextOnWindow(4, buffer, 2, 2, 0, 0); + PrintTextOnWindow(5, gMoveDescriptionPointers[move - 1], 1, 0, 0, 0); +} + +static void LoadMoveInfoUI(void) +{ + BlitMoveInfoIcon(0, 19, 1, 4); + BlitMoveInfoIcon(1, 20, 0, 4); + BlitMoveInfoIcon(1, 21, 0, 19); + BlitMoveInfoIcon(0, 22, 1, 19); + BlitMoveInfoIcon(0, 23, 1, 34); + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(4); + PutWindowTilemap(3); + PutWindowTilemap(5); + PutWindowTilemap(2); + PutWindowTilemap(7); + CopyWindowToVram(0, 2); + CopyWindowToVram(1, 2); +} + +static void PrintMoveInfoHandleCancel_CopyToVram(void) +{ + int i; + if (sMoveRelearner->selectedIndex != 0xFE) + { + PrintMoveInfo(sMoveRelearner->learnableMoves[sMoveRelearner->selectedIndex]); + } + else + { + for (i = 2; i < 6; i++) + { + FillWindowPixelBuffer(i, PIXEL_FILL(0)); + CopyWindowToVram(i, 2); + } + } + CopyWindowToVram(3, 2); + CopyWindowToVram(4, 2); + CopyWindowToVram(2, 2); + CopyWindowToVram(2, 2); + CopyWindowToVram(5, 2); + CopyWindowToVram(7, 3); +} + +static void MoveRelearnerMenu_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (!onInit) + { + PlaySE(SE_SELECT); + sMoveRelearner->scheduleMoveInfoUpdate = TRUE; + sMoveRelearner->selectedIndex = itemIndex; + } +} + +static s8 YesNoMenuProcessInput(void) +{ + s8 input = Menu_ProcessInputNoWrapClearOnChoose(); + if (input != -2) + { + PutWindowTilemap(6); + CopyWindowToVram(6, 1); + } + return input; +} + +static void PrintTextOnWindow(u8 windowId, const u8 *str, u8 x, u8 y, s32 speed, s32 colorIdx) +{ + s32 letterSpacing = 1; + s32 lineSpacing = 1; + if (colorIdx == 0 || colorIdx == 1) + { + letterSpacing = 0; + lineSpacing = 0; + } + switch (colorIdx) + { + case 0: + case 1: + sMoveRelearner->textColor[0] = 0; + sMoveRelearner->textColor[1] = 2; + sMoveRelearner->textColor[2] = 3; + break; + case 2: + sMoveRelearner->textColor[0] = 1; + sMoveRelearner->textColor[1] = 2; + sMoveRelearner->textColor[2] = 3; + } + if (colorIdx != 1) + FillWindowPixelBuffer(windowId, PIXEL_FILL(sMoveRelearner->textColor[0])); + AddTextPrinterParameterized4(windowId, 3, x, y, letterSpacing, lineSpacing, sMoveRelearner->textColor, speed, str); +} diff --git a/src/mevent_client.c b/src/mevent_client.c index c2a86afdd..4da0b4bc1 100644 --- a/src/mevent_client.c +++ b/src/mevent_client.c @@ -14,7 +14,7 @@ static void mevent_client_init(struct mevent_client *, u32, u32); static u32 mevent_client_exec(struct mevent_client *); static void mevent_client_free_resources(struct mevent_client *); -extern const struct mevent_client_cmd gMEventClientScript_InotialListen[]; +extern const struct mevent_client_cmd gMEventClientScript_InitialListen[]; void mevent_client_do_init(void) { @@ -89,7 +89,7 @@ static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 w static u32 client_mainseq_0(struct mevent_client * svr) { // init - memcpy(svr->cmdBuffer, gMEventClientScript_InotialListen, ME_SEND_BUF_SIZE); + memcpy(svr->cmdBuffer, gMEventClientScript_InitialListen, ME_SEND_BUF_SIZE); svr->cmdidx = 0; svr->mainseqno = 4; svr->flag = 0; diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c new file mode 100644 index 000000000..04d44f603 --- /dev/null +++ b/src/mevent_scripts.c @@ -0,0 +1,192 @@ +#include "global.h" +#include "mevent_server.h" + +extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; + +// Unreferenced +const u8 gUnknown_84687A0[] = _("You have collected all STAMPs!\nWant to input a CARD as a prize?"); + +/* CLIENT SCRIPTS */ + +const struct mevent_client_cmd gMEventClientScript_InitialListen[] = { // 84687E0 + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_Send1442CC[] = { + CLI_SNDHEAD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_UnableToRecv[] = { // can't accept card or news + CLI_SENDALL, + CLI_RETURN(0x0a) +}; + +const struct mevent_client_cmd gMEventClientScript_CommError[] = { // comm error + CLI_SENDALL, + CLI_RETURN(0x0b) +}; + +const struct mevent_client_cmd gMEventClientScript_NothingSentOver[] = { // nothing sent + CLI_SENDALL, + CLI_RETURN(0x00) +}; + +const struct mevent_client_cmd gMEventClientScript_ReceiveCardAndReturnSuccess[] = { // card success + CLI_RECEIVE(0x16), + CLI_RECVSAV, + CLI_RECEIVE(0x19), + CLI_RECVRAM, + CLI_SENDALL, + CLI_RETURN(0x02) +}; + +const struct mevent_client_cmd gMEventClientScript_ReceiveNewsAndValidate[] = { + CLI_RECEIVE(0x17), + CLI_VLDNEWS, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_AlreadyHadNews[] = { // already had news + CLI_SENDALL, + CLI_RETURN(0x07) +}; + +const struct mevent_client_cmd gMEventClientScript_RecvNewsSuccess[] = { // news success + CLI_SENDALL, + CLI_RETURN(0x03) +}; + +const struct mevent_client_cmd gMEventClientScript_AskWouldLikeToTossCard[] = { + CLI_REQWORD, + CLI_SNDWORD, + CLI_WAITSND, + CLI_RECEIVE(0x10), + CLI_JUMPBUF +}; + +const struct mevent_client_cmd gMEventClientScript_OtherTrainerCanceled[] = { // comm canceled + CLI_SENDALL, + CLI_RETURN(0x09) +}; + +const struct mevent_client_cmd gMEventClientScript_AlreadyHadCard[] = { // already had card + CLI_SENDALL, + CLI_RETURN(0x05) +}; + +const struct mevent_client_cmd gMEventClientScript_SuccessFromBuffer[] = { // success from buffer + CLI_RECEIVE(0x15), + CLI_RECVBUF, + CLI_SENDALL, + CLI_RETURN(0x0d) +}; + +/* SERVER SCRIPTS */ + +const struct mevent_server_cmd gMEventSrvScript_UnableToSend[] = { + SRV_SEND(0x10, gMEventClientScript_UnableToRecv), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0a) +}; + +const struct mevent_server_cmd gUnknown_8468950[] = { + SRV_SEND(0x10, gMEventClientScript_CommError), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x0b) +}; + +const struct mevent_server_cmd gUnknown_8468980[] = { + SRV_SEND(0x10, gMEventClientScript_OtherTrainerCanceled), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x09) +}; + +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasNews[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadNews), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x07) +}; + +const struct mevent_server_cmd gMEventSrvScript_SentNewsSuccess[] = { + SRV_SEND(0x28, gMEventClientScript_ReceiveNewsAndValidate), + SRV_WAITSND, + SRV_SEND_NEWS, + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x01, gMEventSrvScript_OtherTrnHasNews), + SRV_SEND(0x10, gMEventClientScript_RecvNewsSuccess), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x03) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendCardSuccess[] = { + SRV_SEND(0x30, gMEventClientScript_ReceiveCardAndReturnSuccess), + SRV_WAITSND, + SRV_SEND_CARD, + SRV_WAITSND, + SRV_BUFFER_SEND, + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x02) +}; + +const struct mevent_server_cmd gMEventSrvScript_AskClientToOverwriteCard[] = { + SRV_SEND(0x28, gMEventClientScript_AskWouldLikeToTossCard), + SRV_WAITSND, + SRV_RECV(0x13), + SRV_READWORD, + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrainerCanceled) +}; + +const struct mevent_server_cmd gMEventSrvScript_OtherTrnHasCard[] = { + SRV_SEND(0x10, gMEventClientScript_AlreadyHadCard), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x05) +}; + +const struct mevent_server_cmd gUnknown_8468B3C[] = { + SRV_SEND(0x10, gMEventClientScript_NothingSentOver), + SRV_WAITSND, + SRV_RECV(0x14), + SRV_RETURN(0x00) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendNews[] = { + SRV_BUFFER_NEWS, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_BRANCH(gMEventSrvScript_SentNewsSuccess) +}; + +const struct mevent_server_cmd gMEventSrvScript_SendCard[] = { + SRV_BUFFER_CARD, + SRV_RAM_SCRIPT_IF_VALID, + SRV_SEND(0x20, gMEventClientScript_Send1442CC), + SRV_WAITSND, + SRV_RECV(0x11), + SRV_READ_1442CC, + SRV_VALID_1442CC, + SRV_BRANCHIF(0x00, gMEventSrvScript_UnableToSend), + SRV_CHECK_1442CC_14, + SRV_BRANCHIF(0x02, gMEventSrvScript_AskClientToOverwriteCard), + SRV_BRANCHIF(0x00, gMEventSrvScript_SendCardSuccess), + SRV_BRANCH(gMEventSrvScript_OtherTrnHasCard) +}; diff --git a/src/save_menu_util.c b/src/save_menu_util.c new file mode 100644 index 000000000..195b29b0c --- /dev/null +++ b/src/save_menu_util.c @@ -0,0 +1,58 @@ +#include "global.h" +#include "string_util.h" +#include "text.h" +#include "event_data.h" +#include "pokedex.h" +#include "region_map.h" +#include "save_menu_util.h" +#include "constants/flags.h" + +void SaveStatToString(u8 gameStatId, u8 *dest0, u8 color) +{ + int nBadges; + int flagId; + + u8 *dest = dest0; + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = EXT_CTRL_CODE_COLOR; + *dest++ = color; + *dest++ = EXT_CTRL_CODE_BEGIN; + *dest++ = EXT_CTRL_CODE_SHADOW; + *dest++ = color + 1; + switch (gameStatId) + { + case SAVE_STAT_NAME: + dest = StringCopy(dest, gSaveBlock2Ptr->playerName); + break; + case SAVE_STAT_POKEDEX: + if (IsNationalPokedexEnabled()) + dest = ConvertIntToDecimalStringN(dest, GetNationalPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); + else + dest = ConvertIntToDecimalStringN(dest, GetKantoPokedexCount(1), STR_CONV_MODE_LEFT_ALIGN, 3); + break; + case SAVE_STAT_TIME: + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + break; + case SAVE_STAT_TIME_HR_RT_ALIGN: + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeHours, STR_CONV_MODE_RIGHT_ALIGN, 3); + *dest++ = CHAR_COLON; + dest = ConvertIntToDecimalStringN(dest, gSaveBlock2Ptr->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + break; + case SAVE_STAT_LOCATION: + sub_80C4DF8(dest, gMapHeader.regionMapSectionId); + break; + case SAVE_STAT_BADGES: + for (flagId = FLAG_BADGE01_GET, nBadges = 0; flagId < FLAG_BADGE01_GET + 8; flagId++) + { + if (FlagGet(flagId)) + nBadges++; + } + *dest++ = nBadges + CHAR_0; + *dest++ = 10; // 'こ' + *dest++ = EOS; + break; + } +} + diff --git a/sym_ewram.txt b/sym_ewram.txt index 27b3067ec..a892eb532 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -447,9 +447,8 @@ gUnknown_2039A34: @ 2039A34 gUnknown_203AAB0: @ 203AAB0 .space 0x4 -gUnknown_203AAB4: @ 203AAB4 - .space 0x4 - + .align 2 + .include "src/learn_move.o" .align 2 .include "src/battle_tower.o" .align 2 |