Document warp spin functions
This commit is contained in:
+73
-70
@@ -42,11 +42,14 @@ static void Task_DoContestHallWarp(u8);
|
||||
static void FillPalBufferWhite(void);
|
||||
static void Task_ExitDoor(u8);
|
||||
static bool32 WaitForWeatherFadeIn(void);
|
||||
static void Task_TeleportTileWarpExit(u8 taskId);
|
||||
static void Task_SpinEnterWarp(u8 taskId);
|
||||
static void Task_WarpAndLoadMap(u8 taskId);
|
||||
static void Task_DoDoorWarp(u8 taskId);
|
||||
static void Task_EnableScriptAfterMusicFade(u8 taskId);
|
||||
|
||||
// data[0] is used universally by tasks in this file as a state for switches
|
||||
#define tState data[0]
|
||||
|
||||
// const
|
||||
static const u16 sFlashLevelPixelRadii[] = { 200, 72, 64, 56, 48, 40, 32, 24, 0 };
|
||||
const s32 gMaxFlashLevel = ARRAY_COUNT(sFlashLevelPixelRadii) - 1;
|
||||
@@ -156,17 +159,17 @@ static void Task_ReturnToFieldCableLink(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
task->data[1] = CreateTask_ReestablishCableClubLink();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (gTasks[task->data[1]].isActive != TRUE)
|
||||
{
|
||||
WarpFadeInScreen();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -191,11 +194,11 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!IsLinkTaskFinished())
|
||||
@@ -206,7 +209,7 @@ static void Task_ReturnToFieldWirelessLink(u8 taskId)
|
||||
else
|
||||
{
|
||||
WarpFadeInScreen();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -224,16 +227,16 @@ void Task_ReturnToFieldRecordMixing(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
SetLinkStandbyCallback();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (IsLinkTaskFinished())
|
||||
{
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -295,12 +298,12 @@ void FieldCB_WarpExitFadeFromBlack(void)
|
||||
ScriptContext2_Enable();
|
||||
}
|
||||
|
||||
static void FieldCB_TeleportTileWarpExit(void)
|
||||
static void FieldCB_SpinEnterWarp(void)
|
||||
{
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
WarpFadeInScreen();
|
||||
PlaySE(SE_WARP_OUT);
|
||||
CreateTask(Task_TeleportTileWarpExit, 10);
|
||||
CreateTask(Task_SpinEnterWarp, 10);
|
||||
ScriptContext2_Enable();
|
||||
}
|
||||
|
||||
@@ -320,14 +323,14 @@ static void Task_ExitDoor(u8 taskId)
|
||||
s16 *x = &task->data[2];
|
||||
s16 *y = &task->data[3];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
SetPlayerVisibility(FALSE);
|
||||
FreezeObjectEvents();
|
||||
PlayerGetDestCoords(x, y);
|
||||
FieldSetDoorOpened(*x, *y);
|
||||
task->data[0] = 1;
|
||||
task->tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (WaitForWeatherFadeIn())
|
||||
@@ -336,7 +339,7 @@ static void Task_ExitDoor(u8 taskId)
|
||||
SetPlayerVisibility(TRUE);
|
||||
objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0);
|
||||
ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_DOWN);
|
||||
task->data[0] = 2;
|
||||
task->tState = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -346,14 +349,14 @@ static void Task_ExitDoor(u8 taskId)
|
||||
task->data[1] = FieldAnimateDoorClose(*x, *y);
|
||||
objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0);
|
||||
ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]);
|
||||
task->data[0] = 3;
|
||||
task->tState = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE)
|
||||
{
|
||||
UnfreezeObjectEvents();
|
||||
task->data[0] = 4;
|
||||
task->tState = 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
@@ -369,13 +372,13 @@ static void Task_ExitNonAnimDoor(u8 taskId)
|
||||
s16 *x = &task->data[2];
|
||||
s16 *y = &task->data[3];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
SetPlayerVisibility(FALSE);
|
||||
FreezeObjectEvents();
|
||||
PlayerGetDestCoords(x, y);
|
||||
task->data[0] = 1;
|
||||
task->tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (WaitForWeatherFadeIn())
|
||||
@@ -384,14 +387,14 @@ static void Task_ExitNonAnimDoor(u8 taskId)
|
||||
SetPlayerVisibility(TRUE);
|
||||
objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0);
|
||||
ObjectEventSetHeldMovement(&gObjectEvents[objEventId], GetWalkNormalMovementAction(GetPlayerFacingDirection()));
|
||||
task->data[0] = 2;
|
||||
task->tState = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (IsPlayerStandingStill())
|
||||
{
|
||||
UnfreezeObjectEvents();
|
||||
task->data[0] = 3;
|
||||
task->tState = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
@@ -403,12 +406,12 @@ static void Task_ExitNonAnimDoor(u8 taskId)
|
||||
|
||||
static void Task_ExitNonDoor(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
FreezeObjectEvents();
|
||||
ScriptContext2_Enable();
|
||||
gTasks[taskId].data[0]++;
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (WaitForWeatherFadeIn())
|
||||
@@ -543,7 +546,9 @@ void DoLavaridgeGym1FWarp(void)
|
||||
StartLavaridgeGym1FWarp(10);
|
||||
}
|
||||
|
||||
// Warp from a teleporting tile, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut)
|
||||
// DoSpinEnterWarp but with a fade out
|
||||
// Screen fades out to exit current map, player spins down from top to enter new map
|
||||
// Used by teleporting tiles, e.g. in Aqua Hideout (For the move Teleport see FldEff_TeleportWarpOut)
|
||||
void DoTeleportTileWarp(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
@@ -551,7 +556,7 @@ void DoTeleportTileWarp(void)
|
||||
WarpFadeOutScreen();
|
||||
PlaySE(SE_WARP_IN);
|
||||
CreateTask(Task_WarpAndLoadMap, 10);
|
||||
gFieldCallback = FieldCB_TeleportTileWarpExit;
|
||||
gFieldCallback = FieldCB_SpinEnterWarp;
|
||||
}
|
||||
|
||||
void DoMossdeepGymWarp(void)
|
||||
@@ -574,8 +579,6 @@ void DoPortholeWarp(void)
|
||||
gFieldCallback = FieldCB_ShowPortholeView;
|
||||
}
|
||||
|
||||
#define tState data[0]
|
||||
|
||||
static void Task_DoCableClubWarp(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
@@ -598,8 +601,6 @@ static void Task_DoCableClubWarp(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
#undef tState
|
||||
|
||||
void DoCableClubWarp(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
@@ -613,20 +614,20 @@ static void Task_ReturnToWorldFromLinkRoom(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
ClearLinkCallback_2();
|
||||
FadeScreen(FADE_TO_BLACK, 0);
|
||||
TryFadeOutOldMapMusic();
|
||||
PlaySE(SE_EXIT);
|
||||
data[0]++;
|
||||
tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!PaletteFadeActive() && BGMusicStopped())
|
||||
{
|
||||
SetCloseLinkCallback();
|
||||
data[0]++;
|
||||
tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -649,12 +650,12 @@ static void Task_WarpAndLoadMap(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
FreezeObjectEvents();
|
||||
ScriptContext2_Enable();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!PaletteFadeActive())
|
||||
@@ -665,7 +666,7 @@ static void Task_WarpAndLoadMap(u8 taskId)
|
||||
task->data[1] = 1;
|
||||
}
|
||||
if (BGMusicStopped())
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -682,14 +683,14 @@ static void Task_DoDoorWarp(u8 taskId)
|
||||
s16 *x = &task->data[2];
|
||||
s16 *y = &task->data[3];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
FreezeObjectEvents();
|
||||
PlayerGetDestCoords(x, y);
|
||||
PlaySE(GetDoorSoundEffect(*x, *y - 1));
|
||||
task->data[1] = FieldAnimateDoorOpen(*x, *y - 1);
|
||||
task->data[0] = 1;
|
||||
task->tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE)
|
||||
@@ -699,7 +700,7 @@ static void Task_DoDoorWarp(u8 taskId)
|
||||
ObjectEventClearHeldMovementIfActive(&gObjectEvents[objEventId]);
|
||||
objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0);
|
||||
ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_WALK_NORMAL_UP);
|
||||
task->data[0] = 2;
|
||||
task->tState = 2;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -710,20 +711,20 @@ static void Task_DoDoorWarp(u8 taskId)
|
||||
objEventId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0);
|
||||
ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]);
|
||||
SetPlayerVisibility(FALSE);
|
||||
task->data[0] = 3;
|
||||
task->tState = 3;
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
if (task->data[1] < 0 || gTasks[task->data[1]].isActive != TRUE)
|
||||
{
|
||||
task->data[0] = 4;
|
||||
task->tState = 4;
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
TryFadeOutOldMapMusic();
|
||||
WarpFadeOutScreen();
|
||||
PlayRainStoppingSoundEffect();
|
||||
task->data[0] = 0;
|
||||
task->tState = 0;
|
||||
task->func = Task_WarpAndLoadMap;
|
||||
break;
|
||||
}
|
||||
@@ -733,17 +734,17 @@ static void Task_DoContestHallWarp(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
FreezeObjectEvents();
|
||||
ScriptContext2_Enable();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!PaletteFadeActive() && BGMusicStopped())
|
||||
{
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
@@ -850,22 +851,22 @@ static void UpdateFlashLevelEffect(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
|
||||
data[0] = 1;
|
||||
tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
|
||||
data[0] = 0;
|
||||
tState = 0;
|
||||
tCurFlashRadius += tFlashRadiusDelta;
|
||||
if (tCurFlashRadius > tDestFlashRadius)
|
||||
{
|
||||
if (tClearScanlineEffect == 1)
|
||||
{
|
||||
ScanlineEffect_Stop();
|
||||
data[0] = 2;
|
||||
tState = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -884,22 +885,22 @@ static void UpdateOrbFlashEffect(u8 taskId)
|
||||
{
|
||||
s16 *data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
|
||||
data[0] = 1;
|
||||
tState = 1;
|
||||
break;
|
||||
case 1:
|
||||
SetOrbFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
|
||||
data[0] = 0;
|
||||
tState = 0;
|
||||
tCurFlashRadius += tFlashRadiusDelta;
|
||||
if (tCurFlashRadius > tDestFlashRadius)
|
||||
{
|
||||
if (tClearScanlineEffect == 1)
|
||||
{
|
||||
ScanlineEffect_Stop();
|
||||
data[0] = 2;
|
||||
tState = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -999,18 +1000,18 @@ void WriteBattlePyramidViewScanlineEffectBuffer(void)
|
||||
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
|
||||
}
|
||||
|
||||
static void Task_TeleportTileWarpExit(u8 taskId)
|
||||
static void Task_SpinEnterWarp(u8 taskId)
|
||||
{
|
||||
switch (gTasks[taskId].data[0])
|
||||
switch (gTasks[taskId].tState)
|
||||
{
|
||||
case 0:
|
||||
FreezeObjectEvents();
|
||||
ScriptContext2_Enable();
|
||||
sub_808D194();
|
||||
gTasks[taskId].data[0]++;
|
||||
DoPlayerSpinEntrance();
|
||||
gTasks[taskId].tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (WaitForWeatherFadeIn() && sub_808D1B4() != TRUE)
|
||||
if (WaitForWeatherFadeIn() && IsPlayerSpinEntranceActive() != TRUE)
|
||||
{
|
||||
UnfreezeObjectEvents();
|
||||
ScriptContext2_Disable();
|
||||
@@ -1020,29 +1021,29 @@ static void Task_TeleportTileWarpExit(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80B01BC(u8 taskId)
|
||||
static void Task_SpinExitWarp(u8 taskId)
|
||||
{
|
||||
struct Task *task = &gTasks[taskId];
|
||||
|
||||
switch (task->data[0])
|
||||
switch (task->tState)
|
||||
{
|
||||
case 0:
|
||||
FreezeObjectEvents();
|
||||
ScriptContext2_Enable();
|
||||
PlaySE(SE_WARP_IN);
|
||||
sub_808D1C8();
|
||||
task->data[0]++;
|
||||
DoPlayerSpinExit();
|
||||
task->tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!sub_808D1E8())
|
||||
if (!IsPlayerSpinExitActive())
|
||||
{
|
||||
WarpFadeOutScreen();
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (!PaletteFadeActive() && BGMusicStopped())
|
||||
task->data[0]++;
|
||||
task->tState++;
|
||||
break;
|
||||
case 3:
|
||||
WarpIntoMap();
|
||||
@@ -1052,18 +1053,22 @@ static void sub_80B01BC(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80B0244(void)
|
||||
// Only called by an unused function
|
||||
// DoTeleportTileWarp is used instead
|
||||
void DoSpinEnterWarp(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
CreateTask(Task_WarpAndLoadMap, 10);
|
||||
gFieldCallback = FieldCB_TeleportTileWarpExit;
|
||||
gFieldCallback = FieldCB_SpinEnterWarp;
|
||||
}
|
||||
|
||||
void sub_80B0268(void)
|
||||
// Opposite of DoSpinEnterWarp / DoTeleportTileWarp
|
||||
// Player exits current map by spinning up offscreen, enters new map with a fade in
|
||||
void DoSpinExitWarp(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
gFieldCallback = FieldCB_DefaultWarpExit;
|
||||
CreateTask(sub_80B01BC, 10);
|
||||
CreateTask(Task_SpinExitWarp, 10);
|
||||
}
|
||||
|
||||
static void LoadOrbEffectPalette(bool8 blueOrb)
|
||||
@@ -1110,7 +1115,6 @@ static bool8 sub_80B02C8(u16 shakeDir)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
#define tState data[0]
|
||||
#define tBlueOrb data[1]
|
||||
#define tCenterX data[2]
|
||||
#define tCenterY data[3]
|
||||
@@ -1244,7 +1248,6 @@ void FadeOutOrbEffect(void)
|
||||
gTasks[taskId].tState = 6;
|
||||
}
|
||||
|
||||
#undef tState
|
||||
#undef tBlueOrb
|
||||
#undef tCenterX
|
||||
#undef tCenterY
|
||||
|
||||
Reference in New Issue
Block a user