diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 15:55:12 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 15:55:12 -0500 |
commit | f8251866551143e2febe55fe47e92f7c826696b3 (patch) | |
tree | 6b69815ccb2c30f00c292ed2881dbd4fb17468b7 | |
parent | 80e5031619f388ba3274ca573e58451cb443d54b (diff) |
Use VS Seeker field effect
-rw-r--r-- | asm/field_effect.s | 282 | ||||
-rw-r--r-- | data/field_effect.s | 27 | ||||
-rw-r--r-- | data/field_effect_scripts.s | 8 | ||||
-rw-r--r-- | include/constants/field_effects.h | 2 | ||||
-rw-r--r-- | include/field_player_avatar.h | 1 | ||||
-rw-r--r-- | include/quest_log.h | 1 | ||||
-rw-r--r-- | src/field_effect.c | 72 | ||||
-rw-r--r-- | src/quest_log_player.c | 4 | ||||
-rw-r--r-- | src/vs_seeker.c | 4 |
9 files changed, 132 insertions, 269 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index 8fc5386b9..370016f84 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,212 +5,8 @@ .text - thumb_func_start FldEff_Unk41 -FldEff_Unk41: @ 8086BA8 - push {lr} - ldr r0, _08086BC8 @ =gQuestLogState - ldrb r0, [r0] - cmp r0, 0x1 - bne _08086BBA - movs r0, 0x8 - movs r1, 0x59 - bl sub_811278C -_08086BBA: - ldr r0, _08086BCC @ =Task_FldEffUnk41 - movs r1, 0xFF - bl CreateTask - movs r0, 0 - pop {r1} - bx r1 - .align 2, 0 -_08086BC8: .4byte gQuestLogState -_08086BCC: .4byte Task_FldEffUnk41 - thumb_func_end FldEff_Unk41 - - thumb_func_start Task_FldEffUnk41 -Task_FldEffUnk41: @ 8086BD0 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r3, _08086BF8 @ =sUnk41EffectFuncs - ldr r2, _08086BFC @ =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 -_08086BF8: .4byte sUnk41EffectFuncs -_08086BFC: .4byte gTasks - thumb_func_end Task_FldEffUnk41 - - thumb_func_start Unk41Effect_1 -Unk41Effect_1: @ 8086C00 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext2_Enable - bl FreezeObjectEvents - ldr r1, _08086C20 @ =gPlayerAvatar - movs r0, 0x1 - strb r0, [r1, 0x6] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086C20: .4byte gPlayerAvatar - thumb_func_end Unk41Effect_1 - - thumb_func_start Unk41Effect_2 -Unk41Effect_2: @ 8086C24 - push {r4,r5,lr} - adds r5, r0, 0 - ldr r0, _08086C68 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086C6C @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventIsMovementOverridden - lsls r0, 24 - cmp r0, 0 - beq _08086C4E - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086C60 -_08086C4E: - bl sub_805CBE8 - adds r0, r4, 0 - movs r1, 0x45 - bl ObjectEventSetHeldMovement - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_08086C60: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08086C68: .4byte gPlayerAvatar -_08086C6C: .4byte gObjectEvents - thumb_func_end Unk41Effect_2 - - thumb_func_start Unk41Effect_3 -Unk41Effect_3: @ 8086C70 - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _08086C9C @ =gPlayerAvatar - ldrb r1, [r5, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086CA0 @ =gObjectEvents - adds r4, r0, r1 - adds r0, r4, 0 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086CEE - ldrb r1, [r5] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - beq _08086CA4 - movs r0, 0x1 - b _08086CAE - .align 2, 0 -_08086C9C: .4byte gPlayerAvatar -_08086CA0: .4byte gObjectEvents -_08086CA4: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _08086CC0 - movs r0, 0x2 -_08086CAE: - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId - b _08086CD2 -_08086CC0: - movs r0, 0 - bl GetPlayerAvatarGraphicsIdByStateId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventSetGraphicsId -_08086CD2: - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl ObjectEventForceSetSpecialAnim - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_08086CEE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end Unk41Effect_3 - - thumb_func_start Unk41Effect_4 -Unk41Effect_4: @ 8086CF4 - push {r4,lr} - ldr r4, _08086D2C @ =gPlayerAvatar - ldrb r1, [r4, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08086D30 @ =gObjectEvents - adds r0, r1 - bl ObjectEventClearHeldMovementIfFinished - lsls r0, 24 - cmp r0, 0 - beq _08086D26 - movs r0, 0 - strb r0, [r4, 0x6] - movs r0, 0x41 - bl FieldEffectActiveListRemove - ldr r0, _08086D34 @ =Task_FldEffUnk41 - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask -_08086D26: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08086D2C: .4byte gPlayerAvatar -_08086D30: .4byte gObjectEvents -_08086D34: .4byte Task_FldEffUnk41 - thumb_func_end Unk41Effect_4 - - thumb_func_start sub_8086D38 -sub_8086D38: @ 8086D38 + thumb_func_start FldEff_NpcFlyOut +FldEff_NpcFlyOut: @ 8086D38 push {r4,lr} ldr r0, _08086D84 @ =gFieldEffectObjectTemplatePointers ldr r0, [r0, 0x68] @@ -251,7 +47,7 @@ _08086D84: .4byte gFieldEffectObjectTemplatePointers _08086D88: .4byte gSprites _08086D8C: .4byte sub_8086D94 _08086D90: .4byte gFieldEffectArguments - thumb_func_end sub_8086D38 + thumb_func_end FldEff_NpcFlyOut thumb_func_start sub_8086D94 sub_8086D94: @ 8086D94 @@ -321,7 +117,7 @@ _08086E0C: .4byte gSprites thumb_func_start FldEff_UseFly FldEff_UseFly: @ 8086E10 push {lr} - ldr r0, _08086E34 @ =sub_8086E40 + ldr r0, _08086E34 @ =Task_UseFly movs r1, 0xFE bl CreateTask lsls r0, 24 @@ -338,18 +134,18 @@ FldEff_UseFly: @ 8086E10 pop {r1} bx r1 .align 2, 0 -_08086E34: .4byte sub_8086E40 +_08086E34: .4byte Task_UseFly _08086E38: .4byte gTasks _08086E3C: .4byte gFieldEffectArguments thumb_func_end FldEff_UseFly - thumb_func_start sub_8086E40 -sub_8086E40: @ 8086E40 + thumb_func_start Task_UseFly +Task_UseFly: @ 8086E40 push {lr} adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r3, _08086E68 @ =gUnknown_83CC178 + ldr r3, _08086E68 @ =sUseFlyEffectFuncs ldr r2, _08086E6C @ =gTasks lsls r0, r1, 2 adds r0, r1 @@ -364,12 +160,12 @@ sub_8086E40: @ 8086E40 pop {r0} bx r0 .align 2, 0 -_08086E68: .4byte gUnknown_83CC178 +_08086E68: .4byte sUseFlyEffectFuncs _08086E6C: .4byte gTasks - thumb_func_end sub_8086E40 + thumb_func_end Task_UseFly - thumb_func_start sub_8086E70 -sub_8086E70: @ 8086E70 + thumb_func_start UseFlyEffect_1 +UseFlyEffect_1: @ 8086E70 push {r4-r6,lr} adds r5, r0, 0 ldr r6, _08086EC0 @ =gPlayerAvatar @@ -409,10 +205,10 @@ _08086EB8: .align 2, 0 _08086EC0: .4byte gPlayerAvatar _08086EC4: .4byte gObjectEvents - thumb_func_end sub_8086E70 + thumb_func_end UseFlyEffect_1 - thumb_func_start sub_8086EC8 -sub_8086EC8: @ 8086EC8 + thumb_func_start UseFlyEffect_2 +UseFlyEffect_2: @ 8086EC8 push {r4,lr} adds r4, r0, 0 ldr r0, _08086F00 @ =gPlayerAvatar @@ -443,10 +239,10 @@ _08086EF8: _08086F00: .4byte gPlayerAvatar _08086F04: .4byte gObjectEvents _08086F08: .4byte gFieldEffectArguments - thumb_func_end sub_8086EC8 + thumb_func_end UseFlyEffect_2 - thumb_func_start sub_8086F0C -sub_8086F0C: @ 8086F0C + thumb_func_start UseFlyEffect_3 +UseFlyEffect_3: @ 8086F0C push {r4,r5,lr} adds r4, r0, 0 movs r0, 0x6 @@ -487,10 +283,10 @@ _08086F54: .align 2, 0 _08086F5C: .4byte gPlayerAvatar _08086F60: .4byte gObjectEvents - thumb_func_end sub_8086F0C + thumb_func_end UseFlyEffect_3 - thumb_func_start sub_8086F64 -sub_8086F64: @ 8086F64 + thumb_func_start UseFlyEffect_4 +UseFlyEffect_4: @ 8086F64 push {r4,lr} adds r4, r0, 0 ldrb r0, [r4, 0xA] @@ -521,10 +317,10 @@ _08086F98: .align 2, 0 _08086FA0: .4byte gPlayerAvatar _08086FA4: .4byte gObjectEvents - thumb_func_end sub_8086F64 + thumb_func_end UseFlyEffect_4 - thumb_func_start sub_8086FA8 -sub_8086FA8: @ 8086FA8 + thumb_func_start UseFlyEffect_5 +UseFlyEffect_5: @ 8086FA8 push {r4,lr} adds r4, r0, 0 ldr r0, _08086FF4 @ =gPlayerAvatar @@ -564,10 +360,10 @@ _08086FEC: .align 2, 0 _08086FF4: .4byte gPlayerAvatar _08086FF8: .4byte gObjectEvents - thumb_func_end sub_8086FA8 + thumb_func_end UseFlyEffect_5 - thumb_func_start sub_8086FFC -sub_8086FFC: @ 8086FFC + thumb_func_start UseFlyEffect_6 +UseFlyEffect_6: @ 8086FFC push {r4,r5,lr} adds r5, r0, 0 ldrh r0, [r5, 0xC] @@ -619,10 +415,10 @@ _0808705A: _08087060: .4byte gPlayerAvatar _08087064: .4byte gObjectEvents _08087068: .4byte gSprites - thumb_func_end sub_8086FFC + thumb_func_end UseFlyEffect_6 - thumb_func_start sub_808706C -sub_808706C: @ 808706C + thumb_func_start UseFlyEffect_7 +UseFlyEffect_7: @ 808706C push {r4,r5,lr} adds r5, r0, 0 ldrh r0, [r5, 0xC] @@ -700,10 +496,10 @@ _08087108: .4byte gObjectEvents _0808710C: .4byte gSprites _08087110: .4byte gSaveBlock2Ptr _08087114: .4byte sub_8087828 - thumb_func_end sub_808706C + thumb_func_end UseFlyEffect_7 - thumb_func_start sub_8087118 -sub_8087118: @ 8087118 + thumb_func_start UseFlyEffect_8 +UseFlyEffect_8: @ 8087118 push {r4,lr} adds r4, r0, 0 ldrb r0, [r4, 0xA] @@ -719,10 +515,10 @@ _08087132: pop {r4} pop {r0} bx r0 - thumb_func_end sub_8087118 + thumb_func_end UseFlyEffect_8 - thumb_func_start sub_8087138 -sub_8087138: @ 8087138 + thumb_func_start UseFlyEffect_9 +UseFlyEffect_9: @ 8087138 push {lr} ldr r0, _08087160 @ =gPaletteFade ldrb r1, [r0, 0x7] @@ -732,7 +528,7 @@ sub_8087138: @ 8087138 bne _0808715A movs r0, 0x1F bl FieldEffectActiveListRemove - ldr r0, _08087164 @ =sub_8086E40 + ldr r0, _08087164 @ =Task_UseFly bl FindTaskIdByFunc lsls r0, 24 lsrs r0, 24 @@ -742,8 +538,8 @@ _0808715A: bx r0 .align 2, 0 _08087160: .4byte gPaletteFade -_08087164: .4byte sub_8086E40 - thumb_func_end sub_8087138 +_08087164: .4byte Task_UseFly + thumb_func_end UseFlyEffect_9 thumb_func_start sub_8087168 sub_8087168: @ 8087168 diff --git a/data/field_effect.s b/data/field_effect.s index c24b7d3f6..63142e981 100644 --- a/data/field_effect.s +++ b/data/field_effect.s @@ -6,23 +6,16 @@ .section .rodata .align 2 - .align 2 -sUnk41EffectFuncs:: @ 83CC168 dataptr - .4byte Unk41Effect_1 - .4byte Unk41Effect_2 - .4byte Unk41Effect_3 - .4byte Unk41Effect_4 - -gUnknown_83CC178:: @ 83CC178 dataptr (incomplete) - .4byte sub_8086E70 - .4byte sub_8086EC8 - .4byte sub_8086F0C - .4byte sub_8086F64 - .4byte sub_8086FA8 - .4byte sub_8086FFC - .4byte sub_808706C - .4byte sub_8087118 - .4byte sub_8087138 +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 diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index 0f8295871..3b30c8878 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -67,7 +67,7 @@ gFieldEffectScriptPointers:: @ 81D96AC .4byte gFldEffScript_HallOfFameRecord .4byte gFldEffScript_UseTeleport .4byte gFldEffScript_SmileyFaceIcon - .4byte gFldEffScript_Unk41 + .4byte gFldEffScript_UseVsSeeker .4byte gFldEffScript_DoubleExclMarkIcon .4byte gFldEffScript_Unk43 .4byte gFldEffScript_Unk44 @@ -192,7 +192,7 @@ gFldEffScript_MountainDisguise:: @ 81D98AC end gFldEffScript_NpcflyOut:: @ 81D98B2 - callnative sub_8086D38 + callnative FldEff_NpcFlyOut end gFldEffScript_UseFly:: @ 81D98B8 @@ -325,8 +325,8 @@ gFldEffScript_SmileyFaceIcon:: @ 81D998C callnative FldEff_SmileyFaceIcon end -gFldEffScript_Unk41:: @ 81D9992 - callnative FldEff_Unk41 +gFldEffScript_UseVsSeeker:: @ 81D9992 + callnative FldEff_UseVsSeeker end gFldEffScript_DoubleExclMarkIcon:: @ 81D9998 diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index c56c97d73..80240adc6 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -66,7 +66,7 @@ #define FLDEFF_HALL_OF_FAME_RECORD 62 #define FLDEFF_USE_TELEPORT 63 #define FLDEFF_SMILEY_FACE_ICON 64 -#define FLDEFF_UNK_41 65 // TODO: related to vs_seeker +#define FLDEFF_USE_VS_SEEKER 65 // TODO: related to vs_seeker #define FLDEFF_DOUBLE_EXCL_MARK_ICON 66 #define FLDEFF_UNK_43 67 // TODO: related to deoxys #define FLDEFF_UNK_44 68 // TODO: related to ??? diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h index e9553025c..5565fb64b 100644 --- a/include/field_player_avatar.h +++ b/include/field_player_avatar.h @@ -36,5 +36,6 @@ bool32 sub_805DC24(void); bool8 PartyHasMonWithSurf(void); bool8 IsPlayerSurfingNorth(void); void player_get_pos_including_state_based_drift(s16 *x, s16 *y); +void sub_805CBE8(void); #endif //GUARD_FIELD_PLAYER_AVATAR_H diff --git a/include/quest_log.h b/include/quest_log.h index 016a94267..6cee34bbb 100644 --- a/include/quest_log.h +++ b/include/quest_log.h @@ -51,5 +51,6 @@ void sub_8110840(void *oldSave); void sub_8112F18(u8 windowId); bool8 sub_8111C2C(void); void sub_81128BC(u8 a0); +void sub_811278C(u8, u8); #endif //GUARD_QUEST_LOG_H diff --git a/src/field_effect.c b/src/field_effect.c index 9695e4900..3b710167d 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2967,3 +2967,75 @@ void UseSurfEffect_5(struct Task * task) HelpSystem_SetSomeVariable2(22); } } + +void Task_FldEffUseVsSeeker(u8 taskId); +void UseVsSeekerEffect_1(struct Task * task); +void UseVsSeekerEffect_2(struct Task * task); +void UseVsSeekerEffect_3(struct Task * task); +void UseVsSeekerEffect_4(struct Task * task); + +void (*const sUseVsSeekerEffectFuncs[])(struct Task * task) = { + UseVsSeekerEffect_1, + UseVsSeekerEffect_2, + UseVsSeekerEffect_3, + UseVsSeekerEffect_4 +}; + +u32 FldEff_UseVsSeeker(void) +{ + if (gQuestLogState == QL_STATE_1) + sub_811278C(8, 89); + CreateTask(Task_FldEffUseVsSeeker, 0xFF); + return 0; +} + +void Task_FldEffUseVsSeeker(u8 taskId) +{ + sUseVsSeekerEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId]); +} + +void UseVsSeekerEffect_1(struct Task * task) +{ + ScriptContext2_Enable(); + FreezeObjectEvents(); + gPlayerAvatar.preventStep = TRUE; + task->data[0]++; +} + +void UseVsSeekerEffect_2(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (!ObjectEventIsMovementOverridden(playerObj) || ObjectEventClearHeldMovementIfFinished(playerObj)) + { + sub_805CBE8(); + ObjectEventSetHeldMovement(playerObj, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->data[0]++; + } +} + +void UseVsSeekerEffect_3(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(playerObj)) + { + if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_ACRO_BIKE | PLAYER_AVATAR_FLAG_MACH_BIKE)) + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(1)); + else if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING) + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(2)); + else + ObjectEventSetGraphicsId(playerObj, GetPlayerAvatarGraphicsIdByStateId(0)); + ObjectEventForceSetSpecialAnim(playerObj, GetFaceDirectionMovementAction(playerObj->facingDirection)); + task->data[0]++; + } +} + +void UseVsSeekerEffect_4(struct Task * task) +{ + struct ObjectEvent * playerObj = &gObjectEvents[gPlayerAvatar.objectEventId]; + if (ObjectEventClearHeldMovementIfFinished(playerObj)) + { + gPlayerAvatar.preventStep = FALSE; + FieldEffectActiveListRemove(FLDEFF_USE_VS_SEEKER); + DestroyTask(FindTaskIdByFunc(Task_FldEffUseVsSeeker)); + } +} diff --git a/src/quest_log_player.c b/src/quest_log_player.c index c6b5db4f9..ccf0565fb 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -156,13 +156,13 @@ static void sub_8150708(void) static void sub_815077C(void) { - FieldEffectStart(FLDEFF_UNK_41); + FieldEffectStart(FLDEFF_USE_VS_SEEKER); CreateTask(sub_8150794, 0x00); } static void sub_8150794(u8 taskId) { - if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) + if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER)) { UnfreezeObjectEvents(); ScriptContext2_Disable(); diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 135a11575..1424cfe29 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -748,7 +748,7 @@ void Task_VsSeeker_0(u8 taskId) else if (respval == 2) { ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xffff); - FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum + FieldEffectStart(FLDEFF_USE_VS_SEEKER); // TODO: name this enum gTasks[taskId].func = Task_VsSeeker_1; gTasks[taskId].data[0] = 15; } @@ -774,7 +774,7 @@ static void Task_VsSeeker_2(u8 taskId) data[2]++; } - if (!FieldEffectActiveListContains(FLDEFF_UNK_41)) + if (!FieldEffectActiveListContains(FLDEFF_USE_VS_SEEKER)) { data[1] = 0; data[2] = 0; |