Document more misc field effects

This commit is contained in:
GriffinR
2020-06-29 11:41:09 -04:00
parent 4ea6992172
commit eb80012757
41 changed files with 446 additions and 416 deletions
+26 -20
View File
@@ -20,13 +20,13 @@
#include "constants/songs.h"
// static functions
static void Task_DoFieldMove_0(u8 taskId);
static void Task_DoFieldMove_1(u8 taskId);
static void Task_DoFieldMove_2(u8 taskId);
static void Task_DoFieldMove_3(u8 taskId);
static void Task_DoFieldMove_Init(u8 taskId);
static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId);
static void Task_DoFieldMove_WaitForMon(u8 taskId);
static void Task_DoFieldMove_RunFunc(u8 taskId);
static void FieldCallback_RockSmash(void);
static void sub_8135714(void);
static void FieldMove_RockSmash(void);
// text
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
@@ -50,10 +50,10 @@ bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
u8 CreateFieldMoveTask(void)
{
GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
return CreateTask(Task_DoFieldMove_0, 8);
return CreateTask(Task_DoFieldMove_Init, 8);
}
static void Task_DoFieldMove_0(u8 taskId)
static void Task_DoFieldMove_Init(u8 taskId)
{
u8 objEventId;
@@ -65,28 +65,30 @@ static void Task_DoFieldMove_0(u8 taskId)
{
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
{
// Skip field move pose underwater
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
gTasks[taskId].func = Task_DoFieldMove_2;
gTasks[taskId].func = Task_DoFieldMove_WaitForMon;
}
else
{
// Do field move pose
SetPlayerAvatarFieldMove();
ObjectEventSetHeldMovement(&gObjectEvents[objEventId], MOVEMENT_ACTION_START_ANIM_IN_DIRECTION);
gTasks[taskId].func = Task_DoFieldMove_1;
gTasks[taskId].func = Task_DoFieldMove_ShowMonAfterPose;
}
}
}
static void Task_DoFieldMove_1(u8 taskId)
static void Task_DoFieldMove_ShowMonAfterPose(u8 taskId)
{
if (ObjectEventCheckHeldMovementStatus(&gObjectEvents[gPlayerAvatar.objectEventId]) == TRUE)
{
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
gTasks[taskId].func = Task_DoFieldMove_2;
gTasks[taskId].func = Task_DoFieldMove_WaitForMon;
}
}
static void Task_DoFieldMove_2(u8 taskId)
static void Task_DoFieldMove_WaitForMon(u8 taskId)
{
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
@@ -102,19 +104,22 @@ static void Task_DoFieldMove_2(u8 taskId)
ObjectEventSetGraphicsId(&gObjectEvents[gPlayerAvatar.objectEventId], GetPlayerAvatarGraphicsIdByCurrentState());
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]);
FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
gTasks[taskId].func = Task_DoFieldMove_3;
gTasks[taskId].func = Task_DoFieldMove_RunFunc;
}
}
static void Task_DoFieldMove_3(u8 taskId)
static void Task_DoFieldMove_RunFunc(u8 taskId)
{
void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]);
// The function for the field move to do is stored in halves across data[8] and data[9]
void (*fieldMoveFunc)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]);
func();
fieldMoveFunc();
gPlayerAvatar.preventStep = FALSE;
DestroyTask(taskId);
}
// Called when Rock Smash is used from the party menu
// For interacting with a smashable rock in the field, see EventScript_RockSmash
bool8 SetUpFieldMove_RockSmash(void)
{
// In Ruby and Sapphire, Regirock's tomb is opened by using Strength. In Emerald,
@@ -141,20 +146,21 @@ bool8 SetUpFieldMove_RockSmash(void)
static void FieldCallback_RockSmash(void)
{
gFieldEffectArguments[0] = GetCursorSelectionMonId();
ScriptContext1_SetupScript(EventScript_FldEffRockSmash);
ScriptContext1_SetupScript(EventScript_RockSmashFromPartyMenu);
}
bool8 FldEff_UseRockSmash(void)
{
u8 taskId = CreateFieldMoveTask();
gTasks[taskId].data[8] = (u32)sub_8135714 >> 16;
gTasks[taskId].data[9] = (u32)sub_8135714;
gTasks[taskId].data[8] = (u32)FieldMove_RockSmash >> 16;
gTasks[taskId].data[9] = (u32)FieldMove_RockSmash;
IncrementGameStat(GAME_STAT_USED_ROCK_SMASH);
return FALSE;
}
static void sub_8135714(void)
// The actual rock smashing is handled by EventScript_SmashRock, so this function does very little
static void FieldMove_RockSmash(void)
{
PlaySE(SE_W088);
FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);