diff options
-rw-r--r-- | asm/field_effect.s | 1545 | ||||
-rw-r--r-- | data/field_effect.s | 54 | ||||
-rw-r--r-- | include/event_object_movement.h | 1 | ||||
-rw-r--r-- | include/field_effect_helpers.h | 1 | ||||
-rw-r--r-- | src/field_effect.c | 585 |
5 files changed, 587 insertions, 1599 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index 370016f84..b955fe12c 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,1551 +5,6 @@ .text - thumb_func_start FldEff_NpcFlyOut -FldEff_NpcFlyOut: @ 8086D38 - push {r4,lr} - ldr r0, _08086D84 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x68] - movs r1, 0x78 - movs r2, 0 - movs r3, 0x1 - bl CreateSprite - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r2, r4, 4 - adds r2, r4 - lsls r2, 2 - ldr r0, _08086D88 @ =gSprites - adds r2, r0 - ldrb r1, [r2, 0x5] - movs r0, 0xF - ands r0, r1 - movs r1, 0xD - negs r1, r1 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, _08086D8C @ =sub_8086D94 - str r0, [r2, 0x1C] - ldr r0, _08086D90 @ =gFieldEffectArguments - ldr r0, [r0] - strh r0, [r2, 0x30] - movs r0, 0x97 - bl PlaySE - adds r0, r4, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08086D84: .4byte gFieldEffectObjectTemplatePointers -_08086D88: .4byte gSprites -_08086D8C: .4byte sub_8086D94 -_08086D90: .4byte gFieldEffectArguments - thumb_func_end FldEff_NpcFlyOut - - thumb_func_start sub_8086D94 -sub_8086D94: @ 8086D94 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0x8C - bl Cos - movs r5, 0 - strh r0, [r4, 0x24] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r1, 0x48 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08086DF6 - movs r2, 0x30 - ldrsh r0, [r4, r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08086E0C @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r3] - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r1, 0x22] - strh r5, [r1, 0x24] - strh r5, [r1, 0x26] -_08086DF6: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7F - ble _08086E06 - adds r0, r4, 0 - movs r1, 0x1E - bl FieldEffectStop -_08086E06: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086E0C: .4byte gSprites - thumb_func_end sub_8086D94 - - thumb_func_start FldEff_UseFly -FldEff_UseFly: @ 8086E10 - push {lr} - ldr r0, _08086E34 @ =Task_UseFly - movs r1, 0xFE - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08086E38 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldr r0, _08086E3C @ =gFieldEffectArguments - ldr r0, [r0] - strh r0, [r1, 0xA] - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08086E34: .4byte Task_UseFly -_08086E38: .4byte gTasks -_08086E3C: .4byte gFieldEffectArguments - thumb_func_end FldEff_UseFly - - thumb_func_start Task_UseFly -Task_UseFly: @ 8086E40 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08086E68 @ =sUseFlyEffectFuncs - ldr r2, _08086E6C @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_08086E68: .4byte sUseFlyEffectFuncs -_08086E6C: .4byte gTasks - thumb_func_end Task_UseFly - - thumb_func_start UseFlyEffect_1 -UseFlyEffect_1: @ 8086E70 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _08086EC0 @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086EC4 @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _08086E9A - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086EB8 -_08086E9A: - ldrb r0, [r6] - strh r0, [r5, 0x26] - movs r0, 0x1 - strb r0, [r6, 0x6] - bl SetPlayerAvatarStateMask - bl sub_805CB70 - adds r0, r4, 0 - movs r1, 0x45 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_08086EB8: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08086EC0: .4byte gPlayerAvatar -_08086EC4: .4byte gObjectEvents - thumb_func_end UseFlyEffect_1 - - thumb_func_start UseFlyEffect_2 -UseFlyEffect_2: @ 8086EC8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08086F00 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086F04 @ =gObjectEvents - adds r0, r1 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086EF8 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldr r1, _08086F08 @ =gFieldEffectArguments - movs r2, 0xA - ldrsh r0, [r4, r2] - str r0, [r1] - movs r0, 0x3B - bl FieldEffectStart -_08086EF8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086F00: .4byte gPlayerAvatar -_08086F04: .4byte gObjectEvents -_08086F08: .4byte gFieldEffectArguments - thumb_func_end UseFlyEffect_2 - - thumb_func_start UseFlyEffect_3 -UseFlyEffect_3: @ 8086F0C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0x6 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08086F54 - ldr r0, _08086F5C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086F60 @ =gObjectEvents - adds r5, r0, r1 - ldrh r1, [r4, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08086F44 - ldrb r0, [r5, 0x1A] - movs r1, 0x2 - bl sub_80DC44C - ldrb r0, [r5, 0x1A] - movs r1, 0 - bl sub_80DC478 -_08086F44: - bl sub_8087168 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08086F54: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086F5C: .4byte gPlayerAvatar -_08086F60: .4byte gObjectEvents - thumb_func_end UseFlyEffect_3 - - thumb_func_start UseFlyEffect_4 -UseFlyEffect_4: @ 8086F64 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _08086F98 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xC] - movs r0, 0x1 - bl SetPlayerAvatarTransitionFlags - ldr r0, _08086FA0 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086FA4 @ =gObjectEvents - adds r0, r1 - movs r1, 0x2 - bl ObjectEventSetHeldMovement -_08086F98: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086FA0: .4byte gPlayerAvatar -_08086FA4: .4byte gObjectEvents - thumb_func_end UseFlyEffect_4 - - thumb_func_start UseFlyEffect_5 -UseFlyEffect_5: @ 8086FA8 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08086FF4 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086FF8 @ =gObjectEvents - adds r2, r0, r1 - ldrh r1, [r4, 0xC] - movs r3, 0xC - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _08086FCE - subs r0, r1, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - cmp r0, 0 - bne _08086FEC -_08086FCE: - adds r0, r2, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086FEC - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x97 - bl PlaySE - ldrb r0, [r4, 0xA] - bl sub_80871C8 -_08086FEC: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086FF4: .4byte gPlayerAvatar -_08086FF8: .4byte gObjectEvents - thumb_func_end UseFlyEffect_5 - - thumb_func_start UseFlyEffect_6 -UseFlyEffect_6: @ 8086FFC - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _0808705A - ldr r0, _08087060 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087064 @ =gObjectEvents - adds r4, r0 - movs r0, 0x2 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087068 @ =gSprites - adds r0, r1 - movs r1, 0x16 - bl StartSpriteAnim - ldrb r0, [r4, 0x1] - movs r1, 0x10 - orrs r0, r1 - strb r0, [r4, 0x1] - adds r0, r4, 0 - movs r1, 0x54 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - strh r0, [r5, 0xC] -_0808705A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087060: .4byte gPlayerAvatar -_08087064: .4byte gObjectEvents -_08087068: .4byte gSprites - thumb_func_end UseFlyEffect_6 - - thumb_func_start UseFlyEffect_7 -UseFlyEffect_7: @ 808706C - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0xC] - adds r0, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _080870FC - ldr r0, _08087104 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08087108 @ =gObjectEvents - adds r4, r0 - adds r0, r4, 0 - bl ObjectEventClearAnimIfSpecialAnimActive - ldrb r1, [r4, 0x1] - movs r0, 0x11 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r1, [r4, 0x2] - movs r0, 0x41 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x2] - ldrb r0, [r5, 0xA] - ldrb r1, [r4, 0x4] - bl sub_8087204 - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _0808710C @ =gSprites - adds r0, r4 - ldr r1, _08087110 @ =gSaveBlock2Ptr - ldr r1, [r1] - ldrb r1, [r1, 0x8] - lsls r1, 1 - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - bl StartSpriteAnim - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0 - bl sub_80877FC - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _08087114 @ =sub_8087828 - str r1, [r0] - bl CameraObjectReset2 - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_080870FC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087104: .4byte gPlayerAvatar -_08087108: .4byte gObjectEvents -_0808710C: .4byte gSprites -_08087110: .4byte gSaveBlock2Ptr -_08087114: .4byte sub_8087828 - thumb_func_end UseFlyEffect_7 - - thumb_func_start UseFlyEffect_8 -UseFlyEffect_8: @ 8087118 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _08087132 - bl WarpFadeOutScreen - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08087132: - pop {r4} - pop {r0} - bx r0 - thumb_func_end UseFlyEffect_8 - - thumb_func_start UseFlyEffect_9 -UseFlyEffect_9: @ 8087138 - push {lr} - ldr r0, _08087160 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _0808715A - movs r0, 0x1F - bl FieldEffectActiveListRemove - ldr r0, _08087164 @ =Task_UseFly - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0808715A: - pop {r0} - bx r0 - .align 2, 0 -_08087160: .4byte gPaletteFade -_08087164: .4byte Task_UseFly - thumb_func_end UseFlyEffect_9 - - thumb_func_start sub_8087168 -sub_8087168: @ 8087168 - push {lr} - ldr r0, _080871A0 @ =gFieldEffectObjectTemplatePointers - ldr r0, [r0, 0x68] - movs r1, 0xFF - movs r2, 0xB4 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r1, _080871A4 @ =gSprites - adds r2, r1 - ldrb r3, [r2, 0x5] - movs r1, 0xF - ands r1, r3 - movs r3, 0xD - negs r3, r3 - ands r1, r3 - movs r3, 0x4 - orrs r1, r3 - strb r1, [r2, 0x5] - ldr r1, _080871A8 @ =sub_8087220 - str r1, [r2, 0x1C] - pop {r1} - bx r1 - .align 2, 0 -_080871A0: .4byte gFieldEffectObjectTemplatePointers -_080871A4: .4byte gSprites -_080871A8: .4byte sub_8087220 - thumb_func_end sub_8087168 - - thumb_func_start sub_80871AC -sub_80871AC: @ 80871AC - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080871C4 @ =gSprites - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrh r0, [r1, 0x3C] - lsls r0, 24 - lsrs r0, 24 - bx lr - .align 2, 0 -_080871C4: .4byte gSprites - thumb_func_end sub_80871AC - - thumb_func_start sub_80871C8 -sub_80871C8: @ 80871C8 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _080871FC @ =gSprites - adds r4, r0 - ldr r0, _08087200 @ =sub_80872F0 - str r0, [r4, 0x1C] - movs r1, 0 - movs r0, 0x78 - strh r0, [r4, 0x20] - strh r1, [r4, 0x22] - strh r1, [r4, 0x24] - strh r1, [r4, 0x26] - adds r0, r4, 0 - adds r0, 0x2E - movs r2, 0x10 - bl memset - movs r0, 0x40 - strh r0, [r4, 0x3A] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080871FC: .4byte gSprites -_08087200: .4byte sub_80872F0 - thumb_func_end sub_80871C8 - - thumb_func_start sub_8087204 -sub_8087204: @ 8087204 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _0808721C @ =gSprites - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r3 - strh r1, [r2, 0x3A] - bx lr - .align 2, 0 -_0808721C: .4byte gSprites - thumb_func_end sub_8087204 - - thumb_func_start sub_8087220 -sub_8087220: @ 8087220 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080872E2 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0808727A - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _0808725C @ =gUnknown_83CC1CC - str r0, [r4, 0x10] - adds r0, r4, 0 - bl InitSpriteAffineAnim - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAffineAnim - ldr r0, _08087260 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _08087264 - movs r0, 0x80 - b _08087266 - .align 2, 0 -_0808725C: .4byte gUnknown_83CC1CC -_08087260: .4byte gSaveBlock2Ptr -_08087264: - movs r0, 0x76 -_08087266: - strh r0, [r4, 0x20] - ldr r0, _080872E8 @ =0x0000ffd0 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - movs r0, 0x40 - strh r0, [r4, 0x30] - adds r0, 0xC0 - strh r0, [r4, 0x32] -_0808727A: - ldrh r0, [r4, 0x32] - lsls r0, 16 - asrs r0, 24 - ldrh r1, [r4, 0x30] - adds r0, r1 - strh r0, [r4, 0x30] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x78 - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x78 - bl Sin - strh r0, [r4, 0x26] - ldrh r2, [r4, 0x32] - movs r0, 0x32 - ldrsh r1, [r4, r0] - ldr r0, _080872EC @ =0x000007ff - cmp r1, r0 - bgt _080872B0 - adds r0, r2, 0 - adds r0, 0x60 - strh r0, [r4, 0x32] -_080872B0: - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0x81 - ble _080872E2 - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec -_080872E2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080872E8: .4byte 0x0000ffd0 -_080872EC: .4byte 0x000007ff - thumb_func_end sub_8087220 - - thumb_func_start sub_80872F0 -sub_80872F0: @ 80872F0 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0x8C - bl Cos - movs r5, 0 - strh r0, [r4, 0x24] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r1, 0x48 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x4 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x40 - beq _0808734E - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08087360 @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r3] - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r1, 0x22] - strh r5, [r1, 0x24] - strh r5, [r1, 0x26] -_0808734E: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7F - ble _0808735A - movs r0, 0x1 - strh r0, [r4, 0x3C] -_0808735A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087360: .4byte gSprites - thumb_func_end sub_80872F0 - - thumb_func_start sub_8087364 -sub_8087364: @ 8087364 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x3C - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0808744E - movs r2, 0x2E - ldrsh r0, [r4, r2] - cmp r0, 0 - bne _080873C4 - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _080873A0 @ =gUnknown_83CC1CC - str r0, [r4, 0x10] - adds r0, r4, 0 - bl InitSpriteAffineAnim - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAffineAnim - ldr r0, _080873A4 @ =gSaveBlock2Ptr - ldr r0, [r0] - ldrb r0, [r0, 0x8] - cmp r0, 0 - bne _080873A8 - movs r0, 0x70 - b _080873AA - .align 2, 0 -_080873A0: .4byte gUnknown_83CC1CC -_080873A4: .4byte gSaveBlock2Ptr -_080873A8: - movs r0, 0x64 -_080873AA: - strh r0, [r4, 0x20] - ldr r0, _08087454 @ =0x0000ffe0 - strh r0, [r4, 0x22] - ldrh r0, [r4, 0x2E] - adds r0, 0x1 - strh r0, [r4, 0x2E] - movs r0, 0xF0 - strh r0, [r4, 0x30] - movs r0, 0x80 - lsls r0, 4 - strh r0, [r4, 0x32] - movs r0, 0x80 - strh r0, [r4, 0x36] -_080873C4: - ldrh r1, [r4, 0x32] - lsls r1, 16 - asrs r1, 24 - ldrh r2, [r4, 0x30] - adds r2, r1 - ldrh r0, [r4, 0x34] - adds r0, r1 - strh r0, [r4, 0x34] - movs r0, 0xFF - ands r2, r0 - strh r2, [r4, 0x30] - movs r3, 0x30 - ldrsh r0, [r4, r3] - movs r1, 0x20 - bl Cos - strh r0, [r4, 0x24] - movs r1, 0x30 - ldrsh r0, [r4, r1] - movs r1, 0x78 - bl Sin - strh r0, [r4, 0x26] - ldrh r1, [r4, 0x32] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r2, 0x80 - lsls r2, 1 - cmp r0, r2 - ble _08087406 - ldrh r0, [r4, 0x36] - subs r0, r1, r0 - strh r0, [r4, 0x32] -_08087406: - ldrh r1, [r4, 0x36] - movs r3, 0x36 - ldrsh r0, [r4, r3] - cmp r0, 0xFF - bgt _08087416 - adds r0, r1, 0 - adds r0, 0x18 - strh r0, [r4, 0x36] -_08087416: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0xFF - bgt _08087420 - strh r2, [r4, 0x32] -_08087420: - movs r2, 0x34 - ldrsh r0, [r4, r2] - cmp r0, 0x3B - ble _0808744E - ldrh r0, [r4, 0x3C] - adds r0, 0x1 - strh r0, [r4, 0x3C] - ldrb r1, [r4, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] -_0808744E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087454: .4byte 0x0000ffe0 - thumb_func_end sub_8087364 - - thumb_func_start sub_8087458 -sub_8087458: @ 8087458 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - bl sub_80871C8 - ldr r1, _0808747C @ =gSprites - lsls r0, r4, 4 - adds r0, r4 - lsls r0, 2 - adds r1, 0x1C - adds r0, r1 - ldr r1, _08087480 @ =sub_8087364 - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808747C: .4byte gSprites -_08087480: .4byte sub_8087364 - thumb_func_end sub_8087458 - - thumb_func_start FldEff_FlyIn -FldEff_FlyIn: @ 8087484 - push {lr} - ldr r0, _08087494 @ =sub_8087498 - movs r1, 0xFE - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08087494: .4byte sub_8087498 - thumb_func_end FldEff_FlyIn - - thumb_func_start sub_8087498 -sub_8087498: @ 8087498 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _080874C0 @ =gUnknown_83CC1D4 - ldr r2, _080874C4 @ =gTasks - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - adds r0, r2 - movs r2, 0x8 - ldrsh r1, [r0, r2] - lsls r1, 2 - adds r1, r3 - ldr r1, [r1] - bl _call_via_r1 - pop {r0} - bx r0 - .align 2, 0 -_080874C0: .4byte gUnknown_83CC1D4 -_080874C4: .4byte gTasks - thumb_func_end sub_8087498 - - thumb_func_start sub_80874C8 -sub_80874C8: @ 80874C8 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r4, _080875B4 @ =gPlayerAvatar - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080875B8 @ =gObjectEvents - adds r5, r0, r1 - adds r0, r5, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _080874F2 - adds r0, r5, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _080875AE -_080874F2: - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] - movs r0, 0x21 - strh r0, [r6, 0xC] - ldrb r0, [r4] - strh r0, [r6, 0x26] - movs r0, 0x1 - strb r0, [r4, 0x6] - bl SetPlayerAvatarStateMask - ldrh r1, [r6, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0808751A - ldrb r0, [r5, 0x1A] - movs r1, 0 - bl sub_80DC44C -_0808751A: - movs r0, 0x2 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl ObjectEventSetGraphicsId - bl CameraObjectReset2 - adds r0, r5, 0 - movs r1, 0x3 - bl ObjectEventTurn - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r4, _080875BC @ =gSprites - adds r0, r4 - movs r1, 0x16 - bl StartSpriteAnim - ldrb r1, [r5, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - bl sub_8087168 - lsls r0, 24 - lsrs r0, 24 - strh r0, [r6, 0xA] - bl sub_80871C8 - ldrb r0, [r6, 0xA] - ldrb r1, [r5, 0x4] - bl sub_8087204 - movs r0, 0xA - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - ldr r1, _080875C0 @ =gSaveBlock2Ptr - ldr r1, [r1] - ldrb r1, [r1, 0x8] - lsls r1, 25 - movs r2, 0x80 - lsls r2, 18 - adds r1, r2 - lsrs r1, 24 - bl StartSpriteAnim - movs r0, 0xA - ldrsh r1, [r6, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r4 - movs r1, 0x1 - bl sub_80877FC - movs r2, 0xA - ldrsh r1, [r6, r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r4, 0x1C - adds r0, r4 - ldr r1, _080875C4 @ =sub_8087828 - str r1, [r0] -_080875AE: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080875B4: .4byte gPlayerAvatar -_080875B8: .4byte gObjectEvents -_080875BC: .4byte gSprites -_080875C0: .4byte gSaveBlock2Ptr -_080875C4: .4byte sub_8087828 - thumb_func_end sub_80874C8 - - thumb_func_start sub_80875C8 -sub_80875C8: @ 80875C8 - push {r4-r6,lr} - adds r5, r0, 0 - movs r0, 0xA - ldrsh r1, [r5, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r6, _08087638 @ =gSprites - adds r0, r6 - bl sub_80878C0 - ldrh r1, [r5, 0xC] - movs r2, 0xC - ldrsh r0, [r5, r2] - cmp r0, 0 - beq _080875F2 - subs r0, r1, 0x1 - strh r0, [r5, 0xC] - lsls r0, 16 - cmp r0, 0 - bne _08087630 -_080875F2: - ldr r0, _0808763C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087640 @ =gObjectEvents - adds r0, r1 - ldrb r0, [r0, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - adds r4, r6 - ldrb r0, [r5, 0xA] - movs r1, 0x40 - bl sub_8087204 - ldrh r0, [r4, 0x24] - ldrh r1, [r4, 0x20] - adds r0, r1 - movs r1, 0 - strh r0, [r4, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - strh r0, [r4, 0x22] - strh r1, [r4, 0x24] - strh r1, [r4, 0x26] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - strh r1, [r5, 0xC] -_08087630: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08087638: .4byte gSprites -_0808763C: .4byte gPlayerAvatar -_08087640: .4byte gObjectEvents - thumb_func_end sub_80875C8 - - thumb_func_start sub_8087644 -sub_8087644: @ 8087644 - push {r4,lr} - sub sp, 0x24 - adds r4, r0, 0 - ldr r1, _0808768C @ =gUnknown_83CC1F0 - mov r0, sp - movs r2, 0x24 - bl memcpy - ldr r0, _08087690 @ =gPlayerAvatar - ldrb r0, [r0, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08087694 @ =gSprites - adds r1, r0 - movs r2, 0xC - ldrsh r0, [r4, r2] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - strh r0, [r1, 0x26] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x11 - ble _08087682 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08087682: - add sp, 0x24 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808768C: .4byte gUnknown_83CC1F0 -_08087690: .4byte gPlayerAvatar -_08087694: .4byte gSprites - thumb_func_end sub_8087644 - - thumb_func_start sub_8087698 -sub_8087698: @ 8087698 - push {r4-r6,lr} - adds r6, r0, 0 - ldrb r0, [r6, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _080876FC - ldr r0, _08087704 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r5, r0, 3 - adds r5, r0 - lsls r5, 2 - ldr r0, _08087708 @ =gObjectEvents - adds r5, r0 - ldrb r0, [r5, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0808770C @ =gSprites - adds r4, r0 - ldrb r1, [r5, 0x1] - movs r0, 0x11 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - movs r0, 0x10 - ldrsh r1, [r5, r0] - movs r0, 0x12 - ldrsh r2, [r5, r0] - adds r0, r5, 0 - bl sub_805F724 - movs r0, 0 - strh r0, [r4, 0x24] - strh r0, [r4, 0x26] - adds r4, 0x3E - ldrb r0, [r4] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r4] - bl sub_805CB70 - adds r0, r5, 0 - movs r1, 0x45 - bl ObjectEventSetHeldMovement - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_080876FC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08087704: .4byte gPlayerAvatar -_08087708: .4byte gObjectEvents -_0808770C: .4byte gSprites - thumb_func_end sub_8087698 - - thumb_func_start sub_8087710 -sub_8087710: @ 8087710 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08087740 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08087744 @ =gObjectEvents - adds r0, r1 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08087738 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrb r0, [r4, 0xA] - bl sub_8087458 -_08087738: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08087740: .4byte gPlayerAvatar -_08087744: .4byte gObjectEvents - thumb_func_end sub_8087710 - - thumb_func_start sub_8087748 -sub_8087748: @ 8087748 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4, 0xA] - bl sub_80871AC - lsls r0, 24 - cmp r0, 0 - beq _08087774 - movs r0, 0xA - ldrsh r1, [r4, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0808777C @ =gSprites - adds r0, r1 - bl DestroySprite - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x10 - strh r0, [r4, 0xA] -_08087774: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0808777C: .4byte gSprites - thumb_func_end sub_8087748 - - thumb_func_start fishE -fishE: @ 8087780 - push {r4-r7,lr} - adds r5, r0, 0 - ldrh r0, [r5, 0xA] - subs r0, 0x1 - strh r0, [r5, 0xA] - lsls r0, 16 - cmp r0, 0 - bne _080877EA - ldr r6, _080877F0 @ =gPlayerAvatar - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080877F4 @ =gObjectEvents - adds r4, r0, r1 - movs r7, 0 - ldrh r1, [r5, 0x26] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _080877B4 - movs r7, 0x2 - ldrb r0, [r4, 0x1A] - movs r1, 0x1 - bl sub_80DC44C -_080877B4: - adds r0, r7, 0 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - adds r0, r4, 0 - movs r1, 0x1 - bl ObjectEventTurn - ldrh r0, [r5, 0x26] - strb r0, [r6] - movs r0, 0 - strb r0, [r6, 0x6] - movs r0, 0x20 - bl FieldEffectActiveListRemove - ldr r0, _080877F8 @ =sub_8087498 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080877EA: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080877F0: .4byte gPlayerAvatar -_080877F4: .4byte gObjectEvents -_080877F8: .4byte sub_8087498 - thumb_func_end fishE - - thumb_func_start sub_80877FC -sub_80877FC: @ 80877FC - push {r4,r5,lr} - adds r4, r0, 0 - lsls r5, r1, 24 - lsrs r5, 24 - ldrb r0, [r4, 0x1] - movs r1, 0x3 - orrs r0, r1 - strb r0, [r4, 0x1] - ldr r0, _08087824 @ =gUnknown_83CC23C - str r0, [r4, 0x10] - adds r0, r4, 0 - bl InitSpriteAffineAnim - adds r0, r4, 0 - adds r1, r5, 0 - bl StartSpriteAffineAnim - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08087824: .4byte gUnknown_83CC23C - thumb_func_end sub_80877FC - - thumb_func_start sub_8087828 -sub_8087828: @ 8087828 - push {r4,r5,lr} - adds r4, r0, 0 - movs r1, 0x32 - ldrsh r0, [r4, r1] - movs r1, 0xB4 - bl Cos - movs r5, 0 - strh r0, [r4, 0x24] - movs r2, 0x32 - ldrsh r0, [r4, r2] - movs r1, 0x48 - bl Sin - strh r0, [r4, 0x26] - ldrh r0, [r4, 0x32] - adds r0, 0x2 - movs r1, 0xFF - ands r0, r1 - strh r0, [r4, 0x32] - movs r1, 0x3A - ldrsh r0, [r4, r1] - cmp r0, 0x40 - beq _08087886 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _080878BC @ =gSprites - adds r1, r0 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r2 - strb r0, [r3] - ldrh r0, [r4, 0x24] - ldrh r2, [r4, 0x20] - adds r0, r2 - strh r0, [r1, 0x20] - ldrh r0, [r4, 0x26] - ldrh r2, [r4, 0x22] - adds r0, r2 - subs r0, 0x8 - strh r0, [r1, 0x22] - strh r5, [r1, 0x24] - strh r5, [r1, 0x26] -_08087886: - movs r1, 0x32 - ldrsh r0, [r4, r1] - cmp r0, 0x7F - ble _080878B4 - movs r0, 0x1 - strh r0, [r4, 0x3C] - ldrb r1, [r4, 0x1] - subs r0, 0x5 - ands r0, r1 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec -_080878B4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080878BC: .4byte gSprites - thumb_func_end sub_8087828 - - thumb_func_start sub_80878C0 -sub_80878C0: @ 80878C0 - push {r4-r6,lr} - adds r4, r0, 0 - ldrb r5, [r4, 0x1] - lsls r0, r5, 30 - cmp r0, 0 - beq _08087916 - ldr r1, _0808791C @ =gOamMatrices - ldrb r0, [r4, 0x3] - lsls r0, 26 - lsrs r3, r0, 27 - lsls r0, r3, 3 - adds r1, r0, r1 - movs r2, 0 - ldrsh r0, [r1, r2] - movs r2, 0x80 - lsls r2, 1 - cmp r0, r2 - beq _080878EC - movs r6, 0x6 - ldrsh r0, [r1, r6] - cmp r0, r2 - bne _08087916 -_080878EC: - movs r0, 0x4 - negs r0, r0 - ands r0, r5 - strb r0, [r4, 0x1] - adds r0, r3, 0 - bl FreeOamMatrix - ldrb r1, [r4, 0x1] - lsrs r1, 6 - ldrb r2, [r4, 0x3] - lsrs r2, 6 - adds r0, r4, 0 - movs r3, 0 - bl CalcCenterToCornerVec - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim - ldr r0, _08087920 @ =sub_80872F0 - str r0, [r4, 0x1C] -_08087916: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0808791C: .4byte gOamMatrices -_08087920: .4byte sub_80872F0 - thumb_func_end sub_80878C0 - thumb_func_start sub_8087924 sub_8087924: @ 8087924 push {r4-r7,lr} diff --git a/data/field_effect.s b/data/field_effect.s index 63142e981..529205a57 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,60 +6,6 @@ .section .rodata .align 2 -sUseFlyEffectFuncs:: @ 83CC178 dataptr (incomplete) - .4byte UseFlyEffect_1 - .4byte UseFlyEffect_2 - .4byte UseFlyEffect_3 - .4byte UseFlyEffect_4 - .4byte UseFlyEffect_5 - .4byte UseFlyEffect_6 - .4byte UseFlyEffect_7 - .4byte UseFlyEffect_8 - .4byte UseFlyEffect_9 - -gUnknown_83CC19C:: @ 83CC19C affineanimcmd - obj_rot_scal_anim_frame 8, 8, 226, 0 - obj_rot_scal_anim_frame 28, 28, 0, 30 - obj_rot_scal_anim_end - -gUnknown_83CC1B4:: @ 83CC1B4 affineanimcmd - obj_rot_scal_anim_frame 256, 256, 64, 0 - obj_rot_scal_anim_frame -10, -10, 0, 22 - obj_rot_scal_anim_end - - .align 2 -gUnknown_83CC1CC:: @ 83CC1CC dataptr - .4byte gUnknown_83CC19C - .4byte gUnknown_83CC1B4 - - .align 2 -gUnknown_83CC1D4:: @ 83CC1D4 dataptr - .4byte sub_80874C8 - .4byte sub_80875C8 - .4byte sub_8087644 - .4byte sub_8087698 - .4byte sub_8087710 - .4byte sub_8087748 - .4byte fishE - -gUnknown_83CC1F0:: @ 83CC1F0 data16 - .2byte 0xfffe, 0xfffc, 0xfffb, 0xfffa, 0xfff9, 0xfff8, 0xfff8, 0xfff8, 0xfff9, 0xfff9, 0xfffa, 0xfffb, 0xfffd, 0xfffe, 0x0000, 0x0002 - .2byte 0x0004, 0x0008 - -gUnknown_83CC214:: @ 83CC214 affineanimcmd - obj_rot_scal_anim_frame 24, 24, 0, 1 - obj_rot_scal_anim_jump 0 - -gUnknown_83CC224:: @ 83CC224 affineanimcmd - obj_rot_scal_anim_frame 512, 512, 0, 1 - obj_rot_scal_anim_frame -16, -16, 0, 1 - obj_rot_scal_anim_jump 1 - - .align 2 -gUnknown_83CC23C:: @ 83CC23C dataptr - .4byte gUnknown_83CC214 - .4byte gUnknown_83CC224 - gUnknown_83CC244:: @ 83CC244 dataptr .4byte sub_8087C00 .4byte sub_8087C2C diff --git a/include/event_object_movement.h b/include/event_object_movement.h index 1e63727fb..edc5c8b11 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -131,5 +131,6 @@ extern const struct OamData gObjectEventBaseOam_32x32; extern const struct UCoords16 gUnknown_83A64C8[]; extern const u16 gUnknown_8398648[]; extern const u16 gUnknown_8398688[]; +void sub_805F724(struct ObjectEvent *, s16 x, s16 y); #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h index e1a56a26c..c3e5ae29a 100644 --- a/include/field_effect_helpers.h +++ b/include/field_effect_helpers.h @@ -15,6 +15,7 @@ u8 sub_8154228(void); bool8 sub_8155DA0(struct ObjectEvent *); void sub_80DC44C(u8, u8); +void sub_80DC478(u8, u8); void StartAshFieldEffect(s16, s16, u16, s16); #endif //GUARD_FIELD_EFFECT_HELPERS_H diff --git a/src/field_effect.c b/src/field_effect.c index 3b710167d..81b572893 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3039,3 +3039,588 @@ void UseVsSeekerEffect_4(struct Task * task) DestroyTask(FindTaskIdByFunc(Task_FldEffUseVsSeeker)); } } + +void sub_8086D94(struct Sprite * sprite); + +u8 FldEff_NpcFlyOut(void) +{ + u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1); + struct Sprite * sprite = &gSprites[spriteId]; + + sprite->oam.paletteNum = 0; + sprite->oam.priority = 1; + sprite->callback = sub_8086D94; + sprite->data[1] = gFieldEffectArguments[0]; + PlaySE(SE_W019); + return spriteId; +} + +void sub_8086D94(struct Sprite * sprite) +{ + struct Sprite * npcSprite; + + sprite->pos2.x = Cos(sprite->data[2], 0x8c); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] = (sprite->data[2] + 4) & 0xff; + if (sprite->data[0]) + { + npcSprite = &gSprites[sprite->data[1]]; + npcSprite->coordOffsetEnabled = 0; + npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x; + npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + npcSprite->pos2.x = 0; + npcSprite->pos2.y = 0; + } + if (sprite->data[2] >= 0x80) + { + FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT); + } +} + +void Task_UseFly(u8 taskId); +void UseFlyEffect_1(struct Task * task); +void UseFlyEffect_2(struct Task * task); +void UseFlyEffect_3(struct Task * task); +void UseFlyEffect_4(struct Task * task); +void UseFlyEffect_5(struct Task * task); +void UseFlyEffect_6(struct Task * task); +void UseFlyEffect_7(struct Task * task); +void UseFlyEffect_8(struct Task * task); +void UseFlyEffect_9(struct Task * task); +u8 sub_8087168(void); +bool8 sub_80871AC(u8 flyBlobSpriteId); +void sub_80871C8(u8 flyBlobSpriteId); +void sub_8087204(u8 flyBlobSpriteId, u8 playerSpriteId); +void sub_8087220(struct Sprite * sprite); +void sub_80872F0(struct Sprite * sprite); +void sub_80877FC(struct Sprite * sprite, u8 affineAnimId); +void sub_8087828(struct Sprite * sprite); + +void (*const sUseFlyEffectFuncs[])(struct Task * ) = { + UseFlyEffect_1, + UseFlyEffect_2, + UseFlyEffect_3, + UseFlyEffect_4, + UseFlyEffect_5, + UseFlyEffect_6, + UseFlyEffect_7, + UseFlyEffect_8, + UseFlyEffect_9 +}; + +u8 FldEff_UseFly(void) +{ + u8 taskId = CreateTask(Task_UseFly, 0xfe); + gTasks[taskId].data[1] = gFieldEffectArguments[0]; + return 0; +} + +void Task_UseFly(u8 taskId) +{ + sUseFlyEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void UseFlyEffect_1(struct Task * task) +{ + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[15] = gPlayerAvatar.flags; + gPlayerAvatar.preventStep = TRUE; + SetPlayerAvatarStateMask(1); + sub_805CB70(); + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void UseFlyEffect_2(struct Task * task) +{ + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[0]++; + gFieldEffectArguments[0] = task->data[1]; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + } +} + +void UseFlyEffect_3(struct Task * task) +{ + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (task->data[15] & 0x08) + { + sub_80DC44C(objectEvent->mapobj_unk_1A, 2); + sub_80DC478(objectEvent->mapobj_unk_1A, 0); + } + task->data[1] = sub_8087168(); + task->data[0]++; + } +} + +void UseFlyEffect_4(struct Task * task) +{ + if (sub_80871AC(task->data[1])) + { + task->data[0]++; + task->data[2] = 16; + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT); + ObjectEventSetHeldMovement(&gObjectEvents[gPlayerAvatar.objectEventId], MOVEMENT_ACTION_FACE_LEFT); + } +} + +void UseFlyEffect_5(struct Task * task) +{ + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if ((task->data[2] == 0 || (--task->data[2]) == 0) && ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[0]++; + PlaySE(SE_W019); + sub_80871C8(task->data[1]); + } +} + +void UseFlyEffect_6(struct Task * task) +{ + if ((++task->data[2]) >= 8) + { + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2)); + StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); + objectEvent->inanimate = 1; + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_JUMP_IN_PLACE_LEFT); + task->data[0]++; + task->data[2] = 0; + } +} + +void UseFlyEffect_7(struct Task * task) +{ + if ((++task->data[2]) >= 10) + { + struct ObjectEvent * objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + ObjectEventClearAnimIfSpecialAnimActive(objectEvent); + objectEvent->inanimate = 0; + objectEvent->hasShadow = 0; + sub_8087204(task->data[1], objectEvent->spriteId); + StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 1); + sub_80877FC(&gSprites[task->data[1]], 0); + gSprites[task->data[1]].callback = sub_8087828; + CameraObjectReset2(); + task->data[0]++; + } +} + +void UseFlyEffect_8(struct Task * task) +{ + if (sub_80871AC(task->data[1])) + { + WarpFadeOutScreen(); + task->data[0]++; + } +} + +void UseFlyEffect_9(struct Task * task) +{ + if (!gPaletteFade.active) + { + FieldEffectActiveListRemove(FLDEFF_USE_FLY); + DestroyTask(FindTaskIdByFunc(Task_UseFly)); + } +} + +u8 sub_8087168(void) +{ + u8 spriteId; + struct Sprite * sprite; + spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1); + sprite = &gSprites[spriteId]; + sprite->oam.paletteNum = 0; + sprite->oam.priority = 1; + sprite->callback = sub_8087220; + return spriteId; +} + +u8 sub_80871AC(u8 spriteId) +{ + return gSprites[spriteId].data[7]; +} + +void sub_80871C8(u8 spriteId) +{ + struct Sprite * sprite; + sprite = &gSprites[spriteId]; + sprite->callback = sub_80872F0; + sprite->pos1.x = 0x78; + sprite->pos1.y = 0x00; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */); + sprite->data[6] = 0x40; +} + +void sub_8087204(u8 a0, u8 a1) +{ + gSprites[a0].data[6] = a1; +} + +const union AffineAnimCmd gUnknown_83CC19C[] = { + AFFINEANIMCMD_FRAME( 8, 8, 226, 0), + AFFINEANIMCMD_FRAME(28, 28, 0, 30), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gUnknown_83CC1B4[] = { + AFFINEANIMCMD_FRAME(256, 256, 64, 0), + AFFINEANIMCMD_FRAME(-10, -10, 0, 22), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gUnknown_83CC1CC[] = { + gUnknown_83CC19C, + gUnknown_83CC1B4 +}; + +void sub_8087220(struct Sprite * sprite) +{ + if (sprite->data[7] == 0) + { + if (sprite->data[0] == 0) + { + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + sprite->affineAnims = gUnknown_83CC1CC; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, 0); + if (gSaveBlock2Ptr->playerGender == MALE) + sprite->pos1.x = 0x80; + else + sprite->pos1.x = 0x76; + sprite->pos1.y = -0x30; + sprite->data[0]++; + sprite->data[1] = 0x40; + sprite->data[2] = 0x100; + } + sprite->data[1] += (sprite->data[2] >> 8); + sprite->pos2.x = Cos(sprite->data[1], 0x78); + sprite->pos2.y = Sin(sprite->data[1], 0x78); + if (sprite->data[2] < 0x800) + { + sprite->data[2] += 0x60; + } + if (sprite->data[1] > 0x81) + { + sprite->data[7]++; + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF); + } + } +} + +void sub_80872F0(struct Sprite * sprite) +{ + sprite->pos2.x = Cos(sprite->data[2], 0x8c); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] = (sprite->data[2] + 4) & 0xff; + if (sprite->data[6] != MAX_SPRITES) + { + struct Sprite * sprite1 = &gSprites[sprite->data[6]]; + sprite1->coordOffsetEnabled = 0; + sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x; + sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + sprite1->pos2.x = 0; + sprite1->pos2.y = 0; + } + if (sprite->data[2] >= 0x80) + { + sprite->data[7] = 1; + } +} + +void sub_8087364(struct Sprite * sprite) +{ + if (sprite->data[7] == 0) + { + if (sprite->data[0] == 0) + { + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + sprite->affineAnims = gUnknown_83CC1CC; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, 1); + if (gSaveBlock2Ptr->playerGender == MALE) + sprite->pos1.x = 0x70; + else + sprite->pos1.x = 0x64; + sprite->pos1.y = -0x20; + sprite->data[0]++; + sprite->data[1] = 0xf0; + sprite->data[2] = 0x800; + sprite->data[4] = 0x80; + } + sprite->data[1] += sprite->data[2] >> 8; + sprite->data[3] += sprite->data[2] >> 8; + sprite->data[1] &= 0xff; + sprite->pos2.x = Cos(sprite->data[1], 0x20); + sprite->pos2.y = Sin(sprite->data[1], 0x78); + if (sprite->data[2] > 0x100) + { + sprite->data[2] -= sprite->data[4]; + } + if (sprite->data[4] < 0x100) + { + sprite->data[4] += 24; + } + if (sprite->data[2] < 0x100) + { + sprite->data[2] = 0x100; + } + if (sprite->data[3] >= 60) + { + sprite->data[7]++; + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + sprite->invisible = TRUE; + } + } +} + +void sub_8087458(u8 spriteId) +{ + sub_80871C8(spriteId); + gSprites[spriteId].callback = sub_8087364; +} + +void Task_FldEffFlyIn(u8 taskId); +void FlyInEffect_1(struct Task * task); +void FlyInEffect_2(struct Task * task); +void FlyInEffect_3(struct Task * task); +void FlyInEffect_4(struct Task * task); +void FlyInEffect_5(struct Task * task); +void FlyInEffect_6(struct Task * task); +void FlyInEffect_7(struct Task * task); +void sub_80878C0(struct Sprite * sprite); + +void (*const sFlyInEffectFuncs[])(struct Task * task) = { + FlyInEffect_1, + FlyInEffect_2, + FlyInEffect_3, + FlyInEffect_4, + FlyInEffect_5, + FlyInEffect_6, + FlyInEffect_7 +}; + +u32 FldEff_FlyIn(void) +{ + CreateTask(Task_FldEffFlyIn, 0xfe); + return 0; +} + +void Task_FldEffFlyIn(u8 taskId) +{ + sFlyInEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void FlyInEffect_1(struct Task * task) +{ + struct ObjectEvent * objectEvent; + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + task->data[0]++; + task->data[2] = 33; + task->data[15] = gPlayerAvatar.flags; + gPlayerAvatar.preventStep = TRUE; + SetPlayerAvatarStateMask(0x01); + if (task->data[15] & 0x08) + { + sub_80DC44C(objectEvent->mapobj_unk_1A, 0); + } + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(2)); + CameraObjectReset2(); + ObjectEventTurn(objectEvent, DIR_WEST); + StartSpriteAnim(&gSprites[objectEvent->spriteId], 0x16); + objectEvent->invisible = FALSE; + task->data[1] = sub_8087168(); + sub_80871C8(task->data[1]); + sub_8087204(task->data[1], objectEvent->spriteId); + StartSpriteAnim(&gSprites[task->data[1]], gSaveBlock2Ptr->playerGender * 2 + 2); + sub_80877FC(&gSprites[task->data[1]], 1); + gSprites[task->data[1]].callback = sub_8087828; + } +} + +void FlyInEffect_2(struct Task * task) +{ + struct ObjectEvent * objectEvent; + struct Sprite * sprite; + sub_80878C0(&gSprites[task->data[1]]); + if (task->data[2] == 0 || (--task->data[2]) == 0) + { + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + sprite = &gSprites[objectEvent->spriteId]; + sub_8087204(task->data[1], 0x40); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + task->data[0]++; + task->data[2] = 0; + } +} + +void FlyInEffect_3(struct Task * task) +{ + s16 gUnknown_83CC1F0[18] = { + -2, + -4, + -5, + -6, + -7, + -8, + -8, + -8, + -7, + -7, + -6, + -5, + -3, + -2, + 0, + 2, + 4, + 8 + }; + struct Sprite * sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.y = gUnknown_83CC1F0[task->data[2]]; + if ((++task->data[2]) >= 18) + { + task->data[0]++; + } +} + +void FlyInEffect_4(struct Task * task) +{ + struct ObjectEvent * objectEvent; + struct Sprite * sprite; + if (sub_80871AC(task->data[1])) + { + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + sprite = &gSprites[objectEvent->spriteId]; + objectEvent->inanimate = 0; + sub_805F724(objectEvent, objectEvent->currentCoords.x, objectEvent->currentCoords.y); + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->coordOffsetEnabled = 1; + sub_805CB70(); + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void FlyInEffect_5(struct Task * task) +{ + if (ObjectEventClearHeldMovementIfFinished(&gObjectEvents[gPlayerAvatar.objectEventId])) + { + task->data[0]++; + sub_8087458(task->data[1]); + } +} + +void FlyInEffect_6(struct Task * task) +{ + if (sub_80871AC(task->data[1])) + { + DestroySprite(&gSprites[task->data[1]]); + task->data[0]++; + task->data[1] = 0x10; + } +} + +void FlyInEffect_7(struct Task * task) +{ + u8 state; + struct ObjectEvent * objectEvent; + if ((--task->data[1]) == 0) + { + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + state = 0; + if (task->data[15] & 0x08) + { + state = 2; + sub_80DC44C(objectEvent->mapobj_unk_1A, 1); + } + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(state)); + ObjectEventTurn(objectEvent, DIR_SOUTH); + gPlayerAvatar.flags = task->data[15]; + gPlayerAvatar.preventStep = FALSE; + FieldEffectActiveListRemove(FLDEFF_FLY_IN); + DestroyTask(FindTaskIdByFunc(Task_FldEffFlyIn)); + } +} + +const union AffineAnimCmd gUnknown_83CC214[] = { + AFFINEANIMCMD_FRAME(24, 24, 0, 1), + AFFINEANIMCMD_JUMP(0) +}; + +const union AffineAnimCmd gUnknown_83CC224[] = { + AFFINEANIMCMD_FRAME(512, 512, 0, 1), + AFFINEANIMCMD_FRAME(-16, -16, 0, 1), + AFFINEANIMCMD_JUMP(1) +}; + +const union AffineAnimCmd *const gUnknown_83CC23C[] = { + gUnknown_83CC214, + gUnknown_83CC224 +}; + +void sub_80877FC(struct Sprite * sprite, u8 affineAnimId) +{ + sprite->oam.affineMode = ST_OAM_AFFINE_DOUBLE; + sprite->affineAnims = gUnknown_83CC23C; + InitSpriteAffineAnim(sprite); + StartSpriteAffineAnim(sprite, affineAnimId); +} + +void sub_8087828(struct Sprite * sprite) +{ + struct Sprite * sprite2; + sprite->pos2.x = Cos(sprite->data[2], 0xB4); + sprite->pos2.y = Sin(sprite->data[2], 0x48); + sprite->data[2] += 2; + sprite->data[2] &= 0xFF; + if (sprite->data[6] != MAX_SPRITES) + { + sprite2 = &gSprites[sprite->data[6]]; + sprite2->coordOffsetEnabled = FALSE; + sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x; + sprite2->pos1.y = sprite->pos1.y + sprite->pos2.y - 8; + sprite2->pos2.x = 0; + sprite2->pos2.y = 0; + } + if (sprite->data[2] >= 0x80) + { + sprite->data[7] = 1; + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF); + } +} + +void sub_80878C0(struct Sprite * sprite) +{ + if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF) + { + if (gOamMatrices[sprite->oam.matrixNum].a == 0x100 || gOamMatrices[sprite->oam.matrixNum].d == 0x100) + { + sprite->oam.affineMode = ST_OAM_AFFINE_OFF; + FreeOamMatrix(sprite->oam.matrixNum); + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, ST_OAM_AFFINE_OFF); + StartSpriteAnim(sprite, 0); + sprite->callback = sub_80872F0; + } + } +} |