Document SS Tidal scripts

This commit is contained in:
GriffinR
2019-11-08 03:37:46 -05:00
committed by huderlem
parent ba65719090
commit 0f53aeb19b
15 changed files with 285 additions and 264 deletions

View File

@@ -597,7 +597,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
return TRUE;
if (CountSSTidalStep(1) == TRUE)
{
ScriptContext1_SetupScript(SSTidalCorridor_EventScript_23C050);
ScriptContext1_SetupScript(SSTidalCorridor_EventScript_ReachedStepCount);
return TRUE;
}
if (TryStartMatchCall())

View File

@@ -14,6 +14,8 @@
#include "sprite.h"
#include "task.h"
#include "constants/event_objects.h"
#include "constants/event_object_movement_constants.h"
#include "constants/field_specials.h"
#include "constants/songs.h"
#include "constants/vars.h"
#include "constants/metatile_labels.h"
@@ -31,8 +33,18 @@ enum
//. rodata
static const s8 gTruckCamera_HorizontalTable[] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, -1, -1, -1, 0};
const u8 gUnknown_0858E8AB[] = {0x18, 0xFE};
const u8 gUnknown_0858E8AD[] = {0x17, 0xFE};
static const u8 sSSTidalSailEastMovementScript[] =
{
MOVEMENT_TYPE_ROTATE_CLOCKWISE,
MOVEMENT_ACTION_STEP_END
};
static const u8 sSSTidalSailWestMovementScript[] =
{
MOVEMENT_TYPE_ROTATE_COUNTERCLOCKWISE,
MOVEMENT_ACTION_STEP_END
};
// .text
static void Task_Truck3(u8);
@@ -256,7 +268,7 @@ bool8 sub_80FB59C(void)
void Task_HandlePorthole(u8 taskId)
{
s16 *data = gTasks[taskId].data;
u16 *var = GetVarPointer(VAR_PORTHOLE_STATE);
u16 *cruiseState = GetVarPointer(VAR_SS_TIDAL_STATE);
struct WarpData *location = &gSaveBlock1Ptr->location;
switch (data[0])
@@ -268,40 +280,41 @@ void Task_HandlePorthole(u8 taskId)
data[0] = EXECUTE_MOVEMENT; // execute movement before checking if should be exited. strange?
}
break;
case IDLE_CHECK: // idle and move.
case IDLE_CHECK:
if (gMain.newKeys & A_BUTTON)
data[1] = 1;
if (!ScriptMovement_IsObjectMovementFinished(0xFF, location->mapNum, location->mapGroup))
if (!ScriptMovement_IsObjectMovementFinished(EVENT_OBJ_ID_PLAYER, location->mapNum, location->mapGroup))
return;
if (CountSSTidalStep(1) == TRUE)
{
if (*var == 2)
*var = 9;
if (*cruiseState == SS_TIDAL_DEPART_SLATEPORT)
*cruiseState = SS_TIDAL_EXIT_CURRENTS_RIGHT;
else
*var = 10;
data[0] = 3;
*cruiseState = SS_TIDAL_EXIT_CURRENTS_LEFT;
data[0] = EXIT_PORTHOLE;
return;
}
data[0] = 2;
case EXECUTE_MOVEMENT: // execute movement.
data[0] = EXECUTE_MOVEMENT;
//fallthrough
case EXECUTE_MOVEMENT:
if (data[1])
{
data[0] = EXIT_PORTHOLE; // exit porthole.
data[0] = EXIT_PORTHOLE;
return;
}
// run this once.
if (*var == 2) // which direction?
if (*cruiseState == SS_TIDAL_DEPART_SLATEPORT)
{
ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AB);
data[0] = IDLE_CHECK; // run case 1.
ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, location->mapNum, location->mapGroup, sSSTidalSailEastMovementScript);
data[0] = IDLE_CHECK;
}
else
{
ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_0858E8AD);
data[0] = IDLE_CHECK; // run case 1.
ScriptMovement_StartObjectMovementScript(EVENT_OBJ_ID_PLAYER, location->mapNum, location->mapGroup, sSSTidalSailWestMovementScript);
data[0] = IDLE_CHECK;
}
break;
case EXIT_PORTHOLE: // exit porthole.
case EXIT_PORTHOLE:
FlagClear(FLAG_DONT_TRANSITION_MUSIC);
FlagClear(FLAG_HIDE_MAP_NAME_POPUP);
SetWarpDestinationToDynamicWarp(0);
@@ -311,32 +324,28 @@ void Task_HandlePorthole(u8 taskId)
}
}
void sub_80FB6EC(void)
static void ShowSSTidalWhileSailing(void)
{
u8 spriteId = AddPseudoEventObject(EVENT_OBJ_GFX_SS_TIDAL, SpriteCallbackDummy, 112, 80, 0);
gSprites[spriteId].coordOffsetEnabled = FALSE;
if (VarGet(VAR_PORTHOLE_STATE) == 2)
{
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(4));
}
if (VarGet(VAR_SS_TIDAL_STATE) == SS_TIDAL_DEPART_SLATEPORT)
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(DIR_EAST));
else
{
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(3));
}
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(DIR_WEST));
}
void sub_80FB768(void)
{
sub_80FB6EC();
ShowSSTidalWhileSailing();
gEventObjects[gPlayerAvatar.eventObjectId].invisible = TRUE;
pal_fill_black();
CreateTask(Task_HandlePorthole, 80);
ScriptContext2_Enable();
}
void sub_80FB7A4(void)
void LookThroughPorthole(void)
{
FlagSet(FLAG_SYS_CRUISE_MODE);
FlagSet(FLAG_DONT_TRANSITION_MUSIC);

View File

@@ -303,9 +303,10 @@ void ResetSSTidalFlag(void)
FlagClear(FLAG_SYS_CRUISE_MODE);
}
// Returns TRUE if the Cruise is over
bool32 CountSSTidalStep(u16 delta)
{
if (!FlagGet(FLAG_SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) <= 0xcc)
if (!FlagGet(FLAG_SYS_CRUISE_MODE) || (*GetVarPointer(VAR_CRUISE_STEP_COUNT) += delta) < SS_TIDAL_MAX_STEPS)
{
return FALSE;
}
@@ -315,21 +316,21 @@ bool32 CountSSTidalStep(u16 delta)
u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
{
u16 *varCruiseStepCount = GetVarPointer(VAR_CRUISE_STEP_COUNT);
switch (*GetVarPointer(VAR_PORTHOLE_STATE))
switch (*GetVarPointer(VAR_SS_TIDAL_STATE))
{
case 1:
case 8:
case SS_TIDAL_BOARD_SLATEPORT:
case SS_TIDAL_LAND_SLATEPORT:
return SS_TIDAL_LOCATION_SLATEPORT;
case 3:
case 9:
case SS_TIDAL_HALFWAY_LILYCOVE:
case SS_TIDAL_EXIT_CURRENTS_RIGHT:
return SS_TIDAL_LOCATION_ROUTE131;
case 4:
case 5:
case SS_TIDAL_LAND_LILYCOVE:
case SS_TIDAL_BOARD_LILYCOVE:
return SS_TIDAL_LOCATION_LILYCOVE;
case 6:
case 10:
case SS_TIDAL_DEPART_LILYCOVE:
case SS_TIDAL_EXIT_CURRENTS_LEFT:
return SS_TIDAL_LOCATION_ROUTE124;
case 2:
case SS_TIDAL_DEPART_SLATEPORT:
if (*varCruiseStepCount < 60)
{
*mapNum = MAP_NUM(ROUTE134);
@@ -346,7 +347,7 @@ u8 GetSSTidalLocation(s8 *mapGroup, s8 *mapNum, s16 *x, s16 *y)
*x = *varCruiseStepCount - 140;
}
break;
case 7:
case SS_TIDAL_HALFWAY_SLATEPORT:
if (*varCruiseStepCount < 66)
{
*mapNum = MAP_NUM(ROUTE132);