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 /src | |
parent | e07c771f1840fe614ac1040d55ce842602f44c4c (diff) |
FallWarpEffect funcs
Diffstat (limited to 'src')
-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 |
3 files changed, 129 insertions, 3 deletions
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; } |