diff options
-rw-r--r-- | asm/hall_of_fame.s | 3442 | ||||
-rw-r--r-- | asm/pokemon_summary_screen.s | 2 | ||||
-rw-r--r-- | asm/post_battle_event_funcs.s | 8 | ||||
-rw-r--r-- | data/hall_of_fame.s | 180 | ||||
-rw-r--r-- | data/strings.s | 18 | ||||
-rw-r--r-- | include/credits.h | 6 | ||||
-rw-r--r-- | include/graphics.h | 3 | ||||
-rw-r--r-- | include/hall_of_fame.h | 2 | ||||
-rw-r--r-- | include/pokemon.h | 2 | ||||
-rw-r--r-- | include/save.h | 11 | ||||
-rw-r--r-- | include/strings.h | 14 | ||||
-rw-r--r-- | include/trainer_pokemon_sprites.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/credits.c | 1 | ||||
-rw-r--r-- | src/hall_of_fame.c | 1293 | ||||
-rw-r--r-- | src/hof_pc.c | 2 | ||||
-rw-r--r-- | src/pokemon.c | 2 | ||||
-rw-r--r-- | src/save.c | 2 | ||||
-rw-r--r-- | sym_ewram.txt | 17 |
19 files changed, 1343 insertions, 3667 deletions
diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s deleted file mode 100644 index d649871e0..000000000 --- a/asm/hall_of_fame.s +++ /dev/null @@ -1,3442 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_80F1DAC -sub_80F1DAC: @ 80F1DAC - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_80F1DAC - - thumb_func_start sub_80F1DC0 -sub_80F1DC0: @ 80F1DC0 - push {lr} - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_80F1DC0 - - thumb_func_start InitHallOfFameScreen -InitHallOfFameScreen: @ 80F1DDC - push {r4,lr} - sub sp, 0x4 - ldr r0, _080F1DFC @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x4 - bls _080F1DF0 - b _080F1EF0 -_080F1DF0: - lsls r0, 2 - ldr r1, _080F1E00 @ =_080F1E04 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F1DFC: .4byte gMain -_080F1E00: .4byte _080F1E04 - .align 2, 0 -_080F1E04: - .4byte _080F1E18 - .4byte _080F1E50 - .4byte _080F1E56 - .4byte _080F1E88 - .4byte _080F1EC4 -_080F1E18: - ldr r1, _080F1E40 @ =gHelpSystemEnabled - movs r0, 0 - strb r0, [r1] - movs r0, 0 - bl SetVBlankCallback - bl ClearVramOamPltt_LoadHofPal - ldr r4, _080F1E44 @ =gUnknown_203AB3C - ldr r0, _080F1E48 @ =0x00002008 - bl AllocZeroed - str r0, [r4] - ldr r0, _080F1E4C @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _080F1EF0 - .align 2, 0 -_080F1E40: .4byte gHelpSystemEnabled -_080F1E44: .4byte gUnknown_203AB3C -_080F1E48: .4byte 0x00002008 -_080F1E4C: .4byte gMain -_080F1E50: - bl sub_80F36BC - b _080F1EAA -_080F1E56: - ldr r1, _080F1E80 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0xE2 - lsls r1, 3 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - bl sub_80F36F8 - ldr r0, _080F1E84 @ =gUnknown_203AB3C - ldr r1, [r0] - movs r0, 0 - strh r0, [r1] - b _080F1EAA - .align 2, 0 -_080F1E80: .4byte 0x00003f42 -_080F1E84: .4byte gUnknown_203AB3C -_080F1E88: - bl sub_80F3770 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080F1EF0 - ldr r0, _080F1EBC @ =sub_80F1DAC - bl SetVBlankCallback - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade -_080F1EAA: - ldr r1, _080F1EC0 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080F1EF0 - .align 2, 0 -_080F1EBC: .4byte sub_80F1DAC -_080F1EC0: .4byte gMain -_080F1EC4: - bl UpdatePaletteFade - ldr r0, _080F1EE8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080F1EF0 - ldr r0, _080F1EEC @ =sub_80F1DC0 - bl SetMainCallback2 - movs r0, 0x8F @ MUS_DENDOU >> 1 - lsls r0, 1 - bl PlayBGM - movs r0, 0 - b _080F1EF2 - .align 2, 0 -_080F1EE8: .4byte gPaletteFade -_080F1EEC: .4byte sub_80F1DC0 -_080F1EF0: - movs r0, 0x1 -_080F1EF2: - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end InitHallOfFameScreen - - thumb_func_start CB2_DoHallOfFameScreen -CB2_DoHallOfFameScreen: @ 80F1EFC - push {r4,lr} - bl InitHallOfFameScreen - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080F1F2C - ldr r0, _080F1F34 @ =Task_Hof_InitMonData - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080F1F38 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - strh r4, [r1, 0x8] - ldr r4, _080F1F3C @ =gUnknown_203AB38 - movs r0, 0x78 - bl AllocZeroed - str r0, [r4] -_080F1F2C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F1F34: .4byte Task_Hof_InitMonData -_080F1F38: .4byte gTasks -_080F1F3C: .4byte gUnknown_203AB38 - thumb_func_end CB2_DoHallOfFameScreen - - thumb_func_start CB2_DoHallOfFameScreenDontSaveData -CB2_DoHallOfFameScreenDontSaveData: @ 80F1F40 - push {lr} - bl InitHallOfFameScreen - lsls r0, 24 - cmp r0, 0 - bne _080F1F66 - ldr r0, _080F1F6C @ =Task_Hof_InitMonData - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080F1F70 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0x1 - strh r0, [r1, 0x8] -_080F1F66: - pop {r0} - bx r0 - .align 2, 0 -_080F1F6C: .4byte Task_Hof_InitMonData -_080F1F70: .4byte gTasks - thumb_func_end CB2_DoHallOfFameScreenDontSaveData - - thumb_func_start Task_Hof_InitMonData -Task_Hof_InitMonData: @ 80F1F74 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0xC - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r1, _080F2050 @ =gTasks - lsls r0, 2 - add r0, r8 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0xC] - movs r7, 0 - ldr r0, _080F2054 @ =gUnknown_203AB38 - mov r9, r0 -_080F1F98: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _080F2058 @ =gPlayerParty - adds r6, r1, r0 - adds r0, r6, 0 - movs r1, 0xB - bl GetMonData - adds r5, r0, 0 - cmp r5, 0 - beq _080F2064 - adds r0, r6, 0 - movs r1, 0x41 - bl GetMonData - mov r1, r9 - ldr r3, [r1] - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 2 - adds r3, r4 - ldr r2, _080F205C @ =0x000001ff - adds r1, r2, 0 - ands r0, r1 - ldrh r1, [r3, 0x8] - ldr r5, _080F2060 @ =0xfffffe00 - adds r2, r5, 0 - ands r1, r2 - orrs r1, r0 - strh r1, [r3, 0x8] - adds r0, r6, 0 - movs r1, 0x1 - bl GetMonData - mov r2, r9 - ldr r1, [r2] - adds r1, r4 - str r0, [r1] - adds r0, r6, 0 - movs r1, 0 - bl GetMonData - mov r5, r9 - ldr r1, [r5] - adds r1, 0x4 - adds r1, r4 - str r0, [r1] - adds r0, r6, 0 - movs r1, 0x38 - bl GetMonData - ldr r2, [r5] - adds r2, r4 - lsls r0, 1 - ldrb r3, [r2, 0x9] - movs r1, 0x1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2, 0x9] - adds r0, r6, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - movs r2, 0 - mov r6, r8 - lsls r5, r6, 2 - ldr r3, _080F2054 @ =gUnknown_203AB38 -_080F2022: - ldr r0, [r3] - adds r1, r2, r4 - adds r0, 0xA - adds r0, r1 - mov r6, sp - adds r1, r6, r2 - ldrb r1, [r1] - strb r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x9 - bls _080F2022 - ldr r0, _080F2050 @ =gTasks - mov r2, r8 - adds r1, r5, r2 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0xC] - adds r0, 0x1 - strh r0, [r1, 0xC] - b _080F2098 - .align 2, 0 -_080F2050: .4byte gTasks -_080F2054: .4byte gUnknown_203AB38 -_080F2058: .4byte gPlayerParty -_080F205C: .4byte 0x000001ff -_080F2060: .4byte 0xfffffe00 -_080F2064: - mov r6, r9 - ldr r3, [r6] - lsls r2, r7, 2 - adds r2, r7 - lsls r2, 2 - adds r4, r3, r2 - ldrh r0, [r4, 0x8] - ldr r6, _080F20EC @ =0xfffffe00 - adds r1, r6, 0 - ands r0, r1 - strh r0, [r4, 0x8] - str r5, [r4] - adds r3, 0x4 - adds r3, r2 - str r5, [r3] - ldrb r1, [r4, 0x9] - movs r0, 0x1 - ands r0, r1 - strb r0, [r4, 0x9] - mov r1, r9 - ldr r0, [r1] - adds r0, r2 - movs r1, 0xFF - strb r1, [r0, 0xA] - mov r2, r8 - lsls r5, r2, 2 -_080F2098: - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0x5 - bhi _080F20A4 - b _080F1F98 -_080F20A4: - ldr r0, _080F20F0 @ =gUnknown_203AB34 - movs r3, 0 - str r3, [r0] - ldr r4, _080F20F4 @ =gTasks - mov r6, r8 - adds r1, r5, r6 - lsls r1, 3 - adds r2, r1, r4 - strh r3, [r2, 0xA] - movs r0, 0xFF - strh r0, [r2, 0x10] - movs r7, 0 - adds r3, r4, 0 - adds r3, 0x8 - movs r2, 0xFF -_080F20C2: - adds r0, r7, 0x5 - lsls r0, 1 - adds r0, r1 - adds r0, r3 - strh r2, [r0] - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0x5 - bls _080F20C2 - mov r1, r8 - adds r0, r5, r1 - lsls r0, 3 - adds r1, r0, r4 - movs r2, 0x8 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _080F20FC - ldr r0, _080F20F8 @ =sub_80F2294 - b _080F20FE - .align 2, 0 -_080F20EC: .4byte 0xfffffe00 -_080F20F0: .4byte gUnknown_203AB34 -_080F20F4: .4byte gTasks -_080F20F8: .4byte sub_80F2294 -_080F20FC: - ldr r0, _080F2110 @ =Task_Hof_InitTeamSaveData -_080F20FE: - str r0, [r1] - add sp, 0xC - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2110: .4byte Task_Hof_InitTeamSaveData - thumb_func_end Task_Hof_InitMonData - - thumb_func_start Task_Hof_InitTeamSaveData -Task_Hof_InitTeamSaveData: @ 80F2114 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r7, _080F2140 @ =gDecompressionBuffer - bl sub_8112450 - ldr r0, _080F2144 @ =gUnknown_203AB44 - ldrb r0, [r0] - cmp r0, 0 - bne _080F2148 - movs r2, 0x80 - lsls r2, 6 - adds r0, r7, 0 - movs r1, 0 - bl memset - b _080F2162 - .align 2, 0 -_080F2140: .4byte gDecompressionBuffer -_080F2144: .4byte gUnknown_203AB44 -_080F2148: - movs r0, 0x3 - bl Save_LoadGameData - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080F2162 - movs r2, 0x80 - lsls r2, 6 - adds r0, r7, 0 - movs r1, 0 - bl memset -_080F2162: - movs r5, 0 - ldrh r1, [r7, 0x8] - ldr r2, _080F2208 @ =0x000001ff - adds r0, r2, 0 - ands r0, r1 - mov r1, r9 - lsls r1, 2 - mov r8, r1 - cmp r0, 0 - beq _080F218C -_080F2176: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - adds r7, 0x78 - cmp r5, 0x31 - bhi _080F2190 - ldrh r1, [r7, 0x8] - adds r0, r2, 0 - ands r0, r1 - cmp r0, 0 - bne _080F2176 -_080F218C: - cmp r5, 0x31 - bls _080F21B2 -_080F2190: - ldr r4, _080F220C @ =gDecompressionBuffer - adds r6, r4, 0 - adds r4, 0x78 - movs r5, 0 - subs r7, 0x78 -_080F219A: - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0x78 - bl memcpy - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - adds r6, 0x78 - adds r4, 0x78 - cmp r5, 0x30 - bls _080F219A -_080F21B2: - ldr r0, _080F2210 @ =gUnknown_203AB38 - ldr r1, [r0] - adds r0, r7, 0 - movs r2, 0x78 - bl memcpy - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - ldr r2, _080F2214 @ =gText_SavingDontTurnOffThePower2 - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized2 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r1, _080F2218 @ =gTasks - mov r0, r8 - add r0, r9 - lsls r0, 3 - adds r0, r1 - ldr r1, _080F221C @ =sub_80F2220 - str r1, [r0] - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2208: .4byte 0x000001ff -_080F220C: .4byte gDecompressionBuffer -_080F2210: .4byte gUnknown_203AB38 -_080F2214: .4byte gText_SavingDontTurnOffThePower2 -_080F2218: .4byte gTasks -_080F221C: .4byte sub_80F2220 - thumb_func_end Task_Hof_InitTeamSaveData - - thumb_func_start sub_80F2220 -sub_80F2220: @ 80F2220 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _080F2254 @ =gGameContinueCallback - ldr r0, _080F2258 @ =CB2_DoHallOfFameScreenDontSaveData - str r0, [r1] - movs r0, 0x3 - bl TrySavingData - movs r0, 0x30 - bl PlaySE - ldr r1, _080F225C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080F2260 @ =sub_80F2264 - str r1, [r0] - movs r1, 0x20 - strh r1, [r0, 0xE] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F2254: .4byte gGameContinueCallback -_080F2258: .4byte CB2_DoHallOfFameScreenDontSaveData -_080F225C: .4byte gTasks -_080F2260: .4byte sub_80F2264 - thumb_func_end sub_80F2220 - - thumb_func_start sub_80F2264 -sub_80F2264: @ 80F2264 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080F2284 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrh r2, [r1, 0xE] - movs r3, 0xE - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080F2288 - subs r0, r2, 0x1 - strh r0, [r1, 0xE] - b _080F228C - .align 2, 0 -_080F2284: .4byte gTasks -_080F2288: - ldr r0, _080F2290 @ =sub_80F2294 - str r0, [r1] -_080F228C: - pop {r0} - bx r0 - .align 2, 0 -_080F2290: .4byte sub_80F2294 - thumb_func_end sub_80F2264 - - thumb_func_start sub_80F2294 -sub_80F2294: @ 80F2294 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080F22A8 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _080F22AC @ =sub_80F22B0 - str r0, [r1] - bx lr - .align 2, 0 -_080F22A8: .4byte gTasks -_080F22AC: .4byte sub_80F22B0 - thumb_func_end sub_80F2294 - - thumb_func_start sub_80F22B0 -sub_80F22B0: @ 80F22B0 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - lsls r0, 24 - lsrs r7, r0, 24 - ldr r0, _080F22E4 @ =gTasks - lsls r1, r7, 2 - adds r1, r7 - lsls r1, 3 - adds r1, r0 - ldrh r6, [r1, 0xA] - ldr r2, _080F22E8 @ =gUnknown_203AB38 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 2 - ldr r2, [r2] - adds r4, r2, r0 - movs r2, 0xC - ldrsh r0, [r1, r2] - cmp r0, 0x3 - ble _080F22F0 - ldr r1, _080F22EC @ =gUnknown_840C268 - b _080F22F2 - .align 2, 0 -_080F22E4: .4byte gTasks -_080F22E8: .4byte gUnknown_203AB38 -_080F22EC: .4byte gUnknown_840C268 -_080F22F0: - ldr r1, _080F2388 @ =gUnknown_840C298 -_080F22F2: - lsls r2, r6, 3 - adds r0, r2, r1 - ldrh r3, [r0] - adds r0, r1, 0x2 - adds r0, r2, r0 - ldrh r5, [r0] - adds r0, r1, 0x4 - adds r0, r2, r0 - ldrh r0, [r0] - mov r9, r0 - adds r1, 0x6 - adds r2, r1 - ldrh r2, [r2] - mov r8, r2 - ldrh r0, [r4, 0x8] - lsls r0, 23 - lsrs r0, 23 - ldr r1, [r4] - ldr r2, [r4, 0x4] - lsls r3, 16 - asrs r3, 16 - str r3, [sp] - lsls r3, r5, 16 - asrs r3, 16 - str r3, [sp, 0x4] - lsls r3, r6, 24 - lsrs r3, 24 - str r3, [sp, 0x8] - ldr r3, _080F238C @ =0x0000ffff - str r3, [sp, 0xC] - movs r3, 0x1 - bl CreateMonPicSprite_HandleDeoxys - lsls r0, 24 - lsrs r0, 24 - ldr r3, _080F2390 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r2, r1, r3 - movs r4, 0 - mov r5, r9 - strh r5, [r2, 0x30] - mov r5, r8 - strh r5, [r2, 0x32] - strh r4, [r2, 0x2E] - adds r3, 0x1C - adds r1, r3 - ldr r2, _080F2394 @ =sub_80F3870 - str r2, [r1] - ldr r5, _080F2398 @ =gTasks - adds r1, r6, 0x5 - lsls r1, 1 - lsls r4, r7, 2 - adds r4, r7 - lsls r4, 3 - adds r1, r4 - adds r2, r5, 0 - adds r2, 0x8 - adds r1, r2 - strh r0, [r1] - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrame - adds r4, r5 - ldr r0, _080F239C @ =sub_80F23A0 - str r0, [r4] - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2388: .4byte gUnknown_840C298 -_080F238C: .4byte 0x0000ffff -_080F2390: .4byte gSprites -_080F2394: .4byte sub_80F3870 -_080F2398: .4byte gTasks -_080F239C: .4byte sub_80F23A0 - thumb_func_end sub_80F22B0 - - thumb_func_start sub_80F23A0 -sub_80F23A0: @ 80F23A0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _080F2410 @ =gTasks - lsls r3, r0, 2 - adds r3, r0 - lsls r3, 3 - adds r5, r3, r4 - ldrh r1, [r5, 0xA] - ldr r2, _080F2414 @ =gUnknown_203AB38 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - ldr r2, [r2] - adds r6, r2, r0 - ldr r2, _080F2418 @ =gSprites - adds r1, 0x5 - lsls r1, 1 - adds r1, r3 - adds r4, 0x8 - adds r1, r4 - movs r0, 0 - ldrsh r1, [r1, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0 - beq _080F2408 - ldrh r2, [r6, 0x8] - ldr r0, _080F241C @ =0x000001ff - ands r0, r2 - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - beq _080F23F6 - lsls r0, r2, 23 - lsrs r0, 23 - movs r1, 0 - bl PlayCry1 -_080F23F6: - adds r0, r6, 0 - movs r1, 0 - movs r2, 0xE - bl sub_80F3194 - movs r0, 0x78 - strh r0, [r5, 0xE] - ldr r0, _080F2420 @ =Task_Hof_TryDisplayAnotherMon - str r0, [r5] -_080F2408: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F2410: .4byte gTasks -_080F2414: .4byte gUnknown_203AB38 -_080F2418: .4byte gSprites -_080F241C: .4byte 0x000001ff -_080F2420: .4byte Task_Hof_TryDisplayAnotherMon - thumb_func_end sub_80F23A0 - - thumb_func_start Task_Hof_TryDisplayAnotherMon -Task_Hof_TryDisplayAnotherMon: @ 80F2424 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r5, r0, 24 - ldr r2, _080F2460 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r6, r0, 3 - adds r4, r6, r2 - ldrh r3, [r4, 0xA] - ldr r1, _080F2464 @ =gUnknown_203AB38 - lsls r0, r3, 2 - adds r0, r3 - lsls r0, 2 - ldr r1, [r1] - adds r1, r0 - mov r9, r1 - ldrh r1, [r4, 0xE] - movs r7, 0xE - ldrsh r0, [r4, r7] - mov r12, r2 - cmp r0, 0 - beq _080F2468 - subs r0, r1, 0x1 - strh r0, [r4, 0xE] - b _080F2500 - .align 2, 0 -_080F2460: .4byte gTasks -_080F2464: .4byte gUnknown_203AB38 -_080F2468: - ldr r2, _080F24E0 @ =gUnknown_203AB34 - ldr r0, _080F24E4 @ =gSprites - mov r8, r0 - adds r0, r3, 0x5 - lsls r0, 1 - adds r0, r6 - mov r1, r12 - adds r1, 0x8 - adds r6, r0, r1 - movs r7, 0 - ldrsh r1, [r6, r7] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r0, [r0, 0x5] - lsrs r0, 4 - movs r1, 0x80 - lsls r1, 9 - lsls r1, r0 - ldr r3, [r2] - orrs r3, r1 - str r3, [r2] - ldrh r2, [r4, 0xA] - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bgt _080F24F4 - mov r7, r9 - ldrh r1, [r7, 0x1C] - ldr r0, _080F24E8 @ =0x000001ff - ands r0, r1 - cmp r0, 0 - beq _080F24F4 - adds r0, r2, 0x1 - strh r0, [r4, 0xA] - ldr r0, _080F24EC @ =0x00007716 - str r0, [sp] - adds r0, r3, 0 - movs r1, 0 - movs r2, 0xC - movs r3, 0xC - bl BeginNormalPaletteFade - movs r0, 0 - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r2, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0, 0x5] - ldr r0, _080F24F0 @ =sub_80F22B0 - str r0, [r4] - b _080F2500 - .align 2, 0 -_080F24E0: .4byte gUnknown_203AB34 -_080F24E4: .4byte gSprites -_080F24E8: .4byte 0x000001ff -_080F24EC: .4byte 0x00007716 -_080F24F0: .4byte sub_80F22B0 -_080F24F4: - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - add r0, r12 - ldr r1, _080F2510 @ =Task_Hof_PaletteFadeAndPrintWelcomeText - str r1, [r0] -_080F2500: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2510: .4byte Task_Hof_PaletteFadeAndPrintWelcomeText - thumb_func_end Task_Hof_TryDisplayAnotherMon - - thumb_func_start Task_Hof_PaletteFadeAndPrintWelcomeText -Task_Hof_PaletteFadeAndPrintWelcomeText: @ 80F2514 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080F259C @ =0xffff0000 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0 - bl BeginNormalPaletteFade - movs r3, 0 - lsls r1, r4, 2 - adds r0, r1, r4 - lsls r5, r0, 3 - ldr r0, _080F25A0 @ =gTasks+0x8 - mov r12, r0 - mov r8, r1 - ldr r6, _080F25A4 @ =gSprites - movs r7, 0xD - negs r7, r7 -_080F2542: - adds r0, r3, 0x5 - lsls r0, 1 - adds r0, r5 - mov r2, r12 - adds r1, r0, r2 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0xFF - beq _080F2564 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - strb r0, [r1, 0x5] -_080F2564: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x5 - bls _080F2542 - movs r0, 0 - movs r1, 0xF - bl HallOfFame_PrintWelcomeText - movs r0, 0x62 - bl PlaySE - ldr r1, _080F25A8 @ =gTasks - mov r2, r8 - adds r0, r2, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0xC8 - lsls r1, 1 - strh r1, [r0, 0xE] - ldr r1, _080F25AC @ =sub_80F25B0 - str r1, [r0] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F259C: .4byte 0xffff0000 -_080F25A0: .4byte gTasks+0x8 -_080F25A4: .4byte gSprites -_080F25A8: .4byte gTasks -_080F25AC: .4byte sub_80F25B0 - thumb_func_end Task_Hof_PaletteFadeAndPrintWelcomeText - - thumb_func_start sub_80F25B0 -sub_80F25B0: @ 80F25B0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r7, _080F25F0 @ =gTasks - lsls r4, r6, 2 - adds r0, r4, r6 - lsls r5, r0, 3 - adds r1, r5, r7 - ldrh r2, [r1, 0xE] - movs r3, 0xE - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080F25F4 - subs r2, 0x1 - strh r2, [r1, 0xE] - movs r0, 0x3 - ands r0, r2 - cmp r0, 0 - bne _080F266E - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x6E - ble _080F266E - bl sub_80F3930 - b _080F266E - .align 2, 0 -_080F25F0: .4byte gTasks -_080F25F4: - movs r3, 0 - mov r9, r4 - ldr r0, _080F2680 @ =gUnknown_203AB34 - mov r10, r0 - adds r4, r5, 0 - adds r7, 0x8 - mov r8, r7 - ldr r7, _080F2684 @ =gSprites - movs r1, 0xD - negs r1, r1 - mov r12, r1 - movs r5, 0x4 -_080F260C: - adds r0, r3, 0x5 - lsls r0, 1 - adds r0, r4 - mov r2, r8 - adds r1, r0, r2 - movs r2, 0 - ldrsh r0, [r1, r2] - cmp r0, 0xFF - beq _080F2630 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r7 - ldrb r2, [r1, 0x5] - mov r0, r12 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] -_080F2630: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x5 - bls _080F260C - mov r3, r10 - ldr r0, [r3] - ldr r1, _080F2688 @ =0x00007716 - str r1, [sp] - movs r1, 0 - movs r2, 0xC - movs r3, 0xC - bl BeginNormalPaletteFade - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r1, _080F268C @ =gTasks - mov r2, r9 - adds r0, r2, r6 - lsls r0, 3 - adds r0, r1 - movs r1, 0x7 - strh r1, [r0, 0xE] - ldr r1, _080F2690 @ =sub_80F2694 - str r1, [r0] -_080F266E: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2680: .4byte gUnknown_203AB34 -_080F2684: .4byte gSprites -_080F2688: .4byte 0x00007716 -_080F268C: .4byte gTasks -_080F2690: .4byte sub_80F2694 - thumb_func_end sub_80F25B0 - - thumb_func_start sub_80F2694 -sub_80F2694: @ 80F2694 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080F26B4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrh r2, [r1, 0xE] - movs r3, 0xE - ldrsh r0, [r1, r3] - cmp r0, 0xF - ble _080F26BC - ldr r0, _080F26B8 @ =sub_80F26D4 - str r0, [r1] - b _080F26CE - .align 2, 0 -_080F26B4: .4byte gTasks -_080F26B8: .4byte sub_80F26D4 -_080F26BC: - adds r0, r2, 0x1 - strh r0, [r1, 0xE] - movs r0, 0xE - ldrsh r1, [r1, r0] - lsls r1, 24 - lsrs r1, 16 - movs r0, 0x52 - bl SetGpuReg -_080F26CE: - pop {r0} - bx r0 - thumb_func_end sub_80F2694 - - thumb_func_start sub_80F26D4 -sub_80F26D4: @ 80F26D4 - push {r4,r5,lr} - sub sp, 0x8 - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x3 - bl ShowBg - ldr r0, _080F2748 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - movs r1, 0x1 - bl PlayerGenderToFrontTrainerPicId_Debug - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x6 - str r1, [sp] - ldr r1, _080F274C @ =0x0000ffff - str r1, [sp, 0x4] - movs r1, 0x1 - movs r2, 0x78 - movs r3, 0x48 - bl CreateTrainerPicSprite - ldr r1, _080F2750 @ =gTasks - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r1 - strh r0, [r4, 0x10] - ldr r0, _080F2754 @ =gUnknown_840C234 - bl AddWindow - ldr r1, _080F2758 @ =0x0000021d - movs r0, 0x1 - movs r2, 0xD0 - bl TextWindow_SetStdFrame0_WithPal - movs r0, 0x78 - strh r0, [r4, 0xE] - ldr r0, _080F275C @ =Task_Hof_WaitAndPrintPlayerInfo - str r0, [r4] - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F2748: .4byte gSaveBlock2Ptr -_080F274C: .4byte 0x0000ffff -_080F2750: .4byte gTasks -_080F2754: .4byte gUnknown_840C234 -_080F2758: .4byte 0x0000021d -_080F275C: .4byte Task_Hof_WaitAndPrintPlayerInfo - thumb_func_end sub_80F26D4 - - thumb_func_start Task_Hof_WaitAndPrintPlayerInfo -Task_Hof_WaitAndPrintPlayerInfo: @ 80F2760 - push {r4,r5,lr} - sub sp, 0x10 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080F2784 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r0, [r4, 0xE] - movs r1, 0xE - ldrsh r5, [r4, r1] - cmp r5, 0 - beq _080F2788 - subs r0, 0x1 - strh r0, [r4, 0xE] - b _080F27F4 - .align 2, 0 -_080F2784: .4byte gTasks -_080F2788: - ldr r2, _080F27A8 @ =gSprites - movs r3, 0x10 - ldrsh r1, [r4, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - ldrh r2, [r1, 0x20] - movs r3, 0x20 - ldrsh r0, [r1, r3] - cmp r0, 0xC0 - beq _080F27AC - adds r0, r2, 0x1 - strh r0, [r1, 0x20] - b _080F27F4 - .align 2, 0 -_080F27A8: .4byte gSprites -_080F27AC: - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x1 - movs r1, 0x2 - bl sub_80F33DC - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - ldr r2, _080F27FC @ =gUnknown_84160C8 - str r5, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized2 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _080F2800 @ =Task_Hof_ExitOnKeyPressed - str r0, [r4] -_080F27F4: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F27FC: .4byte gUnknown_84160C8 -_080F2800: .4byte Task_Hof_ExitOnKeyPressed - thumb_func_end Task_Hof_WaitAndPrintPlayerInfo - - thumb_func_start Task_Hof_ExitOnKeyPressed -Task_Hof_ExitOnKeyPressed: @ 80F2804 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080F2830 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080F282A - movs r0, 0x4 - bl FadeOutBGM - ldr r0, _080F2834 @ =gTasks - lsls r1, r4, 2 - adds r1, r4 - lsls r1, 3 - adds r1, r0 - ldr r0, _080F2838 @ =Task_Hof_HandlePaletteOnExit - str r0, [r1] -_080F282A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F2830: .4byte gMain -_080F2834: .4byte gTasks -_080F2838: .4byte Task_Hof_HandlePaletteOnExit - thumb_func_end Task_Hof_ExitOnKeyPressed - - thumb_func_start Task_Hof_HandlePaletteOnExit -Task_Hof_HandlePaletteOnExit: @ 80F283C - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080F287C @ =gPlttBufferFaded - ldr r1, _080F2880 @ =gPlttBufferUnfaded - movs r2, 0x80 - lsls r2, 2 - bl CpuSet - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r1, 0x8 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r1, _080F2884 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080F2888 @ =Task_Hof_HandleExit - str r1, [r0] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F287C: .4byte gPlttBufferFaded -_080F2880: .4byte gPlttBufferUnfaded -_080F2884: .4byte gTasks -_080F2888: .4byte Task_Hof_HandleExit - thumb_func_end Task_Hof_HandlePaletteOnExit - - thumb_func_start Task_Hof_HandleExit -Task_Hof_HandleExit: @ 80F288C - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _080F2924 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080F291E - lsls r7, r6, 2 - ldr r1, _080F2928 @ =gTasks - adds r0, r7, r6 - lsls r0, 3 - adds r1, 0x12 - adds r4, r0, r1 - movs r5, 0x5 -_080F28AC: - ldrb r0, [r4] - cmp r0, 0xFF - beq _080F28B6 - bl FreeAndDestroyMonPicSprite -_080F28B6: - adds r4, 0x2 - subs r5, 0x1 - cmp r5, 0 - bge _080F28AC - ldr r0, _080F2928 @ =gTasks - adds r1, r7, r6 - lsls r1, 3 - adds r1, r0 - ldrh r0, [r1, 0x10] - bl FreeAndDestroyTrainerPicSprite - movs r0, 0 - bl HideBg - movs r0, 0x1 - bl HideBg - movs r0, 0x3 - bl HideBg - bl FreeAllWindowBuffers - movs r0, 0x1 - bl UnsetBgTilemapBuffer - movs r0, 0x3 - bl UnsetBgTilemapBuffer - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - adds r0, r6, 0 - bl DestroyTask - ldr r4, _080F292C @ =gUnknown_203AB3C - ldr r0, [r4] - cmp r0, 0 - beq _080F290A - bl Free - movs r0, 0 - str r0, [r4] -_080F290A: - ldr r4, _080F2930 @ =gUnknown_203AB38 - ldr r0, [r4] - cmp r0, 0 - beq _080F291A - bl Free - movs r0, 0 - str r0, [r4] -_080F291A: - bl sub_80F2934 -_080F291E: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2924: .4byte gPaletteFade -_080F2928: .4byte gTasks -_080F292C: .4byte gUnknown_203AB3C -_080F2930: .4byte gUnknown_203AB38 - thumb_func_end Task_Hof_HandleExit - - thumb_func_start sub_80F2934 -sub_80F2934: @ 80F2934 - push {lr} - sub sp, 0x4 - ldr r0, _080F2970 @ =0x00004085 - movs r1, 0x1 - bl VarSet - movs r0, 0x80 - lsls r0, 7 - bl FlagSet - ldr r1, _080F2974 @ =gDisableMapMusicChangeOnMapLoad - movs r0, 0x2 - strb r0, [r1] - movs r2, 0x1 - negs r2, r2 - movs r0, 0x6 - str r0, [sp] - movs r0, 0x3 @ MAP_GROUP(INDIGO_PLATEAU_EXTERIOR) - movs r1, 0x9 @ MAP_NUM(INDIGO_PLATEAU_EXTERIOR) - movs r3, 0xB - bl SetWarpDestination - bl DoWarp - bl ResetInitialPlayerAvatarState - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_080F2970: .4byte 0x00004085 -_080F2974: .4byte gDisableMapMusicChangeOnMapLoad - thumb_func_end sub_80F2934 - - thumb_func_start sub_80F2978 -sub_80F2978: @ 80F2978 - push {r4,lr} - ldr r0, _080F2994 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x5 - bhi _080F29B4 - lsls r0, 2 - ldr r1, _080F2998 @ =_080F299C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F2994: .4byte gMain -_080F2998: .4byte _080F299C - .align 2, 0 -_080F299C: - .4byte _080F29B4 - .4byte _080F29E4 - .4byte _080F29EA - .4byte _080F2A08 - .4byte _080F2A28 - .4byte _080F2A58 -_080F29B4: - movs r0, 0 - bl SetVBlankCallback - bl ClearVramOamPltt_LoadHofPal - ldr r4, _080F29D8 @ =gUnknown_203AB3C - ldr r0, _080F29DC @ =0x00002008 - bl AllocZeroed - str r0, [r4] - ldr r0, _080F29E0 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _080F2A8C - .align 2, 0 -_080F29D8: .4byte gUnknown_203AB3C -_080F29DC: .4byte 0x00002008 -_080F29E0: .4byte gMain -_080F29E4: - bl sub_80F36BC - b _080F2A42 -_080F29EA: - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r0, 0x52 - movs r1, 0 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - bl sub_80F36F8 - b _080F2A42 -_080F2A08: - bl sub_80F3770 - lsls r0, 24 - cmp r0, 0 - bne _080F2A8C - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_80A0A48 - ldr r0, _080F2A24 @ =sub_80F1DAC - bl SetVBlankCallback - b _080F2A42 - .align 2, 0 -_080F2A24: .4byte sub_80F1DAC -_080F2A28: - bl RunTasks - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - bl sub_80A0A98 - lsls r0, 24 - cmp r0, 0 - bne _080F2A8C -_080F2A42: - ldr r1, _080F2A54 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080F2A8C - .align 2, 0 -_080F2A54: .4byte gMain -_080F2A58: - ldr r1, _080F2A94 @ =0x00003f42 - movs r0, 0x50 - bl SetGpuReg - movs r1, 0xE2 - lsls r1, 3 - movs r0, 0x52 - bl SetGpuReg - movs r0, 0x54 - movs r1, 0 - bl SetGpuReg - ldr r0, _080F2A98 @ =sub_80F2AA4 - movs r1, 0 - bl CreateTask - ldr r4, _080F2A9C @ =gUnknown_203AB38 - movs r0, 0x80 - lsls r0, 6 - bl AllocZeroed - str r0, [r4] - ldr r0, _080F2AA0 @ =sub_80F1DC0 - bl SetMainCallback2 -_080F2A8C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F2A94: .4byte 0x00003f42 -_080F2A98: .4byte sub_80F2AA4 -_080F2A9C: .4byte gUnknown_203AB38 -_080F2AA0: .4byte sub_80F1DC0 - thumb_func_end sub_80F2978 - - thumb_func_start sub_80F2AA4 -sub_80F2AA4: @ 80F2AA4 - push {r4-r6,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, _080F2AD8 @ =0x00000226 - str r0, [sp] - movs r0, 0 - movs r1, 0x1E - movs r2, 0 - movs r3, 0xC - bl CreateTopBarWindowLoadPalette - movs r0, 0x3 - bl Save_LoadGameData - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080F2AE4 - ldr r0, _080F2ADC @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldr r0, _080F2AE0 @ =sub_80F30A4 - b _080F2B5A - .align 2, 0 -_080F2AD8: .4byte 0x00000226 -_080F2ADC: .4byte gTasks -_080F2AE0: .4byte sub_80F30A4 -_080F2AE4: - ldr r0, _080F2B2C @ =gDecompressionBuffer - ldr r4, _080F2B30 @ =gUnknown_203AB38 - ldr r1, [r4] - movs r2, 0x80 - lsls r2, 5 - bl CpuSet - ldr r4, [r4] - movs r2, 0 - ldrh r1, [r4, 0x8] - ldr r3, _080F2B34 @ =0x000001ff - adds r0, r3, 0 - ands r0, r1 - lsls r5, r6, 2 - cmp r0, 0 - beq _080F2B1A -_080F2B04: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - adds r4, 0x78 - cmp r2, 0x31 - bhi _080F2B3C - ldrh r1, [r4, 0x8] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _080F2B04 -_080F2B1A: - cmp r2, 0x31 - bhi _080F2B3C - ldr r0, _080F2B38 @ =gTasks - adds r1, r5, r6 - lsls r1, 3 - adds r1, r0 - subs r0, r2, 0x1 - b _080F2B46 - .align 2, 0 -_080F2B2C: .4byte gDecompressionBuffer -_080F2B30: .4byte gUnknown_203AB38 -_080F2B34: .4byte 0x000001ff -_080F2B38: .4byte gTasks -_080F2B3C: - ldr r0, _080F2B64 @ =gTasks - adds r1, r5, r6 - lsls r1, 3 - adds r1, r0 - movs r0, 0x31 -_080F2B46: - strh r0, [r1, 0x8] - movs r0, 0xA - bl GetGameStat - ldr r2, _080F2B64 @ =gTasks - adds r1, r5, r6 - lsls r1, 3 - adds r1, r2 - strh r0, [r1, 0xA] - ldr r0, _080F2B68 @ =sub_80F2B6C -_080F2B5A: - str r0, [r1] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080F2B64: .4byte gTasks -_080F2B68: .4byte sub_80F2B6C - thumb_func_end sub_80F2AA4 - - thumb_func_start sub_80F2B6C -sub_80F2B6C: @ 80F2B6C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r0, _080F2C24 @ =gUnknown_203AB38 - ldr r3, [r0] - movs r5, 0 - ldr r1, _080F2C28 @ =gTasks - mov r2, r9 - lsls r0, r2, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - movs r4, 0x8 - ldrsh r0, [r0, r4] - adds r4, r1, 0 - ldr r2, _080F2C2C @ =gUnknown_203AB34 - cmp r5, r0 - bge _080F2BAA - adds r1, r0, 0 -_080F2B9E: - adds r3, 0x78 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, r1 - blt _080F2B9E -_080F2BAA: - adds r6, r3, 0 - movs r0, 0 - str r0, [r2] - mov r5, r9 - lsls r2, r5, 2 - adds r1, r2, r5 - lsls r1, 3 - adds r1, r4 - strh r0, [r1, 0xC] - strh r0, [r1, 0x10] - movs r5, 0 - str r2, [sp, 0x14] - ldr r4, _080F2C30 @ =0x000001ff - adds r2, r1, 0 -_080F2BC6: - ldrh r1, [r6, 0x8] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _080F2BD6 - ldrh r0, [r2, 0x10] - adds r0, 0x1 - strh r0, [r2, 0x10] -_080F2BD6: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - adds r6, 0x14 - cmp r5, 0x5 - bls _080F2BC6 - adds r6, r3, 0 - movs r5, 0 - ldr r1, _080F2C28 @ =gTasks - ldr r0, [sp, 0x14] - add r0, r9 - lsls r0, 3 - mov r8, r0 - adds r0, r1 - str r0, [sp, 0x10] - adds r1, 0x8 - mov r10, r1 -_080F2BF8: - ldrh r1, [r6, 0x8] - ldr r2, _080F2C30 @ =0x000001ff - adds r0, r2, 0 - ands r0, r1 - adds r7, r1, 0 - cmp r0, 0 - beq _080F2CA8 - ldr r4, [sp, 0x10] - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r0, 0x3 - ble _080F2C3C - lsls r1, r5, 3 - ldr r0, _080F2C34 @ =gUnknown_840C268 - adds r0, 0x4 - adds r0, r1, r0 - ldrh r3, [r0] - ldr r2, _080F2C38 @ =gUnknown_840C268 + 6 - adds r1, r2 - ldrh r4, [r1] - b _080F2C4C - .align 2, 0 -_080F2C24: .4byte gUnknown_203AB38 -_080F2C28: .4byte gTasks -_080F2C2C: .4byte gUnknown_203AB34 -_080F2C30: .4byte 0x000001ff -_080F2C34: .4byte gUnknown_840C268 -_080F2C38: .4byte gUnknown_840C268 + 6 -_080F2C3C: - ldr r0, _080F2C9C @ =gUnknown_840C298 - lsls r2, r5, 3 - adds r1, r0, 0x4 - adds r1, r2, r1 - ldrh r3, [r1] - adds r0, 0x6 - adds r2, r0 - ldrh r4, [r2] -_080F2C4C: - lsls r0, r7, 23 - lsrs r0, 23 - ldr r1, [r6] - ldr r2, [r6, 0x4] - lsls r3, 16 - asrs r3, 16 - str r3, [sp] - lsls r3, r4, 16 - asrs r3, 16 - str r3, [sp, 0x4] - lsls r3, r5, 24 - lsrs r3, 24 - str r3, [sp, 0x8] - ldr r3, _080F2CA0 @ =0x0000ffff - str r3, [sp, 0xC] - movs r3, 0x1 - bl CreateMonPicSprite_HandleDeoxys - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080F2CA4 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r3, [r1, 0x5] - movs r4, 0xD - negs r4, r4 - adds r2, r4, 0 - ands r3, r2 - movs r2, 0x4 - orrs r3, r2 - strb r3, [r1, 0x5] - adds r1, r5, 0x5 - lsls r1, 1 - add r1, r8 - add r1, r10 - strh r0, [r1] - b _080F2CB4 - .align 2, 0 -_080F2C9C: .4byte gUnknown_840C298 -_080F2CA0: .4byte 0x0000ffff -_080F2CA4: .4byte gSprites -_080F2CA8: - adds r0, r5, 0x5 - lsls r0, 1 - add r0, r8 - add r0, r10 - movs r1, 0xFF - strh r1, [r0] -_080F2CB4: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - adds r6, 0x14 - cmp r5, 0x5 - bls _080F2BF8 - ldr r0, _080F2D08 @ =0xffff0000 - ldr r2, _080F2D0C @ =0x00007716 - movs r1, 0xC - bl BlendPalettes - ldr r0, _080F2D10 @ =gStringVar1 - ldr r1, _080F2D14 @ =gTasks - ldr r4, [sp, 0x14] - add r4, r9 - lsls r4, 3 - adds r4, r1 - movs r5, 0xA - ldrsh r1, [r4, r5] - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - ldr r5, _080F2D18 @ =gStringVar4 - ldr r1, _080F2D1C @ =gUnknown_84160B4 - adds r0, r5, 0 - bl StringExpandPlaceholders - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bgt _080F2D24 - ldr r1, _080F2D20 @ =gText_UPDOWNPick_ABUTTONBBUTTONCancel - movs r0, 0x1 - str r0, [sp] - adds r0, r5, 0 - movs r2, 0 - movs r3, 0 - bl TopBarWindowPrintTwoStrings - b _080F2D34 - .align 2, 0 -_080F2D08: .4byte 0xffff0000 -_080F2D0C: .4byte 0x00007716 -_080F2D10: .4byte gStringVar1 -_080F2D14: .4byte gTasks -_080F2D18: .4byte gStringVar4 -_080F2D1C: .4byte gUnknown_84160B4 -_080F2D20: .4byte gText_UPDOWNPick_ABUTTONBBUTTONCancel -_080F2D24: - ldr r1, _080F2D54 @ =gText_UPDOWNPick_ABUTTONNext_BBUTTONBack - movs r0, 0x1 - str r0, [sp] - adds r0, r5, 0 - movs r2, 0 - movs r3, 0 - bl TopBarWindowPrintTwoStrings -_080F2D34: - ldr r0, _080F2D58 @ =gTasks - ldr r1, [sp, 0x14] - add r1, r9 - lsls r1, 3 - adds r1, r0 - ldr r0, _080F2D5C @ =Task_HofPC_PrintMonInfo - str r0, [r1] - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2D54: .4byte gText_UPDOWNPick_ABUTTONNext_BBUTTONBack -_080F2D58: .4byte gTasks -_080F2D5C: .4byte Task_HofPC_PrintMonInfo - thumb_func_end sub_80F2B6C - - thumb_func_start Task_HofPC_PrintMonInfo -Task_HofPC_PrintMonInfo: @ 80F2D60 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _080F2E68 @ =gUnknown_203AB38 - ldr r5, [r0] - movs r3, 0 - ldr r1, _080F2E6C @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - cmp r3, r0 - bge _080F2D94 - adds r1, r0, 0 -_080F2D88: - adds r5, 0x78 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r1 - blt _080F2D88 -_080F2D94: - movs r3, 0 - lsls r7, r4, 2 - adds r0, r7, r4 - lsls r6, r0, 3 - ldr r0, _080F2E70 @ =gTasks+0x8 - mov r10, r0 - ldr r1, _080F2E74 @ =gSprites - mov r8, r1 - movs r2, 0xD - negs r2, r2 - mov r9, r2 - movs r0, 0x4 - mov r12, r0 -_080F2DAE: - adds r0, r3, 0x5 - lsls r0, 1 - adds r0, r6 - add r0, r10 - ldrh r1, [r0] - cmp r1, 0xFF - beq _080F2DD0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r2, [r0, 0x5] - mov r1, r9 - ands r1, r2 - mov r2, r12 - orrs r1, r2 - strb r1, [r0, 0x5] -_080F2DD0: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x5 - bls _080F2DAE - adds r1, r7, r4 - lsls r1, 3 - ldr r0, _080F2E6C @ =gTasks - adds r6, r1, r0 - movs r2, 0xC - ldrsh r0, [r6, r2] - adds r0, 0x5 - lsls r0, 1 - adds r0, r1 - ldr r1, _080F2E6C @ =gTasks - adds r1, 0x8 - adds r0, r1 - ldrh r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080F2E74 @ =gSprites - adds r0, r1 - ldrb r2, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - strb r1, [r0, 0x5] - lsrs r1, 4 - movs r0, 0x80 - lsls r0, 9 - lsls r0, r1 - ldr r1, _080F2E78 @ =0xffff0000 - eors r0, r1 - ldr r2, _080F2E7C @ =gUnknown_203AB34 - str r0, [r2] - ldr r2, _080F2E80 @ =0x00007716 - movs r1, 0xC - bl BlendPalettesUnfaded - movs r0, 0xC - ldrsh r1, [r6, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 2 - adds r4, r5, r0 - ldrh r1, [r4, 0x8] - ldr r0, _080F2E84 @ =0x000001ff - ands r0, r1 - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - beq _080F2E4A - bl StopCryAndClearCrySongs - ldrh r0, [r4, 0x8] - lsls r0, 23 - lsrs r0, 23 - movs r1, 0 - bl PlayCry1 -_080F2E4A: - adds r0, r4, 0 - movs r1, 0 - movs r2, 0xE - bl sub_80F3194 - ldr r0, _080F2E88 @ =Task_HofPC_HandleInput - str r0, [r6] - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2E68: .4byte gUnknown_203AB38 -_080F2E6C: .4byte gTasks -_080F2E70: .4byte gTasks+0x8 -_080F2E74: .4byte gSprites -_080F2E78: .4byte 0xffff0000 -_080F2E7C: .4byte gUnknown_203AB34 -_080F2E80: .4byte 0x00007716 -_080F2E84: .4byte 0x000001ff -_080F2E88: .4byte Task_HofPC_HandleInput - thumb_func_end Task_HofPC_PrintMonInfo - - thumb_func_start Task_HofPC_HandleInput -Task_HofPC_HandleInput: @ 80F2E8C - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _080F2F00 @ =gMain - ldrh r2, [r1, 0x2E] - movs r0, 0x1 - ands r0, r2 - adds r3, r1, 0 - cmp r0, 0 - beq _080F2F38 - ldr r7, _080F2F04 @ =gTasks - lsls r0, r5, 2 - adds r1, r0, r5 - lsls r3, r1, 3 - adds r4, r3, r7 - ldrh r2, [r4, 0x8] - movs r6, 0x8 - ldrsh r1, [r4, r6] - mov r8, r0 - cmp r1, 0 - beq _080F2F0C - subs r0, r2, 0x1 - strh r0, [r4, 0x8] - movs r4, 0 - adds r6, r3, 0 - adds r7, 0x8 -_080F2EC4: - adds r0, r4, 0x5 - lsls r0, 1 - adds r0, r6 - adds r0, r7 - ldrb r0, [r0] - cmp r0, 0xFF - beq _080F2ED6 - bl FreeAndDestroyMonPicSprite -_080F2ED6: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x5 - bls _080F2EC4 - ldr r0, _080F2F04 @ =gTasks - mov r2, r8 - adds r1, r2, r5 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xA] - movs r3, 0xA - ldrsh r0, [r1, r3] - cmp r0, 0 - beq _080F2EF8 - subs r0, r2, 0x1 - strh r0, [r1, 0xA] -_080F2EF8: - ldr r0, _080F2F08 @ =sub_80F2B6C - str r0, [r1] - b _080F2FD8 - .align 2, 0 -_080F2F00: .4byte gMain -_080F2F04: .4byte gTasks -_080F2F08: .4byte sub_80F2B6C -_080F2F0C: - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - beq _080F2F26 - bl StopCryAndClearCrySongs - ldr r0, _080F2F2C @ =gMPlayInfo_BGM - ldr r1, _080F2F30 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl -_080F2F26: - ldr r0, _080F2F34 @ =sub_80F2FEC - str r0, [r4] - b _080F2FD8 - .align 2, 0 -_080F2F2C: .4byte gMPlayInfo_BGM -_080F2F30: .4byte 0x0000ffff -_080F2F34: .4byte sub_80F2FEC -_080F2F38: - movs r0, 0x2 - ands r0, r2 - cmp r0, 0 - beq _080F2F7C - bl IsCryPlayingOrClearCrySongs - lsls r0, 24 - cmp r0, 0 - beq _080F2F5A - bl StopCryAndClearCrySongs - ldr r0, _080F2F6C @ =gMPlayInfo_BGM - ldr r1, _080F2F70 @ =0x0000ffff - movs r2, 0x80 - lsls r2, 1 - bl m4aMPlayVolumeControl -_080F2F5A: - ldr r0, _080F2F74 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldr r0, _080F2F78 @ =sub_80F2FEC - str r0, [r1] - b _080F2FD8 - .align 2, 0 -_080F2F6C: .4byte gMPlayInfo_BGM -_080F2F70: .4byte 0x0000ffff -_080F2F74: .4byte gTasks -_080F2F78: .4byte sub_80F2FEC -_080F2F7C: - movs r0, 0x40 - ands r0, r2 - cmp r0, 0 - beq _080F2FAC - ldr r0, _080F2FA4 @ =gTasks - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 3 - adds r1, r0 - ldrh r2, [r1, 0xC] - movs r4, 0xC - ldrsh r0, [r1, r4] - cmp r0, 0 - beq _080F2FAC - subs r0, r2, 0x1 - strh r0, [r1, 0xC] - ldr r0, _080F2FA8 @ =Task_HofPC_PrintMonInfo - str r0, [r1] - b _080F2FD8 - .align 2, 0 -_080F2FA4: .4byte gTasks -_080F2FA8: .4byte Task_HofPC_PrintMonInfo -_080F2FAC: - ldrh r1, [r3, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080F2FD8 - ldr r1, _080F2FE4 @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r2, r0, r1 - movs r6, 0xC - ldrsh r1, [r2, r6] - movs r3, 0x10 - ldrsh r0, [r2, r3] - subs r0, 0x1 - cmp r1, r0 - bge _080F2FD8 - ldrh r0, [r2, 0xC] - adds r0, 0x1 - strh r0, [r2, 0xC] - ldr r0, _080F2FE8 @ =Task_HofPC_PrintMonInfo - str r0, [r2] -_080F2FD8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F2FE4: .4byte gTasks -_080F2FE8: .4byte Task_HofPC_PrintMonInfo - thumb_func_end Task_HofPC_HandleInput - - thumb_func_start sub_80F2FEC -sub_80F2FEC: @ 80F2FEC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080F3020 @ =gPlttBufferFaded - ldr r1, _080F3024 @ =gPlttBufferUnfaded - movs r2, 0x80 - lsls r2, 2 - bl CpuSet - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl sub_80A0A70 - ldr r1, _080F3028 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080F302C @ =sub_80F3030 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F3020: .4byte gPlttBufferFaded -_080F3024: .4byte gPlttBufferUnfaded -_080F3028: .4byte gTasks -_080F302C: .4byte sub_80F3030 - thumb_func_end sub_80F2FEC - - thumb_func_start sub_80F3030 -sub_80F3030: @ 80F3030 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - bl sub_80A0AAC - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _080F3094 - movs r0, 0 - bl HideBg - movs r0, 0x1 - bl HideBg - movs r0, 0x3 - bl HideBg - bl DestroyTopBarWindow - bl FreeAllWindowBuffers - movs r0, 0x1 - bl UnsetBgTilemapBuffer - movs r0, 0x3 - bl UnsetBgTilemapBuffer - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - adds r0, r5, 0 - bl DestroyTask - ldr r5, _080F309C @ =gUnknown_203AB3C - ldr r0, [r5] - cmp r0, 0 - beq _080F3082 - bl Free - str r4, [r5] -_080F3082: - ldr r5, _080F30A0 @ =gUnknown_203AB38 - ldr r0, [r5] - cmp r0, 0 - beq _080F3090 - bl Free - str r4, [r5] -_080F3090: - bl ReturnFromHallOfFamePC -_080F3094: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F309C: .4byte gUnknown_203AB3C -_080F30A0: .4byte gUnknown_203AB38 - thumb_func_end sub_80F3030 - - thumb_func_start sub_80F30A4 -sub_80F30A4: @ 80F30A4 - push {r4,lr} - sub sp, 0x10 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _080F30FC @ =gText_ABUTTONExit - movs r1, 0x8 - movs r2, 0x1 - bl TopBarWindowPrintString - movs r0, 0 - movs r1, 0 - bl DrawDialogueFrame - ldr r2, _080F3100 @ =gUnknown_8416090 - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - movs r0, 0 - movs r1, 0x2 - movs r3, 0 - bl AddTextPrinterParameterized2 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r1, _080F3104 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080F3108 @ =Task_HofPC_ExitOnButtonPress - str r1, [r0] - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F30FC: .4byte gText_ABUTTONExit -_080F3100: .4byte gUnknown_8416090 -_080F3104: .4byte gTasks -_080F3108: .4byte Task_HofPC_ExitOnButtonPress - thumb_func_end sub_80F30A4 - - thumb_func_start Task_HofPC_ExitOnButtonPress -Task_HofPC_ExitOnButtonPress: @ 80F310C - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _080F3130 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080F312C - ldr r0, _080F3134 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080F3138 @ =sub_80F2FEC - str r0, [r1] -_080F312C: - pop {r0} - bx r0 - .align 2, 0 -_080F3130: .4byte gMain -_080F3134: .4byte gTasks -_080F3138: .4byte sub_80F2FEC - thumb_func_end Task_HofPC_ExitOnButtonPress - - thumb_func_start HallOfFame_PrintWelcomeText -HallOfFame_PrintWelcomeText: @ 80F313C - push {r4,r5,lr} - sub sp, 0xC - ldr r5, _080F318C @ =gUnknown_8416008 - movs r0, 0x2 - adds r1, r5, 0 - movs r2, 0 - bl GetStringWidth - movs r4, 0xD0 - subs r4, r0 - lsrs r0, r4, 31 - adds r4, r0 - asrs r4, 1 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - ldr r0, _080F3190 @ =gUnknown_840C23C - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - movs r1, 0x2 - adds r2, r4, 0 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F318C: .4byte gUnknown_8416008 -_080F3190: .4byte gUnknown_840C23C - thumb_func_end HallOfFame_PrintWelcomeText - - thumb_func_start sub_80F3194 -sub_80F3194: @ 80F3194 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x34 - adds r7, r0, 0 - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - ldrh r0, [r7, 0x8] - ldr r1, _080F3214 @ =0x000001ff - ands r1, r0 - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _080F3252 - add r4, sp, 0x1C - ldr r1, _080F3218 @ =gUnknown_84160EC - adds r0, r4, 0 - bl StringCopy - ldrh r0, [r7, 0x8] - lsls r0, 23 - lsrs r0, 23 - bl sub_8043F90 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, _080F321C @ =0x0000ffff - mov r8, r4 - cmp r6, r0 - beq _080F3220 - add r4, sp, 0xC - adds r0, r6, 0 - movs r1, 0x64 - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r4] - add r5, sp, 0xC - adds r0, r6, 0 - movs r1, 0x64 - bl __umodsi3 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - adds r0, r4, 0 - movs r1, 0xA - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r5, 0x1] - add r5, sp, 0xC - adds r0, r4, 0 - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r5, 0x2] - b _080F322E - .align 2, 0 -_080F3214: .4byte 0x000001ff -_080F3218: .4byte gUnknown_84160EC -_080F321C: .4byte 0x0000ffff -_080F3220: - add r3, sp, 0xC - adds r2, r3, 0 - adds r1, r2, 0 - movs r0, 0xAC - strb r0, [r1, 0x2] - strb r0, [r2, 0x1] - strb r0, [r3] -_080F322E: - add r1, sp, 0xC - movs r0, 0xFF - strb r0, [r1, 0x3] - mov r0, r8 - bl StringAppend - ldr r0, _080F32B8 @ =gUnknown_840C23C - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - mov r0, r8 - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x10 - movs r3, 0x1 - bl AddTextPrinterParameterized3 -_080F3252: - movs r2, 0 - ldrb r0, [r7, 0xA] - cmp r0, 0xFF - beq _080F327C - adds r3, r7, 0 - adds r3, 0xA -_080F325E: - mov r1, sp - adds r1, r2 - adds r1, 0xC - adds r0, r3, r2 - ldrb r0, [r0] - strb r0, [r1] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x9 - bhi _080F327C - adds r0, r3, r2 - ldrb r0, [r0] - cmp r0, 0xFF - bne _080F325E -_080F327C: - mov r1, sp - adds r1, r2 - adds r1, 0xC - movs r0, 0xFF - strb r0, [r1] - movs r0, 0x2 - movs r1, 0x2 - bl GetFontAttribute - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0x2 - add r1, sp, 0xC - bl GetStringWidth - adds r2, r0, 0 - ldrh r1, [r7, 0x8] - ldr r0, _080F32BC @ =0x000001ff - ands r0, r1 - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _080F32C0 - lsrs r0, r2, 31 - adds r0, r2, r0 - asrs r0, 1 - movs r1, 0x80 - subs r0, r1, r0 - b _080F32C4 - .align 2, 0 -_080F32B8: .4byte gUnknown_840C23C -_080F32BC: .4byte 0x000001ff -_080F32C0: - movs r0, 0x80 - subs r0, r2 -_080F32C4: - lsls r2, r0, 24 - lsrs r2, 24 - ldr r0, _080F331C @ =gUnknown_840C23C - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - ldrh r2, [r7, 0x8] - ldr r4, _080F3320 @ =0x000001ff - adds r0, r4, 0 - ands r0, r2 - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - beq _080F33BA - add r1, sp, 0xC - movs r0, 0xBA - strb r0, [r1] - mov r0, sp - adds r0, 0xD - lsls r1, r2, 23 - lsrs r1, 23 - movs r2, 0xB - muls r1, r2 - ldr r2, _080F3324 @ =gSpeciesNames - adds r1, r2 - bl StringCopy - adds r6, r0, 0 - ldrh r1, [r7, 0x8] - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0x20 - beq _080F3318 - cmp r0, 0x1D - bne _080F3328 -_080F3318: - movs r0, 0xFF - b _080F333A - .align 2, 0 -_080F331C: .4byte gUnknown_840C23C -_080F3320: .4byte 0x000001ff -_080F3324: .4byte gSpeciesNames -_080F3328: - lsls r0, r1, 23 - lsrs r0, 23 - ldr r1, [r7, 0x4] - bl GetGenderFromSpeciesAndPersonality - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _080F3342 -_080F333A: - cmp r0, 0xFE - beq _080F3346 - movs r0, 0 - b _080F3348 -_080F3342: - movs r0, 0xB5 - b _080F3348 -_080F3346: - movs r0, 0xB6 -_080F3348: - strb r0, [r6] - adds r6, 0x1 - movs r0, 0xFF - strb r0, [r6] - ldr r5, _080F33D0 @ =gUnknown_840C23C - str r5, [sp] - movs r4, 0 - str r4, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x80 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - ldr r1, _080F33D4 @ =gUnknown_84160F4 - add r0, sp, 0xC - bl StringCopy - adds r6, r0, 0 - ldrb r1, [r7, 0x9] - lsrs r1, 1 - movs r2, 0 - movs r3, 0x3 - bl ConvertIntToDecimalStringN - str r5, [sp] - str r4, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x20 - movs r3, 0x11 - bl AddTextPrinterParameterized3 - ldr r1, _080F33D8 @ =gUnknown_8416104 - add r0, sp, 0xC - bl StringCopy - adds r6, r0, 0 - ldrh r1, [r7] - movs r2, 0x2 - movs r3, 0x5 - bl ConvertIntToDecimalStringN - str r5, [sp] - str r4, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x60 - movs r3, 0x11 - bl AddTextPrinterParameterized3 -_080F33BA: - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x34 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F33D0: .4byte gUnknown_840C23C -_080F33D4: .4byte gUnknown_84160F4 -_080F33D8: .4byte gUnknown_8416104 - thumb_func_end sub_80F3194 - - thumb_func_start sub_80F33DC -sub_80F33DC: @ 80F33DC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - ldr r0, _080F35EC @ =gUnknown_840C234 - ldrb r6, [r0, 0x3] - lsls r6, 3 - subs r0, r6, 0x6 - str r0, [sp, 0x28] - movs r0, 0x1 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x1 - bl PutWindowTilemap - ldr r2, _080F35F0 @ =0x0000021d - movs r0, 0x1 - movs r1, 0 - movs r3, 0xD - bl DrawStdFrameWithCustomTileAndPalette - movs r7, 0 - str r7, [sp] - str r7, [sp, 0x4] - ldr r1, _080F35F4 @ =gUnknown_840C240 - mov r9, r1 - str r1, [sp, 0x8] - str r7, [sp, 0xC] - ldr r0, _080F35F8 @ =gUnknown_84160FC - str r0, [sp, 0x10] - movs r0, 0x1 - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0x3 - bl AddTextPrinterParameterized4 - ldr r0, _080F35FC @ =gSaveBlock2Ptr - mov r10, r0 - ldr r1, [r0] - movs r0, 0x2 - movs r2, 0 - bl GetStringWidth - adds r2, r0, 0 - ldr r1, [sp, 0x28] - subs r2, r1, r2 - lsls r2, 24 - lsrs r2, 24 - mov r0, r9 - str r0, [sp] - str r7, [sp, 0x4] - mov r1, r10 - ldr r0, [r1] - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r3, 0x3 - bl AddTextPrinterParameterized3 - mov r1, r10 - ldr r0, [r1] - ldrb r4, [r0, 0xA] - ldrb r0, [r0, 0xB] - lsls r0, 8 - orrs r4, r0 - mov r0, r9 - str r0, [sp] - str r7, [sp, 0x4] - ldr r0, _080F3600 @ =gUnknown_8416104 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0x12 - bl AddTextPrinterParameterized3 - add r1, sp, 0x14 - mov r8, r1 - ldr r1, _080F3604 @ =0x000186a0 - adds r0, r4, 0 - bl __modsi3 - ldr r5, _080F3608 @ =0x00002710 - adds r1, r5, 0 - bl __divsi3 - subs r0, 0x5F - mov r1, r8 - strb r0, [r1] - add r0, sp, 0x14 - mov r8, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - movs r5, 0xFA - lsls r5, 2 - adds r1, r5, 0 - bl __udivsi3 - adds r0, 0xA1 - mov r1, r8 - strb r0, [r1, 0x1] - add r0, sp, 0x14 - mov r8, r0 - adds r0, r4, 0 - adds r1, r5, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __udivsi3 - adds r0, 0xA1 - mov r1, r8 - strb r0, [r1, 0x2] - add r5, sp, 0x14 - adds r0, r4, 0 - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r5, 0x3] - add r5, sp, 0x14 - adds r0, r4, 0 - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r5, 0x4] - add r1, sp, 0x14 - movs r0, 0xFF - strb r0, [r1, 0x5] - subs r6, 0x24 - lsls r6, 24 - lsrs r6, 24 - mov r0, r9 - str r0, [sp] - str r7, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - adds r2, r6, 0 - movs r3, 0x12 - bl AddTextPrinterParameterized3 - mov r1, r9 - str r1, [sp] - str r7, [sp, 0x4] - ldr r0, _080F360C @ =gUnknown_8415CE8 - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r2, 0x4 - movs r3, 0x20 - bl AddTextPrinterParameterized3 - add r5, sp, 0x14 - mov r0, r10 - ldr r4, [r0] - ldrh r0, [r4, 0xE] - movs r1, 0x64 - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r5] - add r5, sp, 0x14 - ldrh r0, [r4, 0xE] - movs r1, 0x64 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xA - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r5, 0x1] - add r5, sp, 0x14 - ldrh r0, [r4, 0xE] - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r5, 0x2] - add r0, sp, 0x14 - ldrb r0, [r0] - cmp r0, 0xA1 - bne _080F3570 - add r0, sp, 0x14 - strb r7, [r0] -_080F3570: - add r0, sp, 0x14 - ldrb r1, [r0] - cmp r1, 0 - bne _080F3582 - ldrb r0, [r0, 0x1] - cmp r0, 0xA1 - bne _080F3582 - add r0, sp, 0x14 - strb r1, [r0, 0x1] -_080F3582: - add r1, sp, 0x14 - movs r6, 0 - movs r0, 0xF0 - strb r0, [r1, 0x3] - adds r4, r1, 0 - ldr r0, _080F35FC @ =gSaveBlock2Ptr - ldr r5, [r0] - ldrb r0, [r5, 0x10] - movs r1, 0x64 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xA - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r4, 0x4] - add r4, sp, 0x14 - ldrb r0, [r5, 0x10] - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r4, 0x5] - add r1, sp, 0x14 - movs r0, 0xFF - strb r0, [r1, 0x6] - ldr r2, [sp, 0x28] - subs r2, 0x24 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _080F35F4 @ =gUnknown_840C240 - str r0, [sp] - str r6, [sp, 0x4] - str r1, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r3, 0x20 - bl AddTextPrinterParameterized3 - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F35EC: .4byte gUnknown_840C234 -_080F35F0: .4byte 0x0000021d -_080F35F4: .4byte gUnknown_840C240 -_080F35F8: .4byte gUnknown_84160FC -_080F35FC: .4byte gSaveBlock2Ptr -_080F3600: .4byte gUnknown_8416104 -_080F3604: .4byte 0x000186a0 -_080F3608: .4byte 0x00002710 -_080F360C: .4byte gUnknown_8415CE8 - thumb_func_end sub_80F33DC - - thumb_func_start ClearVramOamPltt_LoadHofPal -ClearVramOamPltt_LoadHofPal: @ 80F3610 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r3, 0xC0 - lsls r3, 19 - movs r4, 0xC0 - lsls r4, 9 - add r0, sp, 0x4 - mov r8, r0 - mov r2, sp - movs r6, 0 - ldr r1, _080F36B0 @ =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, _080F36B4 @ =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_080F3636: - strh r6, [r2] - mov r0, sp - 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 _080F3636 - strh r6, [r2] - mov r2, sp - 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, 0x4] - ldr r2, _080F36B0 @ =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 - mov r0, sp - 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] - bl ResetPaletteFade - ldr r0, _080F36B8 @ =gUnknown_840C39C - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080F36B0: .4byte 0x040000d4 -_080F36B4: .4byte 0x81000800 -_080F36B8: .4byte gUnknown_840C39C - thumb_func_end ClearVramOamPltt_LoadHofPal - - thumb_func_start sub_80F36BC -sub_80F36BC: @ 80F36BC - push {lr} - bl ScanlineEffect_Stop - bl ResetTasks - bl ResetSpriteData - bl ResetTempTileDataBuffers - bl ResetAllPicSprites - bl FreeAllSpritePalettes - ldr r1, _080F36EC @ =gReservedSpritePaletteCount - movs r0, 0x8 - strb r0, [r1] - ldr r0, _080F36F0 @ =gUnknown_840C248 - bl LoadCompressedSpriteSheet - ldr r0, _080F36F4 @ =gUnknown_840C258 - bl LoadCompressedSpritePalette - pop {r0} - bx r0 - .align 2, 0 -_080F36EC: .4byte gReservedSpritePaletteCount -_080F36F0: .4byte gUnknown_840C248 -_080F36F4: .4byte gUnknown_840C258 - thumb_func_end sub_80F36BC - - thumb_func_start sub_80F36F8 -sub_80F36F8: @ 80F36F8 - push {r4,lr} - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _080F3764 @ =gUnknown_840C228 - movs r0, 0 - movs r2, 0x3 - bl InitBgsFromTemplates - ldr r4, _080F3768 @ =gUnknown_203AB3C - ldr r1, [r4] - adds r1, 0x6 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _080F376C @ =0x00001006 - adds r1, r0 - movs r0, 0x3 - bl SetBgTilemapBuffer - 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, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F3764: .4byte gUnknown_840C228 -_080F3768: .4byte gUnknown_203AB3C -_080F376C: .4byte 0x00001006 - thumb_func_end sub_80F36F8 - - thumb_func_start sub_80F3770 -sub_80F3770: @ 80F3770 - push {r4,lr} - sub sp, 0x8 - ldr r0, _080F3788 @ =gUnknown_203AB3C - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x4 - bhi _080F3854 - lsls r0, 2 - ldr r1, _080F378C @ =_080F3790 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080F3788: .4byte gUnknown_203AB3C -_080F378C: .4byte _080F3790 - .align 2, 0 -_080F3790: - .4byte _080F37A4 - .4byte _080F37BC - .4byte _080F37C8 - .4byte _080F381E - .4byte _080F3828 -_080F37A4: - ldr r1, _080F37B8 @ =gUnknown_840C3BC - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - b _080F3854 - .align 2, 0 -_080F37B8: .4byte gUnknown_840C3BC -_080F37BC: - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - cmp r0, 0 - beq _080F3854 - b _080F385E -_080F37C8: - movs r4, 0x20 - str r4, [sp] - movs r0, 0x2 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - str r4, [sp] - movs r0, 0xB - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - movs r3, 0x3 - bl FillBgTilemapBufferRect_Palette0 - str r4, [sp] - movs r0, 0x6 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - movs r3, 0xE - bl FillBgTilemapBufferRect_Palette0 - str r4, [sp] - str r4, [sp, 0x4] - movs r0, 0x3 - movs r1, 0x2 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - movs r0, 0x3 - bl CopyBgTilemapBufferToVram - b _080F3854 -_080F381E: - bl InitStandardTextBoxWindows - bl ResetBg0 - b _080F3854 -_080F3828: - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuReg - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x3 - bl ShowBg - ldr r0, _080F3850 @ =gUnknown_203AB3C - ldr r1, [r0] - movs r0, 0 - strh r0, [r1] - b _080F3860 - .align 2, 0 -_080F3850: .4byte gUnknown_203AB3C -_080F3854: - ldr r0, _080F3868 @ =gUnknown_203AB3C - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_080F385E: - movs r0, 0x1 -_080F3860: - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080F3868: .4byte gUnknown_203AB3C - thumb_func_end sub_80F3770 - - thumb_func_start nullsub_84 -nullsub_84: @ 80F386C - bx lr - thumb_func_end nullsub_84 - - thumb_func_start sub_80F3870 -sub_80F3870: @ 80F3870 - push {r4,lr} - adds r2, r0, 0 - ldr r1, [r2, 0x20] - ldr r0, [r2, 0x30] - cmp r1, r0 - beq _080F38C6 - ldrh r3, [r2, 0x20] - movs r1, 0x20 - ldrsh r0, [r2, r1] - movs r4, 0x30 - ldrsh r1, [r2, r4] - cmp r0, r1 - bge _080F3890 - adds r0, r3, 0 - adds r0, 0xF - strh r0, [r2, 0x20] -_080F3890: - ldrh r3, [r2, 0x20] - movs r4, 0x20 - ldrsh r0, [r2, r4] - cmp r0, r1 - ble _080F38A0 - adds r0, r3, 0 - subs r0, 0xF - strh r0, [r2, 0x20] -_080F38A0: - ldrh r3, [r2, 0x22] - movs r1, 0x22 - ldrsh r0, [r2, r1] - movs r4, 0x32 - ldrsh r1, [r2, r4] - cmp r0, r1 - bge _080F38B4 - adds r0, r3, 0 - adds r0, 0xA - strh r0, [r2, 0x22] -_080F38B4: - ldrh r3, [r2, 0x22] - movs r4, 0x22 - ldrsh r0, [r2, r4] - cmp r0, r1 - ble _080F38CE - adds r0, r3, 0 - subs r0, 0xA - strh r0, [r2, 0x22] - b _080F38CE -_080F38C6: - movs r0, 0x1 - strh r0, [r2, 0x2E] - ldr r0, _080F38D4 @ =nullsub_84 - str r0, [r2, 0x1C] -_080F38CE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080F38D4: .4byte nullsub_84 - thumb_func_end sub_80F3870 - - thumb_func_start sub_80F38D8 -sub_80F38D8: @ 80F38D8 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0x26] - movs r2, 0x26 - ldrsh r0, [r5, r2] - cmp r0, 0x78 - ble _080F38EE - adds r0, r5, 0 - bl DestroySprite - b _080F3926 -_080F38EE: - adds r0, r1, 0x1 - ldrh r1, [r5, 0x30] - adds r0, r1 - strh r0, [r5, 0x26] - ldrh r4, [r5, 0x2E] - lsls r4, 24 - lsrs r4, 24 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - ands r0, r1 - adds r0, 0x8 - ldr r1, _080F392C @ =gSineTable - lsls r4, 1 - adds r4, r1 - movs r2, 0 - ldrsh r1, [r4, r2] - muls r0, r1 - cmp r0, 0 - bge _080F391C - adds r0, 0xFF -_080F391C: - asrs r0, 8 - strh r0, [r5, 0x24] - ldrh r0, [r5, 0x2E] - adds r0, 0x4 - strh r0, [r5, 0x2E] -_080F3926: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080F392C: .4byte gSineTable - thumb_func_end sub_80F38D8 - - thumb_func_start sub_80F3930 -sub_80F3930: @ 80F3930 - push {r4,lr} - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF0 - bl __umodsi3 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl Random - adds r2, r0, 0 - lsls r2, 16 - lsrs r2, 16 - movs r0, 0x7 - ands r2, r0 - negs r2, r2 - ldr r0, _080F39A0 @ =gUnknown_840C384 - lsls r4, 16 - asrs r4, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r4, 0 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080F39A4 @ =gSprites - adds r4, r1, r0 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x11 - bl __umodsi3 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - bl Random - movs r1, 0x3 - ands r1, r0 - cmp r1, 0 - beq _080F39A8 - movs r0, 0 - b _080F39AA - .align 2, 0 -_080F39A0: .4byte gUnknown_840C384 -_080F39A4: .4byte gSprites -_080F39A8: - movs r0, 0x1 -_080F39AA: - strh r0, [r4, 0x30] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80F3930 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index 66bcec37c..0752b5797 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -3339,7 +3339,7 @@ sub_81360D4: @ 81360D4 bl GetMonData lsls r0, 16 lsrs r0, 16 - bl sub_8043F90 + bl SpeciesToPokedexNum lsls r0, 16 lsrs r4, r0, 16 ldr r0, _08136110 @ =0x0000ffff diff --git a/asm/post_battle_event_funcs.s b/asm/post_battle_event_funcs.s index be7554fd0..009bb7233 100644 --- a/asm/post_battle_event_funcs.s +++ b/asm/post_battle_event_funcs.s @@ -17,14 +17,14 @@ Special_HallOfFame: @ 80CA2E4 lsrs r1, r0, 24 cmp r1, 0x1 bne _080CA30C - ldr r0, _080CA308 @ =gUnknown_203AB44 + ldr r0, _080CA308 @ =gHasHallOfFameRecords strb r1, [r0] b _080CA318 .align 2, 0 _080CA304: .4byte 0x0000082c -_080CA308: .4byte gUnknown_203AB44 +_080CA308: .4byte gHasHallOfFameRecords _080CA30C: - ldr r1, _080CA3B0 @ =gUnknown_203AB44 + ldr r1, _080CA3B0 @ =gHasHallOfFameRecords movs r0, 0 strb r0, [r1] adds r0, r4, 0 @@ -99,7 +99,7 @@ _080CA39E: pop {r1} bx r1 .align 2, 0 -_080CA3B0: .4byte gUnknown_203AB44 +_080CA3B0: .4byte gHasHallOfFameRecords _080CA3B4: .4byte gSaveBlock2Ptr _080CA3B8: .4byte gPlayerParty _080CA3BC: .4byte 0x0000083b diff --git a/data/hall_of_fame.s b/data/hall_of_fame.s deleted file mode 100644 index 732d8ce07..000000000 --- a/data/hall_of_fame.s +++ /dev/null @@ -1,180 +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_840C228:: @ 840C228 - .4byte 0x000001f8 - @ { - @ .bg = 0, - @ .charBaseIndex = 2, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - .4byte 0x000011e1 - @ { - @ .bg = 1, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 30, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 1, - @ .baseTile = 0x0000 - @ } - .4byte 0x000031d3 - @ { - @ .bg = 3, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 29, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0000 - @ } - -gUnknown_840C234:: @ 840C234 - .byte 0, 2, 2, 17, 6, 13 - .2byte 0x0001 - - .align 2 -gUnknown_840C23C:: @ 840C23C - .byte 0, 1, 2 - - .align 2 -gUnknown_840C240:: @ 840C240 - .byte 0, 2, 3 - .byte 0, 4, 5 - - .align 2 -gUnknown_840C248:: @ 840C248 - obj_tiles gFile_graphics_misc_confetti_sheet, 0x220, 1001 - null_obj_tiles - -gUnknown_840C258:: @ 840C258 - obj_pal gFile_graphics_misc_confetti_palette, 1001 - null_obj_pal - -gUnknown_840C268:: @ 840C268 - .2byte 0x0078, 0x00d2, 0x0078, 0x0028 - .2byte 0x0146, 0x00dc, 0x0038, 0x0028 - .2byte 0xffaa, 0x00dc, 0x00b8, 0x0028 - .2byte 0x0078, 0xffc2, 0x0078, 0x0058 - .2byte 0xffba, 0xffa4, 0x00c8, 0x0058 - .2byte 0x0136, 0xffa4, 0x0028, 0x0058 - -gUnknown_840C298:: @ 840C298 - .2byte 0x0078, 0x00ea, 0x0078, 0x0040 - .2byte 0x0146, 0x00f4, 0x0038, 0x0040 - .2byte 0xffaa, 0x00f4, 0x00b8, 0x0040 - -gOamData_840C2B0:: - .4byte 0x00000000, 0x00000000 - -gAnimCmd_840C2B8:: - obj_image_anim_frame 0x00, 30 - obj_image_anim_end - -gAnimCmd_840C2C0:: - obj_image_anim_frame 0x01, 30 - obj_image_anim_end - -gAnimCmd_840C2C8:: - obj_image_anim_frame 0x02, 30 - obj_image_anim_end - -gAnimCmd_840C2D0:: - obj_image_anim_frame 0x03, 30 - obj_image_anim_end - -gAnimCmd_840C2D8:: - obj_image_anim_frame 0x04, 30 - obj_image_anim_end - -gAnimCmd_840C2E0:: - obj_image_anim_frame 0x05, 30 - obj_image_anim_end - -gAnimCmd_840C2E8:: - obj_image_anim_frame 0x06, 30 - obj_image_anim_end - -gAnimCmd_840C2F0:: - obj_image_anim_frame 0x07, 30 - obj_image_anim_end - -gAnimCmd_840C2F8:: - obj_image_anim_frame 0x08, 30 - obj_image_anim_end - -gAnimCmd_840C300:: - obj_image_anim_frame 0x09, 30 - obj_image_anim_end - -gAnimCmd_840C308:: - obj_image_anim_frame 0x0a, 30 - obj_image_anim_end - -gAnimCmd_840C310:: - obj_image_anim_frame 0x0b, 30 - obj_image_anim_end - -gAnimCmd_840C318:: - obj_image_anim_frame 0x0c, 30 - obj_image_anim_end - -gAnimCmd_840C320:: - obj_image_anim_frame 0x0d, 30 - obj_image_anim_end - -gAnimCmd_840C328:: - obj_image_anim_frame 0x0e, 30 - obj_image_anim_end - -gAnimCmd_840C330:: - obj_image_anim_frame 0x0f, 30 - obj_image_anim_end - -gAnimCmd_840C338:: - obj_image_anim_frame 0x10, 30 - obj_image_anim_end - -gSpriteAnimTable_840C340:: - .4byte gAnimCmd_840C2B8 - .4byte gAnimCmd_840C2C0 - .4byte gAnimCmd_840C2C8 - .4byte gAnimCmd_840C2D0 - .4byte gAnimCmd_840C2D8 - .4byte gAnimCmd_840C2E0 - .4byte gAnimCmd_840C2E8 - .4byte gAnimCmd_840C2F0 - .4byte gAnimCmd_840C2F8 - .4byte gAnimCmd_840C300 - .4byte gAnimCmd_840C308 - .4byte gAnimCmd_840C310 - .4byte gAnimCmd_840C318 - .4byte gAnimCmd_840C320 - .4byte gAnimCmd_840C328 - .4byte gAnimCmd_840C330 - .4byte gAnimCmd_840C338 - -gUnknown_840C384:: @ 840C384 - spr_template 1001, 1001, gOamData_840C2B0, gSpriteAnimTable_840C340, NULL, gDummySpriteAffineAnimTable, sub_80F38D8 - -gUnknown_840C39C:: @ 840C39C - .incbin "graphics/hall_of_fame/unk_840C3BC.gbapal" - -gUnknown_840C3BC:: @ 840C3BC - .incbin "graphics/hall_of_fame/unk_840C3BC.4bpp.lz" - -gUnknown_840C588:: - @ Unreferenced - .2byte 1002, 1002 - .space 16 - .byte 2, 1, 3 - .byte 6, 4, 5 diff --git a/data/strings.s b/data/strings.s index 4914f9062..9b223df62 100644 --- a/data/strings.s +++ b/data/strings.s @@ -122,7 +122,7 @@ gUnknown_8415CD9:: @ 0x8415CD9 gUnknown_8415CE0:: @ 0x8415CE0 .string "ポケモンずかん$" -gUnknown_8415CE8:: @ 8415CE8 +gText_MainMenuTime:: @ 8415CE8 .string "TIME$" gUnknown_8415CED:: @ 0x8415CED @@ -330,7 +330,7 @@ gUnknown_8416002:: @ 8416002 .string "PAGE$" .align 2 -gUnknown_8416008:: @ 8416008 +gText_WelcomeToHOF:: @ 8416008 .string "Welcome to the HALL OF FAME!$" gUnknown_8416025:: @ 0x8416025 @@ -346,31 +346,31 @@ gUnknown_8416067:: @ 0x8416067 .string "でんげんを きらないでください$" .align 2 -gUnknown_8416090:: @ 8416090 +gText_HOFCorrupted:: @ 8416090 .string "The HALL OF FAME data is\n" .string "corrupted.$" -gUnknown_84160B4:: @ 84160B4 +gText_HOFNumber:: @ 84160B4 .string "HALL OF FAME No. {STR_VAR_1}$" -gUnknown_84160C8:: @ 84160C8 +gText_LeagueChamp:: @ 84160C8 .string "LEAGUE CHAMPION!\n" .string "CONGRATULATIONS!$" .align 2 -gUnknown_84160EC:: @ 84160EC +gText_Number:: @ 84160EC .string "No. $" .align 2 -gUnknown_84160F4:: @ 84160F4 +gText_Level:: @ 84160F4 .string "Lv. $" .align 2 -gUnknown_84160FC:: @ 84160FC +gText_Name:: @ 84160FC .string "NAME$" .align 2 -gUnknown_8416104:: @ 8416104 +gText_IDNumber:: @ 8416104 .string "IDNo.$" gUnknown_841610A:: @ 0x841610A diff --git a/include/credits.h b/include/credits.h new file mode 100644 index 000000000..763abd77f --- /dev/null +++ b/include/credits.h @@ -0,0 +1,6 @@ +#ifndef GUARD_CREDITS_H +#define GUARD_CREDITS_H + +extern bool8 gHasHallOfFameRecords; + +#endif //GUARD_CREDITS_H diff --git a/include/graphics.h b/include/graphics.h index 0e804e17c..bc87e4d53 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4226,4 +4226,7 @@ extern const u16 gTradeMenuMonBox_Tilemap[]; extern const u16 gUnknown_8E9CBBC[]; extern const u16 gUnknown_8E9CB9C[]; +extern const u32 gFile_graphics_misc_confetti_sheet[]; +extern const u32 gFile_graphics_misc_confetti_palette[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/hall_of_fame.h b/include/hall_of_fame.h index 1d2122399..fd8aed909 100644 --- a/include/hall_of_fame.h +++ b/include/hall_of_fame.h @@ -7,7 +7,7 @@ void CB2_DoHallOfFameScreen(void); void CB2_DoHallOfFameScreenDontSaveData(void); void CB2_DoHallOfFamePC(void); void sub_8175280(void); -void sub_80F2978(void); +void CB2_InitHofPC(void); void HallOfFamePCBeginFade(void); void ReturnFromHallOfFamePC(void); diff --git a/include/pokemon.h b/include/pokemon.h index 79933a22c..3d0faca36 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -609,7 +609,7 @@ u32 CanMonLearnTMHM(struct Pokemon *mon, u8 tm); u8 GetMoveRelearnerMoves(struct Pokemon *mon, u16 *moves); u8 GetLevelUpMovesBySpecies(u16 species, u16 *moves); u8 GetNumberOfRelearnableMoves(struct Pokemon *mon); -u16 sub_8043F90(u16 species); +u16 SpeciesToPokedexNum(u16 species); void ClearBattleMonForms(void); void PlayBattleBGM(void); void PlayMapChosenOrBattleBGM(u16 songId); diff --git a/include/save.h b/include/save.h index 41d2ec666..5b7223e77 100644 --- a/include/save.h +++ b/include/save.h @@ -62,17 +62,6 @@ enum CHECK // unused }; -// Do save types -enum -{ - NORMAL_SAVE, - LINK_SAVE, - EREADER_SAVE, - HOF_SAVE, - DIFFERENT_FILE_SAVE, - HOF_DELETE_SAVE // unused -}; - extern u16 gFirstSaveSector; extern u32 gPrevSaveCounter; extern u16 gLastKnownGoodSector; diff --git a/include/strings.h b/include/strings.h index 32f4dcf43..80ede79ef 100644 --- a/include/strings.h +++ b/include/strings.h @@ -710,4 +710,18 @@ extern const u8 gEasyChatGroupName_TrendySaying[]; extern const u8 gEasyChatGroupName_Pokemon2[]; extern const u8 gText_ThreeQuestionMarks[]; +// hall_of_fame +extern const u8 gText_LeagueChamp[]; +extern const u8 gText_HOFNumber[]; +extern const u8 gText_UPDOWNPick_ABUTTONBBUTTONCancel[]; +extern const u8 gText_UPDOWNPick_ABUTTONNext_BBUTTONBack[]; +extern const u8 gText_ABUTTONExit[]; +extern const u8 gText_HOFCorrupted[]; +extern const u8 gText_WelcomeToHOF[]; +extern const u8 gText_Number[]; +extern const u8 gText_Level[]; +extern const u8 gText_IDNumber[]; +extern const u8 gText_Name[]; +extern const u8 gText_MainMenuTime[]; + #endif //GUARD_STRINGS_H diff --git a/include/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h index a267737f5..3e27f58e4 100644 --- a/include/trainer_pokemon_sprites.h +++ b/include/trainer_pokemon_sprites.h @@ -12,6 +12,7 @@ u16 sub_818D8F0(u16 spriteId); u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId); u8 sub_818D97C(u8 a0, u8 a1); u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); +u16 FreeAndDestroyMonPicSprite(u16); u16 FreeAndDestroyTrainerPicSprite(u16); u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass); u16 CreateMonPicSprite_HandleDeoxys(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag); diff --git a/ld_script.txt b/ld_script.txt index f62c6fd8d..d4a89d6ca 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -213,7 +213,7 @@ SECTIONS { src/player_pc.o(.text); src/intro.o(.text); asm/battle_anim_special.o(.text); - asm/hall_of_fame.o(.text); + src/hall_of_fame.o(.text); src/credits.o(.text); src/diploma.o(.text); asm/save_failed_screen.o(.text); @@ -484,7 +484,7 @@ SECTIONS { src/player_pc.o(.rodata); src/intro.o(.rodata); data/battle_anim_special.o(.rodata); - data/hall_of_fame.o(.rodata); + src/hall_of_fame.o(.rodata); src/credits.o(.rodata); src/diploma.o(.rodata); data/strings.o(.rodata); diff --git a/src/credits.c b/src/credits.c index ad78d875c..a0138e57a 100644 --- a/src/credits.c +++ b/src/credits.c @@ -188,6 +188,7 @@ struct CreditsTaskData }; static EWRAM_DATA struct CreditsResources * sCreditsMgr = NULL; +EWRAM_DATA bool8 gHasHallOfFameRecords = FALSE; static void CB2_Credits(void); static s32 RollCredits(void); diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c new file mode 100644 index 000000000..791d2dc33 --- /dev/null +++ b/src/hall_of_fame.c @@ -0,0 +1,1293 @@ +#include "global.h" +#include "palette.h" +#include "malloc.h" +#include "decompress.h" +#include "bg.h" +#include "scanline_effect.h" +#include "gpu_regs.h" +#include "task.h" +#include "text.h" +#include "main.h" +#include "sound.h" +#include "save.h" +#include "data.h" +#include "m4a.h" +#include "help_system.h" +#include "hall_of_fame.h" +#include "quest_log.h" +#include "pc_screen_effect.h" +#include "new_menu_helpers.h" +#include "strings.h" +#include "credits.h" +#include "event_data.h" +#include "overworld.h" +#include "trainer_pokemon_sprites.h" +#include "text_window.h" +#include "field_fadetransition.h" +#include "menu.h" +#include "string_util.h" +#include "trig.h" +#include "random.h" +#include "graphics.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "constants/flags.h" +#include "constants/vars.h" +#include "constants/maps.h" + +struct HallofFameMon +{ + u32 tid; + u32 personality; + u16 species:9; + u16 lvl:7; + u8 nick[10]; +}; + +struct HallofFameTeam +{ + struct HallofFameMon mon[PARTY_SIZE]; +}; + +struct HofGfx +{ + u16 state; + u8 field_2[4]; + u8 tilemap1[0x1000]; + u8 tilemap2[0x1000]; +}; + +EWRAM_DATA u32 sSelectedPaletteIndices = 0; +EWRAM_DATA struct HallofFameTeam * sHofMonPtr = NULL; +EWRAM_DATA struct HofGfx * sHofGfxPtr = NULL; + +#define HALL_OF_FAME_MAX_TEAMS 50 +#define HALL_OF_FAME_BG_PAL (RGB(22, 24, 29)) + +static void Task_Hof_InitMonData(u8 taskId); +static void Task_Hof_InitTeamSaveData(u8 taskId); +static void Task_Hof_TrySaveData(u8 taskId); +static void Task_Hof_DelayAfterSave(u8 taskId); +static void Task_Hof_StartDisplayingMons(u8 taskId); +static void Task_Hof_DisplayMon(u8 taskId); +static void Task_Hof_PlayMonCryAndPrintInfo(u8 taskId); +static void Task_Hof_TryDisplayAnotherMon(u8 taskId); +static void Task_Hof_PaletteFadeAndPrintWelcomeText(u8 taskId); +static void Task_Hof_ApplauseAndConfetti(u8 taskId); +static void Hof_WaitBorderFadeAway(u8 taskId); +static void Hof_SpawnPlayerPic(u8 taskId); +static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId); +static void Task_Hof_ExitOnKeyPressed(u8 taskId); +static void Task_Hof_HandlePaletteOnExit(u8 taskId); +static void Task_Hof_HandleExit(u8 taskId); +static void SetCallback2AfterHallOfFameDisplay(void); +static void Task_HofPC_CopySaveData(u8 taskId); +static void Task_HofPC_DrawSpritesPrintText(u8 taskId); +static void Task_HofPC_PrintMonInfo(u8 taskId); +static void Task_HofPC_HandleInput(u8 taskId); +static void Task_HofPC_HandlePaletteOnExit(u8 taskId); +static void Task_HofPC_HandleExit(u8 taskId); +static void Task_HofPC_PrintDataIsCorrupted(u8 taskId); +static void Task_HofPC_ExitOnButtonPress(u8 taskId); +static void HallOfFame_PrintWelcomeText(u8 a0, u8 a1); +static void HallOfFame_PrintMonInfo(struct HallofFameMon * hofMon, u8 a1, u8 a2); +static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1); +static void ClearVramOamPltt_LoadHofPal(void); +static void HofInit_ResetGpuBuffersAndLoadConfettiGfx(void); +static void Hof_InitBgs(void); +static bool8 DrawHofBackground(void); +static void SpriteCB_GetOnScreen(struct Sprite * sprite); +static void SpriteCB_Confetti(struct Sprite * sprite); +static bool8 Hof_SpawnConfetti(void); + +static const struct BgTemplate sHof_BgTemplates[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +static const struct WindowTemplate sWindowTemplate = { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 2, + .width = 17, + .height = 6, + .paletteNum = 13, + .baseBlock = 0x001 +}; + +static const u8 sTextColors[][4] = { + { 0, 1, 2 }, + { 0, 2, 3 }, + { 4, 5, 0 } +}; + +static const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet[] = { + {gFile_graphics_misc_confetti_sheet, 0x220, 1001}, + {} +}; + +static const struct CompressedSpritePalette sHallOfFame_ConfettiSpritePalette[] = { + {gFile_graphics_misc_confetti_palette, 1001}, + {} +}; + +static const s16 sHallOfFame_MonFullTeamPositions[6][4] = +{ + {120, 210, 120, 40}, + {326, 220, 56, 40}, + {-86, 220, 184, 40}, + {120, -62, 120, 88}, + {-70, -92, 200, 88}, + {310, -92, 40, 88} +}; + +static const s16 sHallOfFame_MonHalfTeamPositions[3][4] = +{ + {120, 234, 120, 64}, + {326, 244, 56, 64}, + {-86, 244, 184, 64} +}; + +static const struct OamData sOamData_Confetti = { + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8) +}; + +static const union AnimCmd sAnimCmd_Frame00[] = { + ANIMCMD_FRAME( 0, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame01[] = { + ANIMCMD_FRAME( 1, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame02[] = { + ANIMCMD_FRAME( 2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame03[] = { + ANIMCMD_FRAME( 3, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame04[] = { + ANIMCMD_FRAME( 4, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame05[] = { + ANIMCMD_FRAME( 5, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame06[] = { + ANIMCMD_FRAME( 6, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame07[] = { + ANIMCMD_FRAME( 7, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame08[] = { + ANIMCMD_FRAME( 8, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame09[] = { + ANIMCMD_FRAME( 9, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame10[] = { + ANIMCMD_FRAME(10, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame11[] = { + ANIMCMD_FRAME(11, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame12[] = { + ANIMCMD_FRAME(12, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame13[] = { + ANIMCMD_FRAME(13, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame14[] = { + ANIMCMD_FRAME(14, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame15[] = { + ANIMCMD_FRAME(15, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnimCmd_Frame16[] = { + ANIMCMD_FRAME(16, 30), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_Confetti[] = { + sAnimCmd_Frame00, + sAnimCmd_Frame01, + sAnimCmd_Frame02, + sAnimCmd_Frame03, + sAnimCmd_Frame04, + sAnimCmd_Frame05, + sAnimCmd_Frame06, + sAnimCmd_Frame07, + sAnimCmd_Frame08, + sAnimCmd_Frame09, + sAnimCmd_Frame10, + sAnimCmd_Frame11, + sAnimCmd_Frame12, + sAnimCmd_Frame13, + sAnimCmd_Frame14, + sAnimCmd_Frame15, + sAnimCmd_Frame16 +}; + +static const struct SpriteTemplate sSpriteTemplate_Confetti = { + .tileTag = 1001, + .paletteTag = 1001, + .oam = &sOamData_Confetti, + .anims = sSpriteAnimTable_Confetti, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_Confetti +}; + +static const u16 sHallOfFame_Pal[] = INCBIN_U16("graphics/hall_of_fame/unk_840C3BC.gbapal"); +static const u32 sHallOfFame_Gfx[] = INCBIN_U32("graphics/hall_of_fame/unk_840C3BC.4bpp.lz"); + +static const struct HallofFameMon sDummyHofMon = { + .tid = 0x03EA03EA, // (u16[]){1002, 1002} corrupted sprite template? + .personality = 0, + .species = SPECIES_NONE, + .lvl = 0, + .nick = __(" ") +}; + +static const u8 sUnused[] = {2, 1, 3, 6, 4, 5}; + +static void VBlankCB_HofIdle(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +static void CB2_HofIdle(void) +{ + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static bool8 InitHallOfFameScreen(void) +{ + switch (gMain.state) + { + case 0: + gHelpSystemEnabled = FALSE; + SetVBlankCallback(NULL); + ClearVramOamPltt_LoadHofPal(); + sHofGfxPtr = AllocZeroed(sizeof(struct HofGfx)); + gMain.state = 1; + break; + case 1: + HofInit_ResetGpuBuffersAndLoadConfettiGfx(); + gMain.state++; + break; + case 2: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 7)); + SetGpuReg(REG_OFFSET_BLDY, 0); + Hof_InitBgs(); + sHofGfxPtr->state = 0; + gMain.state++; + break; + case 3: + if (!DrawHofBackground()) + { + SetVBlankCallback(VBlankCB_HofIdle); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + } + break; + case 4: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_HofIdle); + PlayBGM(MUS_DENDOU); + return FALSE; + } + break; + } + return TRUE; +} + +void CB2_DoHallOfFameScreen(void) +{ + u8 taskId; + if (!InitHallOfFameScreen()) + { + taskId = CreateTask(Task_Hof_InitMonData, 0); + gTasks[taskId].data[0] = FALSE; + sHofMonPtr = AllocZeroed(sizeof(struct HallofFameTeam)); + } +} + +void CB2_DoHallOfFameScreenDontSaveData(void) +{ + u8 taskId; + if (!InitHallOfFameScreen()) + { + taskId = CreateTask(Task_Hof_InitMonData, 0); + gTasks[taskId].data[0] = TRUE; + } +} + +static void Task_Hof_InitMonData(u8 taskId) +{ + u16 i; + u16 j; + u8 nick[11]; + + gTasks[taskId].data[2] = 0; + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != SPECIES_NONE) + { + sHofMonPtr[0].mon[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + sHofMonPtr[0].mon[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); + sHofMonPtr[0].mon[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + sHofMonPtr[0].mon[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick); + for (j = 0; j < 10; j++) + sHofMonPtr[0].mon[i].nick[j] = nick[j]; + gTasks[taskId].data[2]++; + } + else + { + sHofMonPtr[0].mon[i].species = SPECIES_NONE; + sHofMonPtr[0].mon[i].tid = 0; + sHofMonPtr[0].mon[i].personality = 0; + sHofMonPtr[0].mon[i].lvl = 0; + sHofMonPtr[0].mon[i].nick[0] = EOS; + } + } + sSelectedPaletteIndices = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[4] = 0xFF; + for (i = 0; i < 6; i++) + gTasks[taskId].data[i + 5] = 0xFF; + if (gTasks[taskId].data[0]) + gTasks[taskId].func = Task_Hof_StartDisplayingMons; + else + gTasks[taskId].func = Task_Hof_InitTeamSaveData; +} + +static void Task_Hof_InitTeamSaveData(u8 taskId) +{ + u16 i; + struct HallofFameTeam* lastSavedTeam = (struct HallofFameTeam *)(gDecompressionBuffer); + + sub_8112450(); + if (!gHasHallOfFameRecords) + { + memset(gDecompressionBuffer, 0, 0x2000); + } + else + { + if (Save_LoadGameData(SAVE_HALL_OF_FAME) != TRUE) + memset(gDecompressionBuffer, 0, 0x2000); + } + + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++) + { + if (lastSavedTeam[0].mon[0].species == SPECIES_NONE) + break; + } + if (i >= HALL_OF_FAME_MAX_TEAMS) + { + struct HallofFameTeam *afterTeam = (struct HallofFameTeam*)(gDecompressionBuffer); + struct HallofFameTeam *beforeTeam = (struct HallofFameTeam*)(gDecompressionBuffer); + afterTeam++; + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, beforeTeam++, afterTeam++) + { + *beforeTeam = *afterTeam; + } + lastSavedTeam--; + } + *lastSavedTeam = *sHofMonPtr; + + DrawDialogueFrame(0, 0); + AddTextPrinterParameterized2(0, 2, gText_SavingDontTurnOffThePower2, 0, NULL, 2, 1, 3); + CopyWindowToVram(0, 3); + gTasks[taskId].func = Task_Hof_TrySaveData; +} + +static void Task_Hof_TrySaveData(u8 taskId) +{ + gGameContinueCallback = CB2_DoHallOfFameScreenDontSaveData; + TrySavingData(SAVE_HALL_OF_FAME); + PlaySE(SE_SAVE); + gTasks[taskId].func = Task_Hof_DelayAfterSave; + gTasks[taskId].data[3] = 32; +} + +static void Task_Hof_DelayAfterSave(u8 taskId) +{ + if (gTasks[taskId].data[3] != 0) + gTasks[taskId].data[3]--; + else + gTasks[taskId].func = Task_Hof_StartDisplayingMons; +} + +static void Task_Hof_StartDisplayingMons(u8 taskId) +{ + gTasks[taskId].func = Task_Hof_DisplayMon; +} + +static void Task_Hof_DisplayMon(u8 taskId) +{ + u8 spriteId; + s16 srcX; + s16 srcY; + s16 dstX; + s16 dstY; + + u16 currMonId = gTasks[taskId].data[1]; + struct HallofFameMon* currMon = &sHofMonPtr[0].mon[currMonId]; + + + if (gTasks[taskId].data[2] > 3) + { + srcX = sHallOfFame_MonFullTeamPositions[currMonId][0]; + srcY = sHallOfFame_MonFullTeamPositions[currMonId][1]; + dstX = sHallOfFame_MonFullTeamPositions[currMonId][2]; + dstY = sHallOfFame_MonFullTeamPositions[currMonId][3]; + } + else + { + srcX = sHallOfFame_MonHalfTeamPositions[currMonId][0]; + srcY = sHallOfFame_MonHalfTeamPositions[currMonId][1]; + dstX = sHallOfFame_MonHalfTeamPositions[currMonId][2]; + dstY = sHallOfFame_MonHalfTeamPositions[currMonId][3]; + } + + spriteId = CreateMonPicSprite_HandleDeoxys(currMon->species, currMon->tid, currMon->personality, 1, srcX, srcY, currMonId, 0xFFFF); + gSprites[spriteId].data[1] = dstX; + gSprites[spriteId].data[2] = dstY; + gSprites[spriteId].data[0] = 0; + gSprites[spriteId].callback = SpriteCB_GetOnScreen; + gTasks[taskId].data[5 + currMonId] = spriteId; + ClearDialogWindowAndFrame(0, TRUE); + gTasks[taskId].func = Task_Hof_PlayMonCryAndPrintInfo; +} + +static void Task_Hof_PlayMonCryAndPrintInfo(u8 taskId) +{ + u16 currMonId = gTasks[taskId].data[1]; + struct HallofFameMon* currMon = &sHofMonPtr[0].mon[currMonId]; + if (gSprites[gTasks[taskId].data[5 + currMonId]].data[0]) + { + if (currMon->species != SPECIES_EGG) + PlayCry1(currMon->species, 0); + HallOfFame_PrintMonInfo(currMon, 0, 14); + gTasks[taskId].data[3] = 120; + gTasks[taskId].func = Task_Hof_TryDisplayAnotherMon; + } +} + +static void Task_Hof_TryDisplayAnotherMon(u8 taskId) +{ + u16 currPokeID = gTasks[taskId].data[1]; + struct HallofFameMon* currMon = &sHofMonPtr[0].mon[currPokeID]; + + if (gTasks[taskId].data[3] != 0) + { + gTasks[taskId].data[3]--; + } + else + { + sSelectedPaletteIndices |= (0x10000 << gSprites[gTasks[taskId].data[5 + currPokeID]].oam.paletteNum); + if (gTasks[taskId].data[1] < PARTY_SIZE - 1 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display + { + gTasks[taskId].data[1]++; + BeginNormalPaletteFade(sSelectedPaletteIndices, 0, 12, 12, HALL_OF_FAME_BG_PAL); + gSprites[gTasks[taskId].data[5 + currPokeID]].oam.priority = 1; + gTasks[taskId].func = Task_Hof_DisplayMon; + } + else + { + gTasks[taskId].func = Task_Hof_PaletteFadeAndPrintWelcomeText; + } + } +} + +static void Task_Hof_PaletteFadeAndPrintWelcomeText(u8 taskId) +{ + u16 i; + + BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0, RGB_BLACK); + for (i = 0; i < PARTY_SIZE; i++) + { + if (gTasks[taskId].data[5 + i] != 0xFF) + gSprites[gTasks[taskId].data[5 + i]].oam.priority = 0; + } + + HallOfFame_PrintWelcomeText(0, 15); + PlaySE(SE_DENDOU); + gTasks[taskId].data[3] = 400; + gTasks[taskId].func = Task_Hof_ApplauseAndConfetti; +} + +static void Task_Hof_ApplauseAndConfetti(u8 taskId) +{ + if (gTasks[taskId].data[3] != 0) + { + gTasks[taskId].data[3]--; + if ((gTasks[taskId].data[3] & 3) == 0 && gTasks[taskId].data[3] > 110) + Hof_SpawnConfetti(); + } + else + { + u16 i; + for (i = 0; i < PARTY_SIZE; i++) + { + if (gTasks[taskId].data[5 + i] != 0xFF) + gSprites[gTasks[taskId].data[5 + i]].oam.priority = 1; + } + BeginNormalPaletteFade(sSelectedPaletteIndices, 0, 12, 12, HALL_OF_FAME_BG_PAL); + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + CopyWindowToVram(0, 3); + gTasks[taskId].data[3] = 7; + gTasks[taskId].func = Hof_WaitBorderFadeAway; + } +} + +static void Hof_WaitBorderFadeAway(u8 taskId) +{ + if (gTasks[taskId].data[3] > 15) + { + gTasks[taskId].func = Hof_SpawnPlayerPic; + } + else + { + gTasks[taskId].data[3]++; + SetGpuReg(REG_OFFSET_BLDALPHA, 256 * gTasks[taskId].data[3]); + } +} + +static void Hof_SpawnPlayerPic(u8 taskId) +{ + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + ShowBg(0); + ShowBg(1); + ShowBg(3); + gTasks[taskId].data[4] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), TRUE, 0x78, 0x48, 6, 0xFFFF); + AddWindow(&sWindowTemplate); + TextWindow_SetStdFrame0_WithPal(1, 0x21D, 0xD0); + gTasks[taskId].data[3] = 120; + gTasks[taskId].func = Task_Hof_WaitAndPrintPlayerInfo; +} + +static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) +{ + if (gTasks[taskId].data[3] != 0) + { + gTasks[taskId].data[3]--; + } + else if (gSprites[gTasks[taskId].data[4]].pos1.x != 192) + { + gSprites[gTasks[taskId].data[4]].pos1.x++; + } + else + { + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); + HallOfFame_PrintPlayerInfo(1, 2); + DrawDialogueFrame(0, 0); + AddTextPrinterParameterized2(0, 2, gText_LeagueChamp, 0, NULL, 2, 1, 3); + CopyWindowToVram(0, 3); + gTasks[taskId].func = Task_Hof_ExitOnKeyPressed; + } +} + +static void Task_Hof_ExitOnKeyPressed(u8 taskId) +{ + if (JOY_NEW(A_BUTTON)) + { + FadeOutBGM(4); + gTasks[taskId].func = Task_Hof_HandlePaletteOnExit; + } +} + +static void Task_Hof_HandlePaletteOnExit(u8 taskId) +{ + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, PLTT_BUFFER_SIZE * sizeof(u16)); + BeginNormalPaletteFade(0xFFFFFFFF, 8, 0, 16, RGB_BLACK); + gTasks[taskId].func = Task_Hof_HandleExit; +} + +static void Task_Hof_HandleExit(u8 taskId) +{ + if (!gPaletteFade.active) + { + s32 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + u8 spriteId = gTasks[taskId].data[5 + i]; + if (spriteId != 0xFF) + { + FreeAndDestroyMonPicSprite(spriteId); + } + } + + FreeAndDestroyTrainerPicSprite(gTasks[taskId].data[4]); + HideBg(0); + HideBg(1); + HideBg(3); + FreeAllWindowBuffers(); + UnsetBgTilemapBuffer(1); + UnsetBgTilemapBuffer(3); + ResetBgsAndClearDma3BusyFlags(0); + DestroyTask(taskId); + + if (sHofGfxPtr != NULL) + FREE_AND_SET_NULL(sHofGfxPtr); + if (sHofMonPtr != NULL) + FREE_AND_SET_NULL(sHofMonPtr); + + SetCallback2AfterHallOfFameDisplay(); + } +} + +static void SetCallback2AfterHallOfFameDisplay(void) +{ + VarSet(VAR_MAP_SCENE_INDIGO_PLATEAU_EXTERIOR, 1); + FlagSet(FLAG_SPECIAL_FLAG_0x4000); + gDisableMapMusicChangeOnMapLoad = 2; + SetWarpDestination(MAP_GROUP(INDIGO_PLATEAU_EXTERIOR), MAP_NUM(INDIGO_PLATEAU_EXTERIOR), -1, 11, 6); + DoWarp(); + ResetInitialPlayerAvatarState(); +} + +void CB2_InitHofPC(void) +{ + switch (gMain.state) + { + default: + case 0: + SetVBlankCallback(NULL); + ClearVramOamPltt_LoadHofPal(); + sHofGfxPtr = AllocZeroed(sizeof(struct HofGfx)); + gMain.state = 1; + break; + case 1: + HofInit_ResetGpuBuffersAndLoadConfettiGfx(); + gMain.state++; + break; + case 2: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + Hof_InitBgs(); + gMain.state++; + break; + case 3: + if (!DrawHofBackground()) + { + sub_80A0A48(0, 0, 0); + SetVBlankCallback(VBlankCB_HofIdle); + gMain.state++; + } + break; + case 4: + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + if (!sub_80A0A98()) + gMain.state++; + break; + case 5: + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 7)); + SetGpuReg(REG_OFFSET_BLDY, 0); + CreateTask(Task_HofPC_CopySaveData, 0); + sHofMonPtr = AllocZeroed(0x2000); + SetMainCallback2(CB2_HofIdle); + break; + } +} + +static void Task_HofPC_CopySaveData(u8 taskId) +{ + u16 i; + struct HallofFameTeam* savedTeams; + + CreateTopBarWindowLoadPalette(0, 30, 0, 0x0C, 0x226); + if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK) + { + gTasks[taskId].func = Task_HofPC_PrintDataIsCorrupted; + } + else + { + CpuCopy16(gDecompressionBuffer, sHofMonPtr, 0x2000); + savedTeams = sHofMonPtr; + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++) + { + if (savedTeams->mon[0].species == SPECIES_NONE) + break; + } + + if (i < HALL_OF_FAME_MAX_TEAMS) + gTasks[taskId].data[0] = i - 1; + else + gTasks[taskId].data[0] = HALL_OF_FAME_MAX_TEAMS - 1; + + gTasks[taskId].data[1] = GetGameStat(GAME_STAT_ENTERED_HOF); + + gTasks[taskId].func = Task_HofPC_DrawSpritesPrintText; + } +} + +static void Task_HofPC_DrawSpritesPrintText(u8 taskId) +{ + struct HallofFameTeam *savedTeams = sHofMonPtr; + struct HallofFameMon *currMon; + u16 i; + + for (i = 0; i < gTasks[taskId].data[0]; i++) + savedTeams++; + + currMon = &savedTeams->mon[0]; + sSelectedPaletteIndices = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[4] = 0; + + for (i = 0; i < PARTY_SIZE; i++, currMon++) + { + if (currMon->species != 0) + gTasks[taskId].data[4]++; + } + + currMon = &savedTeams->mon[0]; + + for (i = 0; i < PARTY_SIZE; i++, currMon++) + { + if (currMon->species != 0) + { + u16 spriteId; + s16 posX, posY; + + if (gTasks[taskId].data[4] > 3) + { + posX = sHallOfFame_MonFullTeamPositions[i][2]; + posY = sHallOfFame_MonFullTeamPositions[i][3]; + } + else + { + posX = sHallOfFame_MonHalfTeamPositions[i][2]; + posY = sHallOfFame_MonHalfTeamPositions[i][3]; + } + + spriteId = CreateMonPicSprite_HandleDeoxys(currMon->species, currMon->tid, currMon->personality, TRUE, posX, + posY, i, 0xFFFF); + gSprites[spriteId].oam.priority = 1; + gTasks[taskId].data[5 + i] = spriteId; + } + else + { + gTasks[taskId].data[5 + i] = 0xFF; + } + } + + BlendPalettes(0xFFFF0000, 0xC, HALL_OF_FAME_BG_PAL); + + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].data[1], STR_CONV_MODE_LEFT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_HOFNumber); + + if (gTasks[taskId].data[0] <= 0) + TopBarWindowPrintTwoStrings(gStringVar4, gText_UPDOWNPick_ABUTTONBBUTTONCancel, 0, 0, TRUE); + else + TopBarWindowPrintTwoStrings(gStringVar4, gText_UPDOWNPick_ABUTTONNext_BBUTTONBack, 0, 0, TRUE); + + gTasks[taskId].func = Task_HofPC_PrintMonInfo; +} + +static void Task_HofPC_PrintMonInfo(u8 taskId) +{ + struct HallofFameTeam* savedTeams = sHofMonPtr; + struct HallofFameMon* currMon; + u16 i; + u16 currMonID; + + for (i = 0; i < gTasks[taskId].data[0]; i++) + savedTeams++; + + for (i = 0; i < PARTY_SIZE; i++) + { + u16 spriteId = gTasks[taskId].data[5 + i]; + if (spriteId != 0xFF) + gSprites[spriteId].oam.priority = 1; + } + + currMonID = gTasks[taskId].data[5 + gTasks[taskId].data[2]]; + gSprites[currMonID].oam.priority = 0; + sSelectedPaletteIndices = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; + BlendPalettesUnfaded(sSelectedPaletteIndices, 0xC, HALL_OF_FAME_BG_PAL); + + currMon = &savedTeams->mon[gTasks[taskId].data[2]]; + if (currMon->species != SPECIES_EGG) + { + StopCryAndClearCrySongs(); + PlayCry1(currMon->species, 0); + } + HallOfFame_PrintMonInfo(currMon, 0, 14); + + gTasks[taskId].func = Task_HofPC_HandleInput; +} + +static void Task_HofPC_HandleInput(u8 taskId) +{ + u16 i; + + if (JOY_NEW(A_BUTTON)) + { + if (gTasks[taskId].data[0] != 0) // prepare another team to view + { + gTasks[taskId].data[0]--; + for (i = 0; i < 6; i++) + { + u8 spriteId = gTasks[taskId].data[5 + i]; + if (spriteId != 0xFF) + { + FreeAndDestroyMonPicSprite(spriteId); + } + } + if (gTasks[taskId].data[1] != 0) + gTasks[taskId].data[1]--; + gTasks[taskId].func = Task_HofPC_DrawSpritesPrintText; + } + else // no more teams to view, turn off hall of fame PC + { + if (IsCryPlayingOrClearCrySongs()) + { + StopCryAndClearCrySongs(); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + } + gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; + } + } + else if (JOY_NEW(B_BUTTON)) // turn off hall of fame PC + { + if (IsCryPlayingOrClearCrySongs()) + { + StopCryAndClearCrySongs(); + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); + } + gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; + } + else if (JOY_NEW(DPAD_UP) && gTasks[taskId].data[2] != 0) // change mon -1 + { + gTasks[taskId].data[2]--; + gTasks[taskId].func = Task_HofPC_PrintMonInfo; + } + else if (JOY_NEW(DPAD_DOWN) && gTasks[taskId].data[2] < gTasks[taskId].data[4] - 1) // change mon +1 + { + gTasks[taskId].data[2]++; + gTasks[taskId].func = Task_HofPC_PrintMonInfo; + } +} +static void Task_HofPC_HandlePaletteOnExit(u8 taskId) +{ + struct HallofFameTeam* fameTeam; + + CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); + sub_80A0A70(0, 0, 0); + gTasks[taskId].func = Task_HofPC_HandleExit; +} + +static void Task_HofPC_HandleExit(u8 taskId) +{ + if (!sub_80A0AAC()) + { + HideBg(0); + HideBg(1); + HideBg(3); + DestroyTopBarWindow(); + FreeAllWindowBuffers(); + UnsetBgTilemapBuffer(1); + UnsetBgTilemapBuffer(3); + ResetBgsAndClearDma3BusyFlags(FALSE); + DestroyTask(taskId); + + if (sHofGfxPtr != NULL) + FREE_AND_SET_NULL(sHofGfxPtr); + if (sHofMonPtr != NULL) + FREE_AND_SET_NULL(sHofMonPtr); + + ReturnFromHallOfFamePC(); + } +} + +static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) +{ + TopBarWindowPrintString(gText_ABUTTONExit, 8, TRUE); + DrawDialogueFrame(0, 0); + AddTextPrinterParameterized2(0, 2, gText_HOFCorrupted, 0, NULL, 2, 1, 3); + CopyWindowToVram(0, 3); + gTasks[taskId].func = Task_HofPC_ExitOnButtonPress; +} + +static void Task_HofPC_ExitOnButtonPress(u8 taskId) +{ + if (JOY_NEW(A_BUTTON)) + gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; +} + +static void HallOfFame_PrintWelcomeText(u8 not, u8 used) +{ + u8 x = (0xD0 - GetStringWidth(2, gText_WelcomeToHOF, 0)) / 2; + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + PutWindowTilemap(0); + AddTextPrinterParameterized3(0, 2, x, 1, sTextColors[0], 0, gText_WelcomeToHOF); + CopyWindowToVram(0, 3); +} + +static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2) +{ + u8 text[16]; + u8 text2[24]; + u16 i; + u8 *stringPtr; + u16 dexNumber; + u8 gender; + s32 width; + s32 x; + + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + PutWindowTilemap(0); + + // dex number + if (currMon->species != SPECIES_EGG) + { + StringCopy(text2, gText_Number); + dexNumber = SpeciesToPokedexNum(currMon->species); + if (dexNumber != 0xFFFF) + { + text[0] = (dexNumber / 100) + CHAR_0; + text[1] = ((dexNumber %= 100) / 10) + CHAR_0; + text[2] = (dexNumber % 10) + CHAR_0; + } + else + { + text[0] = text[1] = text[2] = CHAR_QUESTION_MARK; + } + text[3] = EOS; + StringAppend(text2, text); + AddTextPrinterParameterized3(0, 2, 0x10, 1, sTextColors[0], 0, text2); + } + + // nick, species names, gender and lvl + i = 0; + if (currMon->nick[0] != EOS) + { + for (i = 0; i < 10 && currMon->nick[i] != EOS; i++) + { + text[i] = currMon->nick[i]; + } + } + text[i] = EOS; + width = GetStringWidth(2, text, GetFontAttribute(2, FONTATTR_LETTER_SPACING)); + if (currMon->species == SPECIES_EGG) + x = 0x80 - width / 2; + else + x = 0x80 - width; + AddTextPrinterParameterized3(0, 2, x, 1, sTextColors[0], 0, text); + if (currMon->species != SPECIES_EGG) + { + text[0] = CHAR_SLASH; + stringPtr = StringCopy(text + 1, gSpeciesNames[currMon->species]); + + if (currMon->species == SPECIES_NIDORAN_M || currMon->species == SPECIES_NIDORAN_F) + gender = MON_GENDERLESS; + else + gender = GetGenderFromSpeciesAndPersonality(currMon->species, currMon->personality); + switch (gender) + { + case MON_MALE: + *stringPtr++ = CHAR_MALE; + break; + case MON_FEMALE: + *stringPtr++ = CHAR_FEMALE; + break; + default: + *stringPtr++ = CHAR_SPACE; + break; + } + *stringPtr = EOS; + + AddTextPrinterParameterized3(0, 2, 0x80, 1, sTextColors[0], 0, text); + + stringPtr = StringCopy(text, gText_Level); + ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3); + AddTextPrinterParameterized3(0, 2, 0x20, 0x11, sTextColors[0], 0, text); + + stringPtr = StringCopy(text, gText_IDNumber); + ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5); + AddTextPrinterParameterized3(0, 2, 0x60, 0x11, sTextColors[0], 0, text); + + } + CopyWindowToVram(0, 3); +} + +static void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) +{ + u8 text[20]; + u16 trainerId; + s32 textWidth = sWindowTemplate.width * 8 - 6; + + FillWindowPixelBuffer(1, PIXEL_FILL(1)); + PutWindowTilemap(1); + DrawStdFrameWithCustomTileAndPalette(1, FALSE, 0x21D, 0xD); + AddTextPrinterParameterized4(1, 2, 4, 3, 0, 0, sTextColors[1], 0, gText_Name); + + AddTextPrinterParameterized3(1, 2, textWidth - GetStringWidth(2, gSaveBlock2Ptr->playerName, 0), 3, sTextColors[1], 0, gSaveBlock2Ptr->playerName); + + trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8); + AddTextPrinterParameterized3(1, 2, 4, 18, sTextColors[1], 0, gText_IDNumber); + text[0] = (trainerId % 100000) / 10000 + CHAR_0; + text[1] = (trainerId % 10000) / 1000 + CHAR_0; + text[2] = (trainerId % 1000) / 100 + CHAR_0; + text[3] = (trainerId % 100) / 10 + CHAR_0; + text[4] = (trainerId % 10) / 1 + CHAR_0; + text[5] = EOS; + AddTextPrinterParameterized3(1, 2, textWidth - 30, 18, sTextColors[1], 0, text); + + AddTextPrinterParameterized3(1, 2, 4, 32, sTextColors[1], 0, gText_MainMenuTime); + text[0] = (gSaveBlock2Ptr->playTimeHours / 100) + CHAR_0; + text[1] = (gSaveBlock2Ptr->playTimeHours % 100) / 10 + CHAR_0; + text[2] = (gSaveBlock2Ptr->playTimeHours % 10) + CHAR_0; + + if (text[0] == CHAR_0) + text[0] = CHAR_SPACE; + if (text[0] == CHAR_SPACE && text[1] == CHAR_0) + text[1] = CHAR_SPACE; + + text[3] = CHAR_COLON; + text[4] = (gSaveBlock2Ptr->playTimeMinutes % 100) / 10 + CHAR_0; + text[5] = (gSaveBlock2Ptr->playTimeMinutes % 10) + CHAR_0; + text[6] = EOS; + + AddTextPrinterParameterized3(1, 2, textWidth - 36, 32, sTextColors[1], 0, text); + + CopyWindowToVram(1, 3); +} + +static void ClearVramOamPltt_LoadHofPal(void) +{ + u32 vramOffset, oamOffset, plttOffset; + u32 vramSize, oamSize, plttSize; + + vramOffset = (VRAM); + vramSize = VRAM_SIZE; + while (TRUE) + { + DmaFill16(3, 0, vramOffset, 0x1000); + vramOffset += 0x1000; + vramSize -= 0x1000; + if (vramSize <= 0x1000) + { + DmaFill16(3, 0, vramOffset, vramSize); + break; + } + } + + oamOffset = OAM; + oamSize = OAM_SIZE; + DmaFill32(3, 0, oamOffset, oamSize); + + plttOffset = PLTT; + plttSize = PLTT_SIZE; + DmaFill16(3, 0, plttOffset, plttSize); + + ResetPaletteFade(); + LoadPalette(sHallOfFame_Pal, 0, 0x20); +} + +static void HofInit_ResetGpuBuffersAndLoadConfettiGfx(void) +{ + ScanlineEffect_Stop(); + ResetTasks(); + ResetSpriteData(); + ResetTempTileDataBuffers(); + ResetAllPicSprites(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + LoadCompressedSpriteSheet(sHallOfFame_ConfettiSpriteSheet); + LoadCompressedSpritePalette(sHallOfFame_ConfettiSpritePalette); +} + +static void Hof_InitBgs(void) +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, sHof_BgTemplates, NELEMS(sHof_BgTemplates)); + SetBgTilemapBuffer(1, sHofGfxPtr->tilemap1); + SetBgTilemapBuffer(3, sHofGfxPtr->tilemap2); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); +} + +static bool8 DrawHofBackground(void) +{ + switch (sHofGfxPtr->state) + { + case 0: + DecompressAndCopyTileDataToVram(1, sHallOfFame_Gfx, 0, 0, 0); + break; + case 1: + if (FreeTempTileDataBuffersIfPossible()) + return TRUE; + break; + case 2: + FillBgTilemapBufferRect_Palette0(1, 1, 0, 0, 0x20, 2); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 3, 0x20, 0xB); + FillBgTilemapBufferRect_Palette0(1, 1, 0, 0xE, 0x20, 6); + FillBgTilemapBufferRect_Palette0(3, 2, 0, 0, 0x20, 0x20); + + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(3); + break; + case 3: + InitStandardTextBoxWindows(); + ResetBg0(); + break; + case 4: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + ShowBg(0); + ShowBg(1); + ShowBg(3); + sHofGfxPtr->state = 0; + return FALSE; + } + + sHofGfxPtr->state++; + return TRUE; +} + +static void SpriteCB_EndGetOnScreen(struct Sprite * sprite) +{ + +} + +static void SpriteCB_GetOnScreen(struct Sprite * sprite) +{ + if (sprite->pos1.x != sprite->data[1] + || sprite->pos1.y != sprite->data[2]) + { + if (sprite->pos1.x < sprite->data[1]) + sprite->pos1.x += 15; + if (sprite->pos1.x > sprite->data[1]) + sprite->pos1.x -= 15; + + if (sprite->pos1.y < sprite->data[2]) + sprite->pos1.y += 10; + if (sprite->pos1.y > sprite->data[2]) + sprite->pos1.y -= 10; + } + else + { + sprite->data[0] = 1; + sprite->callback = SpriteCB_EndGetOnScreen; + } +} + +static void SpriteCB_Confetti(struct Sprite* sprite) +{ + if (sprite->pos2.y > 120) + { + DestroySprite(sprite); + } + else + { + u16 rand; + u8 tableID; + + sprite->pos2.y++; + sprite->pos2.y += sprite->data[1]; + + tableID = sprite->data[0]; + rand = (Random() % 4) + 8; + sprite->pos2.x = rand * gSineTable[tableID] / 256; + + sprite->data[0] += 4; + } +} + +static bool8 Hof_SpawnConfetti(void) +{ + u8 spriteID; + struct Sprite* sprite; + + s16 posX = Random() % 240; + s16 posY = -(Random() % 8); + + spriteID = CreateSprite(&sSpriteTemplate_Confetti, posX, posY, 0); + sprite = &gSprites[spriteID]; + + StartSpriteAnim(sprite, Random() % 17); + + if (Random() & 3) + sprite->data[1] = 0; + else + sprite->data[1] = 1; + + return FALSE; +} diff --git a/src/hof_pc.c b/src/hof_pc.c index 241fbc4f3..76fd06abf 100644 --- a/src/hof_pc.c +++ b/src/hof_pc.c @@ -19,7 +19,7 @@ static void Task_WaitFadeAndSetCallback(u8 taskId) FreeAllWindowBuffers(); ResetBgsAndClearDma3BusyFlags(0); DestroyTask(taskId); - SetMainCallback2(sub_80F2978); + SetMainCallback2(CB2_InitHofPC); } } diff --git a/src/pokemon.c b/src/pokemon.c index fb7a8c626..e772fd3a8 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5625,7 +5625,7 @@ u8 GetNumberOfRelearnableMoves(struct Pokemon *mon) } // SpeciesToPokedexNum? -u16 sub_8043F90(u16 species) +u16 SpeciesToPokedexNum(u16 species) { species = SpeciesToNationalPokedexNum(species); diff --git a/src/save.c b/src/save.c index 57364b10b..e38e9f10f 100644 --- a/src/save.c +++ b/src/save.c @@ -672,7 +672,7 @@ u8 HandleSavingData(u8 saveType) for(i = 0; i < 5; i++) save_write_to_flash(i, gRamSaveSectionLocations); break; - case EREADER_SAVE: + case SAVE_EREADER: SaveSerializedGame(); save_write_to_flash(0, gRamSaveSectionLocations); break; diff --git a/sym_ewram.txt b/sym_ewram.txt index 5873bba2e..14a9fad1e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -450,22 +450,13 @@ gUnknown_203AAB8: @ 203AAB8 .include "src/intro.o" .align 2 -gUnknown_203AB34: @ 203AB34 - .space 0x4 - -gUnknown_203AB38: @ 203AB38 - .space 0x4 - -gUnknown_203AB3C: @ 203AB3C - .space 0x4 - + .include "src/hall_of_fame.o" + .align 2 .include "src/credits.o" - -gUnknown_203AB44: @ 203AB44 - .space 0x4 - + .align 2 .include "src/diploma.o" + .align 2 gUnknown_203AB4C: @ 203AB4C .space 0x4 |