summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-02-28 13:23:51 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2020-02-28 13:23:51 -0500
commit8f42b7b56d887b6bca517499a841c259652af372 (patch)
tree156a9d58579ba4a9ffd7a6729bb324537e02caca /src
parent9cf19244fa1fe925d4273eb32c8b7c68c5271152 (diff)
Lavaridge Gym 1F Warp field effect
Diffstat (limited to 'src')
-rw-r--r--src/field_effect.c109
1 files changed, 109 insertions, 0 deletions
diff --git a/src/field_effect.c b/src/field_effect.c
index 5f07311e2..81ba91b1c 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -1874,3 +1874,112 @@ bool8 LavaridgeGymB1FWarpExitEffect_4(struct Task * task, struct ObjectEvent * o
}
return FALSE;
}
+
+void Task_LavaridgeGym1FWarp(u8 taskId);
+bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
+bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
+bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
+bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
+bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite);
+
+bool8 (*const sLavaridgeGym1FWarpEffectFuncs[])(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite) = {
+ LavaridgeGym1FWarpEffect_1,
+ LavaridgeGym1FWarpEffect_2,
+ LavaridgeGym1FWarpEffect_3,
+ LavaridgeGym1FWarpEffect_4,
+ LavaridgeGym1FWarpEffect_5
+};
+
+// For the ash puff effect when warping off the B1F ash tiles
+u8 FldEff_LavaridgeGymWarp(void)
+{
+ u8 spriteId;
+ sub_8063BC4((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
+ gSprites[spriteId].coordOffsetEnabled = 1;
+ return spriteId;
+}
+
+void SpriteCB_LavaridgeGymWarp(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP);
+ }
+}
+
+void StartLavaridgeGym1FWarp(u8 priority)
+{
+ CreateTask(Task_LavaridgeGym1FWarp, priority);
+}
+
+void Task_LavaridgeGym1FWarp(u8 taskId)
+{
+ while(sLavaridgeGym1FWarpEffectFuncs[gTasks[taskId].data[0]](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+bool8 LavaridgeGym1FWarpEffect_1(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ FreezeObjectEvents();
+ CameraObjectReset2();
+ gPlayerAvatar.preventStep = TRUE;
+ objectEvent->fixedPriority = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 LavaridgeGym1FWarpEffect_2(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ if (ObjectEventClearHeldMovementIfFinished(objectEvent))
+ {
+ if (task->data[1] > 3)
+ {
+ 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]++;
+ } else
+ {
+ task->data[1]++;
+ ObjectEventSetHeldMovement(objectEvent, GetStepInPlaceDelay4AnimId(objectEvent->facingDirection));
+ PlaySE(SE_FU_ZUZUZU);
+ }
+ }
+ return FALSE;
+}
+
+bool8 LavaridgeGym1FWarpEffect_3(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ if (gSprites[task->data[1]].animCmdIndex == 2)
+ {
+ objectEvent->invisible = TRUE;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 LavaridgeGym1FWarpEffect_4(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
+ {
+ TryFadeOutOldMapMusic();
+ WarpFadeOutScreen();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 LavaridgeGym1FWarpEffect_5(struct Task *task, struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ if (!gPaletteFade.active && BGMusicStopped() == TRUE)
+ {
+ WarpIntoMap();
+ gFieldCallback = FieldCB_FallWarpExit;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(Task_LavaridgeGym1FWarp));
+ }
+ return FALSE;
+}