Document more misc field effects
This commit is contained in:
+26
-20
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user