summaryrefslogtreecommitdiff
path: root/src/fldeff_rocksmash.c
diff options
context:
space:
mode:
authorGriffinR <griffin.g.richards@gmail.com>2020-06-29 11:41:09 -0400
committerGriffinR <griffin.g.richards@gmail.com>2020-06-29 16:32:46 -0400
commiteb80012757b664a474f3c745115aa4f109b69443 (patch)
treea48b9f2748b1bc00426a3e877520b0a56b2342f2 /src/fldeff_rocksmash.c
parent4ea6992172a53eb263d5f4342c5e08dfc3f8096a (diff)
Document more misc field effects
Diffstat (limited to 'src/fldeff_rocksmash.c')
-rw-r--r--src/fldeff_rocksmash.c46
1 files changed, 26 insertions, 20 deletions
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
index 4d7dcb66e..ec8e64012 100644
--- a/src/fldeff_rocksmash.c
+++ b/src/fldeff_rocksmash.c
@@ -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);