Add rock climb history from ghoul

This commit is contained in:
AlexOn1ine 2025-08-05 20:47:05 +02:00
commit 0eb715de11
6 changed files with 36 additions and 28 deletions

View File

@ -456,21 +456,21 @@ EventScript_UseRockClimb::
waitstate
goto EventScript_EndRockClimb
end
EventScript_CantRockClimb::
msgbox Text_CantRockClimb, MSGBOX_DEFAULT
EventScript_EndRockClimb::
releaseall
end
Text_WantToRockClimb:
.string "The cliff is steep.\n"
.string "Would you like to use Rock Climb?$"
Text_MonUsedRockClimb:
.string "{STR_VAR_1} used Rock Climb!$"
Text_CantRockClimb:
.string "The cliff is steep.\n"
.string "A Pokémon may be able to climb it.$"

View File

@ -1,6 +1,10 @@
#ifndef GUARD_CONSTANTS_MOVES_H
#define GUARD_CONSTANTS_MOVES_H
#ifndef BATTLE_ENGINE
#define MOVE_ROCK_CLIMB 1
#endif
#define MOVE_NONE 0
#define MOVE_POUND 1
#define MOVE_KARATE_CHOP 2

View File

@ -1386,7 +1386,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = {
static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPal_Npc3, FLDEFF_PAL_TAG_UNKNOWN};
// cave dust
static const struct SpriteFrameImage sPicTable_CaveDust[] =
static const struct SpriteFrameImage sPicTable_CaveDust[] =
{
overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_CaveDust, 2, 2, 1),

View File

@ -656,7 +656,7 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *)
[MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_RIGHT] = gMovementActionFuncs_WalkFastDiagonalUpRight,
[MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_LEFT] = gMovementActionFuncs_WalkFastDiagonalDownLeft,
[MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_RIGHT] = gMovementActionFuncs_WalkFastDiagonalDownRight,
};
u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = {
@ -1667,28 +1667,28 @@ bool8 (*const gMovementActionFuncs_WalkSlowStairsRight[])(struct ObjectEvent *,
MovementAction_PauseSpriteAnim,
};
u8 (*const gMovementActionFuncs_SurfStillDown[])(struct ObjectEvent *, struct Sprite *) =
u8 (*const gMovementActionFuncs_SurfStillDown[])(struct ObjectEvent *, struct Sprite *) =
{
MovementAction_SurfStillDown_Step0,
MovementAction_SurfStillDown_Step1,
MovementAction_PauseSpriteAnim,
};
u8 (*const gMovementActionFuncs_SurfStillUp[])(struct ObjectEvent *, struct Sprite *) =
u8 (*const gMovementActionFuncs_SurfStillUp[])(struct ObjectEvent *, struct Sprite *) =
{
MovementAction_SurfStillUp_Step0,
MovementAction_SurfStillUp_Step1,
MovementAction_PauseSpriteAnim,
};
u8 (*const gMovementActionFuncs_SurfStillLeft[])(struct ObjectEvent *, struct Sprite *) =
u8 (*const gMovementActionFuncs_SurfStillLeft[])(struct ObjectEvent *, struct Sprite *) =
{
MovementAction_SurfStillLeft_Step0,
MovementAction_SurfStillLeft_Step1,
MovementAction_PauseSpriteAnim,
};
u8 (*const gMovementActionFuncs_SurfStillRight[])(struct ObjectEvent *, struct Sprite *) =
u8 (*const gMovementActionFuncs_SurfStillRight[])(struct ObjectEvent *, struct Sprite *) =
{
MovementAction_SurfStillRight_Step0,
MovementAction_SurfStillRight_Step1,

View File

@ -259,6 +259,10 @@ static bool8 RockClimb_WaitStopRockClimb(struct Task *task, struct ObjectEvent *
static bool8 RockClimb_StopRockClimbInit(struct Task *task, struct ObjectEvent *objectEvent);
// Static RAM declarations
#if FOLLOW_ME_IMPLEMENTED
static void TryAttachFollowerToPlayer(void);
#endif
static u8 sActiveList[32];
// External declarations
@ -1999,7 +2003,7 @@ static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct Ob
{
if (!ObjectEventClearHeldMovementIfFinished(objectEvent))
return FALSE;
if (MetatileBehavior_IsWaterfall(objectEvent->currentMetatileBehavior))
{
// Still ascending waterfall, back to WaterfallFieldEffect_RideUp
@ -4191,7 +4195,7 @@ static u8 CreateRockClimbBlob(void)
{
u8 spriteId;
struct Sprite *sprite;
SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ROCK_CLIMB_BLOB], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
if (spriteId != MAX_SPRITES)
@ -4204,7 +4208,7 @@ static u8 CreateRockClimbBlob(void)
sprite->data[6] = -1;
sprite->data[7] = -1;
}
return spriteId;
}
@ -4240,7 +4244,7 @@ static bool8 RockClimb_Init(struct Task *task, struct ObjectEvent *objectEvent)
LockPlayerFieldControls();
FreezeObjectEvents();
// Put follower into pokeball before using Rock Climb
HideFollowerForFieldEffect();
HideFollowerForFieldEffect();
gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
PlayerGetDestCoords(&task->tDestX, &task->tDestY);
@ -4276,7 +4280,7 @@ static bool8 RockClimb_JumpOnRockClimbBlob(struct Task *task, struct ObjectEvent
{
if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
{
objectEvent->noShadow = TRUE; // hide shadow
objectEvent->noShadow = TRUE; // hide shadow
ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING));
ObjectEventClearHeldMovementIfFinished(objectEvent);
ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(objectEvent->movementDirection));
@ -4286,7 +4290,7 @@ static bool8 RockClimb_JumpOnRockClimbBlob(struct Task *task, struct ObjectEvent
objectEvent->fieldEffectSpriteId = CreateRockClimbBlob();
task->tState++;
}
return FALSE;
}
@ -4312,10 +4316,10 @@ static bool8 RockClimb_WaitJumpOnRockClimbBlob(struct Task *task, struct ObjectE
objectEvent->movementDirection = DIR_SOUTHWEST;
break;
}
task->tState = STATE_ROCK_CLIMB_CONTINUE_RIDE;
}
return FALSE;
}
@ -4326,7 +4330,7 @@ struct RockClimbRide
s8 dy;
u8 jumpDir;
};
static const struct RockClimbRide sRockClimbMovement[] =
static const struct RockClimbRide sRockClimbMovement[] =
{
[DIR_NONE] = {MOVEMENT_ACTION_WALK_FAST_DOWN, 0, 0, DIR_NONE},
[DIR_SOUTH] = {MOVEMENT_ACTION_WALK_FAST_DOWN, 0, -1, DIR_SOUTH},
@ -4343,7 +4347,7 @@ static void RockClimbDust(struct ObjectEvent *objectEvent, u8 direction)
{
s8 dx = sRockClimbMovement[direction].dx;
s8 dy = sRockClimbMovement[direction].dy;
gFieldEffectArguments[0] = objectEvent->currentCoords.x + dx;
gFieldEffectArguments[1] = objectEvent->currentCoords.y + dy;
gFieldEffectArguments[2] = objectEvent->previousElevation;
@ -4352,7 +4356,7 @@ static void RockClimbDust(struct ObjectEvent *objectEvent, u8 direction)
}
static bool8 RockClimb_Ride(struct Task *task, struct ObjectEvent *objectEvent)
{
{
ObjectEventSetHeldMovement(objectEvent, sRockClimbMovement[objectEvent->movementDirection].action);
PlaySE(SE_M_ROCK_THROW);
RockClimbDust(objectEvent, objectEvent->movementDirection);
@ -4364,11 +4368,11 @@ static bool8 RockClimb_ContinueRideOrEnd(struct Task *task, struct ObjectEvent *
{
if (!ObjectEventClearHeldMovementIfFinished(objectEvent))
return FALSE;
PlayerGetDestCoords(&task->tDestX, &task->tDestY);
MoveCoords(objectEvent->movementDirection, &task->tDestX, &task->tDestY);
if (MetatileBehavior_IsRockClimbable(MapGridGetMetatileBehaviorAt(task->tDestX, task->tDestY)))
{
{
task->tState = STATE_ROCK_CLIMB_RIDE;
return TRUE;
}
@ -4387,7 +4391,7 @@ static bool8 RockClimb_StopRockClimbInit(struct Task *task, struct ObjectEvent *
if (!ObjectEventClearHeldMovementIfFinished(objectEvent))
return FALSE;
}
RockClimbDust(objectEvent, DIR_NONE); //dust on final spot
ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(sRockClimbMovement[objectEvent->movementDirection].jumpDir));
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_NONE);
@ -4405,7 +4409,7 @@ static bool8 RockClimb_WaitStopRockClimb(struct Task *task, struct ObjectEvent *
gPlayerAvatar.preventStep = FALSE;
if (followerObject)
ObjectEventClearHeldMovementIfFinished(followerObject); // restore follower to normal
objectEvent->noShadow = FALSE; // restore shadow
objectEvent->noShadow = FALSE; // restore shadow
UnfreezeObjectEvents();
UnlockPlayerFieldControls();
DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]);
@ -4413,7 +4417,7 @@ static bool8 RockClimb_WaitStopRockClimb(struct Task *task, struct ObjectEvent *
objectEvent->triggerGroundEffectsOnMove = TRUE; // e.g. if dismount on grass
DestroyTask(FindTaskIdByFunc(Task_UseRockClimb));
}
return FALSE;
}

View File

@ -4206,7 +4206,7 @@ bool32 SetUpFieldMove_RockClimb(void)
gPostMenuFieldCallback = FieldCallback_RockClimb;
return TRUE;
}
return FALSE;
}