diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 13:18:21 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 13:18:21 -0500 |
commit | 9cf19244fa1fe925d4273eb32c8b7c68c5271152 (patch) | |
tree | 9fd19206d77565875f50a6d4c2d6a661fd64ecf7 | |
parent | 8a092738468de1f4bbe11b7ef4d338735312e9dd (diff) |
Port Lavaridge Gym B1F Warp from Emerald
-rw-r--r-- | asm/field_effect.s | 652 | ||||
-rw-r--r-- | asm/field_effect_helpers.s | 12 | ||||
-rw-r--r-- | data/field_effect.s | 38 | ||||
-rw-r--r-- | data/field_effect_scripts.s | 8 | ||||
-rw-r--r-- | include/event_object_movement.h | 1 | ||||
-rw-r--r-- | include/field_fadetransition.h | 2 | ||||
-rw-r--r-- | src/field_effect.c | 211 | ||||
-rw-r--r-- | src/field_fadetransition.c | 12 | ||||
-rw-r--r-- | src/quest_log_player.c | 2 |
9 files changed, 294 insertions, 644 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index 4d6b6984a..afd25e8b3 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,548 +5,6 @@ .text - thumb_func_start StartLavaridgeGymB1FWarp -StartLavaridgeGymB1FWarp: @ 8084F2C - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _08084F40 @ =Task_LavaridgeGymB1FWarp - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_08084F40: .4byte Task_LavaridgeGymB1FWarp - thumb_func_end StartLavaridgeGymB1FWarp - - thumb_func_start Task_LavaridgeGymB1FWarp -Task_LavaridgeGymB1FWarp: @ 8084F44 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08084F8C @ =sLavaridgeGymB1FWarpEffectFuncs - ldr r2, _08084F90 @ =gTasks - ldr r5, _08084F94 @ =gPlayerAvatar - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_08084F58: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _08084F98 @ =gObjectEvents - adds r1, r0 - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08084F9C @ =gSprites - adds r2, r0 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _08084F58 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08084F8C: .4byte sLavaridgeGymB1FWarpEffectFuncs -_08084F90: .4byte gTasks -_08084F94: .4byte gPlayerAvatar -_08084F98: .4byte gObjectEvents -_08084F9C: .4byte gSprites - thumb_func_end Task_LavaridgeGymB1FWarp - - thumb_func_start LavaridgeGymB1FWarpEffect_1 -LavaridgeGymB1FWarpEffect_1: @ 8084FA0 - push {r4,r5,lr} - adds r4, r0, 0 - adds r5, r1, 0 - bl FreezeObjectEvents - bl CameraObjectReset2 - movs r0, 0 - bl SetCameraPanningCallback - ldr r0, _08084FD4 @ =gPlayerAvatar - movs r2, 0x1 - strb r2, [r0, 0x6] - ldrb r0, [r5, 0x3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5, 0x3] - strh r2, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084FD4: .4byte gPlayerAvatar - thumb_func_end LavaridgeGymB1FWarpEffect_1 - - thumb_func_start LavaridgeGymB1FWarpEffect_2 -LavaridgeGymB1FWarpEffect_2: @ 8084FD8 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning - ldrh r0, [r4, 0xA] - negs r0, r0 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r0, 0x1 - strh r0, [r4, 0xC] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x7 - ble _08085004 - movs r0, 0 - strh r0, [r4, 0xC] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08085004: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end LavaridgeGymB1FWarpEffect_2 - - thumb_func_start LavaridgeGymB1FWarpEffect_3 -LavaridgeGymB1FWarpEffect_3: @ 808500C - push {r4,r5,lr} - adds r4, r0, 0 - movs r0, 0 - strh r0, [r2, 0x26] - movs r0, 0x1 - strh r0, [r4, 0xE] - ldr r3, _08085054 @ =gFieldEffectArguments - movs r5, 0x10 - ldrsh r0, [r1, r5] - str r0, [r3] - movs r5, 0x12 - ldrsh r0, [r1, r5] - str r0, [r3, 0x4] - adds r0, r2, 0 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - str r0, [r3, 0x8] - ldrb r0, [r2, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r3, 0xC] - movs r0, 0x32 - bl FieldEffectStart - movs r0, 0xAB - bl PlaySE - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08085054: .4byte gFieldEffectArguments - thumb_func_end LavaridgeGymB1FWarpEffect_3 - - thumb_func_start LavaridgeGymB1FWarpEffect_4 -LavaridgeGymB1FWarpEffect_4: @ 8085058 - push {r4-r7,lr} - adds r4, r0, 0 - adds r6, r1, 0 - adds r5, r2, 0 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r0, 0 - bl SetCameraPanning - ldrh r0, [r4, 0xA] - negs r2, r0 - strh r2, [r4, 0xA] - ldrh r0, [r4, 0xC] - adds r1, r0, 0x1 - strh r1, [r4, 0xC] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x11 - bgt _08085092 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _080850A4 - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, 0x3 - bgt _080850A4 - lsls r0, r2, 1 - b _080850A2 -_08085092: - movs r0, 0x4 - ands r1, r0 - cmp r1, 0 - bne _080850A4 - lsls r0, r2, 16 - cmp r0, 0 - ble _080850A4 - asrs r0, 17 -_080850A2: - strh r0, [r4, 0xA] -_080850A4: - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x6 - ble _080850F0 - adds r0, r5, 0 - adds r0, 0x29 - movs r1, 0 - ldrsb r1, [r0, r1] - lsls r2, r1, 17 - negs r2, r2 - movs r7, 0x26 - ldrsh r3, [r5, r7] - movs r7, 0x22 - ldrsh r0, [r5, r7] - adds r0, r1 - ldr r1, _080850E8 @ =gSpriteCoordOffsetY - movs r7, 0 - ldrsh r1, [r1, r7] - adds r0, r1 - asrs r2, 16 - adds r0, r2 - cmn r3, r0 - ble _080850EC - ldrh r0, [r5, 0x26] - ldrh r1, [r4, 0xE] - subs r0, r1 - strh r0, [r5, 0x26] - lsls r0, r1, 16 - asrs r0, 16 - cmp r0, 0x7 - bgt _080850F0 - adds r0, r1, 0x1 - strh r0, [r4, 0xE] - b _080850F0 - .align 2, 0 -_080850E8: .4byte gSpriteCoordOffsetY -_080850EC: - movs r0, 0x1 - strh r0, [r4, 0x10] -_080850F0: - ldrh r2, [r4, 0x12] - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0808512E - movs r7, 0x26 - ldrsh r1, [r5, r7] - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - bge _0808512E - adds r0, r2, 0x1 - strh r0, [r4, 0x12] - ldrb r0, [r6, 0x3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r6, 0x3] - ldrb r1, [r5, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r5, 0x5] - adds r2, r5, 0 - adds r2, 0x42 - ldrb r1, [r2] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2] -_0808512E: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08085144 - movs r7, 0x10 - ldrsh r0, [r4, r7] - cmp r0, 0 - beq _08085144 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08085144: - movs r0, 0 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end LavaridgeGymB1FWarpEffect_4 - - thumb_func_start LavaridgeGymB1FWarpEffect_5 -LavaridgeGymB1FWarpEffect_5: @ 808514C - push {r4,lr} - adds r4, r0, 0 - bl TryFadeOutOldMapMusic - bl WarpFadeOutScreen - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end LavaridgeGymB1FWarpEffect_5 - - thumb_func_start LavaridgeGymB1FWarpEffect_6 -LavaridgeGymB1FWarpEffect_6: @ 8085168 - push {lr} - ldr r0, _080851A8 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080851A0 - bl BGMusicStopped - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _080851A0 - bl WarpIntoMap - ldr r1, _080851AC @ =gFieldCallback - ldr r0, _080851B0 @ =FieldCB_LavaridgeGymB1FWarpExit - str r0, [r1] - ldr r0, _080851B4 @ =CB2_LoadMap - bl SetMainCallback2 - ldr r0, _080851B8 @ =Task_LavaridgeGymB1FWarp - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_080851A0: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_080851A8: .4byte gPaletteFade -_080851AC: .4byte gFieldCallback -_080851B0: .4byte FieldCB_LavaridgeGymB1FWarpExit -_080851B4: .4byte CB2_LoadMap -_080851B8: .4byte Task_LavaridgeGymB1FWarp - thumb_func_end LavaridgeGymB1FWarpEffect_6 - - thumb_func_start FieldCB_LavaridgeGymB1FWarpExit -FieldCB_LavaridgeGymB1FWarpExit: @ 80851BC - push {lr} - bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights - bl sub_8111CF0 - bl ScriptContext2_Enable - ldr r0, _080851E0 @ =gFieldCallback - movs r1, 0 - str r1, [r0] - ldr r0, _080851E4 @ =Task_LavaridgeGymB1FWarpExit - bl CreateTask - pop {r0} - bx r0 - .align 2, 0 -_080851E0: .4byte gFieldCallback -_080851E4: .4byte Task_LavaridgeGymB1FWarpExit - thumb_func_end FieldCB_LavaridgeGymB1FWarpExit - - thumb_func_start Task_LavaridgeGymB1FWarpExit -Task_LavaridgeGymB1FWarpExit: @ 80851E8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r6, _08085230 @ =sLavaridgeGymB1FWarpExitEffectFuncs - ldr r2, _08085234 @ =gTasks - ldr r5, _08085238 @ =gPlayerAvatar - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_080851FC: - movs r0, 0x8 - ldrsh r3, [r4, r0] - lsls r3, 2 - adds r3, r6 - ldrb r0, [r5, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - ldr r0, _0808523C @ =gObjectEvents - adds r1, r0 - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _08085240 @ =gSprites - adds r2, r0 - ldr r3, [r3] - adds r0, r4, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _080851FC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08085230: .4byte sLavaridgeGymB1FWarpExitEffectFuncs -_08085234: .4byte gTasks -_08085238: .4byte gPlayerAvatar -_0808523C: .4byte gObjectEvents -_08085240: .4byte gSprites - thumb_func_end Task_LavaridgeGymB1FWarpExit - - thumb_func_start LavaridgeGymB1FWarpExitEffect_1 -LavaridgeGymB1FWarpExitEffect_1: @ 8085244 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - bl CameraObjectReset2 - bl FreezeObjectEvents - ldr r1, _08085270 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - ldrb r0, [r4, 0x1] - movs r1, 0x20 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08085270: .4byte gPlayerAvatar - thumb_func_end LavaridgeGymB1FWarpExitEffect_1 - - thumb_func_start LavaridgeGymB1FWarpExitEffect_2 -LavaridgeGymB1FWarpExitEffect_2: @ 8085274 - push {r4-r6,lr} - adds r4, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - bl IsWeatherNotFadingIn - lsls r0, 24 - cmp r0, 0 - beq _080852B4 - ldr r1, _080852BC @ =gFieldEffectArguments - movs r2, 0x10 - ldrsh r0, [r5, r2] - str r0, [r1] - movs r2, 0x12 - ldrsh r0, [r5, r2] - str r0, [r1, 0x4] - adds r0, r6, 0 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - str r0, [r1, 0x8] - ldrb r0, [r6, 0x5] - lsls r0, 28 - lsrs r0, 30 - str r0, [r1, 0xC] - movs r0, 0x31 - bl FieldEffectStart - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080852B4: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080852BC: .4byte gFieldEffectArguments - thumb_func_end LavaridgeGymB1FWarpExitEffect_2 - - thumb_func_start LavaridgeGymB1FWarpExitEffect_3 -LavaridgeGymB1FWarpExitEffect_3: @ 80852C0 - push {r4,lr} - adds r2, r0, 0 - adds r4, r1, 0 - movs r0, 0xA - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _08085310 @ =gSprites - adds r0, r1 - adds r0, 0x2B - ldrb r0, [r0] - cmp r0, 0x1 - bls _08085308 - ldrh r0, [r2, 0x8] - adds r0, 0x1 - strh r0, [r2, 0x8] - ldrb r1, [r4, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - bl CameraObjectReset1 - movs r0, 0xA8 - bl PlaySE - movs r0, 0x4 - bl sub_8064194 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetHeldMovement -_08085308: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08085310: .4byte gSprites - thumb_func_end LavaridgeGymB1FWarpExitEffect_3 - - thumb_func_start LavaridgeGymB1FWarpExitEffect_4 -LavaridgeGymB1FWarpExitEffect_4: @ 8085314 - push {lr} - adds r0, r1, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _0808533E - ldr r1, _08085344 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - bl UnfreezeObjectEvents - ldr r0, _08085348 @ =Task_LavaridgeGymB1FWarpExit - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_0808533E: - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08085344: .4byte gPlayerAvatar -_08085348: .4byte Task_LavaridgeGymB1FWarpExit - thumb_func_end LavaridgeGymB1FWarpExitEffect_4 - thumb_func_start FldEff_LavaridgeGymWarp FldEff_LavaridgeGymWarp: @ 808534C push {r4,lr} @@ -1406,7 +864,7 @@ _080859C4: FieldCallback_EscapeRopeExit: @ 80859D4 push {lr} bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights + bl WarpFadeInScreen bl sub_8111CF0 bl ScriptContext2_Enable bl FreezeObjectEvents @@ -1872,7 +1330,7 @@ _08085D84: .4byte Task_DoTeleportFieldEffect FieldCallback_TeleportIn: @ 8085D88 push {lr} bl Overworld_PlaySpecialMapMusic - bl pal_fill_for_maplights + bl WarpFadeInScreen bl sub_8111CF0 bl ScriptContext2_Enable bl FreezeObjectEvents @@ -3372,10 +2830,10 @@ _0808693E: bx r0 thumb_func_end sub_8086920 - thumb_func_start sub_8086944 -sub_8086944: @ 8086944 + thumb_func_start FldEff_UseSurf +FldEff_UseSurf: @ 8086944 push {r4,lr} - ldr r0, _08086980 @ =sub_8086990 + ldr r0, _08086980 @ =Task_FldEffUseSurf movs r1, 0xFF bl CreateTask lsls r0, 24 @@ -3389,7 +2847,7 @@ sub_8086944: @ 8086944 ldr r0, [r0] strh r0, [r1, 0x26] bl sav1_reset_battle_music_maybe - ldr r4, _0808698C @ =0x00000131 + ldr r4, _0808698C @ =0x00000131 @MUS_NAMINORI adds r0, r4, 0 bl sub_8056124 cmp r0, 0 @@ -3402,19 +2860,19 @@ _08086978: pop {r1} bx r1 .align 2, 0 -_08086980: .4byte sub_8086990 +_08086980: .4byte Task_FldEffUseSurf _08086984: .4byte gTasks _08086988: .4byte gFieldEffectArguments -_0808698C: .4byte 0x00000131 - thumb_func_end sub_8086944 +_0808698C: .4byte 0x00000131 @MUS_NAMINORI + thumb_func_end FldEff_UseSurf - thumb_func_start sub_8086990 -sub_8086990: @ 8086990 + thumb_func_start Task_FldEffUseSurf +Task_FldEffUseSurf: @ 8086990 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _080869B8 @ =gUnknown_83CC154 + ldr r3, _080869B8 @ =sUseSurfEffectFuncs ldr r2, _080869BC @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -3429,12 +2887,12 @@ sub_8086990: @ 8086990 pop {r0} bx r0 .align 2, 0 -_080869B8: .4byte gUnknown_83CC154 +_080869B8: .4byte sUseSurfEffectFuncs _080869BC: .4byte gTasks - thumb_func_end sub_8086990 + thumb_func_end Task_FldEffUseSurf - thumb_func_start sub_80869C0 -sub_80869C0: @ 80869C0 + thumb_func_start UseSurfEffect_1 +UseSurfEffect_1: @ 80869C0 push {r4-r6,lr} mov r6, r8 push {r6} @@ -3476,10 +2934,10 @@ sub_80869C0: @ 80869C0 .align 2, 0 _08086A18: .4byte gPlayerAvatar _08086A1C: .4byte gObjectEvents - thumb_func_end sub_80869C0 + thumb_func_end UseSurfEffect_1 - thumb_func_start sub_8086A20 -sub_8086A20: @ 8086A20 + thumb_func_start UseSurfEffect_2 +UseSurfEffect_2: @ 8086A20 push {r4,r5,lr} adds r5, r0, 0 ldr r0, _08086A64 @ =gPlayerAvatar @@ -3514,10 +2972,10 @@ _08086A5C: .align 2, 0 _08086A64: .4byte gPlayerAvatar _08086A68: .4byte gObjectEvents - thumb_func_end sub_8086A20 + thumb_func_end UseSurfEffect_2 - thumb_func_start sub_8086A6C -sub_8086A6C: @ 8086A6C + thumb_func_start UseSurfEffect_3 +UseSurfEffect_3: @ 8086A6C push {r4,lr} adds r4, r0, 0 ldr r0, _08086AA8 @ =gPlayerAvatar @@ -3551,10 +3009,10 @@ _08086AA2: _08086AA8: .4byte gPlayerAvatar _08086AAC: .4byte gObjectEvents _08086AB0: .4byte gFieldEffectArguments - thumb_func_end sub_8086A6C + thumb_func_end UseSurfEffect_3 - thumb_func_start sub_8086AB4 -sub_8086AB4: @ 8086AB4 + thumb_func_start UseSurfEffect_4 +UseSurfEffect_4: @ 8086AB4 push {r4-r6,lr} adds r6, r0, 0 movs r0, 0x6 @@ -3609,10 +3067,10 @@ _08086B1E: _08086B24: .4byte gPlayerAvatar _08086B28: .4byte gObjectEvents _08086B2C: .4byte gFieldEffectArguments - thumb_func_end sub_8086AB4 + thumb_func_end UseSurfEffect_4 - thumb_func_start sub_8086B30 -sub_8086B30: @ 8086B30 + thumb_func_start UseSurfEffect_5 +UseSurfEffect_5: @ 8086B30 push {r4,r5,lr} ldr r5, _08086B9C @ =gPlayerAvatar ldrb r1, [r5, 0x5] @@ -3647,7 +3105,7 @@ sub_8086B30: @ 8086B30 bl ScriptContext2_Disable movs r0, 0x9 bl FieldEffectActiveListRemove - ldr r0, _08086BA4 @ =sub_8086990 + ldr r0, _08086BA4 @ =Task_FldEffUseSurf bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3661,11 +3119,11 @@ _08086B96: .align 2, 0 _08086B9C: .4byte gPlayerAvatar _08086BA0: .4byte gObjectEvents -_08086BA4: .4byte sub_8086990 - thumb_func_end sub_8086B30 +_08086BA4: .4byte Task_FldEffUseSurf + thumb_func_end UseSurfEffect_5 - thumb_func_start sub_8086BA8 -sub_8086BA8: @ 8086BA8 + thumb_func_start FldEff_Unk41 +FldEff_Unk41: @ 8086BA8 push {lr} ldr r0, _08086BC8 @ =gQuestLogState ldrb r0, [r0] @@ -3675,7 +3133,7 @@ sub_8086BA8: @ 8086BA8 movs r1, 0x59 bl sub_811278C _08086BBA: - ldr r0, _08086BCC @ =sub_8086BD0 + ldr r0, _08086BCC @ =Task_FldEffUnk41 movs r1, 0xFF bl CreateTask movs r0, 0 @@ -3683,16 +3141,16 @@ _08086BBA: bx r1 .align 2, 0 _08086BC8: .4byte gQuestLogState -_08086BCC: .4byte sub_8086BD0 - thumb_func_end sub_8086BA8 +_08086BCC: .4byte Task_FldEffUnk41 + thumb_func_end FldEff_Unk41 - thumb_func_start sub_8086BD0 -sub_8086BD0: @ 8086BD0 + thumb_func_start Task_FldEffUnk41 +Task_FldEffUnk41: @ 8086BD0 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08086BF8 @ =gUnknown_83CC168 + ldr r3, _08086BF8 @ =sUnk41EffectFuncs ldr r2, _08086BFC @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -3707,12 +3165,12 @@ sub_8086BD0: @ 8086BD0 pop {r0} bx r0 .align 2, 0 -_08086BF8: .4byte gUnknown_83CC168 +_08086BF8: .4byte sUnk41EffectFuncs _08086BFC: .4byte gTasks - thumb_func_end sub_8086BD0 + thumb_func_end Task_FldEffUnk41 - thumb_func_start sub_8086C00 -sub_8086C00: @ 8086C00 + thumb_func_start Unk41Effect_1 +Unk41Effect_1: @ 8086C00 push {r4,lr} adds r4, r0, 0 bl ScriptContext2_Enable @@ -3728,10 +3186,10 @@ sub_8086C00: @ 8086C00 bx r0 .align 2, 0 _08086C20: .4byte gPlayerAvatar - thumb_func_end sub_8086C00 + thumb_func_end Unk41Effect_1 - thumb_func_start sub_8086C24 -sub_8086C24: @ 8086C24 + thumb_func_start Unk41Effect_2 +Unk41Effect_2: @ 8086C24 push {r4,r5,lr} adds r5, r0, 0 ldr r0, _08086C68 @ =gPlayerAvatar @@ -3766,10 +3224,10 @@ _08086C60: .align 2, 0 _08086C68: .4byte gPlayerAvatar _08086C6C: .4byte gObjectEvents - thumb_func_end sub_8086C24 + thumb_func_end Unk41Effect_2 - thumb_func_start sub_8086C70 -sub_8086C70: @ 8086C70 + thumb_func_start Unk41Effect_3 +Unk41Effect_3: @ 8086C70 push {r4-r6,lr} adds r6, r0, 0 ldr r5, _08086C9C @ =gPlayerAvatar @@ -3833,10 +3291,10 @@ _08086CEE: pop {r4-r6} pop {r0} bx r0 - thumb_func_end sub_8086C70 + thumb_func_end Unk41Effect_3 - thumb_func_start sub_8086CF4 -sub_8086CF4: @ 8086CF4 + thumb_func_start Unk41Effect_4 +Unk41Effect_4: @ 8086CF4 push {r4,lr} ldr r4, _08086D2C @ =gPlayerAvatar ldrb r1, [r4, 0x5] @@ -3853,7 +3311,7 @@ sub_8086CF4: @ 8086CF4 strb r0, [r4, 0x6] movs r0, 0x41 bl FieldEffectActiveListRemove - ldr r0, _08086D34 @ =sub_8086BD0 + ldr r0, _08086D34 @ =Task_FldEffUnk41 bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -3865,8 +3323,8 @@ _08086D26: .align 2, 0 _08086D2C: .4byte gPlayerAvatar _08086D30: .4byte gObjectEvents -_08086D34: .4byte sub_8086BD0 - thumb_func_end sub_8086CF4 +_08086D34: .4byte Task_FldEffUnk41 + thumb_func_end Unk41Effect_4 thumb_func_start sub_8086D38 sub_8086D38: @ 8086D38 diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index db64b77db..3f128f799 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -2720,8 +2720,8 @@ StartAshFieldEffect: @ 80DC23C _080DC26C: .4byte gFieldEffectArguments thumb_func_end StartAshFieldEffect - thumb_func_start oei_ash -oei_ash: @ 80DC270 + thumb_func_start FldEff_Ash +FldEff_Ash: @ 80DC270 push {r4,r5,lr} sub sp, 0x4 ldr r5, _080DC2F0 @ =gFieldEffectArguments @@ -2789,7 +2789,7 @@ _080DC2E6: _080DC2F0: .4byte gFieldEffectArguments _080DC2F4: .4byte gFieldEffectObjectTemplatePointers _080DC2F8: .4byte gSprites - thumb_func_end oei_ash + thumb_func_end FldEff_Ash thumb_func_start sub_80DC2FC sub_80DC2FC: @ 80DC2FC @@ -2906,8 +2906,8 @@ _080DC3C8: bx r0 thumb_func_end sub_80DC3A8 - thumb_func_start sub_80DC3D0 -sub_80DC3D0: @ 80DC3D0 + thumb_func_start FldEff_SurfBlob +FldEff_SurfBlob: @ 80DC3D0 push {r4,r5,lr} ldr r4, _080DC43C @ =gFieldEffectArguments adds r1, r4, 0x4 @@ -2964,7 +2964,7 @@ _080DC43C: .4byte gFieldEffectArguments _080DC440: .4byte gFieldEffectObjectTemplatePointers _080DC444: .4byte gSprites _080DC448: .4byte 0x0000ffff - thumb_func_end sub_80DC3D0 + thumb_func_end FldEff_SurfBlob thumb_func_start sub_80DC44C sub_80DC44C: @ 80DC44C diff --git a/data/field_effect.s b/data/field_effect.s index 596084514..7d9a50f3f 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -7,22 +7,6 @@ .align 2 .align 2 -sLavaridgeGymB1FWarpEffectFuncs:: @ 83CC0A4 dataptr - .4byte LavaridgeGymB1FWarpEffect_1 - .4byte LavaridgeGymB1FWarpEffect_2 - .4byte LavaridgeGymB1FWarpEffect_3 - .4byte LavaridgeGymB1FWarpEffect_4 - .4byte LavaridgeGymB1FWarpEffect_5 - .4byte LavaridgeGymB1FWarpEffect_6 - - .align 2 -sLavaridgeGymB1FWarpExitEffectFuncs:: @ 83CC0BC dataptr - .4byte LavaridgeGymB1FWarpExitEffect_1 - .4byte LavaridgeGymB1FWarpExitEffect_2 - .4byte LavaridgeGymB1FWarpExitEffect_3 - .4byte LavaridgeGymB1FWarpExitEffect_4 - - .align 2 sLavaridgeGym1FWarpEffectFuncs:: @ 83CC0CC dataptr .4byte LavaridgeGym1FWarpEffect_1 .4byte LavaridgeGym1FWarpEffect_2 @@ -80,19 +64,19 @@ sShowMonIndoorsEffectFuncs:: @ 83CC138 dataptr .4byte ShowMonEffect_Indoors_7 .align 2 -gUnknown_83CC154:: @ 83CC154 dataptr - .4byte sub_80869C0 - .4byte sub_8086A20 - .4byte sub_8086A6C - .4byte sub_8086AB4 - .4byte sub_8086B30 +sUseSurfEffectFuncs:: @ 83CC154 dataptr + .4byte UseSurfEffect_1 + .4byte UseSurfEffect_2 + .4byte UseSurfEffect_3 + .4byte UseSurfEffect_4 + .4byte UseSurfEffect_5 .align 2 -gUnknown_83CC168:: @ 83CC168 dataptr - .4byte sub_8086C00 - .4byte sub_8086C24 - .4byte sub_8086C70 - .4byte sub_8086CF4 +sUnk41EffectFuncs:: @ 83CC168 dataptr + .4byte Unk41Effect_1 + .4byte Unk41Effect_2 + .4byte Unk41Effect_3 + .4byte Unk41Effect_4 gUnknown_83CC178:: @ 83CC178 dataptr (incomplete) .4byte sub_8086E70 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 49f14d251..0f8295871 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -102,15 +102,15 @@ gFldEffScript_FieldMoveShowMon:: @ 81D97F0 end gFldEffScript_Ash:: @ 81D97F6 - loadfadedpal_callnative gUnknown_83A5348, oei_ash + loadfadedpal_callnative gUnknown_83A5348, FldEff_Ash end gFldEffScript_SurfBlob:: @ 81D9800 - callnative sub_80DC3D0 + callnative FldEff_SurfBlob end gFldEffScript_UseSurf:: @ 81D9806 - callnative sub_8086944 + callnative FldEff_UseSurf end gFldEffScript_Dust:: @ 81D980C @@ -326,7 +326,7 @@ gFldEffScript_SmileyFaceIcon:: @ 81D998C end gFldEffScript_Unk41:: @ 81D9992 - callnative sub_8086BA8 + callnative FldEff_Unk41 end gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index ebd5b44db..bbf34a23b 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -117,6 +117,7 @@ bool32 RfuUnionObjectIsInvisible(u8 objectEventId); void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo); bool32 RfuUnionObjectIsWarping(u8 objectEventId); u8 sub_8063F2C(u8 direction); +u8 sub_8064194(u8 direction); void sub_805F378(s16 x, s16 y); diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index c23f201dc..a1fe590fa 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -16,7 +16,7 @@ void WarpFadeOutScreen(void); void FieldCallback_ReturnToEventScript2(void); void FadeInFromBlack(void); void FadeTransition_FadeInOnReturnToStartMenu(void); -void pal_fill_for_maplights(void); +void WarpFadeInScreen(void); void sub_807DCE4(void); diff --git a/src/field_effect.c b/src/field_effect.c index c848a43c5..5f07311e2 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1099,7 +1099,7 @@ bool8 (*const sFallWarpEffectCBPtrs[])(struct Task * task) = { void FieldCB_FallWarpExit(void) { Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); sub_8111CF0(); ScriptContext2_Enable(); FreezeObjectEvents(); @@ -1403,7 +1403,7 @@ void Escalator_TransitionToWarpInEffect(void) void FieldCB_EscalatorWarpIn(void) { Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); sub_8111CF0(); ScriptContext2_Enable(); FreezeObjectEvents(); @@ -1667,3 +1667,210 @@ bool8 dive_3_unknown(struct Task * task) } return FALSE; } + +void Task_LavaridgeGymB1FWarp(u8 taskId); +bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +void FieldCB_LavaridgeGymB1FWarpExit(void); +void Task_LavaridgeGymB1FWarpExit(u8 taskId); +bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); +bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite); + +bool8 (*const sLavaridgeGymB1FWarpEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { + LavaridgeGymB1FWarpEffect_1, + LavaridgeGymB1FWarpEffect_2, + LavaridgeGymB1FWarpEffect_3, + LavaridgeGymB1FWarpEffect_4, + LavaridgeGymB1FWarpEffect_5, + LavaridgeGymB1FWarpEffect_6 +}; + +bool8 (*const sLavaridgeGymB1FWarpExitEffectFuncs[])(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) = { + LavaridgeGymB1FWarpExitEffect_1, + LavaridgeGymB1FWarpExitEffect_2, + LavaridgeGymB1FWarpExitEffect_3, + LavaridgeGymB1FWarpExitEffect_4 +}; + +void StartLavaridgeGymB1FWarp(u8 priority) +{ + CreateTask(Task_LavaridgeGymB1FWarp, priority); +} + +void Task_LavaridgeGymB1FWarp(u8 taskId) +{ + while (sLavaridgeGymB1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 LavaridgeGymB1FWarpEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + FreezeObjectEvents(); + CameraObjectReset2(); + SetCameraPanningCallback(NULL); + gPlayerAvatar.preventStep = TRUE; + objectEvent->fixedPriority = 1; + task->data[1] = 1; + task->data[0]++; + return TRUE; +} + +bool8 LavaridgeGymB1FWarpEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + SetCameraPanning(0, task->data[1]); + task->data[1] = -task->data[1]; + task->data[2]++; + if (task->data[2] > 7) + { + task->data[2] = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + sprite->pos2.y = 0; + task->data[3] = 1; + gFieldEffectArguments[0] = objectEvent->currentCoords.x; + gFieldEffectArguments[1] = objectEvent->currentCoords.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; + FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP); + PlaySE(SE_W153); + task->data[0]++; + return TRUE; +} + +bool8 LavaridgeGymB1FWarpEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + s16 centerToCornerVecY; + SetCameraPanning(0, task->data[1]); + if (task->data[1] = -task->data[1], ++task->data[2] <= 17) + { + if (!(task->data[2] & 1) && (task->data[1] <= 3)) + { + task->data[1] <<= 1; + } + } else if (!(task->data[2] & 4) && (task->data[1] > 0)) + { + task->data[1] >>= 1; + } + if (task->data[2] > 6) + { + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY)) + { + sprite->pos2.y -= task->data[3]; + if (task->data[3] <= 7) + { + task->data[3]++; + } + } else + { + task->data[4] = 1; + } + } + if (task->data[5] == 0 && sprite->pos2.y < -0x10) + { + task->data[5]++; + objectEvent->fixedPriority = 1; + sprite->oam.priority = 1; + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + } + if (task->data[1] == 0 && task->data[4] != 0) + { + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpEffect_5(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + TryFadeOutOldMapMusic(); + WarpFadeOutScreen(); + task->data[0]++; + return FALSE; +} + +bool8 LavaridgeGymB1FWarpEffect_6(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + if (!gPaletteFade.active && BGMusicStopped() == TRUE) + { + WarpIntoMap(); + gFieldCallback = FieldCB_LavaridgeGymB1FWarpExit; + SetMainCallback2(CB2_LoadMap); + DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarp)); + } + return FALSE; +} + +void FieldCB_LavaridgeGymB1FWarpExit(void) +{ + Overworld_PlaySpecialMapMusic(); + WarpFadeInScreen(); + sub_8111CF0(); + ScriptContext2_Enable(); + gFieldCallback = NULL; + CreateTask(Task_LavaridgeGymB1FWarpExit, 0); +} + +void Task_LavaridgeGymB1FWarpExit(u8 taskId) +{ + while (sLavaridgeGymB1FWarpExitEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId])); +} + +bool8 LavaridgeGymB1FWarpExitEffect_1(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + CameraObjectReset2(); + FreezeObjectEvents(); + gPlayerAvatar.preventStep = TRUE; + objectEvent->invisible = TRUE; + task->data[0]++; + return FALSE; +} + +bool8 LavaridgeGymB1FWarpExitEffect_2(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + if (IsWeatherNotFadingIn()) + { + gFieldEffectArguments[0] = objectEvent->currentCoords.x; + gFieldEffectArguments[1] = objectEvent->currentCoords.y; + gFieldEffectArguments[2] = sprite->subpriority - 1; + gFieldEffectArguments[3] = sprite->oam.priority; + task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH); + task->data[0]++; + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpExitEffect_3(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + sprite = &gSprites[task->data[1]]; + if (sprite->animCmdIndex > 1) + { + task->data[0]++; + objectEvent->invisible = FALSE; + CameraObjectReset1(); + PlaySE(SE_W091); + ObjectEventSetHeldMovement(objectEvent, sub_8064194(DIR_EAST)); + } + return FALSE; +} + +bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * objectEvent, struct Sprite * sprite) +{ + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + gPlayerAvatar.preventStep = FALSE; + ScriptContext2_Disable(); + UnfreezeObjectEvents(); + DestroyTask(FindTaskIdByFunc(Task_LavaridgeGymB1FWarpExit)); + } + return FALSE; +} diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 0076c2d8f..02a51087f 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -50,7 +50,7 @@ void palette_bg_faded_fill_black(void) CpuFastFill16(RGB_BLACK, gPlttBufferFaded, 0x400); } -void pal_fill_for_maplights(void) +void WarpFadeInScreen(void) { switch (sub_80C9DCC(get_map_light_from_warp0(), GetCurrentMapType())) { @@ -178,7 +178,7 @@ static void task_mpl_807DD60(u8 taskId) case 1: if (gTasks[task->data[1]].isActive != TRUE) { - pal_fill_for_maplights(); + WarpFadeInScreen(); task->data[0]++; } break; @@ -212,7 +212,7 @@ static void sub_807DDF0(u8 taskId) case 1: if (IsLinkTaskFinished()) { - pal_fill_for_maplights(); + WarpFadeInScreen(); task->data[0]++; } break; @@ -278,7 +278,7 @@ static void sub_807DE78(bool8 a0) static void sub_807DF4C(bool8 a0) { if (!a0) - pal_fill_for_maplights(); + WarpFadeInScreen(); else FadeInFromBlack(); } @@ -302,7 +302,7 @@ void sub_807DF7C(void) static void sub_807DF94(void) { Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); sub_8111CF0(); PlaySE(SE_TK_WARPOUT); CreateTask(sub_807E31C, 10); @@ -906,7 +906,7 @@ static void sub_807EC34(u8 taskId) break; case 0: Overworld_PlaySpecialMapMusic(); - pal_fill_for_maplights(); + WarpFadeInScreen(); ScriptContext2_Enable(); sub_807ECBC(&data[1], &data[2], &data[3], &data[4], &data[5]); data[0]++; diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 32832a04a..c6b5db4f9 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -162,7 +162,7 @@ static void sub_815077C(void) static void sub_8150794(u8 taskId) { - if (!FieldEffectActiveListContains(0x41)) + if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) { UnfreezeObjectEvents(); ScriptContext2_Disable(); |