diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-12 17:11:58 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-07-12 17:11:58 -0400 |
commit | 09b94d8b342bb29f962bb3c23fb4267877df710e (patch) | |
tree | b3e465f91031ebb2e44abffb6eb074563ccd6c8b | |
parent | f64421dd8cc397f7d4551f3dc674e80a31d36631 (diff) | |
parent | ad274b9561d16589d8099a3671617e2255c1e9c5 (diff) |
Merge branch 'master' of github.com:pret/pokefirered
-rw-r--r-- | .gitignore | 61 | ||||
-rw-r--r-- | asm/diploma.s | 607 | ||||
-rw-r--r-- | asm/field_specials.s | 4 | ||||
-rw-r--r-- | asm/overworld.s | 6 | ||||
-rw-r--r-- | asm/pokedex.s | 6 | ||||
-rw-r--r-- | asm/trainer_card.s | 4 | ||||
-rw-r--r-- | data/specials.inc | 2 | ||||
-rw-r--r-- | include/overworld.h | 1 | ||||
-rw-r--r-- | include/pokedex.h | 3 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/diploma.c | 254 | ||||
-rw-r--r-- | sym_ewram.txt | 3 | ||||
-rwxr-xr-x | tools/asmdiff.sh | 7 |
13 files changed, 308 insertions, 652 deletions
diff --git a/.gitignore b/.gitignore index c85c20759..6910d62e9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,48 +1,49 @@ -*.exe -*.o -*.i -*.elf -*.gba *.1bpp *.4bpp *.8bpp +*.DS_Store +*.bak +*.bat +*.diff +*.dump +*.elf +*.exe +*.fwjpnfont +*.gba *.gbapal -*.lz -*.rl -*.pcm -*.latfont *.hwjpnfont -*.fwjpnfont -*.bat -sound/**/*.bin -src/*.s -tools/agbcc -tools/binutils -ld_script_ruby.txt -ld_script_sapphire.txt -*.map +*.i *.id0 *.id1 *.id2 -*.nam -*.til -.fuse* +*.latfont *.ld -tags -types_*.taghl -*.swp -*.swo +*.lz +*.map +*.nam +*.o +*.pcm +*.pl +*.rl *.s.old *.s.old2 -*.dump *.sa* +*.swo +*.swp +*.til +.fuse* +.idea/ Thumbs.db build/ -.idea/ cmake-build-* -*.DS_Store -*.pl -*.bak +ld_script_ruby.txt +ld_script_sapphire.txt +sound/**/*.bin +src/*.s src/data/items.h +tags +tools/agbcc +tools/binutils tools/br_ips/br_ips tools/br_ips/ips_patch +types_*.taghl diff --git a/asm/diploma.s b/asm/diploma.s deleted file mode 100644 index 9e3d1b3ee..000000000 --- a/asm/diploma.s +++ /dev/null @@ -1,607 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80F4BFC -sub_80F4BFC: @ 80F4BFC - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80F4BFC - - thumb_func_start sub_80F4C10 -sub_80F4C10: @ 80F4C10 - push {r4,lr} - ldr r4, _080F4C40 @ =gUnknown_203AB48 - ldr r0, _080F4C44 @ =0x00001004 - bl AllocZeroed - str r0, [r4] - movs r1, 0 - strb r1, [r0] - ldr r0, [r4] - strb r1, [r0, 0x1] - ldr r0, [r4] - strb r1, [r0, 0x2] - bl sub_80F4E24 - ldr r0, _080F4C48 @ =sub_80F4C68 - movs r1, 0 - bl CreateTask - ldr r0, _080F4C4C @ =sub_80F4C50 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F4C40: .4byte gUnknown_203AB48 -_080F4C44: .4byte 0x00001004 -_080F4C48: .4byte sub_80F4C68 -_080F4C4C: .4byte sub_80F4C50 - thumb_func_end sub_80F4C10 - - thumb_func_start sub_80F4C50 -sub_80F4C50: @ 80F4C50 - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80F4C50 - - thumb_func_start sub_80F4C68 -sub_80F4C68: @ 80F4C68 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080F4C84 @ =gUnknown_203AB48 - ldr r0, [r0] - ldrb r0, [r0, 0x2] - cmp r0, 0x8 - bhi _080F4D30 - lsls r0, 2 - ldr r1, _080F4C88 @ =_080F4C8C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F4C84: .4byte gUnknown_203AB48 -_080F4C88: .4byte _080F4C8C - .align 2, 0 -_080F4C8C: - .4byte _080F4CB0 - .4byte _080F4CB8 - .4byte _080F4CBE - .4byte _080F4CCA - .4byte _080F4CDC - .4byte _080F4CFC - .4byte _080F4D02 - .4byte _080F4D10 - .4byte _080F4D22 -_080F4CB0: - movs r0, 0 - bl SetVBlankCallback - b _080F4D50 -_080F4CB8: - bl sub_80F4E40 - b _080F4D50 -_080F4CBE: - bl sub_80F4F9C - lsls r0, 24 - cmp r0, 0 - beq _080F4D5A - b _080F4D50 -_080F4CCA: - ldr r1, _080F4CD8 @ =gUnknown_84154E8 - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - b _080F4D50 - .align 2, 0 -_080F4CD8: .4byte gUnknown_84154E8 -_080F4CDC: - bl sub_8088F84 - lsls r0, 16 - cmp r0, 0 - beq _080F4CF2 - movs r1, 0x80 - lsls r1, 1 - movs r0, 0x14 - bl SetGpuReg - b _080F4D50 -_080F4CF2: - movs r0, 0x14 - movs r1, 0 - bl SetGpuReg - b _080F4D50 -_080F4CFC: - bl sub_80F5018 - b _080F4D50 -_080F4D02: - movs r0, 0 - bl CopyBgTilemapBufferToVram - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - b _080F4D50 -_080F4D10: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _080F4D50 -_080F4D22: - ldr r0, _080F4D2C @ =sub_80F4BFC - bl SetVBlankCallback - b _080F4D50 - .align 2, 0 -_080F4D2C: .4byte sub_80F4BFC -_080F4D30: - ldr r0, _080F4D64 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080F4D50 - movs r0, 0x5 - bl PlayFanfareByFanfareNum - ldr r0, _080F4D68 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080F4D6C @ =sub_80F4D74 - str r0, [r1] -_080F4D50: - ldr r0, _080F4D70 @ =gUnknown_203AB48 - ldr r1, [r0] - ldrb r0, [r1, 0x2] - adds r0, 0x1 - strb r0, [r1, 0x2] -_080F4D5A: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F4D64: .4byte gPaletteFade -_080F4D68: .4byte gTasks -_080F4D6C: .4byte sub_80F4D74 -_080F4D70: .4byte gUnknown_203AB48 - thumb_func_end sub_80F4C68 - - thumb_func_start sub_80F4D74 -sub_80F4D74: @ 80F4D74 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r2, r0, 24 - ldr r4, _080F4D90 @ =gUnknown_203AB48 - ldr r0, [r4] - ldrb r1, [r0] - cmp r1, 0x1 - beq _080F4DA8 - cmp r1, 0x1 - bgt _080F4D94 - cmp r1, 0 - beq _080F4D9A - b _080F4DD6 - .align 2, 0 -_080F4D90: .4byte gUnknown_203AB48 -_080F4D94: - cmp r1, 0x2 - beq _080F4DD0 - b _080F4DD6 -_080F4D9A: - movs r0, 0 - bl WaitFanfare - lsls r0, 24 - cmp r0, 0 - beq _080F4DD6 - b _080F4DC2 -_080F4DA8: - ldr r0, _080F4DCC @ =gMain - ldrh r0, [r0, 0x2E] - ands r1, r0 - cmp r1, 0 - beq _080F4DD6 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade -_080F4DC2: - ldr r1, [r4] - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080F4DD6 - .align 2, 0 -_080F4DCC: .4byte gMain -_080F4DD0: - adds r0, r2, 0 - bl sub_80F4DE0 -_080F4DD6: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80F4D74 - - thumb_func_start sub_80F4DE0 -sub_80F4DE0: @ 80F4DE0 - push {r4,r5,lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080F4E18 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0 - bne _080F4E10 - adds r0, r2, 0 - bl DestroyTask - bl FreeAllWindowBuffers - ldr r4, _080F4E1C @ =gUnknown_203AB48 - ldr r0, [r4] - bl Free - str r5, [r4] - ldr r0, _080F4E20 @ =sub_80568FC - bl SetMainCallback2 -_080F4E10: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F4E18: .4byte gPaletteFade -_080F4E1C: .4byte gUnknown_203AB48 -_080F4E20: .4byte sub_80568FC - thumb_func_end sub_80F4DE0 - - thumb_func_start sub_80F4E24 -sub_80F4E24: @ 80F4E24 - push {lr} - bl ResetSpriteData - bl ResetPaletteFade - bl FreeAllSpritePalettes - bl ResetTasks - bl ScanlineEffect_Stop - pop {r0} - bx r0 - thumb_func_end sub_80F4E24 - - thumb_func_start sub_80F4E40 -sub_80F4E40: @ 80F4E40 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x10 - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0xC - mov r8, r0 - add r2, sp, 0x8 - movs r6, 0 - ldr r1, _080F4F88 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _080F4F8C @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_080F4E66: - strh r6, [r2] - add r0, sp, 0x8 - str r0, [r1] - str r3, [r1, 0x4] - str r7, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r5 - subs r4, r5 - cmp r4, r5 - bhi _080F4E66 - strh r6, [r2] - add r2, sp, 0x8 - str r2, [r1] - str r3, [r1, 0x4] - lsrs r0, r4, 1 - mov r2, r12 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - movs r0, 0xE0 - lsls r0, 19 - movs r3, 0x80 - lsls r3, 3 - movs r4, 0 - str r4, [sp, 0xC] - ldr r2, _080F4F88 @ =0x040000d4 - mov r1, r8 - str r1, [r2] - str r0, [r2, 0x4] - lsrs r0, r3, 2 - movs r1, 0x85 - lsls r1, 24 - orrs r0, r1 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r1, 0xA0 - lsls r1, 19 - add r0, sp, 0x8 - strh r4, [r0] - str r0, [r2] - str r1, [r2, 0x4] - lsrs r3, 1 - movs r0, 0x81 - lsls r0, 24 - orrs r3, r0 - str r3, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r0, 0 - movs r1, 0 - bl SetGpuReg - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080F4F90 @ =gUnknown_8415A08 - movs r0, 0 - movs r2, 0x2 - bl InitBgsFromTemplates - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - ldr r0, _080F4F94 @ =gUnknown_8415A10 - bl InitWindows - bl DeactivateAllTextPrinters - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - ldr r0, _080F4F98 @ =gUnknown_203AB48 - ldr r1, [r0] - adds r1, 0x4 - movs r0, 0x1 - bl SetBgTilemapBuffer - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r5, 0x1E - str r5, [sp] - movs r4, 0x14 - str r4, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - str r5, [sp] - str r4, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - add sp, 0x10 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F4F88: .4byte 0x040000d4 -_080F4F8C: .4byte 0x81000800 -_080F4F90: .4byte gUnknown_8415A08 -_080F4F94: .4byte gUnknown_8415A10 -_080F4F98: .4byte gUnknown_203AB48 - thumb_func_end sub_80F4E40 - - thumb_func_start sub_80F4F9C -sub_80F4F9C: @ 80F4F9C - push {lr} - sub sp, 0x4 - ldr r0, _080F4FB4 @ =gUnknown_203AB48 - ldr r0, [r0] - ldrb r0, [r0, 0x1] - cmp r0, 0x1 - beq _080F4FC8 - cmp r0, 0x1 - bgt _080F4FB8 - cmp r0, 0 - beq _080F4FC2 - b _080F4FF8 - .align 2, 0 -_080F4FB4: .4byte gUnknown_203AB48 -_080F4FB8: - cmp r0, 0x2 - beq _080F4FE0 - cmp r0, 0x3 - beq _080F4FEE - b _080F4FF8 -_080F4FC2: - bl ResetTempTileDataBuffers - b _080F5000 -_080F4FC8: - ldr r1, _080F4FDC @ =gUnknown_84147C0 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - b _080F5000 - .align 2, 0 -_080F4FDC: .4byte gUnknown_84147C0 -_080F4FE0: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080F5000 - b _080F500A -_080F4FEE: - ldr r0, _080F4FFC @ =gUnknown_8415954 - movs r1, 0 - movs r2, 0x40 - bl LoadPalette -_080F4FF8: - movs r0, 0x1 - b _080F500C - .align 2, 0 -_080F4FFC: .4byte gUnknown_8415954 -_080F5000: - ldr r0, _080F5014 @ =gUnknown_203AB48 - ldr r1, [r0] - ldrb r0, [r1, 0x1] - adds r0, 0x1 - strb r0, [r1, 0x1] -_080F500A: - movs r0, 0 -_080F500C: - add sp, 0x4 - pop {r1} - bx r1 - .align 2, 0 -_080F5014: .4byte gUnknown_203AB48 - thumb_func_end sub_80F4F9C - - thumb_func_start sub_80F5018 -sub_80F5018: @ 80F5018 - push {r4-r6,lr} - sub sp, 0xAC - bl DynamicPlaceholderTextUtil_Reset - ldr r0, _080F5040 @ =gSaveBlock2Ptr - ldr r1, [r0] - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - bl sub_8088F84 - lsls r0, 16 - cmp r0, 0 - beq _080F5048 - ldr r1, _080F5044 @ =gUnknown_841B68F - movs r0, 0x1 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - b _080F5050 - .align 2, 0 -_080F5040: .4byte gSaveBlock2Ptr -_080F5044: .4byte gUnknown_841B68F -_080F5048: - ldr r1, _080F50E0 @ =gUnknown_841B698 - movs r0, 0x1 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr -_080F5050: - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - ldr r1, _080F50E4 @ =gUnknown_841B60E - add r0, sp, 0xC - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - movs r5, 0x1 - negs r5, r5 - movs r0, 0x2 - add r1, sp, 0xC - adds r2, r5, 0 - bl GetStringWidth - lsrs r2, r0, 1 - movs r4, 0x78 - subs r2, r4, r2 - lsls r2, 24 - lsrs r2, 24 - ldr r6, _080F50E8 @ =gUnknown_8415A04 - str r6, [sp] - str r5, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r3, 0x4 - bl AddTextPrinterParameterized3 - ldr r1, _080F50EC @ =gUnknown_841B619 - add r0, sp, 0xC - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - movs r0, 0x2 - add r1, sp, 0xC - adds r2, r5, 0 - bl GetStringWidth - lsrs r0, 1 - subs r4, r0 - lsls r4, 24 - lsrs r4, 24 - str r6, [sp] - str r5, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0x1E - bl AddTextPrinterParameterized3 - str r6, [sp] - movs r0, 0 - str r0, [sp, 0x4] - ldr r0, _080F50F0 @ =gUnknown_841B684 - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x78 - movs r3, 0x69 - bl AddTextPrinterParameterized3 - movs r0, 0 - bl PutWindowTilemap - add sp, 0xAC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F50E0: .4byte gUnknown_841B698 -_080F50E4: .4byte gUnknown_841B60E -_080F50E8: .4byte gUnknown_8415A04 -_080F50EC: .4byte gUnknown_841B619 -_080F50F0: .4byte gUnknown_841B684 - thumb_func_end sub_80F5018 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/field_specials.s b/asm/field_specials.s index c1555f2bb..b2b716a8f 100644 --- a/asm/field_specials.s +++ b/asm/field_specials.s @@ -9,13 +9,13 @@ sub_80CA618: @ 80CA618 push {lr} bl sub_8112364 - ldr r0, _080CA62C @ =sub_80F4C10 + ldr r0, _080CA62C @ =CB2_ShowDiploma bl SetMainCallback2 bl ScriptContext2_Enable pop {r0} bx r0 .align 2, 0 -_080CA62C: .4byte sub_80F4C10 +_080CA62C: .4byte CB2_ShowDiploma thumb_func_end sub_80CA618 thumb_func_start sub_80CA630 diff --git a/asm/overworld.s b/asm/overworld.s index be0fc577f..5e50a5d05 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3799,8 +3799,8 @@ _080568F4: .4byte gFieldCallback _080568F8: .4byte FieldCallback_ReturnToEventScript2 thumb_func_end CB2_ReturnToFieldContinueScriptPlayMapMusic - thumb_func_start sub_80568FC -sub_80568FC: @ 80568FC + thumb_func_start CB2_Overworld +CB2_Overworld: @ 80568FC push {lr} bl sub_80569BC ldr r1, _08056910 @ =gFieldCallback @@ -3812,7 +3812,7 @@ sub_80568FC: @ 80568FC .align 2, 0 _08056910: .4byte gFieldCallback _08056914: .4byte sub_807DF7C - thumb_func_end sub_80568FC + thumb_func_end CB2_Overworld thumb_func_start sub_8056918 sub_8056918: @ 8056918 diff --git a/asm/pokedex.s b/asm/pokedex.s index 279270fbb..69ca5adcf 100644 --- a/asm/pokedex.s +++ b/asm/pokedex.s @@ -220,8 +220,8 @@ _08088F7C: bx r1 thumb_func_end sub_8088F58 - thumb_func_start sub_8088F84 -sub_8088F84: @ 8088F84 + thumb_func_start HasAllKantoMons +HasAllKantoMons: @ 8088F84 push {r4,r5,lr} movs r0, 0 _08088F88: @@ -277,6 +277,6 @@ _08088FE8: pop {r4,r5} pop {r1} bx r1 - thumb_func_end sub_8088F84 + thumb_func_end HasAllKantoMons .align 2, 0 @ Don't pad with nop. diff --git a/asm/trainer_card.s b/asm/trainer_card.s index 502d47c89..e8a591264 100644 --- a/asm/trainer_card.s +++ b/asm/trainer_card.s @@ -1070,7 +1070,7 @@ _080898BE: adds r0, 0x1 strb r0, [r5, 0x1] _080898CE: - bl sub_8088F84 + bl HasAllKantoMons lsls r0, 16 cmp r0, 0 beq _080898DE @@ -1117,7 +1117,7 @@ _08089918: _0808991C: bl sub_8088F58 strb r0, [r5, 0x3] - bl sub_8088F84 + bl HasAllKantoMons adds r6, r5, 0 adds r6, 0x4D strb r0, [r6] diff --git a/data/specials.inc b/data/specials.inc index 24d793093..4c7ad327d 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -441,7 +441,7 @@ gSpecials:: @ 815FD60 def_special sub_8147594 def_special sub_80CD034 def_special sub_815D834 - def_special sub_8088F84 + def_special HasAllKantoMons def_special sub_80CD074 def_special sub_80CD098 def_special sub_811B15C diff --git a/include/overworld.h b/include/overworld.h index 60fa566f7..799389353 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -104,6 +104,7 @@ extern bool8 (* gFieldCallback2)(void); void SetLastHealLocationWarp(u8 healLocaionId); void sub_8055864(u8 mapGroup, u8 mapNum); +void CB2_Overworld(void); void CB2_NewGame(void); bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType); void Overworld_ResetStateAfterTeleport(void); diff --git a/include/pokedex.h b/include/pokedex.h index b389bf821..c4ec27e0b 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -7,7 +7,8 @@ void ResetPokedex(void); void CopyMonCategoryText(u16 species, u8 *dst); u16 GetPokedexHeightWeight(u16 dexNum, u8 data); u16 GetNationalPokedexCount(u8); -u16 GetHoennPokedexCount(u8); +u16 GetKantoPokedexCount(u8); +bool16 HasAllKantoMons(void); u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 trainerId, u32 personality); enum diff --git a/ld_script.txt b/ld_script.txt index 799cada03..7d28028c8 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -214,7 +214,7 @@ SECTIONS { asm/battle_anim_special.o(.text); asm/hall_of_fame.o(.text); asm/credits.o(.text); - asm/diploma.o(.text); + src/diploma.o(.text); asm/save_failed_screen.o(.text); asm/clear_save_data_screen.o(.text); asm/evolution_graphics.o(.text); diff --git a/src/diploma.c b/src/diploma.c new file mode 100644 index 000000000..74343e82f --- /dev/null +++ b/src/diploma.c @@ -0,0 +1,254 @@ +#include "global.h" +#include "bg.h" +#include "constants/fanfares.h" +#include "dynamic_placeholder_text_util.h" +#include "gba/macro.h" +#include "gpu_regs.h" +#include "gpu_regs.h" +#include "main.h" +#include "malloc.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "pokedex.h" +#include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "text.h" +#include "window.h" +#include "diploma.h" + +static void DiplomaBgInit(void); +static void DiplomaPrintText(void); +static u8 DiplomaLoadGfx(void); +static void DiplomaVblankHandler(void); + +static void CB2_DiplomaInit(void); + +static void Task_WaitForExit(u8); +static void Task_DiplomaInit(u8); +static void Task_DiplomaReturnToOverworld(u8); + +extern const struct BgTemplate gUnknown_8415A08[2]; +extern const struct WindowTemplate gUnknown_8415A10[]; +extern const u8 gUnknown_8402650[]; +extern const u8 gUnknown_841B60E[]; +extern const u8 gUnknown_841B684[]; +extern u8 gUnknown_84147C0[]; +extern u8 gUnknown_8415954[]; +extern u8 gUnknown_841B698[]; +extern u8 gUnknown_841B68F[]; +extern u8 gUnknown_841B619[]; +extern u8 gUnknown_8415A04[]; + +struct Diploma +{ + u8 state; + u8 gfxStep; + u8 callbackStep; + u16 tilemapBuffer[0x800]; +}; + +static EWRAM_DATA struct Diploma *gDiploma = NULL; + +extern const u32 gUnknown_84154E8[]; + +static void VCBC_DiplomaOam(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void CB2_ShowDiploma(void) +{ + gDiploma = AllocZeroed(sizeof(*gDiploma)); + gDiploma->state = 0; + gDiploma->gfxStep = 0; + gDiploma->callbackStep = 0; + DiplomaBgInit(); + CreateTask(Task_DiplomaInit, 0); + SetMainCallback2(CB2_DiplomaInit); +} + +static void CB2_DiplomaInit(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_DiplomaInit(u8 taskId) +{ + switch (gDiploma->callbackStep) + { + case 0: + SetVBlankCallback(NULL); + break; + case 1: + DiplomaVblankHandler(); + break; + case 2: + if (!DiplomaLoadGfx()) + { + return; + } + break; + case 3: + CopyToBgTilemapBuffer(1, gUnknown_84154E8, 0, 0); + break; + case 4: + if (HasAllKantoMons()) + { + SetGpuReg(REG_OFFSET_BG1HOFS, 0x80 << 1); + } + else + { + SetGpuReg(REG_OFFSET_BG1HOFS, 0); + } + break; + case 5: + DiplomaPrintText(); + break; + case 6: + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + break; + case 7: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + break; + case 8: + SetVBlankCallback(VCBC_DiplomaOam); + break; + default: + if (gPaletteFade.active) + { + break; + } + PlayFanfareByFanfareNum(FANFARE_05); + gTasks[taskId].func = Task_WaitForExit; + } + gDiploma->callbackStep++; +} + +static void Task_WaitForExit(u8 taskId) +{ + switch (gDiploma->state) + { + case 0: + if (WaitFanfare(0)) + { + gDiploma->state++; + } + break; + case 1: + if (JOY_NEW(A_BUTTON)) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gDiploma->state++; + } + break; + case 2: + Task_DiplomaReturnToOverworld(taskId); + break; + } +} + +static void Task_DiplomaReturnToOverworld(u8 taskId) +{ + if (gPaletteFade.active) + return; + DestroyTask(taskId); + FreeAllWindowBuffers(); + FREE_AND_SET_NULL(gDiploma); + SetMainCallback2(CB2_Overworld); +} + +static void DiplomaBgInit(void) +{ + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); +} + +static void DiplomaVblankHandler(void) +{ + void *vram = (void *)VRAM; + DmaClearLarge16(3, vram, VRAM_SIZE, 0x1000); + DmaClear32(3, (void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_8415A08, 2); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + InitWindows(gUnknown_8415A10); + DeactivateAllTextPrinters(); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + SetBgTilemapBuffer(1, gDiploma->tilemapBuffer); + ShowBg(0); + ShowBg(1); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20); +} + +static u8 DiplomaLoadGfx(void) +{ + switch (gDiploma->gfxStep) + { + case 0: + ResetTempTileDataBuffers(); + break; + case 1: + DecompressAndCopyTileDataToVram(1, gUnknown_84147C0, 0, 0, 0); + break; + case 2: + if (!(FreeTempTileDataBuffersIfPossible() == 1)) + { + break; + } + return 0; + case 3: + LoadPalette(gUnknown_8415954, 0, 0x40); + default: + return 1; + } + gDiploma->gfxStep++; + return 0; +} + +static void DiplomaPrintText(void) +{ + u8 arr[160]; + u32 width; + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + if (HasAllKantoMons()) + { + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_841B68F); + } + else + { + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_841B698); + } + FillWindowPixelBuffer(0, 0); + DynamicPlaceholderTextUtil_ExpandPlaceholders(arr, gUnknown_841B60E); + width = GetStringWidth(2, arr, -1); + AddTextPrinterParameterized3(0, 2, 0x78 - (width / 2), 4, gUnknown_8415A04, -1, arr); + DynamicPlaceholderTextUtil_ExpandPlaceholders(arr, gUnknown_841B619); + width = GetStringWidth(2, arr, -1); + AddTextPrinterParameterized3(0, 0x2, 0x78 - (width / 2), 0x1E, gUnknown_8415A04, -1, arr); + AddTextPrinterParameterized3(0, 0x2, 0x78, 0x69, gUnknown_8415A04, 0, gUnknown_841B684); + PutWindowTilemap(0); +} diff --git a/sym_ewram.txt b/sym_ewram.txt index bec821a2f..ff7823e1d 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1124,8 +1124,7 @@ gUnknown_203AB40: @ 203AB40 gUnknown_203AB44: @ 203AB44 .space 0x4 -gUnknown_203AB48: @ 203AB48 - .space 0x4 + .include "src/diploma.o" gUnknown_203AB4C: @ 203AB4C .space 0x4 diff --git a/tools/asmdiff.sh b/tools/asmdiff.sh new file mode 100755 index 000000000..a8114dc4f --- /dev/null +++ b/tools/asmdiff.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +OBJDUMP="./tools/binutils/bin/arm-none-eabi-objdump -D -bbinary -marmv4t -Mforce-thumb" +OPTIONS="--start-address=$1 --stop-address=$2" +$OBJDUMP $OPTIONS baserom.gba > baserom.dump +$OBJDUMP $OPTIONS pokefirered.gba > pokefirered.dump +diff -u baserom.dump pokefirered.dump |