From 78925baf89a9c02745ed82125d44e5a4fffba1cd Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 17:44:25 +0800 Subject: [PATCH 1/9] decompile: diploma.s --- .gitignore | 63 ++--- asm/diploma.s | 607 ------------------------------------------- asm/field_specials.s | 4 +- ld_script.txt | 1 + src/diploma.c | 254 ++++++++++++++++++ sym_ewram.txt | 2 +- 6 files changed, 290 insertions(+), 641 deletions(-) delete mode 100644 asm/diploma.s create mode 100644 src/diploma.c 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 -*.gbapal -*.lz -*.rl -*.pcm -*.latfont -*.hwjpnfont -*.fwjpnfont +*.DS_Store +*.bak *.bat -sound/**/*.bin -src/*.s -tools/agbcc -tools/binutils -ld_script_ruby.txt -ld_script_sapphire.txt -*.map +*.diff +*.dump +*.elf +*.exe +*.fwjpnfont +*.gba +*.gbapal +*.hwjpnfont +*.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 f3fc0871a..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 UnkTextUtil_Reset - ldr r0, _080F5040 @ =gSaveBlock2Ptr - ldr r1, [r0] - movs r0, 0 - bl UnkTextUtil_SetPtrI - bl sub_8088F84 - lsls r0, 16 - cmp r0, 0 - beq _080F5048 - ldr r1, _080F5044 @ =gUnknown_841B68F - movs r0, 0x1 - bl UnkTextUtil_SetPtrI - b _080F5050 - .align 2, 0 -_080F5040: .4byte gSaveBlock2Ptr -_080F5044: .4byte gUnknown_841B68F -_080F5048: - ldr r1, _080F50E0 @ =gUnknown_841B698 - movs r0, 0x1 - bl UnkTextUtil_SetPtrI -_080F5050: - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - ldr r1, _080F50E4 @ =gUnknown_841B60E - add r0, sp, 0xC - bl UnkTextUtil_StringExpandPlaceholders - 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 UnkTextUtil_StringExpandPlaceholders - 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 fe4ac2b2d..4e4d50c7b 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 @ =DiplomaInit bl SetMainCallback2 bl ScriptContext2_Enable pop {r0} bx r0 .align 2, 0 -_080CA62C: .4byte sub_80F4C10 +_080CA62C: .4byte DiplomaInit thumb_func_end sub_80CA618 thumb_func_start sub_80CA630 diff --git a/ld_script.txt b/ld_script.txt index 494c35e86..1b734b6c5 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -214,6 +214,7 @@ SECTIONS { asm/battle_anim_special.o(.text); asm/hall_of_fame.o(.text); asm/credits.o(.text); + src/diploma.o(.text); asm/diploma.o(.text); asm/save_failed_screen.o(.text); asm/clear_save_data_screen.o(.text); diff --git a/src/diploma.c b/src/diploma.c new file mode 100644 index 000000000..cffbe8df1 --- /dev/null +++ b/src/diploma.c @@ -0,0 +1,254 @@ +#include "gba/macro.h" +#include "global.h" +#include "gpu_regs.h" +#include "window.h" +#include "main.h" +#include "scanline_effect.h" +#include "task.h" +#include "unk_text_util.h" +#include "gpu_regs.h" +#include "text.h" +#include "bg.h" +#include "sound.h" +#include "malloc.h" +#include "sprite.h" +#include "palette.h" +#include "new_menu_helpers.h" +#include "menu.h" +#include "diploma.h" + +void sub_80568FC(void); +u16 sub_8088F84(void); + +void DiplomaBgInit(void); +void DiplomaPrintText(void); +u8 DiplomaLoadGfx(void); +void DiplomaVblankHandler(void); + +void CB2_DiplomaInit(void); + +void Task_WaitForExit(u8); +void Task_DiplomaInit(u8); +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; + u8 padding; + u8 tilemapBuffer[0x1000]; +} + *gDiploma = NULL; + +extern const u32 gUnknown_84154E8[]; + +void CB2_DiplomaOam(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void DiplomaInit(void) +{ + gDiploma = AllocZeroed(sizeof(*gDiploma)); + gDiploma->state = 0; + gDiploma->gfxStep = 0; + gDiploma->callbackStep = 0; + DiplomaBgInit(); + CreateTask(Task_DiplomaInit, 0); + SetMainCallback2(CB2_DiplomaInit); +} + +void CB2_DiplomaInit(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +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 (sub_8088F84()) + { + 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(CB2_DiplomaOam); + break; + default: + if (gPaletteFade.active) + { + break; + } + PlayFanfareByFanfareNum(5); + gTasks[taskId].func = Task_WaitForExit; + } + gDiploma->callbackStep++; +} + +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; + } +} + +void Task_DiplomaReturnToOverworld(u8 taskId) +{ + if (gPaletteFade.active) + return; + DestroyTask(taskId); + FreeAllWindowBuffers(); + FREE_AND_SET_NULL(gDiploma); + SetMainCallback2(sub_80568FC); +} + +void DiplomaBgInit(void) +{ + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); +} + +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); +} + +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; +} + +void DiplomaPrintText(void) +{ + u8 arr[160]; + uintptr_t len; + UnkTextUtil_Reset(); + UnkTextUtil_SetPtrI(0, gSaveBlock2Ptr->playerName); + if (sub_8088F84()) + { + UnkTextUtil_SetPtrI(1, gUnknown_841B68F); + } + else + { + UnkTextUtil_SetPtrI(1, gUnknown_841B698); + } + FillWindowPixelBuffer(0, 0); + UnkTextUtil_StringExpandPlaceholders(arr, gUnknown_841B60E); + len = (uintptr_t)GetStringWidth(2, arr, -1); + AddTextPrinterParameterized3(0, 2, 0x78 - (len / 2), 4, gUnknown_8415A04, -1, arr); + UnkTextUtil_StringExpandPlaceholders(arr, gUnknown_841B619); + len = (uintptr_t)GetStringWidth(2, arr, -1); + AddTextPrinterParameterized3(0, 0x2, 0x78 - (len / 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 63b75ae19..8a162a19f 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1130,7 +1130,7 @@ gUnknown_203AB40: @ 203AB40 gUnknown_203AB44: @ 203AB44 .space 0x4 -gUnknown_203AB48: @ 203AB48 +gDiploma: @ 203AB48 .space 0x4 gUnknown_203AB4C: @ 203AB4C From bfcf484509529d5e2e4e33ac6a7eb3e17ff435b7 Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 17:50:20 +0800 Subject: [PATCH 2/9] add: asmdiff.sh --- tools/asmdiff.sh | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100755 tools/asmdiff.sh 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 From 2b92e8f9d4809d5dea009de5805bc1d8aa195f24 Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 17:50:20 +0800 Subject: [PATCH 3/9] fix: ld_script.txt, tabs vs spaces & add: asmdiff.sh --- ld_script.txt | 1 - src/diploma.c | 224 +++++++++++++++++++++++------------------------ tools/asmdiff.sh | 7 ++ 3 files changed, 119 insertions(+), 113 deletions(-) create mode 100755 tools/asmdiff.sh diff --git a/ld_script.txt b/ld_script.txt index 1b734b6c5..2ad76655b 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -215,7 +215,6 @@ SECTIONS { asm/hall_of_fame.o(.text); asm/credits.o(.text); src/diploma.o(.text); - asm/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 index cffbe8df1..056f23582 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -48,142 +48,142 @@ struct Diploma u8 state; u8 gfxStep; u8 callbackStep; - u8 padding; + u8 padding; u8 tilemapBuffer[0x1000]; } - *gDiploma = NULL; + *gDiploma = NULL; extern const u32 gUnknown_84154E8[]; void CB2_DiplomaOam(void) { - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); } void DiplomaInit(void) { - gDiploma = AllocZeroed(sizeof(*gDiploma)); - gDiploma->state = 0; - gDiploma->gfxStep = 0; - gDiploma->callbackStep = 0; - DiplomaBgInit(); - CreateTask(Task_DiplomaInit, 0); - SetMainCallback2(CB2_DiplomaInit); + gDiploma = AllocZeroed(sizeof(*gDiploma)); + gDiploma->state = 0; + gDiploma->gfxStep = 0; + gDiploma->callbackStep = 0; + DiplomaBgInit(); + CreateTask(Task_DiplomaInit, 0); + SetMainCallback2(CB2_DiplomaInit); } void CB2_DiplomaInit(void) { - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); } 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 (sub_8088F84()) - { - 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(CB2_DiplomaOam); - break; - default: - if (gPaletteFade.active) - { - break; - } - PlayFanfareByFanfareNum(5); - gTasks[taskId].func = Task_WaitForExit; - } - gDiploma->callbackStep++; + 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 (sub_8088F84()) + { + 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(CB2_DiplomaOam); + break; + default: + if (gPaletteFade.active) + { + break; + } + PlayFanfareByFanfareNum(5); + gTasks[taskId].func = Task_WaitForExit; + } + gDiploma->callbackStep++; } void Task_WaitForExit(u8 taskId) { switch (gDiploma->state) - { + { case 0: if (WaitFanfare(0)) - { - gDiploma->state++; - } + { + gDiploma->state++; + } break; case 1: if (JOY_NEW(A_BUTTON)) - { + { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gDiploma->state++; - } - break; + gDiploma->state++; + } + break; case 2: Task_DiplomaReturnToOverworld(taskId); - break; + break; } } void Task_DiplomaReturnToOverworld(u8 taskId) { - if (gPaletteFade.active) - return; - DestroyTask(taskId); - FreeAllWindowBuffers(); - FREE_AND_SET_NULL(gDiploma); - SetMainCallback2(sub_80568FC); + if (gPaletteFade.active) + return; + DestroyTask(taskId); + FreeAllWindowBuffers(); + FREE_AND_SET_NULL(gDiploma); + SetMainCallback2(sub_80568FC); } void DiplomaBgInit(void) { - ResetSpriteData(); - ResetPaletteFade(); - FreeAllSpritePalettes(); - ResetTasks(); - ScanlineEffect_Stop(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); } void DiplomaVblankHandler(void) { - void *vram = (void *)VRAM; + 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); + ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_8415A08, 2); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -193,10 +193,10 @@ void DiplomaVblankHandler(void) 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); + 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); @@ -205,27 +205,27 @@ void DiplomaVblankHandler(void) 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; + 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; } void DiplomaPrintText(void) 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 From 1a0186c3f692e5e07ef553e3292d9ca76c15a899 Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 18:20:14 +0800 Subject: [PATCH 4/9] fix: diploma.c static --- src/diploma.c | 188 +++++++++++++++++++++++++------------------------- 1 file changed, 94 insertions(+), 94 deletions(-) diff --git a/src/diploma.c b/src/diploma.c index 056f23582..9f30e50f2 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -1,3 +1,4 @@ +#include "constants/fanfares.h" #include "gba/macro.h" #include "global.h" #include "gpu_regs.h" @@ -20,16 +21,16 @@ void sub_80568FC(void); u16 sub_8088F84(void); -void DiplomaBgInit(void); -void DiplomaPrintText(void); -u8 DiplomaLoadGfx(void); -void DiplomaVblankHandler(void); +static void DiplomaBgInit(void); +static void DiplomaPrintText(void); +static u8 DiplomaLoadGfx(void); +static void DiplomaVblankHandler(void); -void CB2_DiplomaInit(void); +static void CB2_DiplomaInit(void); -void Task_WaitForExit(u8); -void Task_DiplomaInit(u8); -void Task_DiplomaReturnToOverworld(u8); +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[]; @@ -48,14 +49,13 @@ struct Diploma u8 state; u8 gfxStep; u8 callbackStep; - u8 padding; - u8 tilemapBuffer[0x1000]; + u16 tilemapBuffer[0x800]; } *gDiploma = NULL; extern const u32 gUnknown_84154E8[]; -void CB2_DiplomaOam(void) +static void CB2_DiplomaOam(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -73,7 +73,7 @@ void DiplomaInit(void) SetMainCallback2(CB2_DiplomaInit); } -void CB2_DiplomaInit(void) +static void CB2_DiplomaInit(void) { RunTasks(); AnimateSprites(); @@ -81,83 +81,83 @@ void CB2_DiplomaInit(void) UpdatePaletteFade(); } -void Task_DiplomaInit(u8 taskId) +static void Task_DiplomaInit(u8 taskId) { switch (gDiploma->callbackStep) { - case 0: - SetVBlankCallback(NULL); + 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 (sub_8088F84()) + { + 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(CB2_DiplomaOam); + break; + default: + if (gPaletteFade.active) + { break; - case 1: - DiplomaVblankHandler(); - break; - case 2: - if (!DiplomaLoadGfx()) - { - return; - } - break; - case 3: - CopyToBgTilemapBuffer(1, gUnknown_84154E8, 0, 0); - break; - case 4: - if (sub_8088F84()) - { - 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(CB2_DiplomaOam); - break; - default: - if (gPaletteFade.active) - { - break; - } - PlayFanfareByFanfareNum(5); - gTasks[taskId].func = Task_WaitForExit; + } + PlayFanfareByFanfareNum(FANFARE_05); + gTasks[taskId].func = Task_WaitForExit; } gDiploma->callbackStep++; } -void Task_WaitForExit(u8 taskId) +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; + 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; } } -void Task_DiplomaReturnToOverworld(u8 taskId) +static void Task_DiplomaReturnToOverworld(u8 taskId) { if (gPaletteFade.active) return; @@ -167,7 +167,7 @@ void Task_DiplomaReturnToOverworld(u8 taskId) SetMainCallback2(sub_80568FC); } -void DiplomaBgInit(void) +static void DiplomaBgInit(void) { ResetSpriteData(); ResetPaletteFade(); @@ -176,7 +176,7 @@ void DiplomaBgInit(void) ScanlineEffect_Stop(); } -void DiplomaVblankHandler(void) +static void DiplomaVblankHandler(void) { void *vram = (void *)VRAM; DmaClearLarge16(3, vram, VRAM_SIZE, 0x1000); @@ -203,32 +203,32 @@ void DiplomaVblankHandler(void) FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 30, 20); } -u8 DiplomaLoadGfx(void) +static u8 DiplomaLoadGfx(void) { switch (gDiploma->gfxStep) { - case 0: - ResetTempTileDataBuffers(); + case 0: + ResetTempTileDataBuffers(); + break; + case 1: + DecompressAndCopyTileDataToVram(1, gUnknown_84147C0, 0, 0, 0); + break; + case 2: + if (!(FreeTempTileDataBuffersIfPossible() == 1)) + { 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; + } + return 0; + case 3: + LoadPalette(gUnknown_8415954, 0, 0x40); + default: + return 1; } gDiploma->gfxStep++; return 0; } -void DiplomaPrintText(void) +static void DiplomaPrintText(void) { u8 arr[160]; uintptr_t len; From cc77a3ecbf453ed38ec2fcddae0ad506182b10d9 Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 18:39:12 +0800 Subject: [PATCH 5/9] fix: ewram --- src/diploma.c | 5 +++-- sym_ewram.txt | 3 +-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/diploma.c b/src/diploma.c index 9f30e50f2..60a6d2fba 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -50,8 +50,9 @@ struct Diploma u8 gfxStep; u8 callbackStep; u16 tilemapBuffer[0x800]; -} - *gDiploma = NULL; +}; + +static EWRAM_DATA struct Diploma *gDiploma = NULL; extern const u32 gUnknown_84154E8[]; diff --git a/sym_ewram.txt b/sym_ewram.txt index 8a162a19f..a103b0c8e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -1130,8 +1130,7 @@ gUnknown_203AB40: @ 203AB40 gUnknown_203AB44: @ 203AB44 .space 0x4 -gDiploma: @ 203AB48 - .space 0x4 + .include "src/diploma.o" gUnknown_203AB4C: @ 203AB4C .space 0x4 From 23a05eb6ac4118cb928d095a4f0c649d5f0bd3b0 Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 19:02:28 +0800 Subject: [PATCH 6/9] fix: more fixes --- asm/field_specials.s | 4 ++-- src/diploma.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/asm/field_specials.s b/asm/field_specials.s index 4e4d50c7b..b4980a87a 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 @ =DiplomaInit + ldr r0, _080CA62C @ =CB2_ShowDiploma bl SetMainCallback2 bl ScriptContext2_Enable pop {r0} bx r0 .align 2, 0 -_080CA62C: .4byte DiplomaInit +_080CA62C: .4byte CB2_ShowDiploma thumb_func_end sub_80CA618 thumb_func_start sub_80CA630 diff --git a/src/diploma.c b/src/diploma.c index 60a6d2fba..1c3755526 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -56,14 +56,14 @@ static EWRAM_DATA struct Diploma *gDiploma = NULL; extern const u32 gUnknown_84154E8[]; -static void CB2_DiplomaOam(void) +static void VCBC_DiplomaOam(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void DiplomaInit(void) +void CB2_ShowDiploma(void) { gDiploma = AllocZeroed(sizeof(*gDiploma)); gDiploma->state = 0; @@ -122,7 +122,7 @@ static void Task_DiplomaInit(u8 taskId) BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); break; case 8: - SetVBlankCallback(CB2_DiplomaOam); + SetVBlankCallback(VCBC_DiplomaOam); break; default: if (gPaletteFade.active) From 56b5fffe9d1252b6c94180dd5d49c7ebafede30c Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 19:58:36 +0800 Subject: [PATCH 7/9] fix: move/rename declarations --- asm/overworld.s | 6 +++--- asm/pokedex.s | 6 +++--- asm/trainer_card.s | 4 ++-- data/specials.inc | 2 +- include/overworld.h | 1 + include/pokedex.h | 1 + src/diploma.c | 21 ++++++++++----------- 7 files changed, 21 insertions(+), 20 deletions(-) diff --git a/asm/overworld.s b/asm/overworld.s index aacb22510..cf4e4810e 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3799,8 +3799,8 @@ _080568F4: .4byte gFieldCallback _080568F8: .4byte FieldCallback_ReturnToEventScript2 thumb_func_end c2_exit_to_overworld_1_continue_scripts_restart_music - 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 e6cec1766..60cb46144 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 bab4797ff..4c6f3de8b 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -105,6 +105,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..69839b3b4 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -8,6 +8,7 @@ void CopyMonCategoryText(u16 species, u8 *dst); u16 GetPokedexHeightWeight(u16 dexNum, u8 data); u16 GetNationalPokedexCount(u8); u16 GetHoennPokedexCount(u8); +bool16 HasAllKantoMons(void); u8 CreateDexDisplayMonDataTask(u16 dexNum, u32 trainerId, u32 personality); enum diff --git a/src/diploma.c b/src/diploma.c index 1c3755526..2fade0dcf 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -4,6 +4,7 @@ #include "gpu_regs.h" #include "window.h" #include "main.h" +#include "overworld.h" #include "scanline_effect.h" #include "task.h" #include "unk_text_util.h" @@ -12,15 +13,13 @@ #include "bg.h" #include "sound.h" #include "malloc.h" +#include "pokedex.h" #include "sprite.h" #include "palette.h" #include "new_menu_helpers.h" #include "menu.h" #include "diploma.h" -void sub_80568FC(void); -u16 sub_8088F84(void); - static void DiplomaBgInit(void); static void DiplomaPrintText(void); static u8 DiplomaLoadGfx(void); @@ -102,7 +101,7 @@ static void Task_DiplomaInit(u8 taskId) CopyToBgTilemapBuffer(1, gUnknown_84154E8, 0, 0); break; case 4: - if (sub_8088F84()) + if (HasAllKantoMons()) { SetGpuReg(REG_OFFSET_BG1HOFS, 0x80 << 1); } @@ -165,7 +164,7 @@ static void Task_DiplomaReturnToOverworld(u8 taskId) DestroyTask(taskId); FreeAllWindowBuffers(); FREE_AND_SET_NULL(gDiploma); - SetMainCallback2(sub_80568FC); + SetMainCallback2(CB2_Overworld); } static void DiplomaBgInit(void) @@ -232,10 +231,10 @@ static u8 DiplomaLoadGfx(void) static void DiplomaPrintText(void) { u8 arr[160]; - uintptr_t len; + u32 width; UnkTextUtil_Reset(); UnkTextUtil_SetPtrI(0, gSaveBlock2Ptr->playerName); - if (sub_8088F84()) + if (HasAllKantoMons()) { UnkTextUtil_SetPtrI(1, gUnknown_841B68F); } @@ -245,11 +244,11 @@ static void DiplomaPrintText(void) } FillWindowPixelBuffer(0, 0); UnkTextUtil_StringExpandPlaceholders(arr, gUnknown_841B60E); - len = (uintptr_t)GetStringWidth(2, arr, -1); - AddTextPrinterParameterized3(0, 2, 0x78 - (len / 2), 4, gUnknown_8415A04, -1, arr); + width = GetStringWidth(2, arr, -1); + AddTextPrinterParameterized3(0, 2, 0x78 - (width / 2), 4, gUnknown_8415A04, -1, arr); UnkTextUtil_StringExpandPlaceholders(arr, gUnknown_841B619); - len = (uintptr_t)GetStringWidth(2, arr, -1); - AddTextPrinterParameterized3(0, 0x2, 0x78 - (len / 2), 0x1E, gUnknown_8415A04, -1, arr); + 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); } From 8fe7ed27febc86f61735b1395ebb5924d7607809 Mon Sep 17 00:00:00 2001 From: dheu Date: Mon, 8 Jul 2019 20:06:23 +0800 Subject: [PATCH 8/9] fix: this isn't emerald --- include/pokedex.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/pokedex.h b/include/pokedex.h index 69839b3b4..c4ec27e0b 100644 --- a/include/pokedex.h +++ b/include/pokedex.h @@ -7,7 +7,7 @@ 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); From 185cd074035c41d4550a150139b1eeb34541ace8 Mon Sep 17 00:00:00 2001 From: dheu Date: Thu, 11 Jul 2019 05:47:57 +0800 Subject: [PATCH 9/9] fix: renamed UnkTextUtil to DynamicPlaceholder versoins --- src/diploma.c | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/diploma.c b/src/diploma.c index 2fade0dcf..74343e82f 100644 --- a/src/diploma.c +++ b/src/diploma.c @@ -1,23 +1,23 @@ -#include "constants/fanfares.h" -#include "gba/macro.h" #include "global.h" -#include "gpu_regs.h" -#include "window.h" -#include "main.h" -#include "overworld.h" -#include "scanline_effect.h" -#include "task.h" -#include "unk_text_util.h" -#include "gpu_regs.h" -#include "text.h" #include "bg.h" -#include "sound.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 "pokedex.h" -#include "sprite.h" -#include "palette.h" -#include "new_menu_helpers.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); @@ -232,21 +232,21 @@ static void DiplomaPrintText(void) { u8 arr[160]; u32 width; - UnkTextUtil_Reset(); - UnkTextUtil_SetPtrI(0, gSaveBlock2Ptr->playerName); + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); if (HasAllKantoMons()) { - UnkTextUtil_SetPtrI(1, gUnknown_841B68F); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_841B68F); } else { - UnkTextUtil_SetPtrI(1, gUnknown_841B698); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, gUnknown_841B698); } FillWindowPixelBuffer(0, 0); - UnkTextUtil_StringExpandPlaceholders(arr, gUnknown_841B60E); + DynamicPlaceholderTextUtil_ExpandPlaceholders(arr, gUnknown_841B60E); width = GetStringWidth(2, arr, -1); AddTextPrinterParameterized3(0, 2, 0x78 - (width / 2), 4, gUnknown_8415A04, -1, arr); - UnkTextUtil_StringExpandPlaceholders(arr, gUnknown_841B619); + 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);