diff options
-rw-r--r-- | asm/field_effect.s | 971 | ||||
-rw-r--r-- | data/field_effect.s | 130 | ||||
-rw-r--r-- | src/field_effect.c | 531 |
3 files changed, 531 insertions, 1101 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index a484b28ac..ab3c8063d 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,977 +5,6 @@ .text - thumb_func_start FldEff_PokecenterHeal -FldEff_PokecenterHeal: @ 8083B8C - push {r4,lr} - bl CalculatePlayerPartyCount - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08083BC8 @ =Task_PokecenterHeal - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083BCC @ =gTasks - adds r1, r0 - strh r4, [r1, 0xA] - movs r0, 0x5D - strh r0, [r1, 0xC] - movs r0, 0x24 - strh r0, [r1, 0xE] - movs r0, 0x80 - strh r0, [r1, 0x10] - movs r0, 0x18 - strh r0, [r1, 0x12] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08083BC8: .4byte Task_PokecenterHeal -_08083BCC: .4byte gTasks - thumb_func_end FldEff_PokecenterHeal - - thumb_func_start Task_PokecenterHeal -Task_PokecenterHeal: @ 8083BD0 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083BF8 @ =gTasks - adds r1, r0 - ldr r2, _08083BFC @ =sPokecenterHealTaskCBTable - movs r3, 0x8 - ldrsh r0, [r1, r3] - lsls r0, 2 - adds r0, r2 - ldr r2, [r0] - adds r0, r1, 0 - bl _call_via_r2 - pop {r0} - bx r0 - .align 2, 0 -_08083BF8: .4byte gTasks -_08083BFC: .4byte sPokecenterHealTaskCBTable - thumb_func_end Task_PokecenterHeal - - thumb_func_start PokecenterHealEffect_0 -PokecenterHealEffect_0: @ 8083C00 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0xA - ldrsh r0, [r4, r1] - movs r2, 0xC - ldrsh r1, [r4, r2] - movs r3, 0xE - ldrsh r2, [r4, r3] - movs r3, 0x1 - bl CreatePokeballGlowSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x14] - movs r1, 0x10 - ldrsh r0, [r4, r1] - movs r2, 0x12 - ldrsh r1, [r4, r2] - bl PokecenterHealEffectHelper - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x16] - pop {r4} - pop {r0} - bx r0 - thumb_func_end PokecenterHealEffect_0 - - thumb_func_start PokecenterHealEffect_1 -PokecenterHealEffect_1: @ 8083C3C - push {r4,lr} - adds r2, r0, 0 - ldr r3, _08083C74 @ =gSprites - movs r1, 0x14 - ldrsh r0, [r2, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r3 - movs r4, 0x2E - ldrsh r0, [r1, r4] - cmp r0, 0x1 - ble _08083C6E - movs r0, 0x16 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r1, [r0, 0x2E] - adds r1, 0x1 - strh r1, [r0, 0x2E] - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] -_08083C6E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083C74: .4byte gSprites - thumb_func_end PokecenterHealEffect_1 - - thumb_func_start PokecenterHealEffect_2 -PokecenterHealEffect_2: @ 8083C78 - push {lr} - adds r3, r0, 0 - ldr r2, _08083C9C @ =gSprites - movs r0, 0x14 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x4 - ble _08083C98 - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08083C98: - pop {r0} - bx r0 - .align 2, 0 -_08083C9C: .4byte gSprites - thumb_func_end PokecenterHealEffect_2 - - thumb_func_start PokecenterHealEffect_3 -PokecenterHealEffect_3: @ 8083CA0 - push {lr} - ldr r2, _08083CD8 @ =gSprites - movs r3, 0x14 - ldrsh r1, [r0, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x6 - ble _08083CD2 - adds r0, r1, 0 - bl DestroySprite - movs r0, 0x19 - bl FieldEffectActiveListRemove - ldr r0, _08083CDC @ =Task_PokecenterHeal - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08083CD2: - pop {r0} - bx r0 - .align 2, 0 -_08083CD8: .4byte gSprites -_08083CDC: .4byte Task_PokecenterHeal - thumb_func_end PokecenterHealEffect_3 - - thumb_func_start FldEff_HallOfFameRecord -FldEff_HallOfFameRecord: @ 8083CE0 - push {r4,lr} - bl CalculatePlayerPartyCount - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08083D14 @ =Task_HallOfFameRecord - movs r1, 0xFF - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083D18 @ =gTasks - adds r1, r0 - strh r4, [r1, 0xA] - movs r0, 0x75 - strh r0, [r1, 0xC] - movs r0, 0x3C - strh r0, [r1, 0xE] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08083D14: .4byte Task_HallOfFameRecord -_08083D18: .4byte gTasks - thumb_func_end FldEff_HallOfFameRecord - - thumb_func_start Task_HallOfFameRecord -Task_HallOfFameRecord: @ 8083D1C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _08083D44 @ =gTasks - adds r1, r0 - ldr r2, _08083D48 @ =sHallOfFameRecordTaskCBTable - movs r3, 0x8 - ldrsh r0, [r1, r3] - lsls r0, 2 - adds r0, r2 - ldr r2, [r0] - adds r0, r1, 0 - bl _call_via_r2 - pop {r0} - bx r0 - .align 2, 0 -_08083D44: .4byte gTasks -_08083D48: .4byte sHallOfFameRecordTaskCBTable - thumb_func_end Task_HallOfFameRecord - - thumb_func_start HallOfFameRecordEffect_0 -HallOfFameRecordEffect_0: @ 8083D4C - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r1, 0xA - ldrsh r0, [r4, r1] - movs r2, 0xC - ldrsh r1, [r4, r2] - movs r3, 0xE - ldrsh r2, [r4, r3] - movs r3, 0 - bl CreatePokeballGlowSprite - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x14] - pop {r4} - pop {r0} - bx r0 - thumb_func_end HallOfFameRecordEffect_0 - - thumb_func_start HallOfFameRecordEffect_1 -HallOfFameRecordEffect_1: @ 8083D74 - push {r4,lr} - adds r4, r0, 0 - ldr r2, _08083DA8 @ =gSprites - movs r0, 0x14 - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x1 - ble _08083DA2 - movs r0, 0x78 - movs r1, 0x19 - bl HallOfFameRecordEffectHelper - ldrh r0, [r4, 0x26] - adds r0, 0x1 - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08083DA2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083DA8: .4byte gSprites - thumb_func_end HallOfFameRecordEffect_1 - - thumb_func_start HallOfFameRecordEffect_2 -HallOfFameRecordEffect_2: @ 8083DAC - push {lr} - adds r3, r0, 0 - ldr r2, _08083DD0 @ =gSprites - movs r0, 0x14 - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x4 - ble _08083DCC - ldrh r0, [r3, 0x8] - adds r0, 0x1 - strh r0, [r3, 0x8] -_08083DCC: - pop {r0} - bx r0 - .align 2, 0 -_08083DD0: .4byte gSprites - thumb_func_end HallOfFameRecordEffect_2 - - thumb_func_start HallOfFameRecordEffect_3 -HallOfFameRecordEffect_3: @ 8083DD4 - push {lr} - ldr r2, _08083E0C @ =gSprites - movs r3, 0x14 - ldrsh r1, [r0, r3] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r1, r0, r2 - movs r2, 0x2E - ldrsh r0, [r1, r2] - cmp r0, 0x6 - ble _08083E06 - adds r0, r1, 0 - bl DestroySprite - movs r0, 0x3E - bl FieldEffectActiveListRemove - ldr r0, _08083E10 @ =Task_HallOfFameRecord - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08083E06: - pop {r0} - bx r0 - .align 2, 0 -_08083E0C: .4byte gSprites -_08083E10: .4byte Task_HallOfFameRecord - thumb_func_end HallOfFameRecordEffect_3 - - thumb_func_start CreatePokeballGlowSprite -CreatePokeballGlowSprite: @ 8083E14 - push {r4-r6,lr} - mov r6, r8 - push {r6} - mov r8, r0 - adds r4, r1, 0 - adds r5, r2, 0 - adds r6, r3, 0 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r4, 16 - lsrs r4, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r6, 16 - lsrs r6, 16 - ldr r0, _08083E68 @ =SpriteCB_PokeballGlowEffect - bl CreateInvisibleSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r2, _08083E6C @ =gSprites - adds r1, r2 - strh r4, [r1, 0x24] - strh r5, [r1, 0x26] - adds r3, r1, 0 - adds r3, 0x43 - movs r2, 0xFF - strb r2, [r3] - strh r6, [r1, 0x38] - mov r2, r8 - strh r2, [r1, 0x3A] - strh r0, [r1, 0x3C] - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08083E68: .4byte SpriteCB_PokeballGlowEffect -_08083E6C: .4byte gSprites - thumb_func_end CreatePokeballGlowSprite - - thumb_func_start SpriteCB_PokeballGlowEffect -SpriteCB_PokeballGlowEffect: @ 8083E70 - push {lr} - ldr r2, _08083E88 @ =sPokeballGlowSpriteCBTable - movs r3, 0x2E - ldrsh r1, [r0, r3] - lsls r1, 2 - adds r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08083E88: .4byte sPokeballGlowSpriteCBTable - thumb_func_end SpriteCB_PokeballGlowEffect - - thumb_func_start PokeballGlowEffect_0 -PokeballGlowEffect_0: @ 8083E8C - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x30] - movs r2, 0x30 - ldrsh r0, [r4, r2] - cmp r0, 0 - beq _08083EA4 - subs r0, r1, 0x1 - strh r0, [r4, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _08083F00 -_08083EA4: - movs r0, 0x19 - strh r0, [r4, 0x30] - ldr r0, _08083F18 @ =gUnknown_83CBF88 - ldr r1, _08083F1C @ =gUnknown_83CC010 - movs r2, 0x32 - ldrsh r3, [r4, r2] - lsls r3, 2 - adds r3, r1 - ldrh r1, [r4, 0x24] - ldrh r2, [r3] - adds r1, r2 - lsls r1, 16 - asrs r1, 16 - ldrh r2, [r4, 0x26] - ldrh r3, [r3, 0x2] - adds r2, r3 - lsls r2, 16 - asrs r2, 16 - movs r3, 0xFF - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08083F20 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - movs r2, 0x8 - orrs r0, r2 - strb r0, [r1, 0x5] - ldrh r0, [r4, 0x3C] - strh r0, [r1, 0x2E] - ldrh r0, [r4, 0x32] - adds r0, 0x1 - strh r0, [r4, 0x32] - ldrh r0, [r4, 0x3A] - subs r0, 0x1 - strh r0, [r4, 0x3A] - movs r0, 0x17 - bl PlaySE -_08083F00: - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08083F12 - movs r0, 0x20 - strh r0, [r4, 0x30] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] -_08083F12: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08083F18: .4byte gUnknown_83CBF88 -_08083F1C: .4byte gUnknown_83CC010 -_08083F20: .4byte gSprites - thumb_func_end PokeballGlowEffect_0 - - thumb_func_start PokeballGlowEffect_1 -PokeballGlowEffect_1: @ 8083F24 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - subs r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - bne _08083F54 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] - movs r0, 0x8 - strh r0, [r1, 0x30] - strh r2, [r1, 0x32] - strh r2, [r1, 0x34] - movs r2, 0x38 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08083F54 - movs r0, 0x80 - lsls r0, 1 - bl PlayFanfare -_08083F54: - pop {r0} - bx r0 - thumb_func_end PokeballGlowEffect_1 - - thumb_func_start PokeballGlowEffect_2 -PokeballGlowEffect_2: @ 8083F58 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - ldrh r0, [r7, 0x30] - subs r0, 0x1 - strh r0, [r7, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _08083F88 - movs r0, 0x8 - strh r0, [r7, 0x30] - ldrh r0, [r7, 0x32] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - strh r0, [r7, 0x32] - cmp r0, 0 - bne _08083F88 - ldrh r0, [r7, 0x34] - adds r0, 0x1 - strh r0, [r7, 0x34] -_08083F88: - ldrh r4, [r7, 0x32] - adds r4, 0x3 - movs r0, 0x3 - mov r8, r0 - mov r1, r8 - ands r4, r1 - ldr r3, _08084080 @ =0x00001007 - mov r10, r3 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x84 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - ldr r6, _08084084 @ =gUnknown_83CC028 - adds r1, r4, r6 - ldrb r1, [r1] - ldr r5, _08084088 @ =gUnknown_83CC02C - adds r2, r4, r5 - ldrb r2, [r2] - ldr r3, _0808408C @ =gUnknown_83CC030 - mov r9, r3 - add r4, r9 - ldrb r3, [r4] - bl MultiplyInvertedPaletteRGBComponents - ldrh r4, [r7, 0x32] - adds r4, 0x2 - mov r0, r8 - ands r4, r0 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x83 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r4, r6 - ldrb r1, [r1] - adds r2, r4, r5 - ldrb r2, [r2] - add r4, r9 - ldrb r3, [r4] - bl MultiplyInvertedPaletteRGBComponents - ldrh r4, [r7, 0x32] - adds r4, 0x1 - mov r3, r8 - ands r4, r3 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x81 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r4, r6 - ldrb r1, [r1] - adds r2, r4, r5 - ldrb r2, [r2] - add r4, r9 - ldrb r3, [r4] - bl MultiplyInvertedPaletteRGBComponents - ldrh r4, [r7, 0x32] - lsls r4, 24 - lsrs r4, 24 - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r3, _08084090 @ =0x01050000 - adds r0, r3 - lsrs r0, 16 - adds r6, r4, r6 - ldrb r6, [r6] - adds r5, r4, r5 - ldrb r5, [r5] - add r4, r9 - ldrb r4, [r4] - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r10 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r1, _08084094 @ =0x01030000 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - movs r3, 0x34 - ldrsh r0, [r7, r3] - cmp r0, 0x2 - ble _08084072 - ldrh r0, [r7, 0x2E] - adds r0, 0x1 - movs r1, 0 - strh r0, [r7, 0x2E] - movs r0, 0x8 - strh r0, [r7, 0x30] - strh r1, [r7, 0x32] -_08084072: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08084080: .4byte 0x00001007 -_08084084: .4byte gUnknown_83CC028 -_08084088: .4byte gUnknown_83CC02C -_0808408C: .4byte gUnknown_83CC030 -_08084090: .4byte 0x01050000 -_08084094: .4byte 0x01030000 - thumb_func_end PokeballGlowEffect_2 - - thumb_func_start PokeballGlowEffect_3 -PokeballGlowEffect_3: @ 8084098 - push {r4-r6,lr} - mov r6, r8 - push {r6} - adds r2, r0, 0 - ldrh r0, [r2, 0x30] - subs r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _080840C8 - movs r0, 0x8 - strh r0, [r2, 0x30] - ldrh r0, [r2, 0x32] - adds r0, 0x1 - movs r1, 0x3 - ands r0, r1 - strh r0, [r2, 0x32] - cmp r0, 0x3 - bne _080840C8 - ldrh r0, [r2, 0x2E] - adds r0, 0x1 - strh r0, [r2, 0x2E] - movs r0, 0x1E - strh r0, [r2, 0x30] -_080840C8: - ldrh r4, [r2, 0x32] - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08084174 @ =0x00001007 - mov r8, r0 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x84 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - ldr r1, _08084178 @ =gUnknown_83CC028 - adds r1, r4, r1 - ldrb r6, [r1] - ldr r1, _0808417C @ =gUnknown_83CC02C - adds r1, r4, r1 - ldrb r5, [r1] - ldr r1, _08084180 @ =gUnknown_83CC030 - adds r4, r1 - ldrb r4, [r4] - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x83 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - movs r1, 0x81 - lsls r1, 17 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r1, _08084184 @ =0x01050000 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - mov r0, r8 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 4 - ldr r1, _08084188 @ =0x01030000 - adds r0, r1 - lsrs r0, 16 - adds r1, r6, 0 - adds r2, r5, 0 - adds r3, r4, 0 - bl MultiplyInvertedPaletteRGBComponents - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08084174: .4byte 0x00001007 -_08084178: .4byte gUnknown_83CC028 -_0808417C: .4byte gUnknown_83CC02C -_08084180: .4byte gUnknown_83CC030 -_08084184: .4byte 0x01050000 -_08084188: .4byte 0x01030000 - thumb_func_end PokeballGlowEffect_3 - - thumb_func_start PokeballGlowEffect_4 -PokeballGlowEffect_4: @ 808418C - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - subs r0, 0x1 - strh r0, [r1, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _080841A2 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - strh r0, [r1, 0x2E] -_080841A2: - pop {r0} - bx r0 - thumb_func_end PokeballGlowEffect_4 - - thumb_func_start PokeballGlowEffect_5 -PokeballGlowEffect_5: @ 80841A8 - ldrh r1, [r0, 0x2E] - adds r1, 0x1 - strh r1, [r0, 0x2E] - bx lr - thumb_func_end PokeballGlowEffect_5 - - thumb_func_start PokeballGlowEffect_6 -PokeballGlowEffect_6: @ 80841B0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _080841C6 - bl IsFanfareTaskInactive - lsls r0, 24 - cmp r0, 0 - beq _080841CC -_080841C6: - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] -_080841CC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end PokeballGlowEffect_6 - - thumb_func_start PokeballGlowEffect_7 -PokeballGlowEffect_7: @ 80841D4 - bx lr - thumb_func_end PokeballGlowEffect_7 - - thumb_func_start SpriteCB_PokeballGlow -SpriteCB_PokeballGlow: @ 80841D8 - push {lr} - adds r3, r0, 0 - ldr r2, _080841FC @ =gSprites - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - movs r1, 0x2E - ldrsh r0, [r0, r1] - cmp r0, 0x4 - ble _080841F8 - adds r0, r3, 0 - bl FieldEffectFreeGraphicsResources -_080841F8: - pop {r0} - bx r0 - .align 2, 0 -_080841FC: .4byte gSprites - thumb_func_end SpriteCB_PokeballGlow - - thumb_func_start PokecenterHealEffectHelper -PokecenterHealEffectHelper: @ 8084200 - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _08084244 @ =gUnknown_83CBFA0 - lsls r3, 16 - asrs r3, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r3, 0 - movs r3, 0 - bl CreateSpriteAtEnd - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r1, _08084248 @ =gSprites - adds r2, r1 - ldrb r3, [r2, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r3 - movs r3, 0x8 - orrs r1, r3 - strb r1, [r2, 0x5] - adds r2, 0x3E - ldrb r1, [r2] - movs r3, 0x4 - orrs r1, r3 - strb r1, [r2] - pop {r1} - bx r1 - .align 2, 0 -_08084244: .4byte gUnknown_83CBFA0 -_08084248: .4byte gSprites - thumb_func_end PokecenterHealEffectHelper - - thumb_func_start SpriteCB_PokecenterMonitor -SpriteCB_PokecenterMonitor: @ 808424C - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08084270 - movs r0, 0 - strh r0, [r4, 0x2E] - adds r2, r4, 0 - adds r2, 0x3E - ldrb r1, [r2] - subs r0, 0x5 - ands r0, r1 - strb r0, [r2] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim -_08084270: - adds r0, r4, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _08084284 - adds r0, r4, 0 - bl FieldEffectFreeGraphicsResources -_08084284: - pop {r4} - pop {r0} - bx r0 - thumb_func_end SpriteCB_PokecenterMonitor - - thumb_func_start HallOfFameRecordEffectHelper -HallOfFameRecordEffectHelper: @ 808428C - push {lr} - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _080842A8 @ =gUnknown_83CBFB8 - lsls r3, 16 - asrs r3, 16 - lsls r2, 16 - asrs r2, 16 - adds r1, r3, 0 - movs r3, 0 - bl CreateSpriteAtEnd - pop {r0} - bx r0 - .align 2, 0 -_080842A8: .4byte gUnknown_83CBFB8 - thumb_func_end HallOfFameRecordEffectHelper - - thumb_func_start SpriteCB_HallOfFameMonitor -SpriteCB_HallOfFameMonitor: @ 80842AC - push {lr} - adds r2, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080842C2 - adds r0, r2, 0 - bl FieldEffectFreeGraphicsResources -_080842C2: - pop {r0} - bx r0 - thumb_func_end SpriteCB_HallOfFameMonitor - thumb_func_start ReturnToFieldFromFlyMapSelect ReturnToFieldFromFlyMapSelect: @ 80842C8 push {lr} diff --git a/data/field_effect.s b/data/field_effect.s index d79644860..288529090 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,136 +6,6 @@ .section .rodata .align 2 -gUnknown_83CBE9C:: @ 83CBE9C sprite_palette - obj_pal gUnknown_83CAFB0, 4103 - -gUnknown_83CBEA4:: @ 83CBEA4 sprite_palette - obj_pal gUnknown_83CB3D0, 4112 - -gOamData_83CBEAC:: @ 83CBEAC oam_data - .4byte 0x80004000, 0x00000000 - -gUnknown_83CBEB4:: @ 83CBEB4 sprite_frames - obj_frame_tiles gUnknown_83CAF90, 0x0020 - -gUnknown_83CBEBC:: @ 83CBEBC sprite_frames - obj_frame_tiles gUnknown_83CAFD0 + 0x000, 0x0100 - obj_frame_tiles gUnknown_83CAFD0 + 0x100, 0x0100 - obj_frame_tiles gUnknown_83CAFD0 + 0x200, 0x0100 - obj_frame_tiles gUnknown_83CAFD0 + 0x300, 0x0100 - -gUnknown_83CBEDC:: @ 83CBEDC sprite_frames - obj_frame_tiles gUnknown_83CB3F0 + 0x000, 0x0080 - obj_frame_tiles gUnknown_83CB3F0 + 0x080, 0x0080 - obj_frame_tiles gUnknown_83CB3F0 + 0x100, 0x0080 - obj_frame_tiles gUnknown_83CB3F0 + 0x180, 0x0080 - -gUnknown_83CBEFC:: @ 83CBEFC unknown - .byte 0xf4, 0xf8, 0x01, 0x80 - .byte 0x04, 0xf8, 0x20, 0x80 - .byte 0xf4, 0x00, 0x31, 0x80 - .byte 0x04, 0x00, 0x50, 0x80 - .byte 0x04, 0x00, 0x00, 0x00 - -gUnknown_83CBF10:: @ 83CBF10 dataptr - .4byte gUnknown_83CBEFC - -gUnknown_83CBF14:: @ 83CBF14 unknown - .byte 0xe0, 0xf8, 0x05, 0x80 - .byte 0x00, 0xf8, 0x45, 0x80 - .byte 0xe0, 0x00, 0x85, 0x80 - .byte 0x00, 0x00, 0xc5, 0x80 - .byte 0x04, 0x00, 0x00, 0x00 - -gUnknown_83CBF28:: @ 83CBE28 dataptr - .4byte gUnknown_83CBF14 - -gUnknown_83CBF2C:: @ 83CBF2C animcmd - obj_image_anim_frame 0x0000, 1 - obj_image_anim_jump 0 - -gUnknown_83CBF34:: @ 83CBF34 animcmd - obj_image_anim_frame 0x0001, 5 - obj_image_anim_frame 0x0002, 5 - obj_image_anim_frame 0x0003, 7 - obj_image_anim_frame 0x0002, 5 - obj_image_anim_frame 0x0001, 5 - obj_image_anim_frame 0x0000, 5 - obj_image_anim_loop 3 - obj_image_anim_end - - .align 2 -gUnknown_83CBF54:: @ 83CBF54 dataptr - .4byte gUnknown_83CBF2C - .4byte gUnknown_83CBF34 - -gUnknown_83CBF5C:: @ 83CBF5C animcmd - obj_image_anim_frame 0x0003, 8 - obj_image_anim_frame 0x0002, 8 - obj_image_anim_frame 0x0001, 8 - obj_image_anim_frame 0x0000, 8 - obj_image_anim_frame 0x0001, 8 - obj_image_anim_frame 0x0002, 8 - obj_image_anim_loop 2 - obj_image_anim_frame 0x0001, 8 - obj_image_anim_frame 0x0000, 8 - obj_image_anim_end - - .align 2 -gUnknown_83CBF84:: @ 83CBF84 dataptr - .4byte gUnknown_83CBF5C - -gUnknown_83CBF88:: @ 83CBF88 spr_template - spr_template 65535, 4103, gOamData_83CBE58, gUnknown_83CBF54, gUnknown_83CBEB4, gDummySpriteAffineAnimTable, SpriteCB_PokeballGlow - -gUnknown_83CBFA0:: @ 83CBFA0 spr_template - spr_template 65535, 4103, gOamData_83CBEAC, gUnknown_83CBF54, gUnknown_83CBEBC, gDummySpriteAffineAnimTable, SpriteCB_PokecenterMonitor - -gUnknown_83CBFB8:: @ 83CBFB8 spr_template - spr_template 65535, 4112, gOamData_83CBE60, gUnknown_83CBF84, gUnknown_83CBEDC, gDummySpriteAffineAnimTable, SpriteCB_HallOfFameMonitor - - .align 2 -sPokecenterHealTaskCBTable:: @ 83CBFD0 dataptr - .4byte PokecenterHealEffect_0 - .4byte PokecenterHealEffect_1 - .4byte PokecenterHealEffect_2 - .4byte PokecenterHealEffect_3 - - .align 2 -sHallOfFameRecordTaskCBTable:: @ 83CBFE0 dataptr - .4byte HallOfFameRecordEffect_0 - .4byte HallOfFameRecordEffect_1 - .4byte HallOfFameRecordEffect_2 - .4byte HallOfFameRecordEffect_3 - - .align 2 -sPokeballGlowSpriteCBTable:: @ 83CBFF0 dataptr - .4byte PokeballGlowEffect_0 - .4byte PokeballGlowEffect_1 - .4byte PokeballGlowEffect_2 - .4byte PokeballGlowEffect_3 - .4byte PokeballGlowEffect_4 - .4byte PokeballGlowEffect_5 - .4byte PokeballGlowEffect_6 - .4byte PokeballGlowEffect_7 - -gUnknown_83CC010:: @ 83CC010 data16 - .2byte 0, 0 - .2byte 6, 0 - .2byte 0, 4 - .2byte 6, 4 - .2byte 0, 8 - .2byte 6, 8 - -gUnknown_83CC028:: @ 83CC028 data8 - .byte 0x10, 0x0c, 0x08, 0x00 - -gUnknown_83CC02C:: @ 83CC02C data8 - .byte 0x10, 0x0c, 0x08, 0x00 - -gUnknown_83CC030:: @ 83CC030 data8 - .byte 0x00, 0x00, 0x00, 0x00 - .align 2 sFallWarpEffectCBPtrs:: @ 83CC034 dataptr .4byte FallWarpEffect_1 diff --git a/src/field_effect.c b/src/field_effect.c index 35a56389a..b7498d316 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -7,8 +7,11 @@ #include "field_weather.h" #include "overworld.h" #include "quest_log.h" +#include "task.h" #include "trainer_pokemon_sprites.h" +#include "constants/songs.h" +#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} #define FIELD_EFFECT_COUNT 32 static u8 sFieldEffectActiveList[FIELD_EFFECT_COUNT]; @@ -28,6 +31,10 @@ void FieldEffectScript_LoadPal(const u8 **script); void FieldEffectScript_CallNative(const u8 **script, u32 *result); void FieldEffectFreeTilesIfUnused(u16 tilesTag); void FieldEffectFreePaletteIfUnused(u8 paletteNum); +void Task_PokecenterHeal(u8 taskId); +void SpriteCB_PokeballGlow(struct Sprite * sprite); +void SpriteCB_PokecenterMonitor(struct Sprite * sprite); +void SpriteCB_HallOfFameMonitor(struct Sprite * sprite); const u16 sNewGameOakObjectSpriteTiles[] = INCBIN_U16("graphics/field_effects/unk_83CA770.4bpp"); const u16 sNewGameOakObjectPals[] = INCBIN_U16("graphics/field_effects/unk_83CAF70.gbapal"); @@ -130,6 +137,187 @@ const struct SpriteTemplate gNewGameOakObjectTemplate = { .callback = SpriteCallbackDummy }; +const struct SpritePalette gUnknown_83CBE9C = { + gUnknown_83CAFB0, 4103 +}; + +const struct SpritePalette gUnknown_83CBEA4 = { + gUnknown_83CB3D0, 4112 +}; + +const struct OamData gOamData_83CBEAC = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, + .shape = SPRITE_SHAPE(32x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0x000, + .priority = 0, + .paletteNum = 0x0, + .affineParam = 0 +}; + +const struct SpriteFrameImage gUnknown_83CBEB4[] = { + {gUnknown_83CAF90, 0x20} +}; + +const struct SpriteFrameImage gUnknown_83CBEBC[] = { + {gUnknown_83CAFD0 + 0x000, 0x100}, + {gUnknown_83CAFD0 + 0x080, 0x100}, + {gUnknown_83CAFD0 + 0x100, 0x100}, + {gUnknown_83CAFD0 + 0x180, 0x100} +}; + +const struct SpriteFrameImage gUnknown_83CBEDC[] = { + {gUnknown_83CB3F0 + 0x00, 0x80}, + {gUnknown_83CB3F0 + 0x40, 0x80}, + {gUnknown_83CB3F0 + 0x80, 0x80}, + {gUnknown_83CB3F0 + 0xC0, 0x80} +}; + +const struct Subsprite gUnknown_83CBEFC[] = +{ + { + .x = -12, + .y = -8, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 0, + .priority = 2 + }, { + .x = 4, + .y = -8, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 2, + .priority = 2 + }, { + .x = -12, + .y = 0, + .shape = SPRITE_SHAPE(16x8), + .size = SPRITE_SIZE(16x8), + .tileOffset = 3, + .priority = 2 + }, { + .x = 4, + .y = 0, + .shape = SPRITE_SHAPE(8x8), + .size = SPRITE_SIZE(8x8), + .tileOffset = 5, + .priority = 2 + } +}; + +const struct SubspriteTable gUnknown_83CBF0C = subsprite_table(gUnknown_83CBEFC); + +const struct Subsprite gUnknown_83CBF14[] = +{ + { + .x = -32, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 0, + .priority = 2 + }, { + .x = 0, + .y = -8, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 4, + .priority = 2 + }, { + .x = -32, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 8, + .priority = 2 + }, { + .x = 0, + .y = 0, + .shape = SPRITE_SHAPE(32x8), + .size = SPRITE_SIZE(32x8), + .tileOffset = 12, + .priority = 2 + } +}; + +const struct SubspriteTable gUnknown_83CBF24 = subsprite_table(gUnknown_83CBF14); + +const union AnimCmd gUnknown_83CBF2C[] = { + ANIMCMD_FRAME(0, 1), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gUnknown_83CBF34[] = { + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 7), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_LOOP(3), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_83CBF54[] = { + gUnknown_83CBF2C, + gUnknown_83CBF34 +}; + +const union AnimCmd gUnknown_83CBF5C[] = { + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(2, 8), + ANIMCMD_LOOP(2), + ANIMCMD_FRAME(1, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_83CBF84[] = { + gUnknown_83CBF5C +}; + +const struct SpriteTemplate gUnknown_83CBF88 = { + .tileTag = 65535, + .paletteTag = 4103, + .oam = &gOamData_83CBE58, + .anims = gUnknown_83CBF54, + .images = gUnknown_83CBEB4, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PokeballGlow +}; + +const struct SpriteTemplate gUnknown_83CBFA0 = { + .tileTag = 65535, + .paletteTag = 4103, + .oam = &gOamData_83CBEAC, + .anims = gUnknown_83CBF54, + .images = gUnknown_83CBEBC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_PokecenterMonitor +}; + +const struct SpriteTemplate gUnknown_83CBFB8 = { + .tileTag = 65535, + .paletteTag = 4112, + .oam = &gOamData_83CBE60, + .anims = gUnknown_83CBF84, + .images = gUnknown_83CBEDC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HallOfFameMonitor +}; + + u32 FieldEffectStart(u8 fldeff) { const u8 *script; @@ -451,3 +639,346 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b) outPal |= curBlue << 10; gPlttBufferFaded[i] = outPal; } + +void PokecenterHealEffect_0(struct Task * task); +void PokecenterHealEffect_1(struct Task * task); +void PokecenterHealEffect_2(struct Task * task); +void PokecenterHealEffect_3(struct Task * task); +void HallOfFameRecordEffect_0(struct Task * task); +void HallOfFameRecordEffect_1(struct Task * task); +void HallOfFameRecordEffect_2(struct Task * task); +void HallOfFameRecordEffect_3(struct Task * task); +void Task_HallOfFameRecord(u8 taskId); +u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare); +void SpriteCB_PokeballGlowEffect(struct Sprite * sprite); +void PokeballGlowEffect_0(struct Sprite * sprite); +void PokeballGlowEffect_1(struct Sprite * sprite); +void PokeballGlowEffect_2(struct Sprite * sprite); +void PokeballGlowEffect_3(struct Sprite * sprite); +void PokeballGlowEffect_4(struct Sprite * sprite); +void PokeballGlowEffect_5(struct Sprite * sprite); +void PokeballGlowEffect_6(struct Sprite * sprite); +void PokeballGlowEffect_7(struct Sprite * sprite); +u8 PokecenterHealEffectHelper(s32 x, s32 y); +void HallOfFameRecordEffectHelper(s32 x, s32 y); + +void (*const sPokecenterHealTaskCBTable[])(struct Task *) = { + PokecenterHealEffect_0, + PokecenterHealEffect_1, + PokecenterHealEffect_2, + PokecenterHealEffect_3 +}; + +void (*const sHallOfFameRecordTaskCBTable[])(struct Task *) = { + HallOfFameRecordEffect_0, + HallOfFameRecordEffect_1, + HallOfFameRecordEffect_2, + HallOfFameRecordEffect_3 +}; + +void (*const sPokeballGlowSpriteCBTable[])(struct Sprite *) = { + PokeballGlowEffect_0, + PokeballGlowEffect_1, + PokeballGlowEffect_2, + PokeballGlowEffect_3, + PokeballGlowEffect_4, + PokeballGlowEffect_5, + PokeballGlowEffect_6, + PokeballGlowEffect_7 +}; + +bool8 FldEff_PokecenterHeal(void) +{ + u8 nPokemon; + struct Task *task; + + nPokemon = CalculatePlayerPartyCount(); + task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)]; + task->data[1] = nPokemon; + task->data[2] = 0x5d; + task->data[3] = 0x24; + task->data[4] = 0x80; + task->data[5] = 0x18; + return FALSE; +} + +void Task_PokecenterHeal(u8 taskId) +{ + struct Task * task = &gTasks[taskId]; + sPokecenterHealTaskCBTable[task->data[0]](task); +} + +void PokecenterHealEffect_0(struct Task *task) +{ + task->data[0]++; + task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], TRUE); + task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]); +} + +void PokecenterHealEffect_1(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 1) + { + gSprites[task->data[7]].data[0]++; + task->data[0]++; + } +} + +void PokecenterHealEffect_2(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 4) + { + task->data[0]++; + } +} + +void PokecenterHealEffect_3(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 6) + { + DestroySprite(&gSprites[task->data[6]]); + FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL); + DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal)); + } +} + + +bool8 FldEff_HallOfFameRecord(void) +{ + u8 nPokemon; + struct Task *task; + + nPokemon = CalculatePlayerPartyCount(); + task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)]; + task->data[1] = nPokemon; + task->data[2] = 0x75; + task->data[3] = 0x3C; + return FALSE; +} + +void Task_HallOfFameRecord(u8 taskId) +{ + struct Task *task; + task = &gTasks[taskId]; + sHallOfFameRecordTaskCBTable[task->data[0]](task); +} + +void HallOfFameRecordEffect_0(struct Task *task) +{ + u8 taskId; + task->data[0]++; + task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], FALSE); +} + +void HallOfFameRecordEffect_1(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 1) + { + HallOfFameRecordEffectHelper(0x78, 0x19); + task->data[15]++; // was this ever initialized? is this ever used? + task->data[0]++; + } +} + +void HallOfFameRecordEffect_2(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 4) + { + task->data[0]++; + } +} + +void HallOfFameRecordEffect_3(struct Task *task) +{ + if (gSprites[task->data[6]].data[0] > 6) + { + DestroySprite(&gSprites[task->data[6]]); + FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD); + DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord)); + } +} + +u8 CreatePokeballGlowSprite(s16 duration, s16 x, s16 y, bool16 fanfare) +{ + u8 spriteId; + struct Sprite *sprite; + spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect); + sprite = &gSprites[spriteId]; + sprite->pos2.x = x; + sprite->pos2.y = y; + sprite->subpriority = 0xFF; + sprite->data[5] = fanfare; + sprite->data[6] = duration; + sprite->data[7] = spriteId; + return spriteId; +} + +void SpriteCB_PokeballGlowEffect(struct Sprite * sprite) +{ + sPokeballGlowSpriteCBTable[sprite->data[0]](sprite); +} + +const struct Coords16 gUnknown_83CC010[] = { + {0, 0}, + {6, 0}, + {0, 4}, + {6, 4}, + {0, 8}, + {6, 8} +}; + +const u8 gUnknown_83CC028[] = {16, 12, 8, 0}; +const u8 gUnknown_83CC02C[] = {16, 12, 8, 0}; +const u8 gUnknown_83CC030[] = { 0, 0, 0, 0}; + +void PokeballGlowEffect_0(struct Sprite *sprite) +{ + u8 endSpriteId; + if (sprite->data[1] == 0 || (--sprite->data[1]) == 0) + { + sprite->data[1] = 25; + endSpriteId = CreateSpriteAtEnd(&gUnknown_83CBF88, gUnknown_83CC010[sprite->data[2]].x + sprite->pos2.x, gUnknown_83CC010[sprite->data[2]].y + sprite->pos2.y, 0xFF); + gSprites[endSpriteId].oam.priority = 2; + gSprites[endSpriteId].data[0] = sprite->data[7]; + sprite->data[2]++; + sprite->data[6]--; + PlaySE(SE_BOWA); + } + if (sprite->data[6] == 0) + { + sprite->data[1] = 32; + sprite->data[0]++; + } +} + +void PokeballGlowEffect_1(struct Sprite *sprite) +{ + if ((--sprite->data[1]) == 0) + { + sprite->data[0]++; + sprite->data[1] = 8; + sprite->data[2] = 0; + sprite->data[3] = 0; + if (sprite->data[5]) + { + PlayFanfare(MUS_ME_ASA); + } + } +} + +void PokeballGlowEffect_2(struct Sprite *sprite) +{ + u8 phase; + if ((--sprite->data[1]) == 0) + { + sprite->data[1] = 8; + sprite->data[2]++; + sprite->data[2] &= 3; + if (sprite->data[2] == 0) + { + sprite->data[3]++; + } + } + phase = (sprite->data[2] + 3) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + phase = (sprite->data[2] + 2) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + phase = (sprite->data[2] + 1) & 3; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + phase = sprite->data[2]; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + if (sprite->data[3] > 2) + { + sprite->data[0]++; + sprite->data[1] = 8; + sprite->data[2] = 0; + } +} + +void PokeballGlowEffect_3(struct Sprite *sprite) +{ + u8 phase; + if ((--sprite->data[1]) == 0) + { + sprite->data[1] = 8; + sprite->data[2]++; + sprite->data[2] &= 3; + if (sprite->data[2] == 3) + { + sprite->data[0]++; + sprite->data[1] = 30; + } + } + phase = sprite->data[2]; + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); + MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_83CC028[phase], gUnknown_83CC02C[phase], gUnknown_83CC030[phase]); +} + +void PokeballGlowEffect_4(struct Sprite *sprite) +{ + if ((--sprite->data[1]) == 0) + { + sprite->data[0]++; + } +} + +void PokeballGlowEffect_5(struct Sprite *sprite) +{ + sprite->data[0]++; +} + +void PokeballGlowEffect_6(struct Sprite *sprite) +{ + if (sprite->data[5] == 0 || IsFanfareTaskInactive()) + { + sprite->data[0]++; + } +} + +void PokeballGlowEffect_7(struct Sprite *sprite) +{ +} + +void SpriteCB_PokeballGlow(struct Sprite * sprite) +{ + if (gSprites[sprite->data[0]].data[0] > 4) + FieldEffectFreeGraphicsResources(sprite); +} + +u8 PokecenterHealEffectHelper(s32 x, s32 y) +{ + u8 spriteId; + struct Sprite * sprite; + spriteId = CreateSpriteAtEnd(&gUnknown_83CBFA0, x, y, 0); + sprite = &gSprites[spriteId]; + sprite->oam.priority = 2; + sprite->invisible = TRUE; + return spriteId; +} + +void SpriteCB_PokecenterMonitor(struct Sprite * sprite) +{ + if (sprite->data[0] != 0) + { + sprite->data[0] = 0; + sprite->invisible = FALSE; + StartSpriteAnim(sprite, 1); + } + if (sprite->animEnded) + FieldEffectFreeGraphicsResources(sprite); +} + +void HallOfFameRecordEffectHelper(s32 x, s32 y) +{ + CreateSpriteAtEnd(&gUnknown_83CBFB8, x, y, 0); +} + +void SpriteCB_HallOfFameMonitor(struct Sprite * sprite) +{ + if (sprite->animEnded) + FieldEffectFreeGraphicsResources(sprite); +} |