finished fldeff_dig + fldeff_rocksmash
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
#include "global.h"
|
||||
#include "field_effect.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "fldeff.h"
|
||||
#include "item_use.h"
|
||||
#include "overworld.h"
|
||||
#include "party_menu.h"
|
||||
#include "sprite.h"
|
||||
#include "constants/map_objects.h"
|
||||
|
||||
static void hm2_dig(void);
|
||||
static void sub_80C9AFC(void);
|
||||
|
||||
bool8 SetUpFieldMove_Dig(void)
|
||||
{
|
||||
if (CanUseEscapeRopeOnCurrMap() == TRUE)
|
||||
{
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = hm2_dig;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void hm2_dig(void)
|
||||
{
|
||||
Overworld_ResetStateAfterDigEscRope();
|
||||
FieldEffectStart(FLDEFF_USE_DIG);
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
}
|
||||
|
||||
bool8 FldEff_UseDig(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)sub_80C9AFC >> 16;
|
||||
gTasks[taskId].data[9] = (u32)sub_80C9AFC;
|
||||
SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80C9AFC(void)
|
||||
{
|
||||
u8 taskId;
|
||||
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_DIG);
|
||||
taskId = CreateTask(sub_80A1C44, 8);
|
||||
gTasks[taskId].data[0] = 0;
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
#include "global.h"
|
||||
#include "global.fieldmap.h"
|
||||
#include "field_player_avatar.h"
|
||||
#include "field_effect.h"
|
||||
#include "party_menu.h"
|
||||
#include "malloc.h"
|
||||
#include "event_data.h"
|
||||
#include "script.h"
|
||||
#include "fldeff.h"
|
||||
#include "event_scripts.h"
|
||||
#include "field_weather.h"
|
||||
#include "sound.h"
|
||||
#include "palette.h"
|
||||
#include "overworld.h"
|
||||
#include "wild_encounter.h"
|
||||
#include "field_map_obj.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/map_objects.h"
|
||||
|
||||
static void task08_080C9820(u8 taskId);
|
||||
static void sub_80C98FC(u8 taskId);
|
||||
static void sub_80C98B0(u8 taskId);
|
||||
static void sub_80C99A0(u8 taskId);
|
||||
static void sub_80C9A10(void);
|
||||
static void sub_80C9A60(void);
|
||||
|
||||
bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
|
||||
{
|
||||
u8 mapObjId;
|
||||
|
||||
GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
|
||||
gPlayerFacingPosition.height = PlayerGetZCoord();
|
||||
mapObjId = GetFieldObjectIdByXYZ(gPlayerFacingPosition.x, gPlayerFacingPosition.y, gPlayerFacingPosition.height);
|
||||
if (gMapObjects[mapObjId].graphicsId != graphicsId)
|
||||
return FALSE;
|
||||
gSpecialVar_LastTalked = gMapObjects[mapObjId].localId;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
u8 oei_task_add(void)
|
||||
{
|
||||
GetXYCoordsOneStepInFrontOfPlayer(&gPlayerFacingPosition.x, &gPlayerFacingPosition.y);
|
||||
return CreateTask(task08_080C9820, 8);
|
||||
}
|
||||
|
||||
static void task08_080C9820(u8 taskId)
|
||||
{
|
||||
u8 mapObjId;
|
||||
|
||||
ScriptContext2_Enable();
|
||||
gPlayerAvatar.unk6 = TRUE;
|
||||
mapObjId = gPlayerAvatar.mapObjectId;
|
||||
if (!FieldObjectIsMovementOverridden(&gMapObjects[mapObjId])
|
||||
|| FieldObjectClearHeldMovementIfFinished(&gMapObjects[mapObjId]))
|
||||
{
|
||||
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
|
||||
{
|
||||
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
|
||||
gTasks[taskId].func = sub_80C98FC;
|
||||
}
|
||||
else
|
||||
{
|
||||
sub_805CB70();
|
||||
FieldObjectSetHeldMovement(&gMapObjects[mapObjId], 0x45);
|
||||
gTasks[taskId].func = sub_80C98B0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80C98B0(u8 taskId)
|
||||
{
|
||||
if (FieldObjectCheckHeldMovementStatus(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE)
|
||||
{
|
||||
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
|
||||
gTasks[taskId].func = sub_80C98FC;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80C98FC(u8 taskId)
|
||||
{
|
||||
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
|
||||
{
|
||||
gFieldEffectArguments[1] = GetPlayerFacingDirection();
|
||||
if (gFieldEffectArguments[1] == 1)
|
||||
gFieldEffectArguments[2] = 0;
|
||||
if (gFieldEffectArguments[1] == 2)
|
||||
gFieldEffectArguments[2] = 1;
|
||||
if (gFieldEffectArguments[1] == 3)
|
||||
gFieldEffectArguments[2] = 2;
|
||||
if (gFieldEffectArguments[1] == 4)
|
||||
gFieldEffectArguments[2] = 3;
|
||||
EventObjectSetGraphicsId(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState());
|
||||
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]);
|
||||
FieldEffectActiveListRemove(6);
|
||||
gTasks[taskId].func = sub_80C99A0;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_80C99A0(u8 taskId)
|
||||
{
|
||||
((void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]))();
|
||||
gPlayerAvatar.unk6 = FALSE;
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
|
||||
bool8 SetUpFieldMove_RockSmash(void)
|
||||
{
|
||||
if (CheckObjectGraphicsInFrontOfPlayer(/*MAP_OBJ_GFX_BREAKABLE_ROCK*/0x60) == TRUE)
|
||||
{
|
||||
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
|
||||
gPostMenuFieldCallback = sub_80C9A10;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80C9A10(void)
|
||||
{
|
||||
gFieldEffectArguments[0] = GetCursorSelectionMonId();
|
||||
ScriptContext1_SetupScript(EventScript_FldEffRockSmash);
|
||||
}
|
||||
|
||||
bool8 FldEff_UseRockSmash(void)
|
||||
{
|
||||
u8 taskId = oei_task_add();
|
||||
|
||||
gTasks[taskId].data[8] = (u32)sub_80C9A60 >> 16;
|
||||
gTasks[taskId].data[9] = (u32)sub_80C9A60;
|
||||
IncrementGameStat(GAME_STAT_USED_ROCK_SMASH);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_80C9A60(void)
|
||||
{
|
||||
PlaySE(SE_W145);
|
||||
FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);
|
||||
EnableBothScriptContexts();
|
||||
}
|
||||
@@ -6,13 +6,15 @@
|
||||
#include "script.h"
|
||||
#include "fldeff.h"
|
||||
#include "event_scripts.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/map_objects.h"
|
||||
|
||||
static void FldEff_UseStrength(void);
|
||||
static void sub_80D08A8(void);
|
||||
|
||||
bool8 SetUpFieldMove_Strength(void)
|
||||
{
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(0x61) != TRUE)
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING) || CheckObjectGraphicsInFrontOfPlayer(/*MAP_OBJ_GFX_PUSHABLE_BOULDER*/0x61) != TRUE)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+3
-4
@@ -68,7 +68,6 @@ void sub_80A19E8(u8 taskId);
|
||||
void sub_80A1A44(void);
|
||||
void sub_80A1B48(u8 taskId);
|
||||
void sub_80A1C08(u8 taskId);
|
||||
void sub_80A1C44(u8 taskId);
|
||||
void sub_80A1CAC(void);
|
||||
void sub_80A1CC0(u8 taskId);
|
||||
void sub_80A1D58(void);
|
||||
@@ -557,7 +556,7 @@ void sub_80A1B48(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_80A1B8C(void)
|
||||
bool8 CanUseEscapeRopeOnCurrMap(void)
|
||||
{
|
||||
if (gMapHeader.escapeRope & 1)
|
||||
return TRUE;
|
||||
@@ -567,7 +566,7 @@ bool8 sub_80A1B8C(void)
|
||||
|
||||
void ItemUseOutOfBattle_EscapeRope(u8 taskId)
|
||||
{
|
||||
if (sub_80A1B8C() == TRUE)
|
||||
if (CanUseEscapeRopeOnCurrMap() == TRUE)
|
||||
{
|
||||
ItemUse_SetQuestLogEvent(4, NULL, gSpecialVar_ItemId, gMapHeader.regionMapSectionId);
|
||||
sItemUseOnFieldCB = sub_80A1C08;
|
||||
@@ -579,7 +578,7 @@ void ItemUseOutOfBattle_EscapeRope(u8 taskId)
|
||||
|
||||
void sub_80A1C08(u8 taskId)
|
||||
{
|
||||
sub_8054D70();
|
||||
Overworld_ResetStateAfterDigEscRope();
|
||||
sub_80A1A44();
|
||||
gTasks[taskId].data[0] = 0;
|
||||
DisplayItemMessageOnField(taskId, 2, gStringVar4, sub_80A1C44);
|
||||
|
||||
+3
-3
@@ -89,7 +89,7 @@ void LockSelectedMapObject(void)
|
||||
void sub_80696C0(void)
|
||||
{
|
||||
u8 fieldObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
|
||||
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[fieldObjectId]);
|
||||
FieldObjectClearHeldMovementIfFinished(&gMapObjects[fieldObjectId]);
|
||||
sub_80974D8();
|
||||
UnfreezeMapObjects();
|
||||
}
|
||||
@@ -98,9 +98,9 @@ void sub_80696F0(void)
|
||||
{
|
||||
u8 fieldObjectId;
|
||||
if (gMapObjects[gSelectedEventObject].active)
|
||||
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedEventObject]);
|
||||
FieldObjectClearHeldMovementIfFinished(&gMapObjects[gSelectedEventObject]);
|
||||
fieldObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
|
||||
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[fieldObjectId]);
|
||||
FieldObjectClearHeldMovementIfFinished(&gMapObjects[fieldObjectId]);
|
||||
sub_80974D8();
|
||||
UnfreezeMapObjects();
|
||||
}
|
||||
|
||||
+3
-3
@@ -1705,7 +1705,7 @@ void sub_811246C(struct Sprite *sprite)
|
||||
{
|
||||
if (gUnknown_203AF9A[0][0] != 0xFF)
|
||||
{
|
||||
sub_8063CA4(mapObject, gUnknown_203AF9A[0][0]);
|
||||
FieldObjectSetHeldMovement(mapObject, gUnknown_203AF9A[0][0]);
|
||||
gUnknown_203AF9A[0][0] = 0xFF;
|
||||
}
|
||||
if (gUnknown_203AF9A[0][1] != 0xFF)
|
||||
@@ -1719,7 +1719,7 @@ void sub_811246C(struct Sprite *sprite)
|
||||
{
|
||||
if (gUnknown_203AF9A[mapObject->localId][0] != 0xFF)
|
||||
{
|
||||
sub_8063CA4(mapObject, gUnknown_203AF9A[mapObject->localId][0]);
|
||||
FieldObjectSetHeldMovement(mapObject, gUnknown_203AF9A[mapObject->localId][0]);
|
||||
gUnknown_203AF9A[mapObject->localId][0] = 0xFF;
|
||||
}
|
||||
sub_8063E28(mapObject, sprite);
|
||||
@@ -1911,7 +1911,7 @@ void sub_8112940(u8 a0, struct UnkStruct_203AE98 *a1, u16 a2)
|
||||
gUnknown_3005E94[gUnknown_203AF98].unk_4 = 0;
|
||||
gUnknown_3005E94[gUnknown_203AF98].unk_6 = 0;
|
||||
gUnknown_3005E94[gUnknown_203AF98].unk_0 = 0;
|
||||
switch (player_get_direction_lower_nybble())
|
||||
switch (GetPlayerFacingDirection())
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
|
||||
@@ -115,7 +115,7 @@ void sub_81505C4(u8 taskId)
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 2:
|
||||
StartSpriteAnim(sprite, sub_8063500(player_get_direction_lower_nybble()));
|
||||
StartSpriteAnim(sprite, sub_8063500(GetPlayerFacingDirection()));
|
||||
gTasks[taskId].data[0]++;
|
||||
break;
|
||||
case 3:
|
||||
@@ -173,7 +173,7 @@ void sub_8150794(u8 taskId)
|
||||
|
||||
void sub_81507BC(struct MapObject * a0, u8 a1)
|
||||
{
|
||||
sub_805F060(a0, a1);
|
||||
EventObjectSetGraphicsId(a0, a1);
|
||||
}
|
||||
|
||||
void sub_81507CC(void)
|
||||
|
||||
+5
-5
@@ -807,7 +807,7 @@ bool8 ScrCmd_warpteleport2(struct ScriptContext *ctx)
|
||||
u16 y = VarGet(ScriptReadHalfword(ctx));
|
||||
|
||||
Overworld_SetWarpDestination(mapGroup, mapNum, warpId, x, y);
|
||||
sub_805DAE4(player_get_direction_lower_nybble());
|
||||
sub_805DAE4(GetPlayerFacingDirection());
|
||||
sub_807E500();
|
||||
ResetInitialPlayerAvatarState();
|
||||
return TRUE;
|
||||
@@ -1154,7 +1154,7 @@ bool8 ScrCmd_faceplayer(struct ScriptContext *ctx)
|
||||
if (gMapObjects[gSelectedEventObject].active)
|
||||
{
|
||||
FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedEventObject],
|
||||
player_get_direction_lower_nybble());
|
||||
GetPlayerFacingDirection());
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
@@ -1241,7 +1241,7 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
|
||||
|
||||
HideFieldMessageBox();
|
||||
playerObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
|
||||
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[playerObjectId]);
|
||||
FieldObjectClearHeldMovementIfFinished(&gMapObjects[playerObjectId]);
|
||||
sub_80974D8();
|
||||
UnfreezeMapObjects();
|
||||
return FALSE;
|
||||
@@ -1253,9 +1253,9 @@ bool8 ScrCmd_release(struct ScriptContext *ctx)
|
||||
|
||||
HideFieldMessageBox();
|
||||
if (gMapObjects[gSelectedEventObject].active)
|
||||
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedEventObject]);
|
||||
FieldObjectClearHeldMovementIfFinished(&gMapObjects[gSelectedEventObject]);
|
||||
playerObjectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
|
||||
FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[playerObjectId]);
|
||||
FieldObjectClearHeldMovementIfFinished(&gMapObjects[playerObjectId]);
|
||||
sub_80974D8();
|
||||
UnfreezeMapObjects();
|
||||
return FALSE;
|
||||
|
||||
Reference in New Issue
Block a user