summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fldeff_dig.c49
-rw-r--r--src/fldeff_rocksmash.c138
-rw-r--r--src/fldeff_strength.c4
-rw-r--r--src/item_use.c7
-rw-r--r--src/map_obj_lock.c6
-rw-r--r--src/quest_log.c6
-rw-r--r--src/quest_log_8150454.c4
-rw-r--r--src/scrcmd.c10
8 files changed, 206 insertions, 18 deletions
diff --git a/src/fldeff_dig.c b/src/fldeff_dig.c
new file mode 100644
index 000000000..b38cac7e0
--- /dev/null
+++ b/src/fldeff_dig.c
@@ -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;
+}
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
new file mode 100644
index 000000000..7d9203a51
--- /dev/null
+++ b/src/fldeff_rocksmash.c
@@ -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();
+}
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index 95ba95061..c99d62c29 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -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;
}
diff --git a/src/item_use.c b/src/item_use.c
index a7146b65e..3653a1699 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -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);
diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c
index cdd74a5b9..f89819647 100644
--- a/src/map_obj_lock.c
+++ b/src/map_obj_lock.c
@@ -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();
}
diff --git a/src/quest_log.c b/src/quest_log.c
index 3fd9d53de..fe83f67e9 100644
--- a/src/quest_log.c
+++ b/src/quest_log.c
@@ -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:
diff --git a/src/quest_log_8150454.c b/src/quest_log_8150454.c
index 8af516e3a..3d61dee72 100644
--- a/src/quest_log_8150454.c
+++ b/src/quest_log_8150454.c
@@ -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)
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 12b2892bb..d317a78b5 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -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;