diff options
author | Cameron Hall <camthesaxman@users.noreply.github.com> | 2016-10-21 22:34:51 -0500 |
---|---|---|
committer | YamaArashi <YamaArashi@users.noreply.github.com> | 2016-10-21 20:34:51 -0700 |
commit | a857a6bcd436323084cf17c676dcde18eba61bc1 (patch) | |
tree | 2390b55d39b77a3eb3b4785988ed4d5f72e1ec37 | |
parent | a741c108cd7a2abf5d82b332261f7f6cbaf179f5 (diff) |
decompile diploma (#66)
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | asm/diploma.s | 313 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/diploma.c | 138 |
4 files changed, 140 insertions, 315 deletions
@@ -55,7 +55,7 @@ asm/party_menu.o asm/rom_806D7F8.o asm/wild_encounter.o asm/rom_80859BC.o \ asm/field_effect.o asm/title_screen.o asm/rom_807C828.o \ asm/rom_806936C.o asm/clear_save_data_menu.o asm/rom_8148B8C.o \ asm/mystery_event_menu.o asm/save_failed_screen.o asm/rom_81473B8.o \ -asm/diploma.o asm/berry_tag_screen.o asm/lottery_corner.o \ +asm/berry_tag_screen.o asm/lottery_corner.o \ asm/battle_ai.o asm/trader.o asm/trainer_card.o asm/save_menu_util.o \ asm/rom_8094928.o diff --git a/asm/diploma.s b/asm/diploma.s deleted file mode 100644 index c7857b592..000000000 --- a/asm/diploma.s +++ /dev/null @@ -1,313 +0,0 @@ - .include "constants/gba_constants.s" - .include "constants/species_constants.s" - .include "asm/macros.s" - - .syntax unified - - .text - - thumb_func_start sub_8145D74 -sub_8145D74: @ 8145D74 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_8145D74 - - thumb_func_start sub_8145D88 -sub_8145D88: @ 8145D88 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC - movs r0, 0 - bl SetVBlankCallback - movs r0, 0x80 - lsls r0, 19 - mov r8, r0 - movs r1, 0 - strh r1, [r0] - ldr r6, _08145EB0 - strh r1, [r6] - adds r0, 0xC - strh r1, [r0] - subs r0, 0x2 - strh r1, [r0] - subs r0, 0x2 - strh r1, [r0] - adds r0, 0x14 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - subs r0, 0x6 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - add r0, sp, 0x4 - strh r1, [r0] - ldr r2, _08145EB4 - str r0, [r2] - movs r1, 0xC0 - lsls r1, 19 - str r1, [r2, 0x4] - ldr r0, _08145EB8 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - movs r5, 0 - str r5, [sp, 0x8] - add r0, sp, 0x8 - str r0, [r2] - movs r0, 0xE0 - lsls r0, 19 - str r0, [r2, 0x4] - ldr r0, _08145EBC - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - add r0, sp, 0x4 - strh r5, [r0] - str r0, [r2] - movs r0, 0xA0 - lsls r0, 19 - str r0, [r2, 0x4] - ldr r0, _08145EC0 - str r0, [r2, 0x8] - ldr r0, [r2, 0x8] - ldr r0, _08145EC4 - bl LZ77UnCompVram - ldr r0, _08145EC8 - ldr r1, _08145ECC - bl LZ77UnCompVram - bl remove_some_task - bl ResetTasks - bl ResetSpriteData - bl ResetPaletteFade - bl FreeAllSpritePalettes - ldr r0, _08145ED0 - movs r1, 0 - movs r2, 0x40 - bl LoadPalette - ldr r0, _08145ED4 - bl SetUpWindowConfig - ldr r0, _08145ED8 - bl InitMenuWindow - bl pokedex_diploma_something - movs r0, 0x1 - negs r0, r0 - str r5, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r3, _08145EDC - ldrh r2, [r3] - strh r5, [r3] - ldr r4, _08145EE0 - ldrh r0, [r4] - movs r1, 0x1 - orrs r0, r1 - strh r0, [r4] - strh r2, [r3] - ldr r2, _08145EE4 - ldrh r0, [r2] - movs r1, 0x8 - orrs r0, r1 - strh r0, [r2] - ldr r0, _08145EE8 - bl SetVBlankCallback - ldr r0, _08145EEC - bl SetMainCallback2 - ldr r0, _08145EF0 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - adds r0, 0x2 - strh r5, [r0] - ldr r1, _08145EF4 - adds r0, r1, 0 - strh r0, [r6] - movs r1, 0xCA - lsls r1, 5 - adds r0, r1, 0 - mov r1, r8 - strh r0, [r1] - ldr r0, _08145EF8 - movs r1, 0 - bl CreateTask - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08145EB0: .4byte REG_BG3CNT -_08145EB4: .4byte 0x040000d4 -_08145EB8: .4byte 0x8100c000 -_08145EBC: .4byte 0x85000100 -_08145EC0: .4byte 0x81000200 -_08145EC4: .4byte gUnknown_0840D288 -_08145EC8: .4byte gUnknown_0840CB4C -_08145ECC: .4byte 0x06003000 -_08145ED0: .4byte gUnknown_0840CB0C -_08145ED4: .4byte gWindowConfig_81E6C3C -_08145ED8: .4byte gWindowConfig_81E6CE4 -_08145EDC: .4byte 0x04000208 -_08145EE0: .4byte 0x04000200 -_08145EE4: .4byte REG_DISPSTAT -_08145EE8: .4byte sub_8145D74 -_08145EEC: .4byte sub_8145EFC -_08145EF0: .4byte REG_BLDCNT -_08145EF4: .4byte 0x00004603 -_08145EF8: .4byte sub_8145F14 - thumb_func_end sub_8145D88 - - thumb_func_start sub_8145EFC -sub_8145EFC: @ 8145EFC - push {lr} - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_8145EFC - - thumb_func_start sub_8145F14 -sub_8145F14: @ 8145F14 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08145F38 - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08145F34 - ldr r0, _08145F3C - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _08145F40 - str r0, [r1] -_08145F34: - pop {r0} - bx r0 - .align 2, 0 -_08145F38: .4byte gPaletteFade -_08145F3C: .4byte gTasks -_08145F40: .4byte sub_8145F44 - thumb_func_end sub_8145F14 - - thumb_func_start sub_8145F44 -sub_8145F44: @ 8145F44 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _08145F80 - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08145F76 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _08145F84 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _08145F88 - str r1, [r0] -_08145F76: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08145F80: .4byte gMain -_08145F84: .4byte gTasks -_08145F88: .4byte sub_8145F8C - thumb_func_end sub_8145F44 - - thumb_func_start sub_8145F8C -sub_8145F8C: @ 8145F8C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08145FB0 - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08145FAA - adds r0, r2, 0 - bl DestroyTask - ldr r0, _08145FB4 - bl SetMainCallback2 -_08145FAA: - pop {r0} - bx r0 - .align 2, 0 -_08145FB0: .4byte gPaletteFade -_08145FB4: .4byte sub_80546F0 - thumb_func_end sub_8145F8C - - thumb_func_start pokedex_diploma_something -pokedex_diploma_something: @ 8145FB8 - push {lr} - bl sub_8090FF4 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - beq _08145FE8 - ldr r1, _08145FDC - movs r2, 0x80 - lsls r2, 1 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08145FE0 - ldr r1, _08145FE4 - bl StringCopy - b _08145FF4 - .align 2, 0 -_08145FDC: .4byte REG_BG3HOFS -_08145FE0: .4byte gStringVar1 -_08145FE4: .4byte gOtherText_NationalDex -_08145FE8: - ldr r0, _08146004 - strh r1, [r0] - ldr r0, _08146008 - ldr r1, _0814600C - bl StringCopy -_08145FF4: - ldr r0, _08146010 - movs r1, 0x6 - movs r2, 0x2 - bl MenuPrint - pop {r0} - bx r0 - .align 2, 0 -_08146004: .4byte REG_BG3HOFS -_08146008: .4byte gStringVar1 -_0814600C: .4byte gOtherText_HoennDex -_08146010: .4byte gOtherText_DiplomaCertificationGameFreak - thumb_func_end pokedex_diploma_something - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index d3509a3af..8ddd70281 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -104,7 +104,7 @@ SECTIONS { src/intro.o(.text); asm/rom_813BA94.o(.text); asm/lottery_corner.o(.text); - asm/diploma.o(.text); + src/diploma.o(.text); asm/berry_tag_screen.o(.text); asm/mystery_event_menu.o(.text); asm/save_failed_screen.o(.text); diff --git a/src/diploma.c b/src/diploma.c new file mode 100644 index 000000000..f9e154cf3 --- /dev/null +++ b/src/diploma.c @@ -0,0 +1,138 @@ +#include "gba/gba.h" +#include "main.h" +#include "menu.h" +#include "palette.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" + +extern void LZ77UnCompVram(const void *src, void *dest); +extern void remove_some_task(void); +extern void sub_80546F0(void); +extern u16 sub_8090FF4(void); + +extern u8 gUnknown_0840D288[]; +extern u8 gUnknown_0840CB4C[]; +extern u8 gUnknown_0840CB0C[]; +extern u8 gStringVar1[]; +extern u8 gOtherText_NationalDex[]; +extern u8 gOtherText_HoennDex[]; +extern u8 gOtherText_DiplomaCertificationGameFreak[]; + +static void VBlankCB(void); +static void MainCB2(void); +static void Task_DiplomaFadeIn(u8); +static void Task_DiplomaWaitForKeyPress(u8); +static void Task_DiplomaFadeOut(u8); +static void DisplayDiplomaText(void); + +static void VBlankCB(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8145D88(void) +{ + u32 savedIme; + + SetVBlankCallback(NULL); + + REG_DISPCNT = 0; + REG_BG3CNT = 0; + REG_BG2CNT = 0; + REG_BG1CNT = 0; + REG_BG0CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + DmaFill16(3, 0, VRAM, VRAM_SIZE); + DmaFill32(3, 0, OAM, OAM_SIZE); + DmaFill16(3, 0, PLTT, PLTT_SIZE); + + LZ77UnCompVram(gUnknown_0840D288, (void *)VRAM); + LZ77UnCompVram(gUnknown_0840CB4C, (void *)(VRAM + 0x3000)); + + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + LoadPalette(gUnknown_0840CB0C, 0, 64); + SetUpWindowConfig(&gWindowConfig_81E6C3C); + InitMenuWindow(&gWindowConfig_81E6CE4); + DisplayDiplomaText(); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= INTR_FLAG_VBLANK; + REG_IME = savedIme; + REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; + + SetVBlankCallback(VBlankCB); + SetMainCallback2(MainCB2); + + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_BG3CNT = 0x4603; + REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON; + + CreateTask(Task_DiplomaFadeIn, 0); +} + +static void MainCB2(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_DiplomaFadeIn(u8 taskId) +{ + if(!gPaletteFade.active) + gTasks[taskId].func = Task_DiplomaWaitForKeyPress; +} + +static void Task_DiplomaWaitForKeyPress(u8 taskId) +{ + if(gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gTasks[taskId].func = Task_DiplomaFadeOut; + } +} + +static void Task_DiplomaFadeOut(u8 taskId) +{ + if(!gPaletteFade.active) + { + DestroyTask(taskId); + SetMainCallback2(sub_80546F0); + } +} + +static void DisplayDiplomaText(void) +{ + if(sub_8090FF4()) + { + REG_BG3HOFS = 256; + StringCopy(gStringVar1, gOtherText_NationalDex); + } + else + { + REG_BG3HOFS = 0; + StringCopy(gStringVar1, gOtherText_HoennDex); + } + MenuPrint(gOtherText_DiplomaCertificationGameFreak, 6, 2); +}
\ No newline at end of file |