From c1852434bbd5cfb26e6f0ca7063216930fea9317 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 30 Aug 2020 19:37:38 -0600 Subject: [PATCH 01/13] add rock climb --- data/field_effect_scripts.s | 11 + data/scripts/field_move_scripts.inc | 26 ++ graphics/field_effects/palettes/big_dust.pal | 19 ++ .../field_effects/pics/rock_climb_blob.png | Bin 0 -> 383 bytes .../field_effects/pics/rock_climb_dust.png | Bin 0 -> 558 bytes include/constants/event_object_movement.h | 5 + include/constants/field_effects.h | 5 + include/constants/metatile_behaviors.h | 2 +- include/event_scripts.h | 1 + include/field_effect.h | 1 + include/metatile_behavior.h | 1 + spritesheet_rules.mk | 6 + .../field_effect_object_template_pointers.h | 4 + src/data/field_effects/field_effect_objects.h | 45 +++ .../movement_action_func_tables.h | 45 +++ .../object_events/object_event_graphics.h | 3 + src/data/party_menu.h | 5 +- src/event_object_movement.c | 73 +++-- src/field_control_avatar.c | 3 + src/field_effect.c | 265 ++++++++++++++++++ src/field_effect_helpers.c | 20 ++ src/metatile_behavior.c | 10 +- src/party_menu.c | 22 ++ 23 files changed, 553 insertions(+), 19 deletions(-) create mode 100644 graphics/field_effects/palettes/big_dust.pal create mode 100644 graphics/field_effects/pics/rock_climb_blob.png create mode 100644 graphics/field_effects/pics/rock_climb_dust.png diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s index c57f19a040..3a2e9f14ee 100644 --- a/data/field_effect_scripts.s +++ b/data/field_effect_scripts.s @@ -72,6 +72,8 @@ gFieldEffectScriptPointers:: @ 82DB9D4 .4byte gFieldEffectScript_RayquazaSpotlight @ FLDEFF_RAYQUAZA_SPOTLIGHT .4byte gFieldEffectScript_DestroyDeoxysRock @ FLDEFF_DESTROY_DEOXYS_ROCK .4byte gFieldEffectScript_MoveDeoxysRock @ FLDEFF_MOVE_DEOXYS_ROCK + .4byte gFieldEffectScript_UseRockClimb @ FLDEFF_USE_ROCK_CLIMB + .4byte gFieldEffectScript_RockClimbDust @ FLDEFF_ROCK_CLIMB_DUST gFieldEffectScript_ExclamationMarkIcon1:: @ 82DBAE0 field_eff_callnative FldEff_ExclamationMarkIcon @@ -343,3 +345,12 @@ gFieldEffectScript_DestroyDeoxysRock:: @ 82DBCF9 gFieldEffectScript_MoveDeoxysRock:: @ 82DBCFF field_eff_callnative FldEff_MoveDeoxysRock field_eff_end + +gFieldEffectScript_UseRockClimb:: @ 82DBC3F + field_eff_callnative FldEff_UseRockClimb + field_eff_end + +gFieldEffectScript_RockClimbDust:: @ 82DBB28 + field_eff_loadfadedpal_callnative gSpritePalette_BigDust, FldEff_RockClimbDust + field_eff_end + diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index 2d689348b0..d04304abc9 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -301,3 +301,29 @@ EventScript_FailSweetScent:: @ 8290CAE Text_FailSweetScent: @ 8290CB7 .string "Looks like there's nothing here…$" + + +EventScript_UseRockClimb:: + lockall + checkpartymove MOVE_ROCK_CLIMB + compare VAR_RESULT, PARTY_SIZE + goto_if_eq EventScript_CantRockClimb + bufferpartymonnick 0, VAR_RESULT + setfieldeffectargument 0, VAR_RESULT + msgbox Text_WantToRockClimb, MSGBOX_YESNO + compare VAR_RESULT, NO + goto_if_eq EventScript_EndRockClimb + msgbox Text_MonUsedRockClimb, MSGBOX_DEFAULT + dofieldeffect FLDEFF_USE_ROCK_CLIMB + goto EventScript_EndRockClimb +EventScript_CantRockClimb:: @ 8290A84 + msgbox Text_CantRockClimb, MSGBOX_DEFAULT +EventScript_EndRockClimb:: @ 8290A8C + releaseall + end +Text_WantToRockClimb: + .string "The cliff is steep.\nWould you like to use Rock Climb?$" +Text_MonUsedRockClimb: + .string "{STR_VAR_1} used Rock Climb!$" +Text_CantRockClimb: + .string "The cliff is steep.\nA Pokémon may be able to climb it.$" diff --git a/graphics/field_effects/palettes/big_dust.pal b/graphics/field_effects/palettes/big_dust.pal new file mode 100644 index 0000000000..34beaf0371 --- /dev/null +++ b/graphics/field_effects/palettes/big_dust.pal @@ -0,0 +1,19 @@ +JASC-PAL +0100 +16 +98 172 238 +198 181 156 +165 140 115 +181 165 140 +148 123 99 +206 198 173 +189 173 148 +82 74 57 +222 180 148 +140 123 82 +173 156 123 +238 213 180 +0 0 0 +0 0 0 +0 0 0 +0 0 0 diff --git a/graphics/field_effects/pics/rock_climb_blob.png b/graphics/field_effects/pics/rock_climb_blob.png new file mode 100644 index 0000000000000000000000000000000000000000..19a9a7cea9b64d8b91262792826091934322e1cf GIT binary patch literal 383 zcmV-_0f7FAP)5Fk0;=I(RNb4rv_|6*FjK|%lj{{R30FCfkm00009 za7bBm000&x000&x0ZCFM@Bjb+^+`lQR5*?8Q#*FUFbvb=Ri~3ydx=+G-AlBhvPnp! zlfJ$VnObh301*16^k09gfa7=kN0FcaJX+-D*ZIXOmiDN!x%IXS9L^`dD+d2GsFQ)c zukKFKE`F&TA(ugI(Qn|Co+>B@11V%Eg9FoHWD+x2)iS>b#2RJYT%wU7Gr-DB7!x!T zXrM=n7Xc#_I|mw66O2eaCw8jc4lUPj1t8%F3^9RCteApk4HbwPz%~uLIB*ZkrKqDJ zY9Lc^J&h^oBeV{0ATEIw@8M(sVPYU;#C1|8mN1Yb9A7D0gr3khj6H?A{kXefjvwkx d{Ydy+eE}yq7eUcLbl?C0002ovPDHLkV1g59m4pBQ literal 0 HcmV?d00001 diff --git a/graphics/field_effects/pics/rock_climb_dust.png b/graphics/field_effects/pics/rock_climb_dust.png new file mode 100644 index 0000000000000000000000000000000000000000..541c6ba9b8b3f3dba8f8546fe42f643169103d96 GIT binary patch literal 558 zcmV+}0@3}6P)=jL9sbPN{d@04`5?qC0JaozJOq5XKm{X z`p@jeM9pC`9Jd)V-^@S%#u$y4%uEZSayg+qBckKmF5j}drwTxH`<)%9hZ|b<`K|+( z33yK_vQ}rVd{6nZ>rZs|QEO_WO|PSkC@7CQV3z9uYMMw5ad0c7&o(w%Giz)-2fyxs zed&+@+fdGKApqMJh`bY!9{`6m@L5cNy=HGdxi5(?6(F(zM3e5^M3q{~RPenE%Fw|W z&s_chYz*?&+X$efb!+F+?2B(%V211n6IGID(mv>o76AH^hJXY1E&(p^J@}Ijcti*2 zf+R7Pu(bG!LqLOrg+J|pCv-4b`MqXn~xIssJ!|uBhZJsx-0h zlKzp}3PH8gZ=*&CAg37!Ovr)AwYhDLk`2X{2jsK5TXz}N5q@=LF$wL|Hq!&#*T~n6Z1+oDC%k~ wpx;7Wj}>ILUya0KB%o8SCKM|$R?g)30(n1Mi4fg(6#xJL07*qoM6N<$g5})wKL7v# literal 0 HcmV?d00001 diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h index 6a4405b653..8012ac88d1 100755 --- a/include/constants/event_object_movement.h +++ b/include/constants/event_object_movement.h @@ -241,6 +241,11 @@ #define MOVEMENT_ACTION_FIGURE_8 0x9B #define MOVEMENT_ACTION_FLY_UP 0x9C #define MOVEMENT_ACTION_FLY_DOWN 0x9D +//fast diagonal movement +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_LEFT 0x9E +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_RIGHT 0x9F +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_LEFT 0xA0 +#define MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_RIGHT 0xA1 #define MOVEMENT_ACTION_STEP_END 0xFE diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h index dc1085f7ca..f94e19cf02 100644 --- a/include/constants/field_effects.h +++ b/include/constants/field_effects.h @@ -68,6 +68,8 @@ #define FLDEFF_RAYQUAZA_SPOTLIGHT 64 #define FLDEFF_DESTROY_DEOXYS_ROCK 65 #define FLDEFF_MOVE_DEOXYS_ROCK 66 +#define FLDEFF_USE_ROCK_CLIMB 67 +#define FLDEFF_ROCK_CLIMB_DUST 68 #define FLDEFFOBJ_SHADOW_S 0 #define FLDEFFOBJ_SHADOW_M 1 @@ -106,6 +108,8 @@ #define FLDEFFOBJ_BUBBLES 34 #define FLDEFFOBJ_SMALL_SPARKLE 35 #define FLDEFFOBJ_RAYQUAZA 36 +#define FLDEFFOBJ_ROCK_CLIMB_BLOB 37 +#define FLDEFFOBJ_ROCK_CLIMB_DUST 38 #define FLDEFF_PAL_TAG_CUT_GRASS 0x1000 #define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003 @@ -119,5 +123,6 @@ #define FLDEFF_PAL_TAG_SMALL_SPARKLE 0x100F #define FLDEFF_PAL_TAG_HOF_MONITOR 0x1010 #define FLDEFF_PAL_TAG_UNKNOWN 0x1011 +#define FLDEFF_PAL_TAG_DUST_CLOUD 0x1012 #endif // GUARD_FIELD_EFFECT_CONSTANTS_H diff --git a/include/constants/metatile_behaviors.h b/include/constants/metatile_behaviors.h index 94cb0ffcaa..cc4bd7fee5 100755 --- a/include/constants/metatile_behaviors.h +++ b/include/constants/metatile_behaviors.h @@ -240,6 +240,6 @@ #define MB_UNUSED_EC 0xEC #define MB_UNUSED_ED 0xED #define MB_UNUSED_EE 0xEE -#define MB_UNUSED_EF 0xEF +#define MB_ROCK_CLIMB 0xEF #endif // GUARD_METATILE_BEHAVIORS diff --git a/include/event_scripts.h b/include/event_scripts.h index 8515597244..82d47490e9 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -541,6 +541,7 @@ extern const u8 EventScript_UseWaterfall[]; extern const u8 EventScript_CannotUseWaterfall[]; extern const u8 EventScript_UseDive[]; extern const u8 EventScript_UseDiveUnderwater[]; +extern const u8 EventScript_UseRockClimb[]; extern const u8 EventScript_FallDownHole[]; extern const u8 EventScript_FieldPoison[]; extern const u8 EventScript_EggHatch[]; diff --git a/include/field_effect.h b/include/field_effect.h index 731fb9c59f..78e2643071 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -46,5 +46,6 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b); void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId); u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y, u8 subpriority); void StartEscapeRopeFieldEffect(void); +bool8 IsRockClimbActive(void); #endif // GUARD_FIELD_EFFECTS_H diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index b5dae6de09..9222bf7c7e 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -145,5 +145,6 @@ bool8 MetatileBehavior_IsQuestionnaire(u8); bool8 MetatileBehavior_IsLongGrass_Duplicate(u8); bool8 MetatileBehavior_IsLongGrassSouthEdge(u8); bool8 MetatileBehavior_IsTrainerHillTimer(u8); +bool8 MetatileBehavior_IsRockClimbable(u8 metatileBehavior); #endif // GUARD_METATILE_BEHAVIOR diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk index ae79719602..020a160c2d 100644 --- a/spritesheet_rules.mk +++ b/spritesheet_rules.mk @@ -606,6 +606,9 @@ $(FLDEFFGFXDIR)/deep_sand_footprints.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/ground_impact_dust.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 1 +$(FLDEFFGFXDIR)/rock_climb_dust.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(FLDEFFGFXDIR)/ash_puff.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 @@ -630,6 +633,9 @@ $(FLDEFFGFXDIR)/short_grass.4bpp: %.4bpp: %.png $(FLDEFFGFXDIR)/surf_blob.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 4 -mheight 4 +$(FLDEFFGFXDIR)/rock_climb_blob.4bpp: %.4bpp: %.png + $(GFX) $< $@ -mwidth 4 -mheight 4 + $(FLDEFFGFXDIR)/tall_grass.4bpp: %.4bpp: %.png $(GFX) $< $@ -mwidth 2 -mheight 2 diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h index 41d6271bf2..06166747ce 100755 --- a/src/data/field_effects/field_effect_object_template_pointers.h +++ b/src/data/field_effects/field_effect_object_template_pointers.h @@ -35,6 +35,8 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch; const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles; const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle; const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza; +const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbBlob; +const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbDust; const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall, @@ -74,4 +76,6 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = { [FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles, [FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle, [FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza, + [FLDEFFOBJ_ROCK_CLIMB_BLOB] = &gFieldEffectObjectTemplate_RockClimbBlob, + [FLDEFFOBJ_ROCK_CLIMB_DUST] = &gFieldEffectObjectTemplate_RockClimbDust, }; diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h index 1626b9f323..5877c288ff 100755 --- a/src/data/field_effects/field_effect_objects.h +++ b/src/data/field_effects/field_effect_objects.h @@ -1287,3 +1287,48 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = { }; static const struct SpritePalette sSpritePalette_Unused = {gObjectEventPalette2, FLDEFF_PAL_TAG_UNKNOWN}; + +static const struct SpriteFrameImage sPicTable_RockClimbBlob[] = { + overworld_frame(gFieldEffectObjectPic_RockClimbBlob, 4, 4, 1), + overworld_frame(gFieldEffectObjectPic_RockClimbBlob, 4, 4, 0), + overworld_frame(gFieldEffectObjectPic_RockClimbBlob, 4, 4, 2), +}; + +const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbBlob = { + .tileTag = 0xFFFF, + .paletteTag = 0xFFFF, + .oam = &gObjectEventBaseOam_32x32, + .anims = sAnimTable_SurfBlob, + .images = sPicTable_RockClimbBlob, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateSurfBlobFieldEffect, +}; + + +static const union AnimCmd sAnim_RockClimbDust[] = +{ + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(1, 12), + ANIMCMD_FRAME(2, 12), + ANIMCMD_END, +}; +static const union AnimCmd *const sAnimTable_RockClimbDust[] = +{ + sAnim_RockClimbDust, +}; +static const struct SpriteFrameImage sPicTable_RockClimbDust[] = { + overworld_frame(gFieldEffectObjectPic_RockClimbDust, 4, 4, 0), + overworld_frame(gFieldEffectObjectPic_RockClimbDust, 4, 4, 1), + overworld_frame(gFieldEffectObjectPic_RockClimbDust, 4, 4, 2), +}; +const struct SpriteTemplate gFieldEffectObjectTemplate_RockClimbDust = { + .tileTag = 0xFFFF, + .paletteTag = FLDEFF_PAL_TAG_DUST_CLOUD, + .oam = &gObjectEventBaseOam_32x32, + .anims = sAnimTable_RockClimbDust, + .images = sPicTable_RockClimbDust, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateJumpImpactEffect, +}; + +const struct SpritePalette gSpritePalette_BigDust = {gFieldEffectPal_DustCloud, FLDEFF_PAL_TAG_DUST_CLOUD}; diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h index 8cf7d1699f..5f2d7cb9e0 100755 --- a/src/data/object_events/movement_action_func_tables.h +++ b/src/data/object_events/movement_action_func_tables.h @@ -261,6 +261,13 @@ u8 MovementAction_FlyUp_Step1(struct ObjectEvent *, struct Sprite *); u8 MovementAction_Fly_Finish(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step0(struct ObjectEvent *, struct Sprite *); u8 MovementAction_FlyDown_Step1(struct ObjectEvent *, struct Sprite *); +//fast diagonal +u8 MovementAction_WalkFastDiagonalUpLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFastDiagonalUpRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFastDiagonalDownLeft_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFastDiagonalDownRight_Step0(struct ObjectEvent *, struct Sprite *); +u8 MovementAction_WalkFastDiagonal_Step1(struct ObjectEvent *, struct Sprite *); + u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FaceUp[])(struct ObjectEvent *, struct Sprite *); @@ -420,6 +427,12 @@ u8 (*const gMovementActionFuncs_DestroyExtraTaskIfAtTop[])(struct ObjectEvent *, u8 (*const gMovementActionFuncs_Figure8[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FlyUp[])(struct ObjectEvent *, struct Sprite *); u8 (*const gMovementActionFuncs_FlyDown[])(struct ObjectEvent *, struct Sprite *); +//fast diagonal +u8 (*const gMovementActionFuncs_WalkFastDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkFastDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkFastDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *); +u8 (*const gMovementActionFuncs_WalkFastDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *); + u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) = { [MOVEMENT_ACTION_FACE_DOWN] = gMovementActionFuncs_FaceDown, @@ -580,6 +593,12 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *) [MOVEMENT_ACTION_FIGURE_8] = gMovementActionFuncs_Figure8, [MOVEMENT_ACTION_FLY_UP] = gMovementActionFuncs_FlyUp, [MOVEMENT_ACTION_FLY_DOWN] = gMovementActionFuncs_FlyDown, + //fast diagonal + [MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_LEFT] = gMovementActionFuncs_WalkFastDiagonalUpLeft, + [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 *) = { @@ -1511,3 +1530,29 @@ u8 (*const gMovementActionFuncs_DestroyExtraTaskIfAtTop[])(struct ObjectEvent *, MovementAction_DestroyExtraTaskIfAtTop_Step0, MovementAction_Finish, }; + +// fast diagonal +u8 (*const gMovementActionFuncs_WalkFastDiagonalUpLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFastDiagonalUpLeft_Step0, + MovementAction_WalkFastDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_WalkFastDiagonalUpRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFastDiagonalUpRight_Step0, + MovementAction_WalkFastDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_WalkFastDiagonalDownLeft[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFastDiagonalDownLeft_Step0, + MovementAction_WalkFastDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + +u8 (*const gMovementActionFuncs_WalkFastDiagonalDownRight[])(struct ObjectEvent *, struct Sprite *) = { + MovementAction_WalkFastDiagonalDownRight_Step0, + MovementAction_WalkFastDiagonal_Step1, + MovementAction_PauseSpriteAnim, +}; + diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h index 50fc6715c7..ac2190ea57 100755 --- a/src/data/object_events/object_event_graphics.h +++ b/src/data/object_events/object_event_graphics.h @@ -286,6 +286,8 @@ const u32 gObjectEventPic_LansatBerryTree[] = INCBIN_U32("graphics/object_events const u32 gObjectEventPic_DurinBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/durin.4bpp"); const u32 gObjectEventPic_TamatoBerryTree[] = INCBIN_U32("graphics/object_events/pics/berry_trees/tamato.4bpp"); const u32 gFieldEffectObjectPic_SurfBlob[] = INCBIN_U32("graphics/field_effects/pics/surf_blob.4bpp"); +const u32 gFieldEffectObjectPic_RockClimbBlob[] = INCBIN_U32("graphics/field_effects/pics/rock_climb_blob.4bpp"); +const u32 gFieldEffectObjectPic_RockClimbDust[] = INCBIN_U32("graphics/field_effects/pics/rock_climb_dust.4bpp"); const u32 gObjectEventPic_QuintyPlump[] = INCBIN_U32("graphics/object_events/pics/people/quinty_plump.4bpp"); const u16 gObjectEventPalette12[] = INCBIN_U16("graphics/object_events/palettes/12.gbapal"); const u16 gObjectEventPalette13[] = INCBIN_U16("graphics/object_events/palettes/13.gbapal"); @@ -325,6 +327,7 @@ const u32 gFieldEffectObjectPic_MountainDisguise[] = INCBIN_U32("graphics/field_ const u32 gFieldEffectObjectPic_SandDisguisePlaceholder[] = INCBIN_U32("graphics/field_effects/pics/sand_disguise_placeholder.4bpp"); const u32 gFieldEffectObjectPic_HotSpringsWater[] = INCBIN_U32("graphics/field_effects/pics/hot_springs_water.4bpp"); const u16 gFieldEffectPal_Ash[] = INCBIN_U16("graphics/field_effects/palettes/ash.gbapal"); +const u16 gFieldEffectPal_DustCloud[] = INCBIN_U16("graphics/field_effects/palettes/big_dust.gbapal"); const u32 gFieldEffectObjectPic_AshPuff[] = INCBIN_U32("graphics/field_effects/pics/ash_puff.4bpp"); const u32 gFieldEffectObjectPic_AshLaunch[] = INCBIN_U32("graphics/field_effects/pics/ash_launch.4bpp"); const u32 gFieldEffectObjectPic_Bubbles[] = INCBIN_U32("graphics/field_effects/pics/bubbles.4bpp"); diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 3c3a3e1ce3..64e128af74 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -717,6 +717,7 @@ enum FIELD_MOVE_MILK_DRINK, FIELD_MOVE_SOFT_BOILED, FIELD_MOVE_SWEET_SCENT, + FIELD_MOVE_ROCK_CLIMB, }; // What a weird choice of table termination; @@ -761,6 +762,7 @@ struct [MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCb_FieldMove}, [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCb_FieldMove}, [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_CLIMB] = {gMoveNames[MOVE_ROCK_CLIMB], CursorCb_FieldMove}, }; static const u8 sPartyMenuAction_SummarySwitchCancel[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1}; @@ -835,7 +837,7 @@ static const u8 sPartyMenuActionCounts[] = static const u16 sFieldMoves[] = { MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT, - MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, FIELD_MOVE_TERMINATOR + MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, MOVE_ROCK_CLIMB, FIELD_MOVE_TERMINATOR }; struct @@ -858,6 +860,7 @@ struct [FIELD_MOVE_MILK_DRINK] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP}, [FIELD_MOVE_SOFT_BOILED] = {SetUpFieldMove_SoftBoiled, PARTY_MSG_NOT_ENOUGH_HP}, [FIELD_MOVE_SWEET_SCENT] = {SetUpFieldMove_SweetScent, PARTY_MSG_CANT_USE_HERE}, + [FIELD_MOVE_ROCK_CLIMB] = {SetUpFieldMove_RockClimb, PARTY_MSG_CANT_USE_HERE}, }; static const u8 *const sUnionRoomTradeMessages[] = diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 72de880c85..684b2cf1ed 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -681,10 +681,10 @@ const u8 gFaceDirectionAnimNums[] = { [DIR_NORTH] = 1, [DIR_WEST] = 2, [DIR_EAST] = 3, - [DIR_SOUTHWEST] = 0, - [DIR_SOUTHEAST] = 0, - [DIR_NORTHWEST] = 1, - [DIR_NORTHEAST] = 1, + [DIR_SOUTHWEST] = 2, + [DIR_SOUTHEAST] = 3, + [DIR_NORTHWEST] = 2, + [DIR_NORTHEAST] = 3, }; const u8 gMoveDirectionAnimNums[] = { [DIR_NONE] = 4, @@ -692,10 +692,10 @@ const u8 gMoveDirectionAnimNums[] = { [DIR_NORTH] = 5, [DIR_WEST] = 6, [DIR_EAST] = 7, - [DIR_SOUTHWEST] = 4, - [DIR_SOUTHEAST] = 4, - [DIR_NORTHWEST] = 5, - [DIR_NORTHEAST] = 5, + [DIR_SOUTHWEST] = 6, + [DIR_SOUTHEAST] = 7, + [DIR_NORTHWEST] = 6, + [DIR_NORTHEAST] = 7, }; const u8 gMoveDirectionFastAnimNums[] = { [DIR_NONE] = 8, @@ -703,10 +703,10 @@ const u8 gMoveDirectionFastAnimNums[] = { [DIR_NORTH] = 9, [DIR_WEST] = 10, [DIR_EAST] = 11, - [DIR_SOUTHWEST] = 8, - [DIR_SOUTHEAST] = 8, - [DIR_NORTHWEST] = 9, - [DIR_NORTHEAST] = 9, + [DIR_SOUTHWEST] = 10, + [DIR_SOUTHEAST] = 11, + [DIR_NORTHWEST] = 10, + [DIR_NORTHEAST] = 11, }; const u8 gMoveDirectionFasterAnimNums[] = { [DIR_NONE] = 12, @@ -736,10 +736,10 @@ const u8 gJumpSpecialDirectionAnimNums[] = { // used for jumping onto surf mon [DIR_NORTH] = 21, [DIR_WEST] = 22, [DIR_EAST] = 23, - [DIR_SOUTHWEST] = 20, - [DIR_SOUTHEAST] = 20, - [DIR_NORTHWEST] = 21, - [DIR_NORTHEAST] = 21, + [DIR_SOUTHWEST] = 22, + [DIR_SOUTHEAST] = 23, + [DIR_NORTHWEST] = 22, + [DIR_NORTHEAST] = 23, }; const u8 gAcroWheelieDirectionAnimNums[] = { [DIR_NONE] = 20, @@ -969,6 +969,10 @@ const u8 gJumpSpecialMovementActions[] = { MOVEMENT_ACTION_JUMP_SPECIAL_UP, MOVEMENT_ACTION_JUMP_SPECIAL_LEFT, MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT, + MOVEMENT_ACTION_JUMP_SPECIAL_LEFT, + MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT, + MOVEMENT_ACTION_JUMP_SPECIAL_LEFT, + MOVEMENT_ACTION_JUMP_SPECIAL_RIGHT, }; const u8 gWalkInPlaceSlowMovementActions[] = { MOVEMENT_ACTION_WALK_IN_PLACE_SLOW_DOWN, @@ -9006,3 +9010,40 @@ u8 MovementAction_Fly_Finish(struct ObjectEvent *objectEvent, struct Sprite *spr { return TRUE; } + +// fast diagonal +bool8 MovementAction_WalkFastDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 1); + return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkFastDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 1); + return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkFastDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 1); + return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkFastDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 1); + return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); +} + +bool8 MovementAction_WalkFastDiagonal_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + if (npc_obj_ministep_stop_on_arrival(objectEvent, sprite)) + { + sprite->data[2] = 2; + return TRUE; + } + return FALSE; +} + + diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index fab14c5776..73c9fa9bda 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -9,6 +9,7 @@ #include "event_scripts.h" #include "fieldmap.h" #include "field_control_avatar.h" +#include "field_effect.h" #include "field_player_avatar.h" #include "field_poison.h" #include "field_screen_effect.h" @@ -409,6 +410,8 @@ static const u8 *GetInteractedMetatileScript(struct MapPosition *position, u8 me return EventScript_Questionnaire; if (MetatileBehavior_IsTrainerHillTimer(metatileBehavior) == TRUE) return EventScript_TrainerHillTimer; + if (MetatileBehavior_IsRockClimbable(metatileBehavior) == TRUE && !IsRockClimbActive()) + return EventScript_UseRockClimb; height = position->height; if (height == MapGridGetZCoordAt(position->x, position->y)) diff --git a/src/field_effect.c b/src/field_effect.c index b64902c0ec..c7ffa23f4a 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -231,6 +231,18 @@ static void SpriteCB_DeoxysRockFragment(struct Sprite* sprite); static void Task_MoveDeoxysRock(u8 taskId); +static void Task_UseRockClimb(u8); +static bool8 RockClimb_Init(struct Task *, struct ObjectEvent *); +static bool8 RockClimb_FieldMovePose(struct Task *, struct ObjectEvent *); +static bool8 RockClimb_ShowMon(struct Task *, struct ObjectEvent *); +static bool8 RockClimb_JumpOnRockClimbBlob(struct Task *task, struct ObjectEvent *objectEvent); +static bool8 RockClimb_WaitJumpOnRockClimbBlob(struct Task *task, struct ObjectEvent *objectEvent); +static bool8 RockClimb_Ride(struct Task *task, struct ObjectEvent *objectEvent); +//static bool8 RockClimb_RideUp(struct Task *, struct ObjectEvent *); +//static bool8 RockClimb_RideDown(struct Task *, struct ObjectEvent *); +static bool8 RockClimb_ContinueRideOrEnd(struct Task *, struct ObjectEvent *); +static bool8 RockClimb_WaitStopRockClimb(struct Task *task, struct ObjectEvent *objectEvent); +static bool8 RockClimb_StopRockClimbInit(struct Task *task, struct ObjectEvent *objectEvent); // Static RAM declarations static u8 sActiveList[32]; @@ -3880,3 +3892,256 @@ static void Task_MoveDeoxysRock(u8 taskId) } } +// ROCK CLIMB +enum RockClimbState +{ + STATE_ROCK_CLIMB_INIT, + STATE_ROCK_CLIMB_POSE, + STATE_ROCK_CLIMB_SHOW_MON, + STATE_ROCK_CLIMB_JUMP_ON, + STATE_ROCK_CLIMB_WAIT_JUMP, + STATE_ROCK_CLIMB_RIDE, + STATE_ROCK_CLIMB_CONTINUE_RIDE, + STATE_ROCK_CLIMB_STOP_INIT, + STATE_ROCK_CLIMB_WAIT_STOP +}; + +#define tState data[0] +#define tDestX data[1] +#define tDestY data[2] +#define tMonId data[15] + +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) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.paletteNum = 0; + sprite->data[2] = gFieldEffectArguments[2]; + sprite->data[3] = -1; + sprite->data[6] = -1; + sprite->data[7] = -1; + } + + return spriteId; +} + +bool8 (*const sRockClimbFieldEffectFuncs[])(struct Task *, struct ObjectEvent *) = +{ + [STATE_ROCK_CLIMB_INIT] = RockClimb_Init, + [STATE_ROCK_CLIMB_POSE] = RockClimb_FieldMovePose, + [STATE_ROCK_CLIMB_SHOW_MON] = RockClimb_ShowMon, + [STATE_ROCK_CLIMB_JUMP_ON] = RockClimb_JumpOnRockClimbBlob, + [STATE_ROCK_CLIMB_WAIT_JUMP] = RockClimb_WaitJumpOnRockClimbBlob, + [STATE_ROCK_CLIMB_RIDE] = RockClimb_Ride, + [STATE_ROCK_CLIMB_CONTINUE_RIDE] = RockClimb_ContinueRideOrEnd, + [STATE_ROCK_CLIMB_STOP_INIT] = RockClimb_StopRockClimbInit, + [STATE_ROCK_CLIMB_WAIT_STOP] = RockClimb_WaitStopRockClimb +}; + +bool8 FldEff_UseRockClimb(void) +{ + u8 taskId; + taskId = CreateTask(Task_UseRockClimb, 0xff); + gTasks[taskId].tMonId = gFieldEffectArguments[0]; + Task_UseRockClimb(taskId); + return FALSE; +} + +static void Task_UseRockClimb(u8 taskId) +{ + while (sRockClimbFieldEffectFuncs[gTasks[taskId].tState](&gTasks[taskId], &gObjectEvents[gPlayerAvatar.objectEventId])); +} + +static bool8 RockClimb_Init(struct Task *task, struct ObjectEvent *objectEvent) +{ + ScriptContext2_Enable(); + FreezeObjectEvents(); + gPlayerAvatar.preventStep = TRUE; + PlayerGetDestCoords(&task->tDestX, &task->tDestY); + MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->tDestX, &task->tDestY); + task->tState++; + return FALSE; +} + +static bool8 RockClimb_FieldMovePose(struct Task *task, struct ObjectEvent *objectEvent) +{ + if (!ObjectEventIsMovementOverridden(objectEvent) || ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + SetPlayerAvatarFieldMove(); + ObjectEventSetHeldMovement(objectEvent, MOVEMENT_ACTION_START_ANIM_IN_DIRECTION); + task->tState++; + } + return FALSE; +} + +static bool8 RockClimb_ShowMon(struct Task *task, struct ObjectEvent *objectEvent) +{ + if (ObjectEventCheckHeldMovementStatus(objectEvent)) + { + gFieldEffectArguments[0] = task->tMonId | 0x80000000; + FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT); + task->tState++; + return TRUE; + } + return FALSE; +} + +static bool8 RockClimb_JumpOnRockClimbBlob(struct Task *task, struct ObjectEvent *objectEvent) +{ + if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON)) + { + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_SURFING)); + ObjectEventClearHeldMovementIfFinished(objectEvent); + ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(objectEvent->movementDirection)); + gFieldEffectArguments[0] = task->tDestX; + gFieldEffectArguments[1] = task->tDestY; + gFieldEffectArguments[2] = gPlayerAvatar.objectEventId; + objectEvent->fieldEffectSpriteId = CreateRockClimbBlob(); + task->tState++; + } + + return FALSE; +} + +static bool8 RockClimb_WaitJumpOnRockClimbBlob(struct Task *task, struct ObjectEvent *objectEvent) +{ + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + SetSurfBobState(objectEvent->fieldEffectSpriteId, 1); + switch (objectEvent->facingDirection) + { + case DIR_EAST: + //check southeast then northeast + if (MetatileBehavior_IsRockClimbable(MapGridGetMetatileBehaviorAt(task->tDestX + 1, task->tDestY + 1))) + objectEvent->movementDirection = DIR_SOUTHEAST; + else if (MetatileBehavior_IsRockClimbable(MapGridGetMetatileBehaviorAt(task->tDestX + 1, task->tDestY - 1))) + objectEvent->movementDirection = DIR_NORTHEAST; + break; + case DIR_WEST: + //check northwest then southwest + if (MetatileBehavior_IsRockClimbable(MapGridGetMetatileBehaviorAt(task->tDestX - 1, task->tDestY - 1))) + objectEvent->movementDirection = DIR_NORTHWEST; + else if (MetatileBehavior_IsRockClimbable(MapGridGetMetatileBehaviorAt(task->tDestX - 1, task->tDestY + 1))) + objectEvent->movementDirection = DIR_SOUTHWEST; + break; + } + + task->tState++; + } + + return FALSE; +} + +struct RockClimbRide +{ + u8 action; + s8 dx; + s8 dy; + u8 jumpDir; +}; +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}, + [DIR_NORTH] = {MOVEMENT_ACTION_WALK_FAST_UP, 0, 1, DIR_NORTH}, + [DIR_WEST] = {MOVEMENT_ACTION_WALK_FAST_LEFT, 1, 1, DIR_WEST}, + [DIR_EAST] = {MOVEMENT_ACTION_WALK_FAST_RIGHT, -1, -1, DIR_EAST}, + [DIR_SOUTHWEST] = {MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_LEFT, 1, -1, DIR_WEST}, + [DIR_SOUTHEAST] = {MOVEMENT_ACTION_WALK_FAST_DIAGONAL_DOWN_RIGHT, -1, -1, DIR_EAST}, + [DIR_NORTHWEST] = {MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_LEFT, 1, 1, DIR_WEST}, + [DIR_NORTHEAST] = {MOVEMENT_ACTION_WALK_FAST_DIAGONAL_UP_RIGHT, -1, 1, DIR_EAST}, +}; + +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; + gFieldEffectArguments[3] = gSprites[objectEvent->spriteId].oam.priority; + FieldEffectStart(FLDEFF_ROCK_CLIMB_DUST); +} + +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); + task->tState++; + return FALSE; +} + +static bool8 RockClimb_ContinueRideOrEnd(struct Task *task, struct ObjectEvent *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; + } + + ScriptContext2_Enable(); + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; + gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; + task->tState++; + return FALSE; +} + +static bool8 RockClimb_StopRockClimbInit(struct Task *task, struct ObjectEvent *objectEvent) +{ + if (ObjectEventIsMovementOverridden(objectEvent)) + { + if (!ObjectEventClearHeldMovementIfFinished(objectEvent)) + return FALSE; + } + + RockClimbDust(objectEvent, DIR_NONE); //dust on final spot + ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(sRockClimbMovement[objectEvent->movementDirection].jumpDir)); + SetSurfBobState(objectEvent->fieldEffectSpriteId, 0); + task->tState++; + return TRUE; +} + +static bool8 RockClimb_WaitStopRockClimb(struct Task *task, struct ObjectEvent *objectEvent) +{ + if (ObjectEventClearHeldMovementIfFinished(objectEvent)) + { + ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_NORMAL)); + ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->facingDirection)); + gPlayerAvatar.preventStep = FALSE; + ScriptContext2_Disable(); + DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]); + FieldEffectActiveListRemove(FLDEFF_USE_ROCK_CLIMB); + DestroyTask(FindTaskIdByFunc(Task_UseRockClimb)); + } + + return FALSE; +} + +bool8 IsRockClimbActive(void) +{ + if (FieldEffectActiveListContains(FLDEFF_USE_ROCK_CLIMB)) + return TRUE; + else + return FALSE; +} + + +#undef tState +#undef tDestX +#undef tDestY +#undef tMonId + diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 886e023d1c..29f4272c86 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1057,10 +1057,12 @@ static void CreateBobbingEffect(struct ObjectEvent *objectEvent, struct Sprite * { sprite->pos2.y += sprite->data[3]; } + if ((sprite->data[4] & 0x0F) == 0) { sprite->data[3] = -sprite->data[3]; } + if (bobState != 2) { if (GetSurfBobWhileFishingState(sprite) == 0) @@ -1120,6 +1122,24 @@ u32 FldEff_Dust(void) return 0; } +u32 FldEff_RockClimbDust(void) +{ + u8 spriteId; + struct Sprite *sprite; + + SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12); + spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_ROCK_CLIMB_DUST], gFieldEffectArguments[0], gFieldEffectArguments[1], 0); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->coordOffsetEnabled = TRUE; + sprite->oam.priority = gFieldEffectArguments[3]; + sprite->data[0] = gFieldEffectArguments[2]; + sprite->data[1] = FLDEFF_ROCK_CLIMB_DUST; + } + return 0; +} + u32 FldEff_SandPile(void) { u8 objectEventId; diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 435ad72336..151a7a29ec 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -249,7 +249,7 @@ static const u8 sTileBitAttributes[] = [MB_UNUSED_EC] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_ED] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), [MB_UNUSED_EE] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), - [MB_UNUSED_EF] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), + [MB_ROCK_CLIMB] = TILE_ATTRIBUTES(FALSE, FALSE, FALSE), }; bool8 MetatileBehavior_IsATile(u8 metatileBehavior) @@ -1488,3 +1488,11 @@ bool8 MetatileBehavior_IsTrainerHillTimer(u8 metatileBehavior) else return FALSE; } + +bool8 MetatileBehavior_IsRockClimbable(u8 metatileBehavior) +{ + if (metatileBehavior == MB_ROCK_CLIMB) + return TRUE; + else + return FALSE; +} diff --git a/src/party_menu.c b/src/party_menu.c index 7514cf545e..2fedc54f8e 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -405,6 +405,7 @@ static bool8 SetUpFieldMove_Surf(void); static bool8 SetUpFieldMove_Fly(void); static bool8 SetUpFieldMove_Waterfall(void); static bool8 SetUpFieldMove_Dive(void); +static bool8 SetUpFieldMove_RockClimb(void); // static const data #include "data/pokemon/tutor_learnsets.h" @@ -6353,3 +6354,24 @@ void IsLastMonThatKnowsSurf(void) gSpecialVar_Result = TRUE; } } + +static void FieldCallback_RockClimb(void) +{ + gFieldEffectArguments[0] = GetCursorSelectionMonId(); + FieldEffectStart(FLDEFF_USE_ROCK_CLIMB); +} + +static bool8 SetUpFieldMove_RockClimb(void) +{ + s16 x, y; + + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (MetatileBehavior_IsRockClimbable(MapGridGetMetatileBehaviorAt(x, y))) + { + gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; + gPostMenuFieldCallback = FieldCallback_RockClimb; + return TRUE; + } + + return FALSE; +} From 7d1a1abe51950796d9433999ca1e8d8646b7a792 Mon Sep 17 00:00:00 2001 From: Jaizu Date: Mon, 31 Aug 2020 12:12:32 +0200 Subject: [PATCH 02/13] Update Rock Climb script Small fixes and make it more consistent with other field move scripts. --- data/scripts/field_move_scripts.inc | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc index d04304abc9..5d1cb31fcb 100644 --- a/data/scripts/field_move_scripts.inc +++ b/data/scripts/field_move_scripts.inc @@ -302,7 +302,6 @@ EventScript_FailSweetScent:: @ 8290CAE Text_FailSweetScent: @ 8290CB7 .string "Looks like there's nothing here…$" - EventScript_UseRockClimb:: lockall checkpartymove MOVE_ROCK_CLIMB @@ -314,16 +313,25 @@ EventScript_UseRockClimb:: compare VAR_RESULT, NO goto_if_eq EventScript_EndRockClimb msgbox Text_MonUsedRockClimb, MSGBOX_DEFAULT + closemessage dofieldeffect FLDEFF_USE_ROCK_CLIMB + waitstate goto EventScript_EndRockClimb -EventScript_CantRockClimb:: @ 8290A84 + +EventScript_CantRockClimb:: msgbox Text_CantRockClimb, MSGBOX_DEFAULT -EventScript_EndRockClimb:: @ 8290A8C + +EventScript_EndRockClimb:: releaseall end + Text_WantToRockClimb: - .string "The cliff is steep.\nWould you like to use Rock Climb?$" + .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.\nA Pokémon may be able to climb it.$" + .string "The cliff is steep.\n" + .string "A Pokémon may be able to climb it.$" From 50d20131ff32cf557e8a4addf8c2bbfa6fcab23f Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 1 Sep 2020 16:13:34 -0600 Subject: [PATCH 03/13] fix single climbable tile (thx skeli) --- src/field_effect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_effect.c b/src/field_effect.c index c7ffa23f4a..1ecbeb482f 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -4033,7 +4033,7 @@ static bool8 RockClimb_WaitJumpOnRockClimbBlob(struct Task *task, struct ObjectE break; } - task->tState++; + task->tState = STATE_ROCK_CLIMB_CONTINUE_RIDE; } return FALSE; From 529709b5ec6d0448d07c5514e21466ceef2ecb6b Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 14 Sep 2020 20:08:08 -0600 Subject: [PATCH 04/13] fix diagonal surf blob facing --- src/field_effect_helpers.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 29f4272c86..ae0e1c04f0 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -1013,10 +1013,10 @@ static void SynchroniseSurfAnim(struct ObjectEvent *objectEvent, struct Sprite * [DIR_NORTH] = 1, [DIR_WEST] = 2, [DIR_EAST] = 3, - [DIR_SOUTHWEST] = 0, - [DIR_SOUTHEAST] = 0, - [DIR_NORTHWEST] = 1, - [DIR_NORTHEAST] = 1, + [DIR_SOUTHWEST] = 2, + [DIR_SOUTHEAST] = 3, + [DIR_NORTHWEST] = 2, + [DIR_NORTHEAST] = 3, }; if (GetSurfBobWhileFlyingOutState(sprite) == 0) From 8f5bef1ec578192c58239748b837fb56b8d8a260 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 25 Oct 2020 09:46:28 -0600 Subject: [PATCH 05/13] follower attaches to riding player --- include/constants/global.h | 2 ++ src/field_effect.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/constants/global.h b/include/constants/global.h index 55830ae8b2..2f256e7bbc 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -117,4 +117,6 @@ #define DIR_NORTHWEST 7 #define DIR_NORTHEAST 8 +#define FOLLOW_ME_IMPLEMENTED FALSE + #endif // GUARD_CONSTANTS_GLOBAL_H diff --git a/src/field_effect.c b/src/field_effect.c index 1ecbeb482f..f524d90583 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -245,6 +245,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 @@ -1882,6 +1886,10 @@ static bool8 WaterfallFieldEffect_ContinueRideOrEnd(struct Task *task, struct Ob { if (!ObjectEventClearHeldMovementIfFinished(objectEvent)) return FALSE; + + #if FOLLOW_ME_IMPLEMENTED + TryAttachFollowerToPlayer(); + #endif if (MetatileBehavior_IsWaterfall(objectEvent->currentMetatileBehavior)) { @@ -4085,6 +4093,10 @@ static bool8 RockClimb_ContinueRideOrEnd(struct Task *task, struct ObjectEvent * if (!ObjectEventClearHeldMovementIfFinished(objectEvent)) return FALSE; + #if FOLLOW_ME_IMPLEMENTED + TryAttachFollowerToPlayer(); + #endif + PlayerGetDestCoords(&task->tDestX, &task->tDestY); MoveCoords(objectEvent->movementDirection, &task->tDestX, &task->tDestY); if (MetatileBehavior_IsRockClimbable(MapGridGetMetatileBehaviorAt(task->tDestX, task->tDestY))) @@ -4140,6 +4152,19 @@ bool8 IsRockClimbActive(void) } +#if FOLLOW_ME_IMPLEMENTED +static void TryAttachFollowerToPlayer(void) +{ + if (gFollowerState.inProgress) + { + //Keep the follow close by while its hidden to prevent it from going too far out of view + struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.eventObjectId]; + struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; + MoveObjectEventToMapCoords(follower, player->currentCoords.x, player->currentCoords.y); + } +} +#endif + #undef tState #undef tDestX #undef tDestY From 8c556c727405be16a7c74e2af41d93e3bea450fb Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 25 Oct 2020 09:50:16 -0600 Subject: [PATCH 06/13] fix follower check --- src/field_effect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_effect.c b/src/field_effect.c index f524d90583..70075d2496 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -4155,7 +4155,7 @@ bool8 IsRockClimbActive(void) #if FOLLOW_ME_IMPLEMENTED static void TryAttachFollowerToPlayer(void) { - if (gFollowerState.inProgress) + if (PlayerHasFollower()) { //Keep the follow close by while its hidden to prevent it from going too far out of view struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.eventObjectId]; From c66b03e0832be9ef0ad2521a28f07f251018eb82 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 25 Oct 2020 09:52:17 -0600 Subject: [PATCH 07/13] fix player avatar element --- src/field_effect.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field_effect.c b/src/field_effect.c index 70075d2496..93ac5dbab0 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -4158,7 +4158,7 @@ static void TryAttachFollowerToPlayer(void) if (PlayerHasFollower()) { //Keep the follow close by while its hidden to prevent it from going too far out of view - struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.eventObjectId]; + struct ObjectEvent* player = &gObjectEvents[gPlayerAvatar.objectEventId]; struct ObjectEvent* follower = &gObjectEvents[GetFollowerMapObjId()]; MoveObjectEventToMapCoords(follower, player->currentCoords.x, player->currentCoords.y); } From 15f7a6ecbb88c6f1c8e6940844ff95d06688fdcd Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 3 Dec 2020 14:35:04 -0500 Subject: [PATCH 08/13] fix rock climb retaining bike flags --- src/field_effect.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/field_effect.c b/src/field_effect.c index 734c103ca6..00c456dfe5 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -3972,6 +3972,7 @@ static bool8 RockClimb_Init(struct Task *task, struct ObjectEvent *objectEvent) ScriptContext2_Enable(); FreezeObjectEvents(); gPlayerAvatar.preventStep = TRUE; + SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING); PlayerGetDestCoords(&task->tDestX, &task->tDestY); MoveCoords(gObjectEvents[gPlayerAvatar.objectEventId].movementDirection, &task->tDestX, &task->tDestY); task->tState++; @@ -4107,6 +4108,7 @@ static bool8 RockClimb_ContinueRideOrEnd(struct Task *task, struct ObjectEvent * ScriptContext2_Enable(); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; + gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; task->tState++; return FALSE; From df145ecb24ac7ae65699d66d46b87dee335a07cb Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 7 Feb 2021 11:44:40 -0700 Subject: [PATCH 09/13] fix rock climb not unfreezing objects. Thx Sph. Ice --- src/field_effect.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/field_effect.c b/src/field_effect.c index a1858ba572..1b9fe6347e 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -4143,6 +4143,7 @@ static bool8 RockClimb_WaitStopRockClimb(struct Task *task, struct ObjectEvent * ObjectEventSetGraphicsId(objectEvent, GetPlayerAvatarGraphicsIdByStateId(PLAYER_AVATAR_STATE_NORMAL)); ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->facingDirection)); gPlayerAvatar.preventStep = FALSE; + UnfreezeObjectEvents(); ScriptContext2_Disable(); DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]); FieldEffectActiveListRemove(FLDEFF_USE_ROCK_CLIMB); From af36b25817e45824edef3f3609b82a86de6cd230 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 14 Jun 2021 11:34:08 -0600 Subject: [PATCH 10/13] trigger ground effects on rock climb dismount --- src/field_effect.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/field_effect.c b/src/field_effect.c index 8285bf3dfc..bd036aa3cb 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -4140,6 +4140,7 @@ static bool8 RockClimb_WaitStopRockClimb(struct Task *task, struct ObjectEvent * ScriptContext2_Disable(); DestroySprite(&gSprites[objectEvent->fieldEffectSpriteId]); FieldEffectActiveListRemove(FLDEFF_USE_ROCK_CLIMB); + objectEvent->triggerGroundEffectsOnMove = TRUE; // e.g. if dismount on grass DestroyTask(FindTaskIdByFunc(Task_UseRockClimb)); } From df46fe1700ca1ae1e33b44f01786ee9e3653322e Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 14 Jun 2021 12:47:18 -0600 Subject: [PATCH 11/13] rename relevant functions --- include/constants/moves.h | 4 ++++ src/data/party_menu.h | 8 +++++++- src/event_object_movement.c | 10 +++++----- src/field_effect.c | 4 ++-- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/include/constants/moves.h b/include/constants/moves.h index 85c02e3da5..51a9b3c27c 100644 --- a/include/constants/moves.h +++ b/include/constants/moves.h @@ -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 diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 7852b9decc..9696502ceb 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -762,7 +762,9 @@ struct [MENU_FIELD_MOVES + FIELD_MOVE_MILK_DRINK] = {gMoveNames[MOVE_MILK_DRINK], CursorCb_FieldMove}, [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCb_FieldMove}, [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove}, + #ifdef BATTLE_ENGINE [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_CLIMB] = {gMoveNames[MOVE_ROCK_CLIMB], CursorCb_FieldMove}, + #endif }; static const u8 sPartyMenuAction_SummarySwitchCancel[] = {MENU_SUMMARY, MENU_SWITCH, MENU_CANCEL1}; @@ -837,7 +839,11 @@ static const u8 sPartyMenuActionCounts[] = static const u16 sFieldMoves[] = { MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH, MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL, MOVE_TELEPORT, - MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, MOVE_ROCK_CLIMB, FIELD_MOVE_TERMINATOR + MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK, MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, + #ifdef BATTLE_ENGINE + MOVE_ROCK_CLIMB, + #endif + FIELD_MOVE_TERMINATOR }; struct diff --git a/src/event_object_movement.c b/src/event_object_movement.c index e52cdc5146..e54bf8d52f 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -9025,31 +9025,31 @@ u8 MovementAction_Fly_Finish(struct ObjectEvent *objectEvent, struct Sprite *spr // fast diagonal bool8 MovementAction_WalkFastDiagonalUpLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_NORTHWEST, 1); + InitMovementNormal(objectEvent, sprite, DIR_NORTHWEST, 1); return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); } bool8 MovementAction_WalkFastDiagonalUpRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_NORTHEAST, 1); + InitMovementNormal(objectEvent, sprite, DIR_NORTHEAST, 1); return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); } bool8 MovementAction_WalkFastDiagonalDownLeft_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_SOUTHWEST, 1); + InitMovementNormal(objectEvent, sprite, DIR_SOUTHWEST, 1); return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); } bool8 MovementAction_WalkFastDiagonalDownRight_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - do_go_anim(objectEvent, sprite, DIR_SOUTHEAST, 1); + InitMovementNormal(objectEvent, sprite, DIR_SOUTHEAST, 1); return MovementAction_WalkFastDiagonal_Step1(objectEvent, sprite); } bool8 MovementAction_WalkFastDiagonal_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite) { - if (npc_obj_ministep_stop_on_arrival(objectEvent, sprite)) + if (UpdateMovementNormal(objectEvent, sprite)) { sprite->data[2] = 2; return TRUE; diff --git a/src/field_effect.c b/src/field_effect.c index bd036aa3cb..a2129f1cee 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -4023,7 +4023,7 @@ static bool8 RockClimb_WaitJumpOnRockClimbBlob(struct Task *task, struct ObjectE { if (ObjectEventClearHeldMovementIfFinished(objectEvent)) { - SetSurfBobState(objectEvent->fieldEffectSpriteId, 1); + SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_PLAYER_AND_MON); switch (objectEvent->facingDirection) { case DIR_EAST: @@ -4124,7 +4124,7 @@ static bool8 RockClimb_StopRockClimbInit(struct Task *task, struct ObjectEvent * RockClimbDust(objectEvent, DIR_NONE); //dust on final spot ObjectEventSetHeldMovement(objectEvent, GetJumpSpecialMovementAction(sRockClimbMovement[objectEvent->movementDirection].jumpDir)); - SetSurfBobState(objectEvent->fieldEffectSpriteId, 0); + SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_NONE); task->tState++; return TRUE; } From a626b4be1987b0952694cfd9ba5815fedfe79a87 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Mon, 20 Dec 2021 13:04:04 -0500 Subject: [PATCH 12/13] fix end rock climb --- src/field_effect.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/field_effect.c b/src/field_effect.c index e5ee0b34df..009f4a8c2b 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -4106,7 +4106,6 @@ static bool8 RockClimb_ContinueRideOrEnd(struct Task *task, struct ObjectEvent * ScriptContext2_Enable(); gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_SURFING; - gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_5; gPlayerAvatar.flags |= PLAYER_AVATAR_FLAG_ON_FOOT; task->tState++; return FALSE; From 8cf7de166ceceb1f99764c54632d51446fe9ff50 Mon Sep 17 00:00:00 2001 From: ghoulslash Date: Sun, 4 Aug 2024 12:32:26 -0400 Subject: [PATCH 13/13] use gMovesInfo for rock climb given expansion's changes --- src/data/party_menu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 555f91f793..2518fc669d 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -691,7 +691,7 @@ struct [MENU_FIELD_MOVES + FIELD_MOVE_SOFT_BOILED] = {gMoveNames[MOVE_SOFT_BOILED], CursorCb_FieldMove}, [MENU_FIELD_MOVES + FIELD_MOVE_SWEET_SCENT] = {gMoveNames[MOVE_SWEET_SCENT], CursorCb_FieldMove}, #ifdef BATTLE_ENGINE - [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_CLIMB] = {gMoveNames[MOVE_ROCK_CLIMB], CursorCb_FieldMove}, + [MENU_FIELD_MOVES + FIELD_MOVE_ROCK_CLIMB] = {gMovesInfo[MOVE_ROCK_CLIMB].name, CursorCb_FieldMove}, #endif };