From cf673fda9f3b7f720301e341c3a1a65ab30df5c4 Mon Sep 17 00:00:00 2001 From: Ariel A <24759293+aarant@users.noreply.github.com> Date: Fri, 31 Dec 2021 16:10:01 -0500 Subject: [PATCH] Added movements to follower messages. Movement credit: SonikkuA-DatH --- data/scripts/follower.inc | 665 +++++++++++++++++++++++++----- include/data.h | 34 +- include/event_scripts.h | 34 +- src/data/text/follower_messages.h | 411 +++++++++++------- src/event_object_movement.c | 43 +- 5 files changed, 883 insertions(+), 304 deletions(-) diff --git a/data/scripts/follower.inc b/data/scripts/follower.inc index 6e2b8ee3a0..f2e8c4ac7e 100644 --- a/data/scripts/follower.inc +++ b/data/scripts/follower.inc @@ -7,45 +7,9 @@ gText_FollowerLostInThought:: gText_FollowerDefault:: .string "ERROR 404: Script not found.$" -gText_FollowerUnhappyToBeWet:: - .string "{STR_VAR_1} looks unhappy to be wet.$" - -gText_FollowerSplashesAround:: - .string "{STR_VAR_1} splashes around happily!$" - gText_WantsToFly:: .string "{STR_VAR_1} looks up at the\nsky restlessly.\pWould you like to use FLY?$" -gText_FollowerUnhappyFace:: - .string "{STR_VAR_1} is making an unhappy face...$" - -gText_FollowerHappyRain:: - .string "{STR_VAR_1} seems to be happy\nabout the rain!$" - -gText_FollowerMetLocation:: - .string "{STR_VAR_1} looks around fondly.\nIt seems familiar with this place.$" - -gText_FollowerSkeptical:: - .string "{STR_VAR_1} looks skeptical...\pWhat could it mean?$" - -gText_FollowerAppraising:: - .string "{STR_VAR_1} carefully follows behind.$" - -gText_FollowerHappyWalk:: - .string "{STR_VAR_1} skips happily behind you!$" - -gText_FollowerAboutToFall:: - .string "{STR_VAR_1} seems to be about\nto fall over!$" - -gText_FollowerTryingToKeepUp:: - .string "{STR_VAR_1} is trying very hard\nto keep up with you...$" - -gText_FollowerIsShivering:: - .string "{STR_VAR_1} is shivering.$" - -gText_FollowerBurnPainful:: - .string "{STR_VAR_1}'s burn looks painful!$'" - .macro playfirstmoncry callfunc ScrFunc_playfirstmoncry .endm @@ -83,49 +47,6 @@ EventScript_FollowerEnd:: release end -EventScript_FollowerHappyWalk:: - msgbox gText_FollowerHappyWalk, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerAppraising:: - msgbox gText_FollowerAppraising, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerSkeptical:: - msgbox gText_FollowerSkeptical, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerMetLocation:: - applymovement 0xFE Common_Movement_QuestionMark - waitmoncry - waitmovement 0xFE - msgbox gText_FollowerMetLocation, MSGBOX_DEFAULT - return - -EventScript_FollowerUnhappyFace:: - msgbox gText_FollowerUnhappyFace, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerHappyRain:: - msgbox gText_FollowerHappyRain, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerUnhappyToBeWet:: - msgbox gText_FollowerUnhappyToBeWet, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerSplashesAbout:: - applymovement 0xFE FollowerSplashMovement - waitmovement 0xFE - msgbox gText_FollowerSplashesAround, MSGBOX_DEFAULT - return - EventScript_FollowerLovesYou:: applymovement 0xFE ContestHall_Movement_Heart waitmovement 0xFE @@ -133,26 +54,6 @@ EventScript_FollowerLovesYou:: msgbox gText_FollowerLovesYou, MSGBOX_DEFAULT return -EventScript_FollowerAboutToFall:: - msgbox gText_FollowerAboutToFall, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerTryingToKeepUp:: - msgbox gText_FollowerTryingToKeepUp, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerIsShivering:: - msgbox gText_FollowerIsShivering, MSGBOX_DEFAULT - waitmoncry - return - -EventScript_FollowerBurnPainful:: - msgbox gText_FollowerBurnPainful, MSGBOX_DEFAULT - waitmoncry - return - @ Message address must be loaded into bank 0 EventScript_FollowerGeneric:: @ similar to Std_MsgboxDefault waitfieldeffect FLDEFF_EMOTE @@ -174,9 +75,573 @@ EnterPokeballMovement:: .byte 0x9F @ EnterPokeball step_end -FollowerSplashMovement:: @ defined in movement.inc +@ Movement scripts below, movements are defined in movement.inc + +FollowerSplashMovement:: jump_in_place_down delay_4 jump_in_place_down face_player step_end + +FollowerShiverVerticalMovement: + lock_facing_direction + slide_left + slide_right + slide_right + slide_left + unlock_facing_direction + step_end + +FollowerShiverHorizontalMovement: + lock_facing_direction + slide_up + slide_down + slide_down + slide_up + unlock_facing_direction + step_end + +FollowerNostalgiaMovement: + face_away_player + lock_facing_direction + jump_in_place_down + jump_in_place_down + jump_in_place_down + unlock_facing_direction + face_player + lock_facing_direction + jump_in_place_down + unlock_facing_direction + step_end + +FollowerSkippingMovement: + lock_facing_direction + jump_in_place_down + delay_4 + jump_in_place_down + unlock_facing_direction + step_end + +FollowerJumpOnPlayerNorth: + jump_up + delay_4 + lock_facing_direction + walk_fast_down + unlock_facing_direction + step_end + +FollowerJumpOnPlayerSouth: + jump_down + delay_4 + lock_facing_direction + walk_fast_up + unlock_facing_direction + step_end + +FollowerJumpOnPlayerEast: + jump_right + delay_4 + lock_facing_direction + walk_fast_left + unlock_facing_direction + step_end + +FollowerJumpOnPlayerWest: + jump_left + delay_4 + lock_facing_direction + walk_fast_right + unlock_facing_direction + step_end + +FollowerCuddlingNorth: + face_left + lock_facing_direction + walk_up + walk_in_place_left + walk_in_place_left + unlock_facing_direction + walk_down + face_player + step_end + +FollowerCuddlingSouth: + face_right + lock_facing_direction + walk_down + walk_in_place_right + walk_in_place_right + unlock_facing_direction + walk_up + face_player + step_end + +FollowerCuddlingEast: + face_down + lock_facing_direction + walk_right + walk_in_place_down + walk_in_place_down + unlock_facing_direction + walk_left + face_player + step_end + +FollowerCuddlingWest: + face_down + lock_facing_direction + walk_left + walk_in_place_down + walk_in_place_down + unlock_facing_direction + walk_right + face_player + step_end + +FollowerGetCloserNorth: + walk_up + delay_16 + lock_facing_direction + walk_down + unlock_facing_direction + step_end + +FollowerGetCloserSouth: + walk_down + delay_16 + lock_facing_direction + walk_up + unlock_facing_direction + step_end + +FollowerGetCloserEast: + walk_right + delay_16 + lock_facing_direction + walk_left + unlock_facing_direction + step_end + +FollowerGetCloserWest: + walk_left + delay_16 + lock_facing_direction + walk_right + unlock_facing_direction + step_end + +FollowerPokeNorth: + walk_faster_up + delay_8 + lock_facing_direction + walk_faster_down + delay_4 + walk_faster_up + delay_4 + walk_faster_down + unlock_facing_direction + step_end + +FollowerPokeSouth: + walk_faster_down + delay_8 + lock_facing_direction + walk_faster_up + delay_4 + walk_faster_down + delay_4 + walk_faster_up + unlock_facing_direction + step_end + +FollowerPokeEast: + walk_faster_right + delay_8 + lock_facing_direction + walk_faster_left + delay_4 + walk_faster_right + delay_4 + walk_faster_left + unlock_facing_direction + step_end + +FollowerPokeWest: + walk_faster_left + delay_8 + lock_facing_direction + walk_faster_right + delay_4 + walk_faster_left + delay_4 + walk_faster_right + unlock_facing_direction + step_end + +FollowerLookAround: + face_away_player + delay_16 + delay_16 + face_left + delay_16 + delay_16 + face_up + delay_16 + delay_16 + face_down + delay_16 + delay_16 + step_end + +FollowerLookAway: + face_away_player + delay_16 + delay_16 + step_end + +FollowerLookAwayBark: + face_away_player + lock_facing_direction + jump_in_place_down + jump_in_place_down + unlock_facing_direction + step_end + +FollowerLookAwayPokeG: + face_away_player + lock_facing_direction + walk_in_place_down + walk_in_place_down + walk_in_place_down + unlock_facing_direction + step_end + +FollowerPokeGround: + lock_facing_direction + walk_in_place_down + walk_in_place_down + walk_in_place_down + unlock_facing_direction + step_end + +FollowerStartled: + face_away_player + lock_facing_direction + jump_in_place_down + unlock_facing_direction + face_player + step_end + +FollowerHopFast: + jump_in_place_up + jump_in_place_down + jump_in_place_left + jump_in_place_right + face_player + step_end + +FollowerDizzy: + walk_in_place_left + walk_in_place_fast_right + walk_in_place_slow_up + walk_in_place_fast_down + delay_4 + face_away_player + step_end + +FollowerLookAroundScared: + face_up + delay_16 + face_down + delay_16 + face_left + delay_16 + face_right + delay_16 + face_up + delay_16 + face_down + delay_16 + face_left + delay_16 + face_right + delay_16 + face_player + step_end + +FollowerDance: + lock_facing_direction + jump_in_place_up + unlock_facing_direction + walk_in_place_faster_up + walk_in_place_faster_left + walk_in_place_faster_down + walk_in_place_faster_right + walk_in_place_faster_up + walk_in_place_faster_left + walk_in_place_faster_down + walk_in_place_faster_right + walk_in_place_faster_up + walk_in_place_faster_left + walk_in_place_faster_down + walk_in_place_faster_right + walk_in_place_faster_up + walk_in_place_faster_left + walk_in_place_faster_down + walk_in_place_faster_right + walk_in_place_faster_up + walk_in_place_faster_left + walk_in_place_faster_down + walk_in_place_faster_right + jump_in_place_up + jump_in_place_down + jump_in_place_up + face_player + step_end + +@ Movement scripts + +EventScript_FollowerIsShivering:: + compare VAR_FACING, DIR_NORTH + call_if_eq ShiverVertical + compare VAR_FACING, DIR_SOUTH + call_if_eq ShiverVertical + compare VAR_FACING, DIR_WEST + call_if_eq ShiverHorizontal + compare VAR_FACING, DIR_EAST + call_if_eq ShiverHorizontal + goto EventScript_FollowerGeneric + +ShiverVertical: + applymovement 0xFE FollowerShiverVerticalMovement + waitmovement 0xFE + return + +ShiverHorizontal: + applymovement 0xFE FollowerShiverHorizontalMovement + waitmovement 0xFE + return + +EventScript_FollowerNostalgia:: + applymovement 0xFE FollowerNostalgiaMovement + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerHopping:: + applymovement 0xFE FollowerSkippingMovement + waitmovement 0xFE + goto EventScript_FollowerGeneric + +JumpOnN: + applymovement 0xFE FollowerJumpOnPlayerNorth + waitmovement 0xFE + return + +JumpOnS: + applymovement 0xFE FollowerJumpOnPlayerSouth + waitmovement 0xFE + return + +JumpOnE: + applymovement 0xFE FollowerJumpOnPlayerEast + waitmovement 0xFE + return + +JumpOnW: + applymovement 0xFE FollowerJumpOnPlayerWest + waitmovement 0xFE + return + +EventScript_FollowerJumpOnPlayer:: + compare VAR_FACING, DIR_NORTH + call_if_eq JumpOnS + compare VAR_FACING, DIR_SOUTH + call_if_eq JumpOnN + compare VAR_FACING, DIR_WEST + call_if_eq JumpOnE + compare VAR_FACING, DIR_EAST + call_if_eq JumpOnW + goto EventScript_FollowerGeneric + +CuddleN: + applymovement 0xFE FollowerCuddlingNorth + waitmovement 0xFE + return + +CuddleS: + applymovement 0xFE FollowerCuddlingSouth + waitmovement 0xFE + return + +CuddleE: + applymovement 0xFE FollowerCuddlingEast + waitmovement 0xFE + return + +CuddleW: + applymovement 0xFE FollowerCuddlingWest + waitmovement 0xFE + return + +EventScript_FollowerCuddling:: @ similar to Std_MsgboxDefault + compare VAR_FACING, DIR_NORTH + call_if_eq CuddleS + compare VAR_FACING, DIR_SOUTH + call_if_eq CuddleN + compare VAR_FACING, DIR_WEST + call_if_eq CuddleE + compare VAR_FACING, DIR_EAST + call_if_eq CuddleW + goto EventScript_FollowerGeneric + +ShCuddleN: + applymovement 0xFE FollowerShiverVerticalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingNorth + waitmovement 0xFE + return + +ShCuddleS: + applymovement 0xFE FollowerShiverVerticalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingSouth + waitmovement 0xFE + return + +ShCuddleE: + applymovement 0xFE FollowerShiverHorizontalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingEast + waitmovement 0xFE + return + +ShCuddleW: + applymovement 0xFE FollowerShiverHorizontalMovement + waitmovement 0xFE + applymovement 0xFE FollowerCuddlingWest + waitmovement 0xFE + return + +EventScript_FollowerShiverCuddling:: + compare VAR_FACING, DIR_NORTH + call_if_eq ShCuddleS + compare VAR_FACING, DIR_SOUTH + call_if_eq ShCuddleN + compare VAR_FACING, DIR_WEST + call_if_eq ShCuddleE + compare VAR_FACING, DIR_EAST + call_if_eq ShCuddleW + goto EventScript_FollowerGeneric + +CreepCloserN: + applymovement 0xFE FollowerGetCloserNorth + waitmovement 0xFE + return + +CreepCloserS: + applymovement 0xFE FollowerGetCloserSouth + waitmovement 0xFE + return + +CreepCloserE: + applymovement 0xFE FollowerGetCloserEast + waitmovement 0xFE + return + +CreepCloserW: + applymovement 0xFE FollowerGetCloserWest + waitmovement 0xFE + return + +EventScript_FollowerGetCloser:: + compare VAR_FACING, DIR_NORTH + call_if_eq CreepCloserS + compare VAR_FACING, DIR_SOUTH + call_if_eq CreepCloserN + compare VAR_FACING, DIR_WEST + call_if_eq CreepCloserE + compare VAR_FACING, DIR_EAST + call_if_eq CreepCloserW + goto EventScript_FollowerGeneric + +PokePlayerN: + applymovement 0xFE FollowerGetCloserNorth + waitmovement 0xFE + return + +PokePlayerS: + applymovement 0xFE FollowerGetCloserSouth + waitmovement 0xFE + return + +PokePlayerE: + applymovement 0xFE FollowerGetCloserEast + waitmovement 0xFE + return + +PokePlayerW: + applymovement 0xFE FollowerGetCloserWest + waitmovement 0xFE + return + +EventScript_FollowerPokingPlayer:: + compare VAR_FACING, DIR_NORTH + call_if_eq PokePlayerS + compare VAR_FACING, DIR_SOUTH + call_if_eq PokePlayerN + compare VAR_FACING, DIR_WEST + call_if_eq PokePlayerE + compare VAR_FACING, DIR_EAST + call_if_eq PokePlayerW + goto EventScript_FollowerGeneric + +EventScript_FollowerLookAround:: + applymovement 0xFE FollowerLookAround + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerLookAway:: + applymovement 0xFE FollowerLookAway + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerLookAwayBark:: + applymovement 0xFE FollowerLookAwayBark + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerLookAwayPoke:: + applymovement 0xFE FollowerLookAwayPokeG + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerPokeGround:: + applymovement 0xFE FollowerPokeGround + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerStartled:: + applymovement 0xFE FollowerStartled + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerFastHopping:: + applymovement 0xFE FollowerHopFast + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerDizzy:: + applymovement 0xFE FollowerDizzy + waitmovement 0 + goto EventScript_FollowerGeneric + +EventScript_FollowerLookAroundScared:: + applymovement 0xFE FollowerLookAroundScared + waitmovement 0xFE + goto EventScript_FollowerGeneric + +EventScript_FollowerDance:: + applymovement 0xFE FollowerDance + waitmovement 0 + goto EventScript_FollowerGeneric diff --git a/include/data.h b/include/data.h index ea99a691c5..ea33bcbc77 100644 --- a/include/data.h +++ b/include/data.h @@ -5,7 +5,7 @@ #define SPECIES_SHINY_TAG 500 #define N_FOLLOWER_HAPPY_MESSAGES 31 -#define N_FOLLOWER_NEUTRAL_MESSAGES 15 +#define N_FOLLOWER_NEUTRAL_MESSAGES 14 #define N_FOLLOWER_SAD_MESSAGES 3 #define N_FOLLOWER_UPSET_MESSAGES 3 #define N_FOLLOWER_ANGRY_MESSAGES 5 @@ -13,7 +13,7 @@ #define N_FOLLOWER_LOVE_MESSAGES 10 #define N_FOLLOWER_SURPRISE_MESSAGES 20 #define N_FOLLOWER_CURIOUS_MESSAGES 7 -#define N_FOLLOWER_MUSIC_MESSAGES 15 +#define N_FOLLOWER_MUSIC_MESSAGES 14 #define N_FOLLOWER_POISONED_MESSAGES 1 #define MAX_TRAINER_ITEMS 4 @@ -92,13 +92,19 @@ struct Trainer #define TRAINER_ENCOUNTER_MUSIC(trainer)((gTrainers[trainer].encounterMusic_gender & 0x7F)) +struct FollowerMsgInfo { + const u8 *text; + const u8 *script; +}; + struct FollowerMessagePool { - const char * const * messages; + const struct FollowerMsgInfo * messages; const u8 * script; u16 length; }; + extern const u16 gMinigameDigits_Pal[]; extern const u32 gMinigameDigits_Gfx[]; @@ -146,16 +152,16 @@ extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1]; extern const u8 gMoveNames[MOVES_COUNT][MOVE_NAME_LENGTH + 1]; // Follower text messages -extern const char * const gFollowerHappyMessages[]; -extern const char * const gFollowerNeutralMessages[]; -extern const char * const gFollowerSadMessages[]; -extern const char * const gFollowerUpsetMessages[]; -extern const char * const gFollowerAngryMessages[]; -extern const char * const gFollowerPensiveMessages[]; -extern const char * const gFollowerLoveMessages[]; -extern const char * const gFollowerSurpriseMessages[]; -extern const char * const gFollowerCuriousMessages[]; -extern const char * const gFollowerMusicMessages[]; -extern const char * const gFollowerPoisonedMessages[]; +extern const struct FollowerMsgInfo gFollowerHappyMessages[]; +extern const struct FollowerMsgInfo gFollowerNeutralMessages[]; +extern const struct FollowerMsgInfo gFollowerSadMessages[]; +extern const struct FollowerMsgInfo gFollowerUpsetMessages[]; +extern const struct FollowerMsgInfo gFollowerAngryMessages[]; +extern const struct FollowerMsgInfo gFollowerPensiveMessages[]; +extern const struct FollowerMsgInfo gFollowerLoveMessages[]; +extern const struct FollowerMsgInfo gFollowerSurpriseMessages[]; +extern const struct FollowerMsgInfo gFollowerCuriousMessages[]; +extern const struct FollowerMsgInfo gFollowerMusicMessages[]; +extern const struct FollowerMsgInfo gFollowerPoisonedMessages[]; #endif // GUARD_DATA_H diff --git a/include/event_scripts.h b/include/event_scripts.h index fd65a66139..911afa91da 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -2,22 +2,28 @@ #define GUARD_EVENT_SCRIPTS_H extern const u8 EventScript_Follower[]; -extern const u8 EventScript_FollowerUnhappyToBeWet[]; -extern const u8 EventScript_FollowerSplashesAbout[]; -extern const u8 EventScript_FollowerLovesYou[]; -extern const u8 EventScript_FollowerUnhappyFace[]; -extern const u8 EventScript_FollowerHappyRain[]; -extern const u8 EventScript_FollowerMetLocation[]; extern const u8 EventScript_FollowerEnd[]; -extern const u8 EventScript_FollowerSkeptical[]; -extern const u8 EventScript_FollowerAppraising[]; -extern const u8 EventScript_FollowerHappyWalk[]; -extern const u8 EventScript_FollowerAboutToFall[]; -extern const u8 EventScript_FollowerTryingToKeepUp[]; -extern const u8 EventScript_FollowerIsShivering[]; -extern const u8 EventScript_FollowerBurnPainful[]; extern const u8 EventScript_FollowerGeneric[]; -extern const u8 EventScript_FollowerLove[]; +extern const u8 EventScript_FollowerLovesYou[]; + +extern const u8 EventScript_FollowerIsShivering[]; +extern const u8 EventScript_FollowerNostalgia[]; +extern const u8 EventScript_FollowerHopping[]; +extern const u8 EventScript_FollowerJumpOnPlayer[]; +extern const u8 EventScript_FollowerCuddling[]; +extern const u8 EventScript_FollowerShiverCuddling[]; +extern const u8 EventScript_FollowerGetCloser[]; +extern const u8 EventScript_FollowerPokingPlayer[]; +extern const u8 EventScript_FollowerLookAround[]; +extern const u8 EventScript_FollowerLookAway[]; +extern const u8 EventScript_FollowerLookAwayBark[]; +extern const u8 EventScript_FollowerLookAwayPoke[]; +extern const u8 EventScript_FollowerPokeGround[]; +extern const u8 EventScript_FollowerStartled[]; +extern const u8 EventScript_FollowerFastHopping[]; +extern const u8 EventScript_FollowerDizzy[]; +extern const u8 EventScript_FollowerLookAroundScared[]; +extern const u8 EventScript_FollowerDance[]; extern const u8 EnterPokeballMovement[]; extern const u8 EventScript_TestSignpostMsg[]; diff --git a/src/data/text/follower_messages.h b/src/data/text/follower_messages.h index 5339a79bab..7dc9a67df4 100644 --- a/src/data/text/follower_messages.h +++ b/src/data/text/follower_messages.h @@ -1,183 +1,298 @@ +extern const u8 EventScript_FollowerIsShivering[]; +extern const u8 EventScript_FollowerNostalgia[]; +extern const u8 EventScript_FollowerHopping[]; +extern const u8 EventScript_FollowerJumpOnPlayer[]; +extern const u8 EventScript_FollowerCuddling[]; +extern const u8 EventScript_FollowerShiverCuddling[]; +extern const u8 EventScript_FollowerGetCloser[]; +extern const u8 EventScript_FollowerPokingPlayer[]; +extern const u8 EventScript_FollowerLookAround[]; +extern const u8 EventScript_FollowerLookAway[]; +extern const u8 EventScript_FollowerLookAwayBark[]; +extern const u8 EventScript_FollowerLookAwayPoke[]; +extern const u8 EventScript_FollowerPokeGround[]; +extern const u8 EventScript_FollowerStartled[]; +extern const u8 EventScript_FollowerFastHopping[]; +extern const u8 EventScript_FollowerDizzy[]; +extern const u8 EventScript_FollowerLookAroundScared[]; +extern const u8 EventScript_FollowerDance[]; + // 'Generic', unconditional happy messages -const char * const gFollowerHappyMessages[] = { - (const char []) _("{STR_VAR_1} began poking you in the\nstomach."), - (const char []) _("{STR_VAR_1} is happy but shy."), - (const char []) _("{STR_VAR_1} is coming along happily."), - (const char []) _("{STR_VAR_1} is composed."), - (const char []) _("{STR_VAR_1} seems to be feeling\ngreat about walking with you!"), - (const char []) _("{STR_VAR_1} is glowing with health."), - (const char []) _("{STR_VAR_1} looks very happy."), - (const char []) _("{STR_VAR_1} put in extra effort."), - (const char []) _("{STR_VAR_1} is smelling the scents\nof the surrounding air."), - (const char []) _("{STR_VAR_1} is jumping for joy!"), - (const char []) _("{STR_VAR_1} is still feeling great!"), - (const char []) _("Your pokemon has caught the scent of\nsmoke."), - (const char []) _("{STR_VAR_1} is poking at your belly."), - (const char []) _("Your pokemon stretched out its body\nand is relaxing."), - (const char []) _("{STR_VAR_1} looks like it wants to\nlead!"), - (const char []) _("{STR_VAR_1} is doing it's best to\nkeep up with you."), - (const char []) _("{STR_VAR_1} is happily cuddling up\nto you!"), - (const char []) _("{STR_VAR_1} is full of life!"), - (const char []) _("{STR_VAR_1} seems to be very happy!"), - (const char []) _("{STR_VAR_1} is so happy that it\ncan't stand still!"), - (const char []) _("{STR_VAR_1} nodded slowly."), - (const char []) _("{STR_VAR_1} is very eager!"), - (const char []) _("{STR_VAR_1} is wandering around and\nlistening to the different sounds."), - (const char []) _("{STR_VAR_1} looks very interested."), - (const char []) _("{STR_VAR_1} is somehow forcing\nitself to keep going."), - (const char []) _("{STR_VAR_1} gave you a sunny look!"), - (const char []) _("{STR_VAR_1} gives you a happy look\nand a smile."), - (const char []) _("Your pokemon is smelling the scent\nof flowers."), - (const char []) _("{STR_VAR_1} seems very happy to see\nyou!"), - (const char []) _("{STR_VAR_1} faced this way and\ngrinned."), - (const char []) _("{STR_VAR_1} happily cuddled up to\nyou!"), +static const u8 sHappyMsg00[] = _("{STR_VAR_1} began poking you in the\nstomach."); +static const u8 sHappyMsg01[] = _("{STR_VAR_1} is happy but shy."); +static const u8 sHappyMsg02[] = _("{STR_VAR_1} is coming along happily."); +static const u8 sHappyMsg03[] = _("{STR_VAR_1} is composed."); +static const u8 sHappyMsg04[] = _("{STR_VAR_1} seems to be feeling\ngreat about walking with you!"); +static const u8 sHappyMsg05[] = _("{STR_VAR_1} is glowing with health."); +static const u8 sHappyMsg06[] = _("{STR_VAR_1} looks very happy."); +static const u8 sHappyMsg07[] = _("{STR_VAR_1} put in extra effort."); +static const u8 sHappyMsg08[] = _("{STR_VAR_1} is smelling the scents\nof the surrounding air."); +static const u8 sHappyMsg09[] = _("{STR_VAR_1} is jumping for joy!"); +static const u8 sHappyMsg10[] = _("{STR_VAR_1} is still feeling great!"); +static const u8 sHappyMsg11[] = _("Your pokemon has caught the scent of\nsmoke."); +static const u8 sHappyMsg12[] = _("{STR_VAR_1} is poking at your belly."); +static const u8 sHappyMsg13[] = _("Your pokemon stretched out its body\nand is relaxing."); +static const u8 sHappyMsg14[] = _("{STR_VAR_1} looks like it wants to\nlead!"); +static const u8 sHappyMsg15[] = _("{STR_VAR_1} is doing it's best to\nkeep up with you."); +static const u8 sHappyMsg16[] = _("{STR_VAR_1} is happily cuddling up\nto you!"); +static const u8 sHappyMsg17[] = _("{STR_VAR_1} is full of life!"); +static const u8 sHappyMsg18[] = _("{STR_VAR_1} seems to be very happy!"); +static const u8 sHappyMsg19[] = _("{STR_VAR_1} is so happy that it\ncan't stand still!"); +static const u8 sHappyMsg20[] = _("{STR_VAR_1} nodded slowly."); +static const u8 sHappyMsg21[] = _("{STR_VAR_1} is very eager!"); +static const u8 sHappyMsg22[] = _("{STR_VAR_1} is wandering around and\nlistening to the different sounds."); +static const u8 sHappyMsg23[] = _("{STR_VAR_1} looks very interested."); +static const u8 sHappyMsg24[] = _("{STR_VAR_1} is somehow forcing\nitself to keep going."); +static const u8 sHappyMsg25[] = _("{STR_VAR_1} gave you a sunny look!"); +static const u8 sHappyMsg26[] = _("{STR_VAR_1} gives you a happy look\nand a smile."); +static const u8 sHappyMsg27[] = _("Your pokemon is smelling the scent\nof flowers."); +static const u8 sHappyMsg28[] = _("{STR_VAR_1} seems very happy to see\nyou!"); +static const u8 sHappyMsg29[] = _("{STR_VAR_1} faced this way and\ngrinned."); +static const u8 sHappyMsg30[] = _("{STR_VAR_1} happily cuddled up to\nyou!"); // Conditional messages begin here, index 31 - (const char []) _("Your pokemon seems happy about the\ngreat weather."), +static const u8 sHappyMsg31[] = _("Your pokemon seems happy about the\ngreat weather."); + +const struct FollowerMsgInfo gFollowerHappyMessages[] = { + {sHappyMsg00, EventScript_FollowerPokingPlayer}, + {sHappyMsg01}, {sHappyMsg02}, {sHappyMsg03}, {sHappyMsg04}, {sHappyMsg05}, {sHappyMsg06}, {sHappyMsg07}, + {sHappyMsg08, EventScript_FollowerLookAround}, + {sHappyMsg09, EventScript_FollowerHopping}, + {sHappyMsg10}, {sHappyMsg11}, + {sHappyMsg12, EventScript_FollowerPokingPlayer}, + {sHappyMsg13, EventScript_FollowerLookAround}, + {sHappyMsg14}, {sHappyMsg15}, + {sHappyMsg16, EventScript_FollowerCuddling}, + {sHappyMsg17}, {sHappyMsg18}, + {sHappyMsg19, EventScript_FollowerFastHopping}, + {sHappyMsg20}, {sHappyMsg21}, {sHappyMsg22}, {sHappyMsg23}, {sHappyMsg24}, {sHappyMsg25}, {sHappyMsg26}, {sHappyMsg27}, {sHappyMsg28}, {sHappyMsg29}, + {sHappyMsg30, EventScript_FollowerCuddling}, + {sHappyMsg31}, }; // Unconditional neutral messages -const char * const gFollowerNeutralMessages[] = { - (const char []) _("{STR_VAR_1} is steadily poking at\nthe ground."), - (const char []) _("{STR_VAR_1} is standing guard."), - (const char []) _("{STR_VAR_1} is staring patiently at\nnothing at all."), - (const char []) _("{STR_VAR_1} is wandering around."), - (const char []) _("Your pokemon yawned loudly!"), - (const char []) _("Your pokemon is looking around\nrestlessly."), - (const char []) _("{STR_VAR_1} is steadily poking at\nthe ground."), - (const char []) _("{STR_VAR_1} is looking this way and\nsmiling."), - (const char []) _("{STR_VAR_1} is gazing around\nrestlessly."), - (const char []) _("{STR_VAR_1} let out a battle cry."), - (const char []) _("{STR_VAR_1} danced a wonderful\ndance!"), - (const char []) _("{STR_VAR_1} is very eager."), - (const char []) _("{STR_VAR_1} is staring intently into\nthe distance."), - (const char []) _("{STR_VAR_1} is on the lookout!"), - (const char []) _("{STR_VAR_1} looked off into the\ndistance and barked!"), +static const u8 sNeutralMsg00[] = _("{STR_VAR_1} is steadily poking at\nthe ground."); +static const u8 sNeutralMsg01[] = _("{STR_VAR_1} is standing guard."); +static const u8 sNeutralMsg02[] = _("{STR_VAR_1} is staring patiently at\nnothing at all."); +static const u8 sNeutralMsg03[] = _("{STR_VAR_1} is wandering around."); +static const u8 sNeutralMsg04[] = _("Your pokemon yawned loudly!"); +static const u8 sNeutralMsg05[] = _("Your pokemon is looking around\nrestlessly."); +static const u8 sNeutralMsg06[] = _("{STR_VAR_1} is looking this way and\nsmiling."); +static const u8 sNeutralMsg07[] = _("{STR_VAR_1} is gazing around\nrestlessly."); +static const u8 sNeutralMsg08[] = _("{STR_VAR_1} let out a battle cry."); +static const u8 sNeutralMsg09[] = _("{STR_VAR_1} danced a wonderful\ndance!"); +static const u8 sNeutralMsg10[] = _("{STR_VAR_1} is very eager."); +static const u8 sNeutralMsg11[] = _("{STR_VAR_1} is staring intently into\nthe distance."); +static const u8 sNeutralMsg12[] = _("{STR_VAR_1} is on the lookout!"); +static const u8 sNeutralMsg13[] = _("{STR_VAR_1} looked off into the\ndistance and barked!"); + +const struct FollowerMsgInfo gFollowerNeutralMessages[] = { + {sNeutralMsg00, EventScript_FollowerPokeGround}, + {sNeutralMsg01}, + {sNeutralMsg02, EventScript_FollowerLookAway}, + {sNeutralMsg03, EventScript_FollowerLookAround}, + {sNeutralMsg04}, + {sNeutralMsg05, EventScript_FollowerLookAround}, + {sNeutralMsg06}, {sNeutralMsg07}, {sNeutralMsg08}, + {sNeutralMsg09, EventScript_FollowerDance}, + {sNeutralMsg10}, + {sNeutralMsg11, EventScript_FollowerLookAway}, + {sNeutralMsg12}, + {sNeutralMsg13, EventScript_FollowerLookAwayBark}, }; // Unconditional sad messages -const char * const gFollowerSadMessages[] = { - (const char []) _("{STR_VAR_1} is dizzy."), - (const char []) _("{STR_VAR_1} is stepping on your\nfeet!"), - (const char []) _("{STR_VAR_1} seems a little tired."), +static const u8 sSadMsg00[] = _("{STR_VAR_1} is dizzy."); +static const u8 sSadMsg01[] = _("{STR_VAR_1} is stepping on your\nfeet!"); +static const u8 sSadMsg02[] = _("{STR_VAR_1} seems a little tired."); // Conditional messages begin, index 3 - (const char []) _("{STR_VAR_1} is not happy."), - (const char []) _("{STR_VAR_1} is going to fall down!\n"), - (const char []) _("{STR_VAR_1} seems to be about to\nfall over!"), - (const char []) _("{STR_VAR_1} is trying very hard to\nkeep up with you..."), +static const u8 sSadMsg03[] = _("{STR_VAR_1} is not happy."); +static const u8 sSadMsg04[] = _("{STR_VAR_1} is going to fall down!\n"); +static const u8 sSadMsg05[] = _("{STR_VAR_1} seems to be about to\nfall over!"); +static const u8 sSadMsg06[] = _("{STR_VAR_1} is trying very hard to\nkeep up with you..."); + +const struct FollowerMsgInfo gFollowerSadMessages[] = { + {sSadMsg00, EventScript_FollowerDizzy}, + {sSadMsg01}, {sSadMsg02}, + {sSadMsg03}, {sSadMsg04}, {sSadMsg05}, {sSadMsg06}, }; // Unconditional upset messages -const char * const gFollowerUpsetMessages[] = { - (const char []) _("{STR_VAR_1} seems unhappy somehow..."), - (const char []) _("{STR_VAR_1} is making an unhappy\nface."), - (const char []) _(".....Your pokemon seems a little\ncold."), +static const u8 sUpsetMsg00[] = _("{STR_VAR_1} seems unhappy somehow..."); +static const u8 sUpsetMsg01[] = _("{STR_VAR_1} is making an unhappy\nface."); +static const u8 sUpsetMsg02[] = _(".....Your pokemon seems a little\ncold."); // Conditional messages, index 3 - (const char []) _("{STR_VAR_1} is taking shelter in the\ngrass from the rain."), +static const u8 sUpsetMsg03[] = _("{STR_VAR_1} is taking shelter in the\ngrass from the rain."); + +const struct FollowerMsgInfo gFollowerUpsetMessages[] = { + {sUpsetMsg00}, {sUpsetMsg01}, + {sUpsetMsg02, EventScript_FollowerIsShivering}, + {sUpsetMsg03}, }; // Unconditional angry messages -const char * const gFollowerAngryMessages[] = { - (const char []) _("{STR_VAR_1} let out a roar!"), - (const char []) _("{STR_VAR_1} is making a face like\nits angry!"), - (const char []) _("{STR_VAR_1} seems to be angry for\nsome reason."), - (const char []) _("Your pokemon turned to face the\nother way, showing a defiant\pexpression."), - (const char []) _("{STR_VAR_1} cried out."), +static const u8 sAngryMsg00[] = _("{STR_VAR_1} let out a roar!"); +static const u8 sAngryMsg01[] = _("{STR_VAR_1} is making a face like\nits angry!"); +static const u8 sAngryMsg02[] = _("{STR_VAR_1} seems to be angry for\nsome reason."); +static const u8 sAngryMsg03[] = _("Your pokemon turned to face the\nother way, showing a defiant\pexpression."); +static const u8 sAngryMsg04[] = _("{STR_VAR_1} cried out."); + +const struct FollowerMsgInfo gFollowerAngryMessages[] = { + {sAngryMsg00}, {sAngryMsg01}, {sAngryMsg02}, + {sAngryMsg03, EventScript_FollowerLookAway}, + {sAngryMsg04}, }; // Unconditional pensive messages -const char * const gFollowerPensiveMessages[] = { - (const char []) _("{STR_VAR_1} is looking down\nsteadily."), - (const char []) _("{STR_VAR_1} is surveying the area."), - (const char []) _("{STR_VAR_1} is peering down."), - (const char []) _("{STR_VAR_1} is somehow fighting off\nsleep..."), - (const char []) _("{STR_VAR_1} seems to be wandering\naround."), - (const char []) _("{STR_VAR_1} is looking around\nabsentmindedly."), - (const char []) _("{STR_VAR_1} yawned very loudly!"), - (const char []) _("{STR_VAR_1} is relaxing comfortably."), - (const char []) _("{STR_VAR_1} is staring steadfastly\nat your face."), - (const char []) _("{STR_VAR_1} is staring intently at\nyour face."), - (const char []) _("{STR_VAR_1} is focusing its\nattention on you."), - (const char []) _("{STR_VAR_1} is staring into the\ndepths."), - (const char []) _("{STR_VAR_1} is sniffing at the\nground."), - (const char []) _("Your pokemon is staring intently at\nnothing."), - (const char []) _("{STR_VAR_1} focused with a sharp\ngaze!"), - (const char []) _("{STR_VAR_1} is concentrating."), - (const char []) _("{STR_VAR_1} faced this way and\nnodded."), - (const char []) _("{STR_VAR_1} seems a bit nervous..."), - (const char []) _("{STR_VAR_1} is looking at your\nfootprints."), - (const char []) _("{STR_VAR_1} is staring straight into\nyour eyes."), +static const u8 sPensiveMsg00[] = _("{STR_VAR_1} is looking down\nsteadily."); +static const u8 sPensiveMsg01[] = _("{STR_VAR_1} is surveying the area."); +static const u8 sPensiveMsg02[] = _("{STR_VAR_1} is peering down."); +static const u8 sPensiveMsg03[] = _("{STR_VAR_1} is somehow fighting off\nsleep..."); +static const u8 sPensiveMsg04[] = _("{STR_VAR_1} seems to be wandering\naround."); +static const u8 sPensiveMsg05[] = _("{STR_VAR_1} is looking around\nabsentmindedly."); +static const u8 sPensiveMsg06[] = _("{STR_VAR_1} yawned very loudly!"); +static const u8 sPensiveMsg07[] = _("{STR_VAR_1} is relaxing comfortably."); +static const u8 sPensiveMsg08[] = _("{STR_VAR_1} is staring steadfastly\nat your face."); +static const u8 sPensiveMsg09[] = _("{STR_VAR_1} is staring intently at\nyour face."); +static const u8 sPensiveMsg10[] = _("{STR_VAR_1} is focusing its\nattention on you."); +static const u8 sPensiveMsg11[] = _("{STR_VAR_1} is staring into the\ndepths."); +static const u8 sPensiveMsg12[] = _("{STR_VAR_1} is sniffing at the\nground."); +static const u8 sPensiveMsg13[] = _("Your pokemon is staring intently at\nnothing."); +static const u8 sPensiveMsg14[] = _("{STR_VAR_1} focused with a sharp\ngaze!"); +static const u8 sPensiveMsg15[] = _("{STR_VAR_1} is concentrating."); +static const u8 sPensiveMsg16[] = _("{STR_VAR_1} faced this way and\nnodded."); +static const u8 sPensiveMsg17[] = _("{STR_VAR_1} seems a bit nervous..."); +static const u8 sPensiveMsg18[] = _("{STR_VAR_1} is looking at your\nfootprints."); +static const u8 sPensiveMsg19[] = _("{STR_VAR_1} is staring straight into\nyour eyes."); + +const struct FollowerMsgInfo gFollowerPensiveMessages[] = { + {sPensiveMsg00}, + {sPensiveMsg01, EventScript_FollowerLookAround}, + {sPensiveMsg02}, {sPensiveMsg03}, {sPensiveMsg04}, + {sPensiveMsg05, EventScript_FollowerLookAround}, + {sPensiveMsg06}, {sPensiveMsg07}, {sPensiveMsg08}, {sPensiveMsg09}, {sPensiveMsg10}, + {sPensiveMsg11, EventScript_FollowerLookAway}, + {sPensiveMsg12, EventScript_FollowerPokeGround}, + {sPensiveMsg13, EventScript_FollowerLookAway}, + {sPensiveMsg14}, {sPensiveMsg15}, {sPensiveMsg16}, {sPensiveMsg17}, {sPensiveMsg18}, {sPensiveMsg19}, }; // All 'love' messages are unconditional -const char * const gFollowerLoveMessages[] = { - (const char []) _("{STR_VAR_1} suddenly started walking\ncloser!"), - (const char []) _("{STR_VAR_1} cheeks are becoming\nrosy!"), - (const char []) _("Woah! {STR_VAR_1} suddenly hugged\nyou!"), - (const char []) _("Woah! {STR_VAR_1} is suddenly\nplayful!"), - (const char []) _("{STR_VAR_1} is rubbing against your\nlegs!"), - (const char []) _("{STR_VAR_1} blushes."), - (const char []) _("Ah! {STR_VAR_1} cuddles you!"), - (const char []) _("{STR_VAR_1} is regarding you with\nadoration!"), - (const char []) _("{STR_VAR_1} got closer to you."), - (const char []) _("{STR_VAR_1} is keeping close to your\nfeet."), +static const u8 sLoveMsg00[] = _("{STR_VAR_1} suddenly started walking\ncloser!"); +static const u8 sLoveMsg01[] = _("{STR_VAR_1} cheeks are becoming\nrosy!"); +static const u8 sLoveMsg02[] = _("Woah! {STR_VAR_1} suddenly hugged\nyou!"); +static const u8 sLoveMsg03[] = _("Woah! {STR_VAR_1} is suddenly\nplayful!"); +static const u8 sLoveMsg04[] = _("{STR_VAR_1} is rubbing against your\nlegs!"); +static const u8 sLoveMsg05[] = _("{STR_VAR_1} blushes."); +static const u8 sLoveMsg06[] = _("Ah! {STR_VAR_1} cuddles you!"); +static const u8 sLoveMsg07[] = _("{STR_VAR_1} is regarding you with\nadoration!"); +static const u8 sLoveMsg08[] = _("{STR_VAR_1} got closer to you."); +static const u8 sLoveMsg09[] = _("{STR_VAR_1} is keeping close to your\nfeet."); + +const struct FollowerMsgInfo gFollowerLoveMessages[] = { + {sLoveMsg00, EventScript_FollowerGetCloser}, + {sLoveMsg01}, + {sLoveMsg02, EventScript_FollowerCuddling}, + {sLoveMsg03}, + {sLoveMsg04, EventScript_FollowerCuddling}, + {sLoveMsg05}, + {sLoveMsg06, EventScript_FollowerCuddling}, + {sLoveMsg07}, + {sLoveMsg08, EventScript_FollowerGetCloser}, + {sLoveMsg09}, }; // Unconditional surprised messages -const char * const gFollowerSurpriseMessages[] = { - (const char []) _("{STR_VAR_1} is in danger of falling\nover!"), - (const char []) _("{STR_VAR_1} bumped into you!"), - (const char []) _("{STR_VAR_1} doesn't seem to be used\nto its own name yet."), - (const char []) _("{STR_VAR_1} is peering down."), - (const char []) _("Your pokemon stumbled and nearly\nfell!"), - (const char []) _("{STR_VAR_1} feels something and is\nhowling!"), - (const char []) _("{STR_VAR_1} seems refreshed!"), - (const char []) _("{STR_VAR_1} suddenly turned around\nand started barking!"), - (const char []) _("{STR_VAR_1} suddenly turned around!"), - (const char []) _("Your pokemon was surprised that you\nsuddenly spoke to it!"), - (const char []) _("Sniff sniff, something smells really\ngood!"), - (const char []) _("{STR_VAR_1} feels refreshed."), - (const char []) _("{STR_VAR_1} is wobbling and seems\nabout to fall over."), - (const char []) _("{STR_VAR_1} is in danger of falling\nover."), - (const char []) _("{STR_VAR_1} is walking along\ncautiously."), - (const char []) _("{STR_VAR_1} is getting tense with\nnervous energy."), - (const char []) _("{STR_VAR_1} sensed something strange\nand was surprised!"), - (const char []) _("{STR_VAR_1} is scared and snuggled\nup to you!"), - (const char []) _("{STR_VAR_1} is feeling an unusual\npresence..."), - (const char []) _("{STR_VAR_1} is getting tense with\nnervous energy."), +static const u8 sSurpriseMsg00[] = _("{STR_VAR_1} is in danger of falling\nover!"); +static const u8 sSurpriseMsg01[] = _("{STR_VAR_1} bumped into you!"); +static const u8 sSurpriseMsg02[] = _("{STR_VAR_1} doesn't seem to be used\nto its own name yet."); +static const u8 sSurpriseMsg03[] = _("{STR_VAR_1} is peering down."); +static const u8 sSurpriseMsg04[] = _("Your pokemon stumbled and nearly\nfell!"); +static const u8 sSurpriseMsg05[] = _("{STR_VAR_1} feels something and is\nhowling!"); +static const u8 sSurpriseMsg06[] = _("{STR_VAR_1} seems refreshed!"); +static const u8 sSurpriseMsg07[] = _("{STR_VAR_1} suddenly turned around\nand started barking!"); +static const u8 sSurpriseMsg08[] = _("{STR_VAR_1} suddenly turned around!"); +static const u8 sSurpriseMsg09[] = _("Your pokemon was surprised that you\nsuddenly spoke to it!"); +static const u8 sSurpriseMsg10[] = _("Sniff sniff, something smells really\ngood!"); +static const u8 sSurpriseMsg11[] = _("{STR_VAR_1} feels refreshed."); +static const u8 sSurpriseMsg12[] = _("{STR_VAR_1} is wobbling and seems\nabout to fall over."); +static const u8 sSurpriseMsg13[] = _("{STR_VAR_1} is in danger of falling\nover."); +static const u8 sSurpriseMsg14[] = _("{STR_VAR_1} is walking along\ncautiously."); +static const u8 sSurpriseMsg15[] = _("{STR_VAR_1} is getting tense with\nnervous energy."); +static const u8 sSurpriseMsg16[] = _("{STR_VAR_1} sensed something strange\nand was surprised!"); +static const u8 sSurpriseMsg17[] = _("{STR_VAR_1} is scared and snuggled\nup to you!"); +static const u8 sSurpriseMsg18[] = _("{STR_VAR_1} is feeling an unusual\npresence..."); +static const u8 sSurpriseMsg19[] = _("{STR_VAR_1} is getting tense with\nnervous energy."); // Conditional messages, index 20 - (const char []) _("{STR_VAR_1} seems to be very\nsurprised that it is raining!"), +static const u8 sSurpriseMsg20[] = _("{STR_VAR_1} seems to be very\nsurprised that it is raining!"); + +const struct FollowerMsgInfo gFollowerSurpriseMessages[] = { + {sSurpriseMsg00}, + {sSurpriseMsg01, EventScript_FollowerPokingPlayer}, + {sSurpriseMsg02}, {sSurpriseMsg03}, {sSurpriseMsg04}, {sSurpriseMsg05}, {sSurpriseMsg06}, + {sSurpriseMsg07, EventScript_FollowerLookAwayBark}, + {sSurpriseMsg08, EventScript_FollowerLookAway}, + {sSurpriseMsg09}, + {sSurpriseMsg10, EventScript_FollowerLookAround}, + {sSurpriseMsg11}, {sSurpriseMsg12}, {sSurpriseMsg13}, {sSurpriseMsg14}, {sSurpriseMsg15}, {sSurpriseMsg16}, + {sSurpriseMsg17, EventScript_FollowerCuddling}, + {sSurpriseMsg18}, + {sSurpriseMsg19, EventScript_FollowerLookAround}, + {sSurpriseMsg20}, }; // Unconditional curious messages -const char * const gFollowerCuriousMessages[] = { - (const char []) _("Your pokemon is looking around\nrestlessly for something."), - (const char []) _("Your pokemon wasn't watching where\nit was going and ran into you!"), - (const char []) _("Sniff, sniff! Is there something\nnearby?"), - (const char []) _("{STR_VAR_1} is rolling a pebble\naround playfully."), - (const char []) _("{STR_VAR_1} is wandering around and\nsearching for something."), - (const char []) _("{STR_VAR_1} is sniffing at you."), - (const char []) _("{STR_VAR_1} seems to be a little\nhesitant..."), +static const u8 sCuriousMsg00[] = _("Your pokemon is looking around\nrestlessly for something."); +static const u8 sCuriousMsg01[] = _("Your pokemon wasn't watching where\nit was going and ran into you!"); +static const u8 sCuriousMsg02[] = _("Sniff, sniff! Is there something\nnearby?"); +static const u8 sCuriousMsg03[] = _("{STR_VAR_1} is rolling a pebble\naround playfully."); +static const u8 sCuriousMsg04[] = _("{STR_VAR_1} is wandering around and\nsearching for something."); +static const u8 sCuriousMsg05[] = _("{STR_VAR_1} is sniffing at you."); +static const u8 sCuriousMsg06[] = _("{STR_VAR_1} seems to be a little\nhesitant..."); + +const struct FollowerMsgInfo gFollowerCuriousMessages[] = { + {sCuriousMsg00, EventScript_FollowerLookAround}, + {sCuriousMsg01, EventScript_FollowerPokingPlayer}, + {sCuriousMsg02}, {sCuriousMsg03}, + {sCuriousMsg04, EventScript_FollowerLookAround}, + {sCuriousMsg05}, {sCuriousMsg06}, }; // Unconditional music messages -const char * const gFollowerMusicMessages[] = { - (const char []) _("{STR_VAR_1} is showing off its\nagility!"), - (const char []) _("{STR_VAR_1} is moving around\nhappily!"), - (const char []) _("Woah! {STR_VAR_1} suddenly started\ndancing in happiness!"), - (const char []) _("{STR_VAR_1} is steadily keeping up\nwith you!"), - (const char []) _("{STR_VAR_1} is very happy about the\nrain."), - (const char []) _("{STR_VAR_1} seems to want to play\nwith you."), - (const char []) _("{STR_VAR_1} is happy skipping about."), - (const char []) _("{STR_VAR_1} is singing and humming."), - (const char []) _("{STR_VAR_1} is nipping at your feet!"), - (const char []) _("{STR_VAR_1} turns around and looks\nat you."), - (const char []) _("{STR_VAR_1} is working hard to show\noff its mighty power!"), - (const char []) _("Whoa! {STR_VAR_1} suddenly danced in\nhappiness!"), - (const char []) _("{STR_VAR_1} is cheerful!"), - (const char []) _("{STR_VAR_1} is jumping around in a\ncarefree way!"), - (const char []) _("Your pokemon seems to be smelling a\nnostalgically familiar scent..."), +static const u8 sMusicMsg00[] = _("{STR_VAR_1} is showing off its\nagility!"); +static const u8 sMusicMsg01[] = _("{STR_VAR_1} is moving around\nhappily!"); +static const u8 sMusicMsg02[] = _("Woah! {STR_VAR_1} suddenly started\ndancing in happiness!"); +static const u8 sMusicMsg03[] = _("{STR_VAR_1} is steadily keeping up\nwith you!"); +static const u8 sMusicMsg04[] = _("{STR_VAR_1} seems to want to play\nwith you."); +static const u8 sMusicMsg05[] = _("{STR_VAR_1} is happy skipping about."); +static const u8 sMusicMsg06[] = _("{STR_VAR_1} is singing and humming."); +static const u8 sMusicMsg07[] = _("{STR_VAR_1} is nipping at your feet!"); +static const u8 sMusicMsg08[] = _("{STR_VAR_1} turns around and looks\nat you."); +static const u8 sMusicMsg09[] = _("{STR_VAR_1} is working hard to show\noff its mighty power!"); +static const u8 sMusicMsg10[] = _("Whoa! {STR_VAR_1} suddenly danced in\nhappiness!"); +static const u8 sMusicMsg11[] = _("{STR_VAR_1} is cheerful!"); +static const u8 sMusicMsg12[] = _("{STR_VAR_1} is jumping around in a\ncarefree way!"); +static const u8 sMusicMsg13[] = _("Your pokemon seems to be smelling a\nnostalgically familiar scent..."); +// Conditional music messages, index 14 +static const u8 sMusicMsg14[] = _("{STR_VAR_1} is very happy about the\nrain."); + +const struct FollowerMsgInfo gFollowerMusicMessages[] = { + {sMusicMsg00, EventScript_FollowerLookAround}, + {sMusicMsg01}, + {sMusicMsg02, EventScript_FollowerDance}, + {sMusicMsg03}, + {sMusicMsg04, EventScript_FollowerHopping}, + {sMusicMsg05, EventScript_FollowerHopping}, + {sMusicMsg06}, {sMusicMsg07}, {sMusicMsg08}, {sMusicMsg09}, + {sMusicMsg10, EventScript_FollowerDance}, + {sMusicMsg11}, + {sMusicMsg12, EventScript_FollowerHopping}, + {sMusicMsg13, EventScript_FollowerNostalgia}, + {sMusicMsg14} }; -const char * const gFollowerPoisonedMessages[] = { - (const char []) _("{STR_VAR_1} is shivering with the\neffects of being poisoned."), + +static const u8 sPoisonedMsg00[] = _("{STR_VAR_1} is shivering with the\neffects of being poisoned."); + +const struct FollowerMsgInfo gFollowerPoisonedMessages[] = { + {sPoisonedMsg00, EventScript_FollowerIsShivering}, }; diff --git a/src/event_object_movement.c b/src/event_object_movement.c index f90b72e142..6918796605 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1855,7 +1855,6 @@ bool8 ScrFunc_emote(struct ScriptContext *ctx) { } struct SpecialEmote { // Used for storing conditional emotes - const u8 * script; u16 index; u8 emotion; }; @@ -1864,7 +1863,7 @@ struct SpecialEmote { // Used for storing conditional emotes bool8 ScrFunc_getfolloweraction(struct ScriptContext *ctx) // Essentially a big switch for follower messages { u16 species; - u32 behavior; + s32 multi; s16 health_percent; u8 friendship; struct SpecialEmote cond_emotes[16] = {0}; @@ -1880,16 +1879,9 @@ bool8 ScrFunc_getfolloweraction(struct ScriptContext *ctx) // Essentially a big // If map is not flyable, set the script to jump past the fly check TODO: Should followers ask to fly? if (TRUE || !Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType)) ScriptJump(ctx, EventScript_FollowerEnd); - behavior = MapGridGetMetatileBehaviorAt(objEvent->currentCoords.x, objEvent->currentCoords.y); + multi = MapGridGetMetatileBehaviorAt(objEvent->currentCoords.x, objEvent->currentCoords.y); species = GetMonData(mon, MON_DATA_SPECIES); friendship = GetMonData(mon, MON_DATA_FRIENDSHIP); - // // 1. Puddle splash or wet feet - // if (MetatileBehavior_IsPuddle(behavior) || MetatileBehavior_IsShallowFlowingWater(behavior)) { - // if (SpeciesHasType(species, TYPE_FIRE)) - // message_choices[n_choices++] = EventScript_FollowerUnhappyToBeWet; - // else if (SpeciesToGraphicsInfo(species, 0)->tracks) // if follower is grounded - // message_choices[n_choices++] = EventScript_FollowerSplashesAbout; - // } // Happy weights emotion_weight[FOLLOWER_EMOTION_HAPPY] = 10; if (friendship > 170) @@ -1924,10 +1916,11 @@ bool8 ScrFunc_getfolloweraction(struct ScriptContext *ctx) // Essentially a big cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_HAPPY, .index=31}; else if (GetCurrentWeather() == WEATHER_RAIN || GetCurrentWeather() == WEATHER_RAIN_THUNDERSTORM) { if (SpeciesHasType(species, TYPE_FIRE)) { - emotion_weight[FOLLOWER_EMOTION_SAD] = 30; - cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_SAD, .index=3}; - cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_UPSET, .index=3}; - } + emotion_weight[FOLLOWER_EMOTION_SAD] = 30; + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_SAD, .index=3}; + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_UPSET, .index=3}; + } else + cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_MUSIC, .index=14}; cond_emotes[n_choices++] = (struct SpecialEmote) {.emotion=FOLLOWER_EMOTION_SURPRISE, .index=20}; } // Health & status-related @@ -1946,26 +1939,20 @@ bool8 ScrFunc_getfolloweraction(struct ScriptContext *ctx) // Essentially a big if (mon->status & 0x8) // STATUS1_POISON emotion = FOLLOWER_EMOTION_POISONED; ObjectEventEmote(objEvent, emotion); + multi = Random() % followerBasicMessages[emotion].length; if (Random() & 1) { // With 50% chance, select special message using reservoir sampling u8 i, j = 1; struct SpecialEmote *choice = 0; for (i = 0; i < n_choices; i++) { - if (cond_emotes[i].emotion == emotion) { - if (Random() < 0x10000 / (j++)) // Replace item with 1/j chance - choice = &cond_emotes[i]; - } - } - if (choice) { // Only continue if a script was actually chosen - ctx->data[0] = (u32) followerBasicMessages[emotion].messages[choice->index]; - if (choice->script) - ScriptCall(ctx, choice->script); - else - ScriptCall(ctx, followerBasicMessages[emotion].script); - return FALSE; + if (cond_emotes[i].emotion == emotion && (Random() < 0x10000 / (j++))) // Replace item with 1/j chance + choice = &cond_emotes[i]; } + if (choice) + multi = choice->index; } - ctx->data[0] = (u32) followerBasicMessages[emotion].messages[Random() % followerBasicMessages[emotion].length]; - ScriptCall(ctx, followerBasicMessages[emotion].script); + ctx->data[0] = (u32) followerBasicMessages[emotion].messages[multi].text; // Load message text + ScriptCall(ctx, followerBasicMessages[emotion].messages[multi].script ? + followerBasicMessages[emotion].messages[multi].script : followerBasicMessages[emotion].script); return FALSE; }