diff --git a/asm/hall_of_fame.s b/asm/hall_of_fame.s index a16df82c5..13585c831 100644 --- a/asm/hall_of_fame.s +++ b/asm/hall_of_fame.s @@ -8,1224 +8,4 @@ - - - thumb_func_start HallOfFame_PrintWelcomeText -HallOfFame_PrintWelcomeText: @ 8174A38 - push {r4,lr} - sub sp, 0xC - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - ldr r4, =gText_WelcomeToHOF - movs r0, 0x1 - adds r1, r4, 0 - movs r2, 0xD0 - bl GetStringCenterAlignXOffset - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - ldr r0, =gUnknown_085E5388 - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - movs r1, 0x1 - movs r3, 0x1 - bl box_print - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end HallOfFame_PrintWelcomeText - - thumb_func_start HallOfFame_PrintMonInfo -HallOfFame_PrintMonInfo: @ 8174A88 - push {r4-r7,lr} - sub sp, 0x2C - adds r7, r0, 0 - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - bl PutWindowTilemap - ldrh r0, [r7, 0x8] - ldr r1, =0x000001ff - ands r1, r0 - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - beq _08174B30 - ldr r1, =gText_Number - add r0, sp, 0xC - bl StringCopy - adds r6, r0, 0 - ldrh r0, [r7, 0x8] - lsls r0, 23 - lsrs r0, 23 - bl SpeciesToPokedexNum - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, =0x0000ffff - cmp r4, r0 - beq _08174B04 - adds r0, r4, 0 - movs r1, 0x64 - bl __divsi3 - subs r0, 0x5F - strb r0, [r6] - adds r6, 0x1 - adds r0, r4, 0 - movs r1, 0x64 - bl __modsi3 - adds r4, r0, 0 - movs r1, 0xA - bl __divsi3 - subs r0, 0x5F - strb r0, [r6] - adds r6, 0x1 - adds r0, r4, 0 - movs r1, 0xA - bl __modsi3 - subs r0, 0x5F - b _08174B0E - .pool -_08174B04: - movs r0, 0xAC - strb r0, [r6] - adds r6, 0x1 - strb r0, [r6] - adds r6, 0x1 -_08174B0E: - strb r0, [r6] - adds r6, 0x1 - movs r0, 0xFF - strb r0, [r6] - ldr r0, =gUnknown_085E5388 - str r0, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x10 - movs r3, 0x1 - bl box_print -_08174B30: - adds r1, r7, 0 - adds r1, 0xA - add r0, sp, 0xC - movs r2, 0xA - bl memcpy - add r1, sp, 0xC - movs r0, 0xFF - strb r0, [r1, 0xA] - ldrh r1, [r7, 0x8] - ldr r4, =0x000001ff - adds r0, r4, 0 - ands r0, r1 - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - bne _08174B8C - movs r0, 0x1 - add r1, sp, 0xC - movs r2, 0xD0 - bl GetStringCenterAlignXOffset - lsls r2, r0, 24 - lsrs r2, 24 - ldr r0, =gUnknown_085E5388 - str r0, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x1 - movs r3, 0x1 - bl box_print - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - b _08174C82 - .pool -_08174B8C: - movs r0, 0x1 - add r1, sp, 0xC - movs r2, 0x80 - bl GetStringRightAlignXOffset - lsls r2, r0, 24 - lsrs r2, 24 - ldr r0, =gUnknown_085E5388 - str r0, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x1 - movs r3, 0x1 - bl box_print - add r1, sp, 0xC - movs r0, 0xBA - strb r0, [r1] - mov r0, sp - adds r0, 0xD - ldrh r1, [r7, 0x8] - lsls r1, 23 - lsrs r1, 23 - movs r2, 0xB - muls r1, r2 - ldr r2, =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 _08174C0A - cmp r0, 0x1D - beq _08174C0A - lsls r0, r1, 23 - lsrs r0, 23 - ldr r1, [r7, 0x4] - bl GetGenderFromSpeciesAndPersonality - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _08174C00 - cmp r0, 0xFE - beq _08174C04 - b _08174C0A - .pool -_08174C00: - movs r0, 0xB5 - b _08174C06 -_08174C04: - movs r0, 0xB6 -_08174C06: - strb r0, [r6] - adds r6, 0x1 -_08174C0A: - movs r0, 0xFF - strb r0, [r6] - ldr r5, =gUnknown_085E5388 - str r5, [sp] - movs r4, 0x1 - negs r4, r4 - str r4, [sp, 0x4] - add r0, sp, 0xC - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x80 - movs r3, 0x1 - bl box_print - ldr r1, =gText_Level - 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, 0x1 - movs r2, 0x24 - movs r3, 0x11 - bl box_print - ldr r1, =gText_IDNumber - 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, 0x1 - movs r2, 0x68 - movs r3, 0x11 - bl box_print - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram -_08174C82: - add sp, 0x2C - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end HallOfFame_PrintMonInfo - - thumb_func_start HallOfFame_PrintPlayerInfo -HallOfFame_PrintPlayerInfo: @ 8174C98 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - movs r0, 0x1 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x1 - bl PutWindowTilemap - ldr r2, =0x0000021d - movs r0, 0x1 - movs r1, 0 - movs r3, 0xD - bl SetWindowBorderStyle - ldr r0, =gUnknown_085E538C - mov r8, r0 - str r0, [sp] - movs r1, 0x1 - negs r1, r1 - mov r9, r1 - str r1, [sp, 0x4] - ldr r0, =gText_Name - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - movs r3, 0x1 - bl box_print - ldr r0, =gSaveBlock2Ptr - mov r10, r0 - ldr r1, [r0] - movs r0, 0x1 - movs r2, 0x70 - bl GetStringRightAlignXOffset - lsls r2, r0, 24 - lsrs r2, 24 - mov r1, r8 - str r1, [sp] - mov r0, r9 - str r0, [sp, 0x4] - mov r1, r10 - ldr r0, [r1] - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r3, 0x1 - bl box_print - mov r1, r10 - ldr r0, [r1] - ldrb r4, [r0, 0xA] - ldrb r0, [r0, 0xB] - lsls r0, 8 - orrs r4, r0 - mov r0, r8 - str r0, [sp] - movs r7, 0 - str r7, [sp, 0x4] - ldr r0, =gText_IDNumber - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - movs r3, 0x11 - bl box_print - add r6, sp, 0xC - ldr r1, =0x000186a0 - adds r0, r4, 0 - bl __modsi3 - ldr r5, =0x00002710 - adds r1, r5, 0 - bl __divsi3 - subs r0, 0x5F - strb r0, [r6] - add r6, sp, 0xC - 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 - strb r0, [r6, 0x1] - add r6, sp, 0xC - adds r0, r4, 0 - adds r1, r5, 0 - bl __umodsi3 - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x64 - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r6, 0x2] - add r5, sp, 0xC - 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, 0xC - adds r0, r4, 0 - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r5, 0x4] - add r1, sp, 0xC - movs r0, 0xFF - strb r0, [r1, 0x5] - movs r0, 0x1 - movs r2, 0x70 - bl GetStringRightAlignXOffset - lsls r2, r0, 24 - lsrs r2, 24 - mov r1, r8 - str r1, [sp] - mov r0, r9 - str r0, [sp, 0x4] - add r1, sp, 0xC - str r1, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r3, 0x11 - bl box_print - mov r0, r8 - str r0, [sp] - mov r1, r9 - str r1, [sp, 0x4] - ldr r0, =gText_MainMenuTime - str r0, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0 - movs r3, 0x21 - bl box_print - add r5, sp, 0xC - mov r0, r10 - ldr r4, [r0] - ldrh r0, [r4, 0xE] - movs r1, 0x64 - bl __udivsi3 - adds r0, 0xA1 - strb r0, [r5] - add r5, sp, 0xC - 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, 0xC - ldrh r0, [r4, 0xE] - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r5, 0x2] - add r0, sp, 0xC - ldrb r0, [r0] - cmp r0, 0xA1 - bne _08174E1E - add r0, sp, 0xC - strb r7, [r0] -_08174E1E: - add r0, sp, 0xC - ldrb r1, [r0] - cmp r1, 0 - bne _08174E30 - ldrb r0, [r0, 0x1] - cmp r0, 0xA1 - bne _08174E30 - add r0, sp, 0xC - strb r1, [r0, 0x8] -_08174E30: - add r1, sp, 0xC - movs r0, 0xF0 - strb r0, [r1, 0x3] - adds r4, r1, 0 - ldr r0, =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, 0xC - ldrb r0, [r5, 0x10] - movs r1, 0xA - bl __umodsi3 - adds r0, 0xA1 - strb r0, [r4, 0x5] - add r1, sp, 0xC - movs r0, 0xFF - strb r0, [r1, 0x6] - movs r0, 0x1 - movs r2, 0x70 - bl GetStringRightAlignXOffset - lsls r2, r0, 24 - lsrs r2, 24 - ldr r0, =gUnknown_085E538C - str r0, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - add r1, sp, 0xC - str r1, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x1 - movs r3, 0x21 - bl box_print - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end HallOfFame_PrintPlayerInfo - - thumb_func_start sub_8174EC4 -sub_8174EC4: @ 8174EC4 - 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, =0x040000d4 - movs r5, 0x80 - lsls r5, 5 - ldr r7, =0x81000800 - movs r0, 0x81 - lsls r0, 24 - mov r12, r0 -_08174EEA: - 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 _08174EEA - 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, =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, =gUnknown_085E54E8 - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8174EC4 - - thumb_func_start sub_8174F70 -sub_8174F70: @ 8174F70 - push {lr} - bl remove_some_task - bl ResetTasks - bl ResetSpriteData - bl reset_temp_tile_data_buffers - bl dp13_810BB8C - bl FreeAllSpritePalettes - ldr r1, =gReservedSpritePaletteCount - movs r0, 0x8 - strb r0, [r1] - ldr r0, =gUnknown_085E5394 - bl LoadCompressedObjectPic - ldr r0, =gUnknown_085E53A4 - bl LoadCompressedObjectPalette - pop {r0} - bx r0 - .pool - thumb_func_end sub_8174F70 - - thumb_func_start sub_8174FAC -sub_8174FAC: @ 8174FAC - push {r4,lr} - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, =gUnknown_085E5374 - movs r0, 0 - movs r2, 0x3 - bl InitBgsFromTemplates - ldr r4, =gUnknown_0203BCDC - ldr r1, [r4] - adds r1, 0x12 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, =0x00001012 - 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 - .pool - thumb_func_end sub_8174FAC - - thumb_func_start sub_8175024 -sub_8175024: @ 8175024 - push {r4,lr} - sub sp, 0x8 - ldr r0, =gUnknown_0203BCDC - ldr r0, [r0] - ldrh r0, [r0] - cmp r0, 0x4 - bhi _08175108 - lsls r0, 2 - ldr r1, =_08175044 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .pool - .align 2, 0 -_08175044: - .4byte _08175058 - .4byte _08175070 - .4byte _0817507C - .4byte _081750D2 - .4byte _081750DC -_08175058: - ldr r1, =gUnknown_085E5508 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl decompress_and_copy_tile_data_to_vram - b _08175108 - .pool -_08175070: - bl free_temp_tile_data_buffers_if_possible - lsls r0, 24 - cmp r0, 0 - beq _08175108 - b _08175112 -_0817507C: - 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 _08175108 -_081750D2: - bl sub_81971D0 - bl sub_8197200 - b _08175108 -_081750DC: - 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, =gUnknown_0203BCDC - ldr r1, [r0] - movs r0, 0 - strh r0, [r1] - b _08175114 - .pool -_08175108: - ldr r0, =gUnknown_0203BCDC - ldr r1, [r0] - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] -_08175112: - movs r0, 0x1 -_08175114: - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - .pool - thumb_func_end sub_8175024 - - thumb_func_start sub_8175120 -sub_8175120: @ 8175120 - push {r4,lr} - adds r2, r0, 0 - ldr r1, [r2, 0x20] - ldr r0, [r2, 0x30] - cmp r1, r0 - beq _08175176 - ldrh r3, [r2, 0x20] - movs r1, 0x20 - ldrsh r0, [r2, r1] - movs r4, 0x30 - ldrsh r1, [r2, r4] - cmp r0, r1 - bge _08175140 - adds r0, r3, 0 - adds r0, 0xF - strh r0, [r2, 0x20] -_08175140: - ldrh r3, [r2, 0x20] - movs r4, 0x20 - ldrsh r0, [r2, r4] - cmp r0, r1 - ble _08175150 - adds r0, r3, 0 - subs r0, 0xF - strh r0, [r2, 0x20] -_08175150: - ldrh r3, [r2, 0x22] - movs r1, 0x22 - ldrsh r0, [r2, r1] - movs r4, 0x32 - ldrsh r1, [r2, r4] - cmp r0, r1 - bge _08175164 - adds r0, r3, 0 - adds r0, 0xA - strh r0, [r2, 0x22] -_08175164: - ldrh r3, [r2, 0x22] - movs r4, 0x22 - ldrsh r0, [r2, r4] - cmp r0, r1 - ble _0817519C - adds r0, r3, 0 - subs r0, 0xA - strh r0, [r2, 0x22] - b _0817519C -_08175176: - ldrh r0, [r2, 0x3C] - lsls r1, r0, 16 - movs r0, 0xCE - lsls r0, 17 - cmp r1, r0 - bne _08175190 - lsrs r1, 16 - adds r0, r2, 0 - movs r2, 0x1 - movs r3, 0x3 - bl DoMonFrontSpriteAnimation - b _0817519C -_08175190: - lsrs r1, 16 - adds r0, r2, 0 - movs r2, 0 - movs r3, 0x3 - bl DoMonFrontSpriteAnimation -_0817519C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8175120 - - thumb_func_start sub_81751A4 -sub_81751A4: @ 81751A4 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0x26] - movs r2, 0x26 - ldrsh r0, [r5, r2] - cmp r0, 0x78 - ble _081751BA - adds r0, r5, 0 - bl DestroySprite - b _081751F2 -_081751BA: - 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, =gSineTable - lsls r4, 1 - adds r4, r1 - movs r2, 0 - ldrsh r1, [r4, r2] - muls r0, r1 - cmp r0, 0 - bge _081751E8 - adds r0, 0xFF -_081751E8: - asrs r0, 8 - strh r0, [r5, 0x24] - ldrh r0, [r5, 0x2E] - adds r0, 0x4 - strh r0, [r5, 0x2E] -_081751F2: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81751A4 - - thumb_func_start sub_81751FC -sub_81751FC: @ 81751FC - 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, =gUnknown_085E54D0 - 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, =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 _08175274 - movs r0, 0 - b _08175276 - .pool -_08175274: - movs r0, 0x1 -_08175276: - strh r0, [r4, 0x30] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_81751FC - - thumb_func_start sub_8175280 -sub_8175280: @ 8175280 - push {r4,lr} - ldr r4, =gSpecialVar_0x8004 - movs r0, 0xB4 - strh r0, [r4] - ldr r0, =sub_8175364 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xFF - beq _081752AA - ldr r1, =gTasks - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r4] - strh r1, [r0, 0xA] - ldr r0, =gSpecialVar_0x8005 - strh r2, [r0] -_081752AA: - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8175280 - - thumb_func_start sub_81752C0 -sub_81752C0: @ 81752C0 - push {r4,lr} - ldr r0, =sub_8175364 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xFF - beq _081752D4 - bl DestroyTask -_081752D4: - bl sub_8152254 - ldr r4, =0x000003e9 - adds r0, r4, 0 - bl FreeSpriteTilesByTag - adds r0, r4, 0 - bl FreeSpritePaletteByTag - pop {r4} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81752C0 - - thumb_func_start sub_81752F4 -sub_81752F4: @ 81752F4 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5, 0xE] - movs r2, 0xE - ldrsh r0, [r5, r2] - cmp r0, 0x6E - ble _08175324 - ldr r2, =gTasks - movs r0, 0x28 - ldrsh r1, [r5, r0] - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - ldrh r1, [r0, 0x26] - subs r1, 0x1 - strh r1, [r0, 0x26] - ldrb r0, [r5, 0x16] - bl sub_81525D0 - b _08175358 - .pool -_08175324: - adds r0, r1, 0x1 - ldrh r1, [r5, 0x1C] - adds r0, r1 - strh r0, [r5, 0xE] - ldrb r4, [r5, 0x1A] - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - ands r0, r1 - adds r0, 0x8 - ldr r1, =gSineTable - lsls r4, 1 - adds r4, r1 - movs r2, 0 - ldrsh r1, [r4, r2] - muls r0, r1 - cmp r0, 0 - bge _0817534E - adds r0, 0xFF -_0817534E: - asrs r0, 8 - strh r0, [r5, 0xC] - ldrh r0, [r5, 0x1A] - adds r0, 0x4 - strh r0, [r5, 0x1A] -_08175358: - pop {r4,r5} - pop {r0} - bx r0 - .pool - thumb_func_end sub_81752F4 - - thumb_func_start sub_8175364 -sub_8175364: @ 8175364 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - lsls r0, 24 - lsrs r4, r0, 24 - mov r8, r4 - movs r7, 0 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - ldr r1, =gTasks + 0x8 - adds r6, r0, r1 - ldrh r0, [r6] - cmp r0, 0x1 - beq _081753E0 - cmp r0, 0x1 - bgt _08175394 - cmp r0, 0 - beq _0817539C - b _081754B0 - .pool -_08175394: - cmp r0, 0xFF - bne _0817539A - b _081754A0 -_0817539A: - b _081754B0 -_0817539C: - movs r0, 0x40 - bl sub_81521C0 - cmp r0, 0 - bne _081753B8 - adds r0, r4, 0 - bl DestroyTask - ldr r0, =gSpecialVar_0x8004 - strh r7, [r0] - ldr r1, =gSpecialVar_0x8005 - ldr r2, =0x0000ffff - adds r0, r2, 0 - strh r0, [r1] -_081753B8: - ldr r0, =gUnknown_085E5394 - bl LoadCompressedObjectPic - ldr r0, =gUnknown_085E53A4 - bl LoadCompressedObjectPalette - ldrh r0, [r6] - adds r0, 0x1 - strh r0, [r6] - b _081754B0 - .pool -_081753E0: - ldrh r0, [r6, 0x2] - cmp r0, 0 - beq _08175478 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 16 - cmp r0, 0 - bne _08175478 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0xF0 - bl __umodsi3 - adds r5, r0, 0 - lsls r5, 16 - asrs r5, 16 - bl Random - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - movs r0, 0x7 - ands r4, r0 - negs r4, r4 - lsls r4, 16 - asrs r4, 16 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x11 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - ldr r1, =gUnknown_085E53FC - ldr r2, =0x000003e9 - str r4, [sp] - str r0, [sp, 0x4] - str r7, [sp, 0x8] - adds r0, r1, 0 - adds r1, r2, 0 - adds r3, r5, 0 - bl sub_81524C4 - lsls r0, 24 - lsrs r7, r0, 24 - cmp r7, 0xFF - beq _08175478 - adds r4, r7, 0 - ldr r1, =sub_81752F4 - adds r0, r4, 0 - bl sub_8152438 - bl Random - movs r1, 0x3 - ands r1, r0 - cmp r1, 0 - bne _08175468 - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x1 - bl sub_8152474 -_08175468: - adds r0, r4, 0 - movs r1, 0x7 - mov r2, r8 - bl sub_8152474 - ldrh r0, [r6, 0x1E] - adds r0, 0x1 - strh r0, [r6, 0x1E] -_08175478: - bl sub_81522D4 - ldrh r0, [r6, 0x2] - cmp r0, 0 - beq _08175494 - subs r0, 0x1 - strh r0, [r6, 0x2] - b _081754B0 - .pool -_08175494: - ldrh r0, [r6, 0x1E] - cmp r0, 0 - bne _081754B0 - movs r0, 0xFF - strh r0, [r6] - b _081754B0 -_081754A0: - bl sub_81752C0 - ldr r0, =gSpecialVar_0x8004 - strh r7, [r0] - ldr r1, =gSpecialVar_0x8005 - ldr r2, =0x0000ffff - adds r0, r2, 0 - strh r0, [r1] -_081754B0: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .pool - thumb_func_end sub_8175364 - .align 2, 0 @ Don't pad with nop. diff --git a/data/hall_of_fame.s b/data/hall_of_fame.s index 29e509a49..7771224e7 100644 --- a/data/hall_of_fame.s +++ b/data/hall_of_fame.s @@ -15,10 +15,10 @@ gUnknown_085E5388:: @ 85E5388 gUnknown_085E538C:: @ 85E538C .incbin "baserom.gba", 0x5e538c, 0x8 -gUnknown_085E5394:: @ 85E5394 +sHallOfFame_ConfettiSpriteSheet:: @ 85E5394 .incbin "baserom.gba", 0x5e5394, 0x10 -gUnknown_085E53A4:: @ 85E53A4 +sHallOfFame_ConfettiSpritePalette:: @ 85E53A4 .incbin "baserom.gba", 0x5e53a4, 0x10 sHallOfFame_MonsFullTeamPositions:: @ 85E53B4 @@ -36,7 +36,7 @@ gUnknown_085E53FC:: @ 85E53FC gUnknown_085E54D0:: @ 85E54D0 .incbin "baserom.gba", 0x5e54d0, 0x18 -gUnknown_085E54E8:: @ 85E54E8 +gHallOfFame_Pal:: @ 85E54E8 .incbin "baserom.gba", 0x5e54e8, 0x20 gUnknown_085E5508:: @ 85E5508 diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 35509b53a..6e9cac28b 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -19,6 +19,11 @@ #include "blend_palette.h" #include "string_util.h" #include "m4a.h" +#include "international_string_util.h" +#include "unknown_task.h" +#include "trig.h" +#include "rng.h" +#include "event_data.h" struct HallofFameMon { @@ -38,8 +43,25 @@ extern struct HallofFameMons *gHofMonsPtr; struct HofGfx { - u16 field_0; - u8 field_2[0x2010]; + u16 state; + u8 field_2; + u8 field_3; + u8 field_4; + u8 field_5; + u8 field_6; + u8 field_7; + u8 field_8; + u8 field_9; + u8 field_A; + u8 field_B; + u8 field_C; + u8 field_D; + u8 field_E; + u8 field_F; + u8 field_10; + u8 field_11; + u8 tilemap1[0x1000]; + u8 tilemap2[0x1000]; }; extern struct HofGfx *gUnknown_0203BCDC; @@ -50,9 +72,24 @@ extern u8 gDecompressionBuffer[]; extern struct MusicPlayerInfo gMPlay_BGM; extern MainCallback gGameContinueCallback; extern u32 gDamagedSaveSectors; +extern u8 gReservedSpritePaletteCount; #define HALL_OF_FAME_MAX_TEAMS 50 +extern const u8 gUnknown_085E53FC[]; +extern const struct SpriteTemplate gUnknown_085E54D0; +extern const struct BgTemplate gUnknown_085E5374[3]; +extern const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet; +extern const struct CompressedSpritePalette sHallOfFame_ConfettiSpritePalette; +extern const u16 gHallOfFame_Pal[]; +extern const u8 gUnknown_085E5388[]; +extern const u8 gUnknown_085E538C[]; +extern const struct HallofFameMon sDummyFameMon; +extern const struct WindowTemplate gUnknown_085E5380; +extern const s16 sHallOfFame_MonsFullTeamPositions[][4]; +extern const s16 sHallOfFame_MonsHalfTeamPositions[][4]; +extern const u32 gUnknown_085E5508[]; + // strings extern const u8 gText_SavingDontTurnOffPower[]; extern const u8 gText_LeagueChamp[]; @@ -61,6 +98,12 @@ extern const u8 gText_PickNextCancel[]; extern const u8 gText_PickCancel[]; extern const u8 gText_UnkCtrlF800Exit[]; 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[]; extern void sub_81973C4(u8, u8); extern u16 AddTextPrinterParametrized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void ( *callback)(u16, struct TextPrinter *), u8 fgColor, u8 bgColor, u8 shadowColor); @@ -84,12 +127,23 @@ extern void sub_80F9BF4(u16, u16, u8); extern void sub_81980F0(u8, u8, u8, u8, u16); extern void sub_80F9BCC(u16, u16, u8); extern bool8 sub_80F9C1C(void); +extern u16 SpeciesToPokedexNum(u16 species); +extern void dp13_810BB8C(void); +extern void sub_81971D0(void); +extern void sub_8197200(void); +extern void sub_8152254(void); +extern void sub_81525D0(u8); +extern void sub_8152438(u8, void*); +extern void sub_8152474(u8, u8, u8); +extern void sub_81522D4(void); +extern bool32 sub_81521C0(u8); +extern u8 sub_81524C4(const void *arg0, s16 arg1, s16 arg2, s16 arg3, s16 arg4, u8 arg5, s16 arg6); // this file's functions -void sub_8174EC4(void); +void ClearVramOamPltt_LoadHofPal(void); void sub_8174F70(void); void sub_8174FAC(void); -void sub_81751FC(void); +bool8 sub_81751FC(void); static void SetCallback2AfterHallOfFameDisplay(void); bool8 sub_8175024(void); static void Task_Hof_InitMonData(u8 taskId); @@ -116,10 +170,11 @@ 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_ExitOnButtonPress(u8 taskId); -void sub_8175120(struct Sprite *sprite); +void SpriteCB_GetOnScreenAndAnimate(struct Sprite *sprite); void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2); -void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 arg1); +void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2); void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2); +void sub_8175364(u8 taskId); void VBlankCB_HallOfFame(void) { @@ -143,7 +198,7 @@ static bool8 InitHallOfFameScreen(void) { case 0: SetVBlankCallback(NULL); - sub_8174EC4(); + ClearVramOamPltt_LoadHofPal(); gUnknown_0203BCDC = AllocZeroed(sizeof(*gUnknown_0203BCDC)); gMain.state = 1; break; @@ -156,7 +211,7 @@ static bool8 InitHallOfFameScreen(void) SetGpuReg(REG_OFFSET_BLDALPHA, 0x710); SetGpuReg(REG_OFFSET_BLDY, 0); sub_8174FAC(); - gUnknown_0203BCDC->field_0 = 0; + gUnknown_0203BCDC->state = 0; gMain.state++; break; case 3: @@ -185,7 +240,7 @@ static bool8 InitHallOfFameScreen(void) #define tPokesNumber data[2] #define tFrameCount data[3] #define tPlayerSpriteID data[4] -#define tMonSpriteID(i) data[i + 5] +#define tMonSpriteId(i) data[i + 5] void CB2_DoHallOfFameScreen(void) { @@ -245,7 +300,7 @@ static void Task_Hof_InitMonData(u8 taskId) for (i = 0; i < 6; i++) { - gTasks[taskId].tMonSpriteID(i) = 0xFF; + gTasks[taskId].tMonSpriteId(i) = 0xFF; } if (gTasks[taskId].tDontSaveData) @@ -330,8 +385,9 @@ static void Task_Hof_SetMonDisplayTask(u8 taskId) gTasks[taskId].func = Task_Hof_DisplayMon; } -extern const s16 sHallOfFame_MonsFullTeamPositions[][4]; -extern const s16 sHallOfFame_MonsHalfTeamPositions[][4]; +#define tDestinationX data1 +#define tDestinationY data2 +#define tSpecies data7 static void Task_Hof_DisplayMon(u8 taskId) { @@ -360,12 +416,12 @@ static void Task_Hof_DisplayMon(u8 taskId) field6 += 10; spriteId = sub_818D3E4(currMon->species, currMon->tid, currMon->personality, 1, xPos, yPos, currMonId, 0xFFFF); - gSprites[spriteId].data1 = field4; - gSprites[spriteId].data2 = field6; + gSprites[spriteId].tDestinationX = field4; + gSprites[spriteId].tDestinationY = field6; gSprites[spriteId].data0 = 0; - gSprites[spriteId].data7 = currMon->species; - gSprites[spriteId].callback = sub_8175120; - gTasks[taskId].tMonSpriteID(currMonId) = spriteId; + gSprites[spriteId].tSpecies = currMon->species; + gSprites[spriteId].callback = SpriteCB_GetOnScreenAndAnimate; + gTasks[taskId].tMonSpriteId(currMonId) = spriteId; sub_8197434(0, 1); gTasks[taskId].func = Task_Hof_PrintMonInfoAfterAnimating; } @@ -374,7 +430,7 @@ static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId) { u16 currMonId = gTasks[taskId].tDisplayedMonId; struct HallofFameMon* currMon = &gHofMonsPtr->mons[currMonId]; - struct Sprite *monSprite = &gSprites[gTasks[taskId].tMonSpriteID(currMonId)]; + struct Sprite *monSprite = &gSprites[gTasks[taskId].tMonSpriteId(currMonId)]; if (monSprite->callback == SpriteCallbackDummy) { @@ -396,12 +452,12 @@ static void Task_Hof_TryDisplayAnotherMon(u8 taskId) } else { - gUnknown_0203BCD4 |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteID(currPokeID)].oam.paletteNum); + gUnknown_0203BCD4 |= (0x10000 << gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.paletteNum); if (gTasks[taskId].tDisplayedMonId <= 4 && currMon[1].species != SPECIES_NONE) // there is another pokemon to display { gTasks[taskId].tDisplayedMonId++; BeginNormalPaletteFade(gUnknown_0203BCD4, 0, 12, 12, 0x63B0); - gSprites[gTasks[taskId].tMonSpriteID(currPokeID)].oam.priority = 1; + gSprites[gTasks[taskId].tMonSpriteId(currPokeID)].oam.priority = 1; gTasks[taskId].func = Task_Hof_DisplayMon; } else @@ -411,29 +467,29 @@ static void Task_Hof_TryDisplayAnotherMon(u8 taskId) } } -static void Task_Hof_PaletteFadeAndPrintWelcomeText(u8 taskID) +static void Task_Hof_PaletteFadeAndPrintWelcomeText(u8 taskId) { u16 i; BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0, 0); for (i = 0; i < 6; i++) { - if (gTasks[taskID].tMonSpriteID(i) != 0xFF) - gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 0; + if (gTasks[taskId].tMonSpriteId(i) != 0xFF) + gSprites[gTasks[taskId].tMonSpriteId(i)].oam.priority = 0; } HallOfFame_PrintWelcomeText(0, 15); PlaySE(SE_DENDOU); - gTasks[taskID].tFrameCount = 400; - gTasks[taskID].func = sub_8173DC0; + gTasks[taskId].tFrameCount = 400; + gTasks[taskId].func = sub_8173DC0; } -static void sub_8173DC0(u8 taskID) +static void sub_8173DC0(u8 taskId) { - if (gTasks[taskID].tFrameCount != 0) + if (gTasks[taskId].tFrameCount != 0) { - gTasks[taskID].tFrameCount--; - if ((gTasks[taskID].tFrameCount & 3) == 0 && gTasks[taskID].tFrameCount > 110) + gTasks[taskId].tFrameCount--; + if ((gTasks[taskId].tFrameCount & 3) == 0 && gTasks[taskId].tFrameCount > 110) sub_81751FC(); } else @@ -441,55 +497,53 @@ static void sub_8173DC0(u8 taskID) u16 i; for (i = 0; i < 6; i++) { - if (gTasks[taskID].tMonSpriteID(i) != 0xFF) - gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 1; + if (gTasks[taskId].tMonSpriteId(i) != 0xFF) + gSprites[gTasks[taskId].tMonSpriteId(i)].oam.priority = 1; } BeginNormalPaletteFade(gUnknown_0203BCD4, 0, 12, 12, 0x63B0); FillWindowPixelBuffer(0, 0); CopyWindowToVram(0, 3); - gTasks[taskID].tFrameCount = 7; - gTasks[taskID].func = sub_8173EA4; + gTasks[taskId].tFrameCount = 7; + gTasks[taskId].func = sub_8173EA4; } } -static void sub_8173EA4(u8 taskID) +static void sub_8173EA4(u8 taskId) { - if (gTasks[taskID].tFrameCount >= 16) + if (gTasks[taskId].tFrameCount >= 16) { - gTasks[taskID].func = sub_8173EE4; + gTasks[taskId].func = sub_8173EE4; } else { - gTasks[taskID].tFrameCount++; - SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskID].tFrameCount * 256); + gTasks[taskId].tFrameCount++; + SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].tFrameCount * 256); } } -extern const struct WindowTemplate gUnknown_085E5380; - -static void sub_8173EE4(u8 taskID) +static void sub_8173EE4(u8 taskId) { SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); ShowBg(0); ShowBg(1); ShowBg(3); - gTasks[taskID].tPlayerSpriteID = sub_818D8AC(sub_818D97C(gSaveBlock2Ptr->playerGender, 1), 1, 120, 72, 6, 0xFFFF); + gTasks[taskId].tPlayerSpriteID = sub_818D8AC(sub_818D97C(gSaveBlock2Ptr->playerGender, 1), 1, 120, 72, 6, 0xFFFF); AddWindow(&gUnknown_085E5380); sub_80987D4(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0); LoadPalette(stdpal_get(1), 0xE0, 0x20); - gTasks[taskID].tFrameCount = 120; - gTasks[taskID].func = Task_Hof_WaitAndPrintPlayerInfo; + gTasks[taskId].tFrameCount = 120; + gTasks[taskId].func = Task_Hof_WaitAndPrintPlayerInfo; } -static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskID) +static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskId) { - if (gTasks[taskID].tFrameCount != 0) + if (gTasks[taskId].tFrameCount != 0) { - gTasks[taskID].tFrameCount--; + gTasks[taskId].tFrameCount--; } - else if (gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x != 192) + else if (gSprites[gTasks[taskId].tPlayerSpriteID].pos1.x != 192) { - gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x++; + gSprites[gTasks[taskId].tPlayerSpriteID].pos1.x++; } else { @@ -498,27 +552,27 @@ static void Task_Hof_WaitAndPrintPlayerInfo(u8 taskID) sub_81973C4(0, 0); AddTextPrinterParametrized(0, 1, gText_LeagueChamp, 0, NULL, 2, 1, 3); CopyWindowToVram(0, 3); - gTasks[taskID].func = Task_Hof_ExitOnKeyPressed; + gTasks[taskId].func = Task_Hof_ExitOnKeyPressed; } } -static void Task_Hof_ExitOnKeyPressed(u8 taskID) +static void Task_Hof_ExitOnKeyPressed(u8 taskId) { if (gMain.newKeys & A_BUTTON) { FadeOutBGM(4); - gTasks[taskID].func = Task_Hof_HandlePaletteOnExit; + gTasks[taskId].func = Task_Hof_HandlePaletteOnExit; } } -static void Task_Hof_HandlePaletteOnExit(u8 taskID) +static void Task_Hof_HandlePaletteOnExit(u8 taskId) { CpuCopy16(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); BeginNormalPaletteFade(-1, 8, 0, 0x10, 0); - gTasks[taskID].func = Task_Hof_HandleExit; + gTasks[taskId].func = Task_Hof_HandleExit; } -static void Task_Hof_HandleExit(u8 taskID) +static void Task_Hof_HandleExit(u8 taskId) { if (!gPaletteFade.active) { @@ -526,7 +580,7 @@ static void Task_Hof_HandleExit(u8 taskID) for (i = 0; i < 6; i++) { - u8 spriteId = gTasks[taskID].tMonSpriteID(i); + u8 spriteId = gTasks[taskId].tMonSpriteId(i); if (spriteId != 0xFF) { FreeOamMatrix(gSprites[spriteId].oam.matrixNum); @@ -534,7 +588,7 @@ static void Task_Hof_HandleExit(u8 taskID) } } - sub_818D8F0(gTasks[taskID].tPlayerSpriteID); + sub_818D8F0(gTasks[taskId].tPlayerSpriteID); HideBg(0); HideBg(1); HideBg(3); @@ -542,7 +596,7 @@ static void Task_Hof_HandleExit(u8 taskID) UnsetBgTilemapBuffer(1); UnsetBgTilemapBuffer(3); ResetBgsAndClearDma3BusyFlags(0); - DestroyTask(taskID); + DestroyTask(taskId); if (gUnknown_0203BCDC != NULL) FREE_AND_SET_NULL(gUnknown_0203BCDC); @@ -563,15 +617,13 @@ static void SetCallback2AfterHallOfFameDisplay(void) #undef tPokesNumber #undef tFrameCount #undef tPlayerSpriteID -#undef tMonSpriteID +#undef tMonSpriteId #define tCurrTeamNo data[0] #define tCurrPageNo data[1] -#define tCurrPokeID data[2] +#define tCurrPokeId data[2] #define tPokesNo data[4] -#define tMonSpriteID(i) data[i + 5] - -extern const struct HallofFameMon sDummyFameMon; +#define tMonSpriteId(i) data[i + 5] void CB2_DoHallOfFamePC(void) { @@ -580,7 +632,7 @@ void CB2_DoHallOfFamePC(void) case 0: default: SetVBlankCallback(NULL); - sub_8174EC4(); + ClearVramOamPltt_LoadHofPal(); gUnknown_0203BCDC = AllocZeroed(sizeof(*gUnknown_0203BCDC)); gMain.state = 1; break; @@ -624,7 +676,7 @@ void CB2_DoHallOfFamePC(void) for (i = 0; i < 6; i++) { - gTasks[taskId].tMonSpriteID(i) = 0xFF; + gTasks[taskId].tMonSpriteId(i) = 0xFF; } gHofMonsPtr = AllocZeroed(0x2000); @@ -634,12 +686,12 @@ void CB2_DoHallOfFamePC(void) } } -static void Task_HofPC_CopySaveData(u8 taskID) +static void Task_HofPC_CopySaveData(u8 taskId) { sub_81980F0(0, 0x1E, 0, 0xC, 0x226); if (sub_81534D0(3) != 1) { - gTasks[taskID].func = Task_HofPC_PrintDataIsCorrupted; + gTasks[taskId].func = Task_HofPC_PrintDataIsCorrupted; } else { @@ -655,34 +707,34 @@ static void Task_HofPC_CopySaveData(u8 taskID) } if (i < HALL_OF_FAME_MAX_TEAMS) - gTasks[taskID].tCurrTeamNo = i - 1; + gTasks[taskId].tCurrTeamNo = i - 1; else - gTasks[taskID].tCurrTeamNo = HALL_OF_FAME_MAX_TEAMS - 1; + gTasks[taskId].tCurrTeamNo = HALL_OF_FAME_MAX_TEAMS - 1; - gTasks[taskID].tCurrPageNo = GetGameStat(GAME_STAT_ENTERED_HOF); + gTasks[taskId].tCurrPageNo = GetGameStat(GAME_STAT_ENTERED_HOF); - gTasks[taskID].func = Task_HofPC_DrawSpritesPrintText; + gTasks[taskId].func = Task_HofPC_DrawSpritesPrintText; } } -static void Task_HofPC_DrawSpritesPrintText(u8 taskID) +static void Task_HofPC_DrawSpritesPrintText(u8 taskId) { struct HallofFameMons* savedTeams = gHofMonsPtr; struct HallofFameMon* currMon; u16 i; - for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++) + for (i = 0; i < gTasks[taskId].tCurrTeamNo; i++) savedTeams++; currMon = &savedTeams->mons[0]; gUnknown_0203BCD4 = 0; - gTasks[taskID].tCurrPokeID = 0; - gTasks[taskID].tPokesNo = 0; + gTasks[taskId].tCurrPokeId = 0; + gTasks[taskId].tPokesNo = 0; for (i = 0; i < 6; i++, currMon++) { if (currMon->species != 0) - gTasks[taskID].tPokesNo++; + gTasks[taskId].tPokesNo++; } currMon = &savedTeams->mons[0]; @@ -691,10 +743,10 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskID) { if (currMon->species != 0) { - u16 spriteID; + u16 spriteId; s16 posX, posY; - if (gTasks[taskID].tPokesNo > 3) + if (gTasks[taskId].tPokesNo > 3) { posX = sHallOfFame_MonsFullTeamPositions[i][2]; posY = sHallOfFame_MonsFullTeamPositions[i][3]; @@ -708,52 +760,52 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskID) if (currMon->species == SPECIES_EGG) posY += 10; - spriteID = sub_818D7D8(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, 0xFFFF); - gSprites[spriteID].oam.priority = 1; - gTasks[taskID].tMonSpriteID(i) = spriteID; + spriteId = sub_818D7D8(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, 0xFFFF); + gSprites[spriteId].oam.priority = 1; + gTasks[taskId].tMonSpriteId(i) = spriteId; } else { - gTasks[taskID].tMonSpriteID(i) = 0xFF; + gTasks[taskId].tMonSpriteId(i) = 0xFF; } } BlendPalettes(0xFFFF0000, 0xC, 0x63B0); - ConvertIntToDecimalStringN(gStringVar1, gTasks[taskID].tCurrPageNo, STR_CONV_MODE_RIGHT_ALIGN, 3); + ConvertIntToDecimalStringN(gStringVar1, gTasks[taskId].tCurrPageNo, STR_CONV_MODE_RIGHT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gText_HOFNumber); - if (gTasks[taskID].tCurrTeamNo <= 0) + if (gTasks[taskId].tCurrTeamNo <= 0) sub_8198204(gStringVar4, gText_PickCancel, 0, 0, 1); else sub_8198204(gStringVar4, gText_PickNextCancel, 0, 0, 1); - gTasks[taskID].func = Task_HofPC_PrintMonInfo; + gTasks[taskId].func = Task_HofPC_PrintMonInfo; } -static void Task_HofPC_PrintMonInfo(u8 taskID) +static void Task_HofPC_PrintMonInfo(u8 taskId) { struct HallofFameMons* savedTeams = gHofMonsPtr; struct HallofFameMon* currMon; u16 i; u16 currMonID; - for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++) + for (i = 0; i < gTasks[taskId].tCurrTeamNo; i++) savedTeams++; for (i = 0; i < 6; i++) { - u16 spriteID = gTasks[taskID].tMonSpriteID(i); - if (spriteID != 0xFF) - gSprites[spriteID].oam.priority = 1; + u16 spriteId = gTasks[taskId].tMonSpriteId(i); + if (spriteId != 0xFF) + gSprites[spriteId].oam.priority = 1; } - currMonID = gTasks[taskID].tMonSpriteID(gTasks[taskID].tCurrPokeID); + currMonID = gTasks[taskId].tMonSpriteId(gTasks[taskId].tCurrPokeId); gSprites[currMonID].oam.priority = 0; gUnknown_0203BCD4 = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; BlendPalettesUnfaded(gUnknown_0203BCD4, 0xC, 0x63B0); - currMon = &savedTeams->mons[gTasks[taskID].tCurrPokeID]; + currMon = &savedTeams->mons[gTasks[taskId].tCurrPokeId]; if (currMon->species != SPECIES_EGG) { StopCryAndClearCrySongs(); @@ -761,30 +813,30 @@ static void Task_HofPC_PrintMonInfo(u8 taskID) } HallOfFame_PrintMonInfo(currMon, 0, 14); - gTasks[taskID].func = Task_HofPC_HandleInput; + gTasks[taskId].func = Task_HofPC_HandleInput; } -static void Task_HofPC_HandleInput(u8 taskID) +static void Task_HofPC_HandleInput(u8 taskId) { u16 i; if (gMain.newKeys & A_BUTTON) { - if (gTasks[taskID].tCurrTeamNo != 0) // prepare another team to view + if (gTasks[taskId].tCurrTeamNo != 0) // prepare another team to view { - gTasks[taskID].tCurrTeamNo--; + gTasks[taskId].tCurrTeamNo--; for (i = 0; i < 6; i++) { - u8 spriteID = gTasks[taskID].tMonSpriteID(i); - if (spriteID != 0xFF) + u8 spriteId = gTasks[taskId].tMonSpriteId(i); + if (spriteId != 0xFF) { - sub_818D820(spriteID); - gTasks[taskID].tMonSpriteID(i) = 0xFF; + sub_818D820(spriteId); + gTasks[taskId].tMonSpriteId(i) = 0xFF; } } - if (gTasks[taskID].tCurrPageNo != 0) - gTasks[taskID].tCurrPageNo--; - gTasks[taskID].func = Task_HofPC_DrawSpritesPrintText; + if (gTasks[taskId].tCurrPageNo != 0) + gTasks[taskId].tCurrPageNo--; + gTasks[taskId].func = Task_HofPC_DrawSpritesPrintText; } else // no more teams to view, turn off hall of fame PC { @@ -793,7 +845,7 @@ static void Task_HofPC_HandleInput(u8 taskID) StopCryAndClearCrySongs(); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); } - gTasks[taskID].func = Task_HofPC_HandlePaletteOnExit; + gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } } else if (gMain.newKeys & B_BUTTON) // turn off hall of fame PC @@ -803,21 +855,21 @@ static void Task_HofPC_HandleInput(u8 taskID) StopCryAndClearCrySongs(); m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); } - gTasks[taskID].func = Task_HofPC_HandlePaletteOnExit; + gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } - else if (gMain.newKeys & DPAD_UP && gTasks[taskID].tCurrPokeID != 0) // change mon -1 + else if (gMain.newKeys & DPAD_UP && gTasks[taskId].tCurrPokeId != 0) // change mon -1 { - gTasks[taskID].tCurrPokeID--; - gTasks[taskID].func = Task_HofPC_PrintMonInfo; + gTasks[taskId].tCurrPokeId--; + gTasks[taskId].func = Task_HofPC_PrintMonInfo; } - else if (gMain.newKeys & DPAD_DOWN && gTasks[taskID].tCurrPokeID < gTasks[taskID].tPokesNo - 1) // change mon +1 + else if (gMain.newKeys & DPAD_DOWN && gTasks[taskId].tCurrPokeId < gTasks[taskId].tPokesNo - 1) // change mon +1 { - gTasks[taskID].tCurrPokeID++; - gTasks[taskID].func = Task_HofPC_PrintMonInfo; + gTasks[taskId].tCurrPokeId++; + gTasks[taskId].func = Task_HofPC_PrintMonInfo; } } -static void Task_HofPC_HandlePaletteOnExit(u8 taskID) +static void Task_HofPC_HandlePaletteOnExit(u8 taskId) { struct HallofFameMons* fameMons; @@ -825,10 +877,10 @@ static void Task_HofPC_HandlePaletteOnExit(u8 taskID) fameMons = (struct HallofFameMons*)(gDecompressionBuffer); fameMons->mons[0] = sDummyFameMon; sub_80F9BF4(0, 0, 0); - gTasks[taskID].func = Task_HofPC_HandleExit; + gTasks[taskId].func = Task_HofPC_HandleExit; } -static void Task_HofPC_HandleExit(u8 taskID) +static void Task_HofPC_HandleExit(u8 taskId) { if (!sub_80F9C30()) { @@ -836,11 +888,11 @@ static void Task_HofPC_HandleExit(u8 taskID) for (i = 0; i < 6; i++) { - u16 spriteId = gTasks[taskID].tMonSpriteID(i); + u16 spriteId = gTasks[taskId].tMonSpriteId(i); if (spriteId != 0xFF) { sub_818D820(spriteId); - gTasks[taskID].tMonSpriteID(i) = 0xFF; + gTasks[taskId].tMonSpriteId(i) = 0xFF; } } @@ -852,7 +904,7 @@ static void Task_HofPC_HandleExit(u8 taskID) UnsetBgTilemapBuffer(1); UnsetBgTilemapBuffer(3); ResetBgsAndClearDma3BusyFlags(0); - DestroyTask(taskID); + DestroyTask(taskId); if (gUnknown_0203BCDC != NULL) FREE_AND_SET_NULL(gUnknown_0203BCDC); @@ -872,14 +924,438 @@ static void Task_HofPC_PrintDataIsCorrupted(u8 taskId) gTasks[taskId].func = Task_HofPC_ExitOnButtonPress; } -static void Task_HofPC_ExitOnButtonPress(u8 taskID) +static void Task_HofPC_ExitOnButtonPress(u8 taskId) { if (gMain.newKeys & A_BUTTON) - gTasks[taskID].func = Task_HofPC_HandlePaletteOnExit; + gTasks[taskId].func = Task_HofPC_HandlePaletteOnExit; } #undef tCurrTeamNo #undef tCurrPageNo -#undef tCurrPokeID +#undef tCurrPokeId #undef tPokesNo -#undef tMonSpriteID +#undef tMonSpriteId + +void HallOfFame_PrintWelcomeText(u8 unusedPossiblyWindowId, u8 unused2) +{ + FillWindowPixelBuffer(0, 0); + PutWindowTilemap(0); + box_print(0, 1, GetStringCenterAlignXOffset(1, gText_WelcomeToHOF, 0xD0), 1, gUnknown_085E5388, 0, gText_WelcomeToHOF); + CopyWindowToVram(0, 3); +} + +void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u8 unused2) +{ + u8 text[30]; + u8 *stringPtr; + s32 dexNumber; + s32 width; + + FillWindowPixelBuffer(0, 0); + PutWindowTilemap(0); + + // dex number + if (currMon->species != SPECIES_EGG) + { + stringPtr = StringCopy(text, gText_Number); + dexNumber = SpeciesToPokedexNum(currMon->species); + if (dexNumber != 0xFFFF) + { + stringPtr[0] = (dexNumber / 100) + CHAR_0; + stringPtr++; + dexNumber %= 100; + stringPtr[0] = (dexNumber / 10) + CHAR_0; + stringPtr++; + stringPtr[0] = (dexNumber % 10) + CHAR_0; + stringPtr++; + } + else + { + *(stringPtr)++ = CHAR_QUESTION_MARK; + *(stringPtr)++ = CHAR_QUESTION_MARK; + *(stringPtr)++ = CHAR_QUESTION_MARK; + } + stringPtr[0] = EOS; + box_print(0, 1, 0x10, 1, gUnknown_085E5388, -1, text); + } + + // nick, species names, gender and level + memcpy(text, currMon->nick, POKEMON_NAME_LENGTH); + text[POKEMON_NAME_LENGTH] = EOS; + if (currMon->species == SPECIES_EGG) + { + width = GetStringCenterAlignXOffset(1, text, 0xD0); + box_print(0, 1, width, 1, gUnknown_085E5388, -1, text); + CopyWindowToVram(0, 3); + } + else + { + width = GetStringRightAlignXOffset(1, text, 0x80); + box_print(0, 1, width, 1, gUnknown_085E5388, -1, text); + + text[0] = CHAR_SLASH; + stringPtr = StringCopy(text + 1, gSpeciesNames[currMon->species]); + + if (currMon->species != SPECIES_NIDORAN_M && currMon->species != SPECIES_NIDORAN_F) + { + switch (GetGenderFromSpeciesAndPersonality(currMon->species, currMon->personality)) + { + case MON_MALE: + stringPtr[0] = CHAR_MALE; + stringPtr++; + break; + case MON_FEMALE: + stringPtr[0] = CHAR_FEMALE; + stringPtr++; + break; + } + } + + stringPtr[0] = EOS; + box_print(0, 1, 0x80, 1, gUnknown_085E5388, -1, text); + + stringPtr = StringCopy(text, gText_Level); + ConvertIntToDecimalStringN(stringPtr, currMon->lvl, STR_CONV_MODE_LEFT_ALIGN, 3); + box_print(0, 1, 0x24, 0x11, gUnknown_085E5388, -1, text); + + stringPtr = StringCopy(text, gText_IDNumber); + ConvertIntToDecimalStringN(stringPtr, (u16)(currMon->tid), STR_CONV_MODE_LEADING_ZEROS, 5); + box_print(0, 1, 0x68, 0x11, gUnknown_085E5388, -1, text); + + CopyWindowToVram(0, 3); + } +} + +void HallOfFame_PrintPlayerInfo(u8 unused1, u8 unused2) +{ + u8 text[20]; + u32 width; + u16 trainerId; + + FillWindowPixelBuffer(1, 0x11); + PutWindowTilemap(1); + SetWindowBorderStyle(1, FALSE, 0x21D, 0xD); + box_print(1, 1, 0, 1, gUnknown_085E538C, -1, gText_Name); + + width = GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 0x70); + box_print(1, 1, width, 1, gUnknown_085E538C, -1, gSaveBlock2Ptr->playerName); + + trainerId = (gSaveBlock2Ptr->playerTrainerId[0]) | (gSaveBlock2Ptr->playerTrainerId[1] << 8); + box_print(1, 1, 0, 0x11, gUnknown_085E538C, 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; + width = GetStringRightAlignXOffset(1, text, 0x70); + box_print(1, 1, width, 0x11, gUnknown_085E538C, -1, text); + + box_print(1, 1, 0, 0x21, gUnknown_085E538C, -1, 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[8] = CHAR_SPACE; + + text[3] = CHAR_COLON; + text[4] = (gSaveBlock2Ptr->playTimeMinutes % 100) / 10 + CHAR_0; + text[5] = (gSaveBlock2Ptr->playTimeMinutes % 10) + CHAR_0; + text[6] = EOS; + + width = GetStringRightAlignXOffset(1, text, 0x70); + box_print(1, 1, width, 0x21, gUnknown_085E538C, -1, text); + + CopyWindowToVram(1, 3); +} + +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(gHallOfFame_Pal, 0, 0x20); +} + +void sub_8174F70(void) +{ + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + reset_temp_tile_data_buffers(); + dp13_810BB8C(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + LoadCompressedObjectPic(&sHallOfFame_ConfettiSpriteSheet); + LoadCompressedObjectPalette(&sHallOfFame_ConfettiSpritePalette); +} + +void sub_8174FAC(void) +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_085E5374, ARRAY_COUNT(gUnknown_085E5374)); + SetBgTilemapBuffer(1, gUnknown_0203BCDC->tilemap1); + SetBgTilemapBuffer(3, gUnknown_0203BCDC->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); +} + +bool8 sub_8175024(void) +{ + switch (gUnknown_0203BCDC->state) + { + case 0: + decompress_and_copy_tile_data_to_vram(1, gUnknown_085E5508, 0, 0, 0); + break; + case 1: + if (free_temp_tile_data_buffers_if_possible()) + 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: + sub_81971D0(); + sub_8197200(); + break; + case 4: + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); + ShowBg(0); + ShowBg(1); + ShowBg(3); + gUnknown_0203BCDC->state = 0; + return FALSE; + } + + gUnknown_0203BCDC->state++; + return TRUE; +} + +void SpriteCB_GetOnScreenAndAnimate(struct Sprite *sprite) +{ + if (sprite->pos1.x != sprite->tDestinationX + || sprite->pos1.y != sprite->tDestinationY) + { + if (sprite->pos1.x < sprite->tDestinationX) + sprite->pos1.x += 15; + if (sprite->pos1.x > sprite->tDestinationX) + sprite->pos1.x -= 15; + + if (sprite->pos1.y < sprite->tDestinationY) + sprite->pos1.y += 10; + if (sprite->pos1.y > sprite->tDestinationY) + sprite->pos1.y -= 10; + } + else + { + s16 species = sprite->tSpecies; + + if (species == SPECIES_EGG) + DoMonFrontSpriteAnimation(sprite, species, TRUE, 3); + else + DoMonFrontSpriteAnimation(sprite, species, FALSE, 3); + } +} + +#undef tDestinationX +#undef tDestinationY +#undef tSpecies + +static void sub_81751A4(struct Sprite* sprite) +{ + if (sprite->pos2.y > 120) + { + DestroySprite(sprite); + } + else + { + u16 rand; + u8 tableID; + + sprite->pos2.y++; + sprite->pos2.y += sprite->data1; + + tableID = sprite->data0; + rand = (Random() % 4) + 8; + sprite->pos2.x = rand * gSineTable[tableID] / 256; + + sprite->data0 += 4; + } +} + +bool8 sub_81751FC(void) +{ + u8 spriteID; + struct Sprite* sprite; + + s16 posX = Random() % 240; + s16 posY = -(Random() % 8); + + spriteID = CreateSprite(&gUnknown_085E54D0, posX, posY, 0); + sprite = &gSprites[spriteID]; + + StartSpriteAnim(sprite, Random() % 17); + + if (Random() & 3) + sprite->data1 = 0; + else + sprite->data1 = 1; + + return FALSE; +} + +void sub_8175280(void) +{ + u8 taskId; + + gSpecialVar_0x8004 = 180; + taskId = CreateTask(sub_8175364, 0); + if (taskId != 0xFF) + { + gTasks[taskId].data[1] = gSpecialVar_0x8004; + gSpecialVar_0x8005 = taskId; + } +} + +void sub_81752C0(void) +{ + u8 taskId; + + if ((taskId = FindTaskIdByFunc(sub_8175364)) != 0xFF) + DestroyTask(taskId); + + sub_8152254(); + FreeSpriteTilesByTag(0x3E9); + FreeSpritePaletteByTag(0x3E9); +} + +struct UnknownStruct912B4 +{ + s16 field_0; + s16 field_2; + s16 field_4; + s16 field_6; + s16 field_8; + s16 field_A; + s16 field_C; + s16 field_E; + s16 field_10; + s16 field_12; + s16 field_14; + s16 field_16; + s16 field_18; + s16 field_1A; + s16 field_1C; + s16 field_1E; + s16 field_20; + s16 field_22; + s16 field_24; + s16 field_26; + s16 field_28; +}; + +void sub_81752F4(struct UnknownStruct912B4 *unkStruct) +{ + if (unkStruct->field_E > 110) + { + gTasks[unkStruct->field_28].data[15]--; + sub_81525D0(unkStruct->field_16); + } + else + { + u8 var; + s32 rand; + + unkStruct->field_E++; + unkStruct->field_E += unkStruct->field_1C; + + var = unkStruct->field_1A; + rand = Random(); + rand &= 3; + rand += 8; + unkStruct->field_C = (rand) * ((gSineTable[var])) / 256; + + unkStruct->field_1A += 4; + } +} + +void sub_8175364(u8 taskId) +{ + u32 var = 0; + u16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (!sub_81521C0(0x40)) + { + DestroyTask(taskId); + gSpecialVar_0x8004 = var; + gSpecialVar_0x8005 = 0xFFFF; + } + LoadCompressedObjectPic(&sHallOfFame_ConfettiSpriteSheet); + LoadCompressedObjectPalette(&sHallOfFame_ConfettiSpritePalette); + data[0]++; + break; + case 1: + if (data[1] != 0 && data[1] % 3 == 0) + { + var = sub_81524C4(gUnknown_085E53FC, 0x3E9, 0x3E9, Random() % 240, -(Random() % 8), Random() % 0x11, var); + if (var != 0xFF) + { + sub_8152438(var, sub_81752F4); + if ((Random() & 3) == 0) + sub_8152474(var, 1, 1); + sub_8152474(var, 7, taskId); + data[15]++; + } + } + sub_81522D4(); + if (data[1] != 0) + data[1]--; + else if (data[15] == 0) + data[0] = 0xFF; + break; + case 0xFF: + sub_81752C0(); + gSpecialVar_0x8004 = var; + gSpecialVar_0x8005 = 0xFFFF; + break; + } +}