diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 09:06:19 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-02-28 09:06:19 -0500 |
commit | db12644f0001346604c19e4004eead5cd2203fea (patch) | |
tree | 4d36ea86a8b61eff68a00ac969c5117cf851dd29 | |
parent | e07c771f1840fe614ac1040d55ce842602f44c4c (diff) |
FallWarpEffect funcs
-rw-r--r-- | asm/field_effect.s | 358 | ||||
-rw-r--r-- | include/global.fieldmap.h | 2 | ||||
-rw-r--r-- | include/overworld.h | 1 | ||||
-rw-r--r-- | src/field_effect.c | 126 | ||||
-rw-r--r-- | src/fldeff_rocksmash.c | 4 | ||||
-rw-r--r-- | src/quest_log_player.c | 2 |
6 files changed, 131 insertions, 362 deletions
diff --git a/asm/field_effect.s b/asm/field_effect.s index fde6d7022..a1ecaf384 100644 --- a/asm/field_effect.s +++ b/asm/field_effect.s @@ -5,364 +5,6 @@ .text - thumb_func_start FallWarpEffect_1 -FallWarpEffect_1: @ 80844BC - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - mov r9, r0 - ldr r6, _08084558 @ =gPlayerAvatar - ldrb r0, [r6, 0x5] - lsls r5, r0, 3 - adds r5, r0 - lsls r5, 2 - ldr r0, _0808455C @ =gObjectEvents - mov r8, r0 - add r5, r8 - ldrb r0, [r6, 0x4] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08084560 @ =gSprites - adds r4, r0 - bl CameraObjectReset2 - ldrb r1, [r6, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - add r0, r8 - ldrb r1, [r0, 0x1] - movs r2, 0x20 - orrs r1, r2 - strb r1, [r0, 0x1] - movs r0, 0x1 - strb r0, [r6, 0x6] - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - bl GetFaceDirectionMovementAction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl ObjectEventSetHeldMovement - adds r3, r4, 0 - adds r3, 0x42 - ldrb r0, [r3] - lsrs r0, 6 - mov r1, r9 - strh r0, [r1, 0x10] - ldrb r0, [r5, 0x3] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r5, 0x3] - ldrb r1, [r4, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r2 - strb r0, [r4, 0x5] - ldrb r1, [r3] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r3] - mov r1, r9 - ldrh r0, [r1, 0x8] - adds r0, 0x1 - strh r0, [r1, 0x8] - movs r0, 0x1 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08084558: .4byte gPlayerAvatar -_0808455C: .4byte gObjectEvents -_08084560: .4byte gSprites - thumb_func_end FallWarpEffect_1 - - thumb_func_start FallWarpEffect_2 -FallWarpEffect_2: @ 8084564 - push {r4,lr} - adds r4, r0, 0 - bl IsWeatherNotFadingIn - lsls r0, 24 - cmp r0, 0 - beq _08084578 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08084578: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end FallWarpEffect_2 - - thumb_func_start FallWarpEffect_3 -FallWarpEffect_3: @ 8084580 - push {r4-r6,lr} - adds r5, r0, 0 - ldr r6, _080845E4 @ =gPlayerAvatar - ldrb r0, [r6, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, _080845E8 @ =gSprites - adds r2, r0 - adds r0, r2, 0 - adds r0, 0x29 - movs r4, 0 - ldrsb r4, [r0, r4] - lsls r0, r4, 17 - negs r0, r0 - ldrh r1, [r2, 0x22] - ldr r3, _080845EC @ =gSpriteCoordOffsetY - adds r1, r4 - ldrh r3, [r3] - adds r1, r3 - asrs r0, 16 - adds r0, r1 - negs r0, r0 - movs r1, 0 - strh r0, [r2, 0x26] - movs r0, 0x1 - strh r0, [r5, 0xA] - strh r1, [r5, 0xC] - ldr r2, _080845F0 @ =gObjectEvents - ldrb r0, [r6, 0x5] - lsls r1, r0, 3 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r2, [r1, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r2 - strb r0, [r1, 0x1] - movs r0, 0x25 - bl PlaySE - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080845E4: .4byte gPlayerAvatar -_080845E8: .4byte gSprites -_080845EC: .4byte gSpriteCoordOffsetY -_080845F0: .4byte gObjectEvents - thumb_func_end FallWarpEffect_3 - - thumb_func_start FallWarpEffect_4 -FallWarpEffect_4: @ 80845F4 - push {r4-r6,lr} - adds r4, r0, 0 - ldr r2, _080846A0 @ =gPlayerAvatar - ldrb r1, [r2, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _080846A4 @ =gObjectEvents - adds r6, r0, r1 - ldrb r1, [r2, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080846A8 @ =gSprites - adds r5, r0, r1 - ldrh r0, [r4, 0xA] - ldrh r1, [r5, 0x26] - adds r0, r1 - strh r0, [r5, 0x26] - ldrh r2, [r4, 0xA] - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bgt _08084636 - ldrh r1, [r4, 0xC] - adds r0, r2, r1 - strh r0, [r4, 0xC] - movs r1, 0xF - ands r0, r1 - cmp r0, 0 - beq _08084636 - lsls r0, r2, 1 - strh r0, [r4, 0xA] -_08084636: - ldrh r2, [r4, 0xE] - movs r1, 0xE - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08084674 - movs r0, 0x26 - ldrsh r1, [r5, r0] - movs r0, 0x10 - negs r0, r0 - cmp r1, r0 - blt _08084674 - adds r0, r2, 0x1 - strh r0, [r4, 0xE] - ldrb r1, [r6, 0x3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r6, 0x3] - ldrb r1, [r4, 0x10] - adds r3, r5, 0 - adds r3, 0x42 - lsls r1, 6 - ldrb r2, [r3] - movs r0, 0x3F - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldrb r0, [r6] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r6] -_08084674: - movs r1, 0x26 - ldrsh r0, [r5, r1] - cmp r0, 0 - blt _08084698 - movs r0, 0xCF - bl PlaySE - ldrb r0, [r6] - movs r1, 0x8 - orrs r0, r1 - movs r1, 0x20 - orrs r0, r1 - strb r0, [r6] - movs r0, 0 - strh r0, [r5, 0x26] - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_08084698: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080846A0: .4byte gPlayerAvatar -_080846A4: .4byte gObjectEvents -_080846A8: .4byte gSprites - thumb_func_end FallWarpEffect_4 - - thumb_func_start FallWarpEffect_5 -FallWarpEffect_5: @ 80846AC - push {lr} - ldrh r1, [r0, 0x8] - adds r1, 0x1 - movs r2, 0 - strh r1, [r0, 0x8] - movs r1, 0x4 - strh r1, [r0, 0xA] - strh r2, [r0, 0xC] - movs r0, 0 - bl SetCameraPanningCallback - movs r0, 0x1 - pop {r1} - bx r1 - thumb_func_end FallWarpEffect_5 - - thumb_func_start FallWarpEffect_6 -FallWarpEffect_6: @ 80846C8 - push {r4,lr} - adds r4, r0, 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 r0, 0x1 - strh r0, [r4, 0xC] - movs r1, 0x3 - ands r0, r1 - cmp r0, 0 - bne _080846F0 - lsls r0, r2, 16 - asrs r0, 17 - strh r0, [r4, 0xA] -_080846F0: - movs r1, 0xA - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _080846FE - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] -_080846FE: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end FallWarpEffect_6 - - thumb_func_start FallWarpEffect_7 -FallWarpEffect_7: @ 8084708 - push {r4,lr} - sub sp, 0x4 - ldr r1, _08084778 @ =gPlayerAvatar - movs r0, 0 - strb r0, [r1, 0x6] - bl ScriptContext2_Disable - bl CameraObjectReset1 - bl UnfreezeObjectEvents - bl InstallCameraPanAheadCallback - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r0, 16 - bl sub_8055B38 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08084760 - ldr r0, _0808477C @ =0x00004001 - movs r1, 0x1 - bl VarSet - movs r0, 0x8 - bl SetPlayerAvatarTransitionFlags - movs r0, 0x16 - bl HelpSystem_SetSomeVariable2 -_08084760: - ldr r0, _08084780 @ =Task_FallWarpFieldEffect - bl FindTaskIdByFunc - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - movs r0, 0 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084778: .4byte gPlayerAvatar -_0808477C: .4byte 0x00004001 -_08084780: .4byte Task_FallWarpFieldEffect - thumb_func_end FallWarpEffect_7 - thumb_func_start StartEscalatorWarp StartEscalatorWarp: @ 8084784 push {r4,lr} diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 57d8d0a35..aa1bb43ee 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -280,7 +280,7 @@ struct PlayerAvatar /* 0x202E858 */ /*0x03*/ u8 tileTransitionState; // this is a transition running state: 00 is not moving, 01 is transition between tiles, 02 means you are on the frame in which you have centered on a tile but are about to keep moving, even if changing directions. 2 is also used for a ledge hop, since you are transitioning. /*0x04*/ u8 spriteId; /*0x05*/ u8 objectEventId; - /*0x06*/ u8 unk6; + /*0x06*/ u8 preventStep; /*0x07*/ u8 gender; u8 acroBikeState; u8 unk9; diff --git a/include/overworld.h b/include/overworld.h index ac50f9c80..8fdbfabe3 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -178,6 +178,7 @@ bool32 sub_80582E0(void); bool32 sub_8058274(void); u8 GetCurrentMapBattleScene(void); void Overworld_ResetStateAfterFly(void); +bool8 sub_8055B38(u16 metatileBehavior); extern u16 gHeldKeyCodeToSend; diff --git a/src/field_effect.c b/src/field_effect.c index f85a9aef5..a8102c1d9 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -2,11 +2,16 @@ #include "gflib.h" #include "data.h" #include "decompress.h" +#include "event_data.h" #include "event_object_movement.h" +#include "field_camera.h" #include "field_effect.h" #include "field_effect_scripts.h" #include "field_fadetransition.h" +#include "field_player_avatar.h" #include "field_weather.h" +#include "fieldmap.h" +#include "help_system.h" #include "overworld.h" #include "party_menu.h" #include "quest_log.h" @@ -1103,3 +1108,124 @@ void Task_FallWarpFieldEffect(u8 taskId) while (sFallWarpEffectCBPtrs[task->data[0]](task)) ; } + +bool8 FallWarpEffect_1(struct Task *task) +{ + struct ObjectEvent *playerObject; + struct Sprite *playerSprite; + playerObject = &gObjectEvents[gPlayerAvatar.objectEventId]; + playerSprite = &gSprites[gPlayerAvatar.spriteId]; + CameraObjectReset2(); + gObjectEvents[gPlayerAvatar.objectEventId].invisible = TRUE; + gPlayerAvatar.preventStep = TRUE; + ObjectEventSetHeldMovement(playerObject, GetFaceDirectionMovementAction(GetPlayerFacingDirection())); + task->data[4] = playerSprite->subspriteMode; + playerObject->fixedPriority = 1; + playerSprite->oam.priority = 1; + playerSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + task->data[0]++; + return TRUE; +} + +bool8 FallWarpEffect_2(struct Task *task) +{ + if (IsWeatherNotFadingIn()) + { + task->data[0]++; + } + return FALSE; +} + +bool8 FallWarpEffect_3(struct Task *task) +{ + struct Sprite *sprite; + s16 centerToCornerVecY; + sprite = &gSprites[gPlayerAvatar.spriteId]; + centerToCornerVecY = -(sprite->centerToCornerVecY << 1); + sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY); + task->data[1] = 1; + task->data[2] = 0; + gObjectEvents[gPlayerAvatar.objectEventId].invisible = FALSE; + PlaySE(SE_RU_HYUU); + task->data[0]++; + return FALSE; +} + +bool8 FallWarpEffect_4(struct Task *task) +{ + struct ObjectEvent *objectEvent; + struct Sprite *sprite; + + objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId]; + sprite = &gSprites[gPlayerAvatar.spriteId]; + sprite->pos2.y += task->data[1]; + if (task->data[1] < 8) + { + task->data[2] += task->data[1]; + if (task->data[2] & 0xf) + { + task->data[1] <<= 1; + } + } + if (task->data[3] == 0 && sprite->pos2.y >= -16) + { + task->data[3]++; + objectEvent->fixedPriority = 0; + sprite->subspriteMode = task->data[4]; + objectEvent->triggerGroundEffectsOnMove = 1; + } + if (sprite->pos2.y >= 0) + { + PlaySE(SE_W070); + objectEvent->triggerGroundEffectsOnStop = 1; + objectEvent->landingJump = 1; + sprite->pos2.y = 0; + task->data[0]++; + } + return FALSE; +} + +bool8 FallWarpEffect_5(struct Task *task) +{ + task->data[0]++; + task->data[1] = 4; + task->data[2] = 0; + SetCameraPanningCallback(NULL); + return TRUE; +} + +bool8 FallWarpEffect_6(struct Task *task) +{ + SetCameraPanning(0, task->data[1]); + task->data[1] = -task->data[1]; + task->data[2]++; + if ((task->data[2] & 3) == 0) + { + task->data[1] >>= 1; + } + if (task->data[1] == 0) + { + task->data[0]++; + } + return FALSE; +} + +bool8 FallWarpEffect_7(struct Task *task) +{ + s16 x, y; + gPlayerAvatar.preventStep = FALSE; + ScriptContext2_Disable(); + CameraObjectReset1(); + UnfreezeObjectEvents(); + InstallCameraPanAheadCallback(); + PlayerGetDestCoords(&x, &y); + // Seafoam Islands + if (sub_8055B38(MapGridGetMetatileBehaviorAt(x, y)) == TRUE) + { + VarSet(VAR_TEMP_1, 1); + SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_SURFING); + HelpSystem_SetSomeVariable2(22); + } + DestroyTask(FindTaskIdByFunc(Task_FallWarpFieldEffect)); + return FALSE; +} diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 397741806..7ea18f40f 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -48,7 +48,7 @@ static void Task_FieldEffectShowMon_Init(u8 taskId) u8 mapObjId; ScriptContext2_Enable(); - gPlayerAvatar.unk6 = TRUE; + gPlayerAvatar.preventStep = TRUE; mapObjId = gPlayerAvatar.objectEventId; if (!ObjectEventIsMovementOverridden(&gObjectEvents[mapObjId]) || ObjectEventClearHeldMovementIfFinished(&gObjectEvents[mapObjId])) @@ -100,7 +100,7 @@ static void Task_FieldEffectShowMon_WaitFldeff(u8 taskId) static void Task_FieldEffectShowMon_Cleanup(u8 taskId) { FLDEFF_CALL_FUNC_IN_DATA(); - gPlayerAvatar.unk6 = FALSE; + gPlayerAvatar.preventStep = FALSE; DestroyTask(taskId); } diff --git a/src/quest_log_player.c b/src/quest_log_player.c index b6167a7bf..32832a04a 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -80,7 +80,7 @@ static void sub_8150530(void) { u8 taskId; ScriptContext2_Enable(); - gPlayerAvatar.unk6 = 1; + gPlayerAvatar.preventStep = TRUE; taskId = CreateTask(sub_81505C4, 0xFF); gTasks[taskId].data[0] = 0; } |